Ошибки, баги, вопросы - страница 2107

 
Vladislav Andruschenko:

согласен. надо менять. 

По этому правилу ветка есть.

Организация цикла перебора ордеров
Организация цикла перебора ордеров
  • 2017.09.16
  • www.mql5.com
MQL4 и MetaTrader 4: Организация цикла перебора ордеров
 
fxsaber:

По этому правилу ветка есть.


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

как раз в точку, ошибка появилась после прочтения вашего вариант. 

 
fxsaber:

Это неправильная логика. После неудачного и удачного OrderSend должно быть заново полностью считано текущее торговое окружение. Это правило должно действовать всегда.

Насчет кодов возврата. В своих советниках никак не анализирую их. По-моему, торговая логика не должна от них зависеть.

Теоретически, тайм-аут может случиться во время потери связи с сервером брокера.

В этом случае лучше вообще ничего не делать до ее восстановления и до полной синхронизации торгового окружения с сервером.

Как не попасть в такую ситуацию, не анализируя код возврата?

 

Ошибка компиляции.


Файл Test.mqh

int Tmp = 1;


Основной код

#include "Test.mqh"

void OnStart()
{
  Print(Tmp);
  Print(Tmp2); // 'Tmp2' - undeclared identifier
}

#define Tmp Tmp2
#include "Test.mqh"


Получается, что повторный инклуд игнорируется. Но в данной сиуации это неправильно!

Нужна такая конструкция для следующего. Советник содержится в mqh-файле. Но мне нужно иметь возможно его запустить и на реале (первый инклуд) и в своем тестере (второй инклуд).

 
Andrey Khatimlianskii:

Теоретически, тайм-аут может случиться во время потери связи с сервером брокера.

В этом случае лучше вообще ничего не делать до ее восстановления и до полной синхронизации торгового окружения с сервером.

Как не попасть в такую ситуацию, не анализируя код возврата?

Отправили OrderSend и не дождались ответа от сервера, получив таймаут в логе и _LastError. При этом игнорим _LastError, а получаем только false.

После, если коннект имеется, собираем заново торговое окружение и принимаем решение.

Выделенное, конечно, желательно всегда проверить перед сбором инфы.

 
fxsaber:

Отправили OrderSend и не дождались ответа от сервера, получив таймаут в логе и _LastError. При этом игнорим _LastError, а получаем только false.

После, если коннект имеется, собираем заново торговое окружение и принимаем решение.

Выделенное, конечно, желательно всегда проверить перед сбором инфы.

Это получится, если работаем в OnTick. А если нет?

Как проверить коннект?

 
Andrey Khatimlianskii:

Это получится, если работаем в OnTick. А если нет?

Как проверить коннект?

TerminalInfoInteger(TERMINAL_CONNECTED);
 
fxsaber:
TerminalInfoInteger(TERMINAL_CONNECTED);

Исторически сложилось, что не доверяю ему. Надо будет потестировать в 5-ке..

 

проблема таймаута не в том, что нет коннекта, а в том, что получен таймаут запроса. 

с одной стороны вижу так: есть сигнал на открытие сделки, делаем запрос, получили таймаут - но сделка открыта. 

хотя советник получил ошибку. 

проверяем торговое окружение - видим открытую сделку. 

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

т.е. проверять не появилась ли новая сделка в истории(в терминале). и присваивать этой сделке статус сигнала. 


пока не могу уловить мысль 

@A100 

какой выход видите вы? 

 
fxsaber:

Получается, что повторный инклуд игнорируется. Но в данной сиуации это неправильно!

Нужна такая конструкция для следующего. Советник содержится в mqh-файле. Но мне нужно иметь возможно его запустить и на реале (первый инклуд) и в своем тестере (второй инклуд).

Все верно и он правильно игнорируется.

Сишные хаки не проходят.

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