Скачать MetaTrader 5

Как отключить временные ограничения при расчете индикатора?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114299
Forex Trader  
Индикатор рисуется корректно, но только в начале истории, затем пустота. При изменении параметров индикатора так что бы он расчитывался в 2 раза быстрее, он начинает отражатся на в 2 раза большей истории, но опять не на всей. При удалении всех долго расчитываемых участках кода индикатор отражается на всей истории, но это уже совсем не то что нужно. Подозреваю что проблема во вренных ограничениях на расчет индикаторов. Если я прав, то как сие устранить?
Forex Trader
114299
Forex Trader  
Индикатор рисуется корректно, но только в начале истории, затем пустота. При изменении параметров индикатора так что бы он расчитывался в 2 раза быстрее, он начинает отражатся на в 2 раза большей истории, но опять не на всей. При удалении всех долго расчитываемых участках кода индикатор отражается на всей истории, но это уже совсем не то что нужно. Подозреваю что проблема во вренных ограничениях на расчет индикаторов. Если я прав, то как сие устранить?


Не могли бы Вы представить код Вашего индикатора?
Forex Trader
114299
Forex Trader  
Думау, что от моего кода пользы будет мало, т.к. используемые в нем индикаторы выложить не могу, но могу утверждать, что они работают корректно, не глючат, сигналы подают на всей истории, но считаются долго :-(, в этом и проблема.


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 White

extern int P1=4;
extern double F1=0.3;
extern int D1=20;

extern int P2=8;
extern double F2=0.3;
extern int D2=30;

extern int P3=16;
extern double F3=0.3;
extern int D3=40;

extern int SL=40;
extern int SLP=16;
extern int SLD=40;

double summ, F, D, Znak, trend;
double StopLoss, PriceOpen, PriceClose;
int Signal,i;

double BufH[];
double BufL[];
double BufS[];

int init ()
   {
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexArrow(0,116);
   SetIndexBuffer(0,BufH);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexArrow(1,116);
   SetIndexBuffer(1,BufL);
   SetIndexStyle(2,STYLE_SOLID);
   SetIndexArrow(2,160);
   SetIndexBuffer(2,BufS);
   return(0);
   }

int deinit()
   {
   return(0);
   }

int start()
   {
   summ=0;
   trend=0;
   StopLoss=0;
   PriceOpen=0;
   PriceClose=0;
   
   i=Bars-10;
   while (i>=0)
      {
      //закрытие позиции
      if (trend==1 && Low[i]<=StopLoss)
         {
         trend=0;
         PriceClose=StopLoss;
         StopLoss=0;
         summ=summ+PriceClose-PriceOpen;
         }
      if (trend==-1 && High[i]>=StopLoss)
         {
         trend=0;
         PriceClose=StopLoss;
         StopLoss=0;
         summ=summ+PriceOpen-PriceClose;
         }

      //передвижение StopLoss
      if (trend==1) StopLoss  =MathMax(StopLoss,iCustom(NULL,0,"M_UTD",SLD,SLP,2,i));
      if (trend==-1) StopLoss =MathMin(StopLoss,iCustom(NULL,0,"M_UTD",SLD,SLP,1,i));

      //открытие позиции
      if (trend==0)
         {
         Signal=0;
         
         //1-е условие
         F=iCustom(NULL,0,"M_F",P1,0,0,i+1);
         D=iCustom(NULL,0,"M_D",P1,0,i+1);
         Znak=F/MathAbs(F);
         if (MathAbs(F)>=F1 && D>=D1) Signal=1;
         
         //2-е условие
         if (Signal==1)
            {
            F=iCustom(NULL,0,"M_F",P2,0,0,i+1);
            D=iCustom(NULL,0,"M_D",P2,0,i+1);
            if (MathAbs(F)>=F2 && D>=D2 && Znak==F/MathAbs(F)) Signal=1; else Signal=0;
            }
         
         //3-е условие
         if (Signal==1)
            {
            F=iCustom(NULL,0,"M_F",P3,0,0,i+1);
            D=iCustom(NULL,0,"M_D",P3,0,i+1);
            if (MathAbs(F)>=F3 && D>=D3 && Znak==F/MathAbs(F)) Signal=1; else Signal=0;
            }
            
         if (Signal==1)
            {
            trend=Znak;
            PriceOpen=Open[i];
            StopLoss=PriceOpen-trend*SL*Point;
            }
         }

      if (trend==-1)
         {
         BufH[i]=Low[i];
         BufL[i]=High[i];
         BufS[i]=StopLoss;
         }
      if (trend==1)
         {
         BufH[i]=High[i];
         BufL[i]=Low[i];
         BufS[i]=StopLoss;
         }
      i--;
      }
   Comment("Profit в points(пунктах)=", summ/Point);
   return(0);
   }

Forex Trader
114299
Forex Trader  
[img]D:\1\1.gif[/img]
Forex Trader
114299
Forex Trader  
Для начала сделайте маленькую оптимизацию. И если решили создать свой тестер в виде индикатора , может этот путь будет более правильным?

"Открытый проект - тестер-оптимизатор своими силами"
Forex Trader
114299
Forex Trader  
Причину выяснил. Заменил
Znak=F/MathAbs(F);
на
if (F>0) Znak=1;
if (F<0) Znak=-1;
Все работает! А я то всегда думал, что знак числа - это число деленное на свой модуль :-).
Глюк однако.
Вопрос снят. Спасибо!
Forex Trader
114299
Forex Trader  
Зависит от типа числа F, можете и ноль получить заслуженно :)
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий