[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 301

 
rustein:
Искал на форуме, но не нашел быстрого решения, помогите решить проблему с while в тестере не работает, на реале работает.

Спасибо.

Если подвешивает тестер, тогда так и должно быть. (выход из цикла обязательно опишите).

Типа этого

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


Трудо сказать в чём у Вас загвоздка. Возьмите себе за правило в MQL4 всегда в коде отрицательные числа брать в скобки. Без скобок иной раз почему-то ошибки выскакивают.

Хотя, в строках кода, начинающихся с extern брать отрицательные значения в скобки наоборот не нужно. Почему так - не знаю.

Спасибо, но не работает, может подскажите конструкцию как избавится от цикла если if(IsTesting()==true || IsOptimization()==true)
 
rustein:
Спасибо, но не работает, может подскажите конструкцию как избавится от цикла если if(IsTesting()==true || IsOptimization()==true)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
Ему не нужен алерт - я так понял, что где-то в коде скорее всего файл уже открыт, но не закрыт. Видать поэтому не удаётся переоткрыть файл и человека мучают окна алертов. Хотя, мож я и не прав - не состою я в клубе телепатов :(
Ситуация такая: эксперт в определенный момент лезет в сsv-шный файл и смотрит какая там команда (покупать, продать, закрыть), эту команду в файл записывает EXСEL. Заковырка в том, что в тот момент когда эксперт полезет читать файл, он может
 быть открыт EXCEL-ем, експерт выдаст ошибку и все, а мне нужно что бы он снова полез и пытался пока не прочитает команду.
 не знал про конструкцию while
Посмотрите, пожалуйста, правильно написал:
 
int init()
{
        while(handle<1)
        {
        handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');   
        }

}

 
sanches83:

}

Да, а зачем спрашивать, можно ведь проверить "боем" )).
 
rustein:
Спасибо, но не работает, может подскажите конструкцию как избавится от цикла если if(IsTesting()==true || IsOptimization()==true)


Попобуйте вообще без цикла, скажем, вот так:

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

Это по крайней мере поможет понять почему не открывается поза.

 
costy_:

^^

Many Thanks :)

Спасибо всем, исправил, работает.

Низкий поклон за помощь.

 
costy_:
Да, а зачем спрашивать, можно ведь проверить "боем" )).


Вобщем то верно, но чтоб работало нужно перед циклом проинициализировать переменную

handle=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Ну это чтоб стопроцентно быть уверенным, что исполнение кода войдёт-таки в тело цикла, а не проигнорирует его.

 
drknn:


Вобщем то верно, но чтоб работало нужно перед циклом проинициализировать переменную

handle=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Ну это чтоб стопроцентно быть уверенным, что исполнение кода войдёт-таки в тело цикла, а не проигнорирует его.

Угу, к сожалению приходиться уподобаться гадалкам, создавайте скрипты с частью кода по вопросу, ну или весь код и будет проще вам указать на ошибку.(кофейная гуща закаНчиВаеТсо).
 

Народ подсобите не много!!

Пытаюсь написать советник по стратегии утренний канал. Суть такова в 6:01по паре EURGBP определяем канал движения цены с 0 часов до 6 утра. Выставляем два отложенника и если сработанный отложенник закрылся стопом, то открываем в обратном направление. Не получается именно вторая часть стратегии. Т.е. если сработал стоп то не получается открыть ордер в обратном направление.
Файлы:
Причина обращения: