Как правильно работать в MT5 с OrderSend - страница 6

 
Alexey Viktorov:

Первый советник понимает, что после его OrderSend история еще не синхронизирована. Он ждет просто события синхронизации. 

А вот как второму советнику понять, что история уже синхронизирована или еще нет?

 
fxsaber:

Первый советник понимает, что после его OrderSend история еще не синхронизирована. Он ждет просто события синхронизации. 

А вот как второму советнику понять, что история уже синхронизирована или еще нет?

Забудь про историю. Постарайся изучить поведение функции OnTradeTransaction()

Первый советник поставил позицию, в OnTradeTransaction это событие обрабатывается, там и отсеиваются "не свои", активировался ордер... в OnTradeTransaction и это событие обрабатывается.

Второй советник так-же там-же отсеивает "не свои" ордера, позиции и сделки.

У меня так работают на реальных форекс счетах 2 советника. В одном из них магиком позиции назначается тикет позиции к которой он должен быть привязан. И сам понимаешь это не два разных магика...

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

 
Alexey Viktorov:

Забудь про историю. Постарайся изучить поведение функции OnTradeTransaction()

Первый советник поставил позицию, в OnTradeTransaction это событие обрабатывается, там и отсеиваются "не свои", активировался ордер... в OnTradeTransaction и это событие обрабатывается.

Второй советник так-же там-же отсеивает "не свои" ордера, позиции и сделки.

У меня так работают на реальных форекс счетах 2 советника. В одном из них магиком позиции назначается тикет позиции к которой он должен быть привязан. И сам понимаешь это не два разных магика...

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

Если внимательно посмотреть мои логи, то из них видно,

что тикет получаем быстрее  срабатывания OnTradeTransaction, так что

достаточно будет тикета ордера.

Хотя, конечно, (при таком раскладе) лучше подстраховаться магиком.

А ещё лучше (пока) использовать OrderSendAsync - ошибок нет, ни на ФОРЕКС, ни на ФОРТС 

 
prostotrader:

Если внимательно посмотреть мои логи, то из них видно,

что тикет получаем быстрее  срабатывания OnTradeTransaction, так что

достаточно будет тикета ордера.

Хотя, конечно, (при таком раскладе) лучше подстраховаться магиком.

А ещё лучше (пока) использовать OrderSendAsync - ошибок нет, ни на ФОРЕКС, ни на ФОРТС 

Может и так. Но если отложник активировался? Анализировать историю? Опять проблема скорости синхронизации окружения?

В общем на любителя. Главное чтобы работало, несильно тормозило и обойтись без...

 
Alexey Viktorov:

Забудь про историю. Постарайся изучить поведение функции OnTradeTransaction() 

Как второму работать во время не синхронизированной истории?

Эта проблема касается не только MT5, но и четверки. 

 
fxsaber:

Как второму работать во время не синхронизированной истории?

Эта проблема касается не только MT5, но и четверки. 

Я ещё больше становлюсь уверен что тебя звать Виктор. Никому не скажу твой прошлый ник.

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

Забудь про историю, смотри структуры функции OnTradeTransaction.

Попробуй на словах рассказать как ты в mql5 определяешь что активировался отложник?

 
Alexey Viktorov:

Я ещё больше становлюсь уверен что тебя звать Виктор. Никому не скажу твой прошлый ник.

Ты за короткое время освоил программирование...

На самом деле это очередная реинкарнация hrenfx. Решил по новому зайти.
 
prostotrader:

Если внимательно посмотреть мои логи, то из них видно,

что тикет получаем быстрее  срабатывания OnTradeTransaction, так что

достаточно будет тикета ордера.

Хотя, конечно, (при таком раскладе) лучше подстраховаться магиком.

А ещё лучше (пока) использовать OrderSendAsync - ошибок нет, ни на ФОРЕКС, ни на ФОРТС 

А в чем преимущество OrderSendAsync()? Он же не дожидается ответа в Results. То есть его нужно позже отлавливать. Не понятно, в чем преимущество.
 
prostotrader:

OrderSend() абсодютно синхронная функци - если получили билет, то всё исполнилось.

Внизу пример 

 

Добавлено, а здесь логи

https://www.mql5.com/ru/forum/38456/page85#comment_2888263 

Спасибо!
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как узнать размер комиссии не открывая позицию по инструменту?

fxsaber, 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

Наверное, такой пример показателен. 

Если не делать Sleep, то часто возникает ситуация, что история не успела обновиться после OrderClose и OrderCommission возвращает значение, будто OrderClose не делался.

Заметьте, что это скрипт и никаких Event-ов быть не может. Единственный выход - тупой Sleep.

Если переписать этот скрипт с помощью СБ, ничего не поменяется. 

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