Вопрос о функции OnTradeTransaction - страница 3

 
Mikalas:

:)

1. ПРИМЕР для ФОРТС

2. А брекпоинты нельзя поставить?

3. Создаётся такое впечатление, что Вы читаете сообщения через строчку :)  

Нет, создается такое впечатление, что Вы через строчку пишете:

void OnTick()
{
  MqlTick a_tick; //Зачем этот зазор ниже?
                                           
  if ( SymbolInfoTick( _Symbol, a_tick ) )
  {
    PlaceOrder( _Symbol, a_tick.ask, 1, false );   //Устанавливаем ордер
  }     
}

 :)) Ставил я брейкпоинты, и все равно не понял. Извините, но Ваш код безобразный. Вначале отсылается ордер, а затем делаются какие-то бессмысленные проверки в OnTradeTransaction и CheckOrder(). В чекордер рассчитывается еще и объем.

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

 
Mikalas:

:)

Давайте поступим следующим образом.

Я буду задавать Вам вопросы, а Вы на них отвечать, хорошо?

...

Давайте!
Mikalas:

Ворос 1. Как Вы узнаете Билет ордера (послав команду OrderSendAsync), если не пришло (или не используете) событие TradeTransaction? 

Я узнаю билет ордера через функцию TrackingHistoryOrders, ведь рано или поздно ордер исполниться, и попадет в историю ордеров, которую и проанализирует эта функция.

 
C-4:

Создается такое впечатление, что Вы через строчку пишете:

 Ставил я брейкпоинты, и все равно не понял. Извините, но Ваш код безобразный. Вначале отсылается ордер, а затем делаются какие-то бессмысленные проверки в OnTradeTransaction и CheckOrder(). В чекордер рассчитывается еще и объем.

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

:):):)

Я уже не молодой человек (фото 9 летней давности ), и мне удобнее делать "зазоры" в коде для лучшего восприятия.

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

"Безобразный" - это на Ваш взгляд, потому что ВЫ вложили времемя, чтобы изобрести свой метод

отслеживания ордеров команды OrderSendAsync, поэтому Вам кажется, что отличный от Вашего код = безобразный! :)

 

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

Решение проблемы предложил Yurich, оно заключалось в том, чтобы для каждого ордера команды OrderSendAsync

был свой Magic, тогда этот ордер, если не пришло событие TradeTransaction, очень просто отыскать (по magic).

Для каждого символа выделяется диапазон Magic номеров, например для AUDUSD c 1010000 по 1019999,

для EURUSD с 1020000 по 1029999

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

if ( mem_magic >= ( magic_number + 9999 ) ) mem_magic = magic_number;  //Переполнение, начинаем сначала

 

, чтобы не "попасть" в другой ордер существует переменная (datetime   mem_time;) в

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

Дальше продолжать? 

 

 
C-4:
Давайте!

Я узнаю билет ордера через функцию TrackingHistoryOrders, ведь рано или поздно ордер исполниться, и попадет в историю ордеров, которую и проанализирует эта функция.

Прекрасно, но мне нужно РАНО, а не ПОЗДНО (ордер может "висеть" и сутки, и в истории его не БУДЕТ)

Хочу модифицировать! 

Хочу удалить! 

 

Весь балаган и куча вспогогательного кода возникает из за этой фразы: Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.

Кто нибудь может прояснить ситуацию?  Кто может потерять транзакцию конкретно в лицах (биржа заглючит, брокер закрысит, сервер MQ MT5 халтурит)?

Почему MQ не хотят гарантировать доставку транзакций, кому это выгодно? 

 
Serj_Che:

Весь балаган и куча вспогогательного кода возникает из за этой фразы: Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.

Кто нибудь может прояснить ситуацию?  Кто может потерять транзакцию конкретно в лицах (биржа заглючит, брокер закрысит)?

Почему MQ не хотят гарантировать доставку транзакций, кому это выгодно? 

Да никому не выгодно, просто у MQ "руки не доходят" сделать сразу всё, а проектов много, а 

талантливых программеров - мало, вот и тянется время...

Сделают, конечно. (у них для этого, кроме самого механизма отслеживания, уже всё есть). 

 
Василий, так как же модифицировать (удалить) выставленный OrderSendAsync ордер, если у Вас нет билета?
 
Mikalas:

Да никому не выгодно, просто у MQ "руки не доходят" сделать сразу всё, а проектов много, а 

талантливых программеров - мало, вот и тянется время...

Сделают, конечно. (у них для этого, кроме самого механизма отслеживания, уже всё есть). 

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

На MQ это похоже. У MQ MetaTrader5 и интеграция с биржей не в приоритете.

 
Serj_Che:

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

На MQ это похоже. У MQ MetaTrader5 и интеграция с биржей не в приоритете.

Да это потому, что на бирже нет кухни (только комиссии), а на ФОРЕКСе миллионы последователей МММ,

может и есть 100$, но у КАЖДОГО! Огромные деньги, есть что посчитать! :) 

 

Василий, ответ будет?

Думаю, что нет.

Я победил?