Вопросы от "чайника" - страница 197

 
FiftyStars:

Как определить время открытия следующего бара, то есть того который еще не сформировался?

В общем случае - никак; хотя в случае таймфреймов от получаса  - вероятность правильного прогноза переваливает за 99,9%
 

Можно так зациклить запрос для открытия ордера? )

      while(result.retcode!=TRADE_RETCODE_DONE)
      {
        if(OrderCheck(request,check))
        {
          OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
 
G001: Можно так зациклить запрос для открытия ордера? )
Нежелательно. Представьте, например, что вместо TRADE_RETCODE_DONE сервер будет возвращать ответ, что ордер размещён. Тогда Ваш код забъёт сервер однотипными запросами.
 
Yedelkin:
Нежелательно. Представьте, например, что вместо TRADE_RETCODE_DONE сервер будет возвращать ответ, что ордер размещён. Тогда Ваш код забъёт сервер однотипными запросами.

Так будет лучше?

      int ResBear = -1;
      while(ResBear == -1)
      {
        if(OrderCheck(request,check))
        {
          ResBear = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
 
G001: Так будет лучше? 

Вряд ли. Посмотрите описание функции OrderSend(). Там должно быть сказано, что при удачном её выполнении всё равно необходимо проверять код возврата. Поэтому придётся идти самым нудным путём, а именно: взять перечень кодов возврата и продумать поведение программы для каждого из этих кодов. Т.е. "отправили OrderSend(), получили код возврата, отреагировали на полученный retcode".

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

 
Спасибо, действительно нудно, поставлю лучше ограничение попыток.
 
G001: Спасибо, действительно нудно, поставлю лучше ограничение попыток.

Всё равно, когда-нибудь это придётся сделать :) Говорю, исходя из собственного опыта.

 
Уверен, но пока знаний не хватает.
 

Простите, а как сделать условие, чтобы в тестере не было, а в тестере в визуальном режиме было?

Список свойств этого не позволяет, а такое условие у меня почему-то не работает:

if(MQL5InfoInteger(MQL5_TESTER)!=1 || MQL5InfoInteger(MQL5_TESTER)==1 && MQL5InfoInteger(MQL5_VISUAL_MODE)==1)

 
if(MQL5InfoInteger(MQL5_TESTER)!=1 || MQL5InfoInteger(MQL5_TESTER)==1 && MQL5InfoInteger(MQL5_VISUAL_MODE)==1)

из этого условия выходит, что оно будет выполнять в трех ситуациях:

1)Когда работает тестер 

2)Когда тестер НЕ работает

3)Когда работает визуальный тестер

таким образом функция будет всегда работать, скорее всего вам надо убрать второе условие, а первое и третье соединить с помощью && 

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