Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 443

 
Alexey Viktorov:  Проскальзывание при открытии и закрытии.

Алексей! МТ5 сегодня стал вообще многословен - дублирует в комментарий TP:


 
STARIJ:

Спасибо, Алексей!!! Тоже так подумал - но как проверить? а как узнал что это такое?  и почему на реале отсутствуют. Может потому что он старый, а демо новый счет?

Разность цены tp и цены закрытия ордера разделить на _Point и сверить с записью в комментарии ордера. Именно так и узнал. Случайное совпадение не может длиться бесконечно и стабильно. На реале, видимо нет таких проскальзываний. Хотя у меня были. Именно на реале я это высчитывал. Сначала обратил внимание на то, что закрытие по tp, а цена закрытия не подсвечена зелёным.

 

Здравствуйте, помогите, пожалуйста.

Хочу, в любой момент, знать номер бара, на котором есть стрелка индикатора.

В примере, пыталась заполнить буфер, если стрелка на десятом баре.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<2) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE
            )
           {
            num_buy=il;
            break;
           }
        }
      //
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;

        }

      for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,il),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=il;
            break;
           }
        }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;
         
         
        }

      Comment(num_buy,"num_sell",num_sell);
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }

Где неправильно?

 
mila.com:  Здравствуйте, помогите, пожалуйста.
Хочу, в любой момент, знать номер бара, на котором есть стрелка индикатора.
В примере, пыталась заполнить буфер, если стрелка на десятом баре.
Где неправильно?

Обычно как проверяю - запускаю и смотрю результат. А тут только часть кода. Здесь все очень мелко, трудно разглядеть -в редакторе у меня крупнее

if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE)
{
    num_buy=il;
    break;  // Это выход из цикла. Остальные бары лишаются чести быть просмотренными. Ошибка здесь?
}
 

Здравствуйте подскажите как сделать чтоб индикатор сохранял данные в файл

только в место RSI индикатор Williams’ Percent Range


//| expert start function                                            | 

//+------------------------------------------------------------------+ 

int start() 

  { 

//---- 

   int iRSI; 

   iRSI=FileOpen("File.txt", FILE_CSV|FILE_WRITE, '\t'); 

  //------------------------------------------------// 

   

  //-------------------------------------------------// 

  if(iRSI>0) 

    { 

     FileWrite(iRSI, [0]); 

     FileClose(iRSI); 

    }  

//---- 

   return(0); 

  } 

 
STARIJ:

Здесь все очень мелко,

В браузере есть возможность изменить масштаб )

STARIJ:
Ошибка здесь?


К сожалению, это не единственная ошибка.

В комментарий выводится правильное значение, от текущего бара, сейчас num_buy 9

Почему в истории не существует условия?

if(num_buy==10)

проверила, в советнике открывает позицию когда стрелка на баре 10

for(int il=1;il<=300;il++)
        { 
        if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE)
            
           {
            num_buy=il;
            break;
           }
        }
        if(num_buy==10)
           {
            B_OrderSend();
           }

Как в индикаторе поставить точку когда стрелка на баре 10?

 
mila.com:

В браузере есть возможность изменить масштаб )


К сожалению, это не единственная ошибка.

В комментарий выводится правильное значение, от текущего бара, сейчас num_buy 9

Почему в истории не существует условия?

проверила, в советнике открывает позицию когда стрелка на баре 10

Как в индикаторе поставить точку когда стрелка на баре 10?

Так вы цикл тут прерываете как только встречаете первое попавшееся не пустое значение индикатора. Вот он до десяти и не доходит.

 
Artyom Trishkin:

Так вы цикл тут прерываете как только встречаете первое попавшееся не пустое значение индикатора. Вот он до десяти и не доходит.

В индикаторе я убрала break; по рекомендации STARIJ

всё равно нет точки на графике, и в комментарии пишет номера третьей и четвёртой стрелок, а первую и вторую (ближние к текущей дате) не видит.

 
mila.com:

В индикаторе я убрала break; по рекомендации STARIJ

всё равно нет точки на графике

А в советнике-то оставили. И что он делает? Находит первую точку индикатора и... break

 
Artyom Trishkin:

А в советнике-то оставили. И что он делает? Находит первую точку индикатора и... break

советник сделала чтобы проверить саму возможность, открывает правильно, а в индикаторе вообще невидит значения ближних двух буферов индикатора "Arrow v.3"

Причина обращения: