Я всё пытаюсь вывести это в журнал из библиотеки AccountInfo) Сложно разбираться с mql5.
Неттинговый тип торгового счет. Тогда получается с помощью вашей функции события при наступлении Buy или Sell я удаляю отложенный ордер на противоположную позицию. Сейчас попробую.
Итак, всё я написал, по дебаггингу он заходит в данную функцию и при открытие позиции Buy выполняет функцию OrderDelete. Но в итоге на графике ничего не меняется. И на счет того, что ордера не срабатывают по своим позициям. Почему он выставляет по одной цене, а продает по-другой.
Вы разместили Buy Limit по 109610 - у Вас сработал BuyLimit и получилась позиция Buy по 109610 - здесь всё правильно
Вы разместили SellLimit по 109570 - у Вас сработал SellLimit по 109570- здесь всё правильно
а дальше смотрите внимательно: у Вас уже была открыта позиция Buy и тут у Вас срабатывает Sell LImit - то есть открывается ПРОТИВОПОЛОЖНАЯ позиция. В итоге позиция BUY закрывается позицией SELL. Позиция BUY у нас закрывается по цене BID - вот 109600 это как раз и есть цена BID для позиции BUY.
Итог: всё правильно, а вот Вы после срабатывания отложенного ордера просто не успеваете удалить противоположный отложенный ордер.
Вы разместили Buy Limit по 109610 - у Вас сработал BuyLimit и получилась позиция Buy по 109610 - здесь всё правильно
Вы разместили SellLimit по 109570 - у Вас сработал SellLimit по 109570- здесь всё правильно
а дальше смотрите внимательно: у Вас уже была открыта позиция Buy и тут у Вас срабатывает Sell LImit - то есть открывается ПРОТИВОПОЛОЖНАЯ позиция. В итоге позиция BUY закрывается позицией SELL. Позиция BUY у нас закрывается по цене BID - вот 109600 это как раз и есть цена BID для позиции BUY.
Итог: всё правильно, а вот Вы после срабатывания отложенного ордера просто не успеваете удалить противоположный отложенный ордер.
Я вас понял. Но как программа не успевает удалить противоположный отложенный ордер, если я вызываю функцию удаления сразу после срабатывания первого отложенного ордера?
voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
elsereturn;
if(deal_symbol==Symbol())
if(deal_entry==DEAL_ENTRY_IN)
{
//--- если словили открытие BUYif(deal_type==DEAL_TYPE_BUY)
{
mytrade.OrderDelete(SellTicket);
}
//--- если словили открытие SELLif(deal_type==DEAL_TYPE_SELL)
{
mytrade.OrderDelete(BuyTicket);
}
}
}
}
В итоге, из журнала видно, что сначала исполняются 2 ордера, и потом только программа через OnTradeTransac пытается удалить якобы выставленный отложенный ордер
Fresto: В итоге, из журнала видно, что сначала исполняются 2 ордера, и потом только программа через OnTradeTransac пытается удалить якобы выставленный отложенный ордер
Из журнала видно, что все происходит в одно мгновение.
Вы пытаетесь торговать в 10-00 - вероятно это время открытия дневных торгов, а значит очень стакан пустой и будут огромные скачки цен.. Пройдите в тестере в режиме "Каждый тик на основе реальных тиков" в пошаговом режиме и просмотрите, как в этот момент изменяются котировки.
Из журнала видно, что все происходит в одно мгновение.
Вы пытаетесь торговать в 10-00 - вероятно это время открытия дневных торгов, а значит очень стакан пустой и будут огромные скачки цен.. Пройдите в тестере в режиме "Каждый тик на основе реальных тиков" в пошаговом режиме и просмотрите, как в этот момент изменяются котировки.
Вот теперь всё заработало так, как я и хотел. Не зная этих тонкостей, когда нужно просто поменять режим в тестере и всё получится, нервов потратишь много. Спасибо большое за помощь и за функцию от OnTradeTrandsac.
Я всё пытаюсь вывести это в журнал из библиотеки AccountInfo) Сложно разбираться с mql5.
Неттинговый тип торгового счет. Тогда получается с помощью вашей функции события при наступлении Buy или Sell я удаляю отложенный ордер на противоположную позицию. Сейчас попробую.
Я всё пытаюсь вывести это в журнал из библиотеки AccountInfo) Сложно разбираться с mql5.
В данном случае нужно просто навести мышку на название торгового счёта или посмотреть вверх терминала:
В данном случае нужно просто навести мышку на название торгового счёта или посмотреть вверх терминала:
Там это не написано. Выводил через ACCOUNT_TRADE_MODE.
Там это не написано. Выводил через ACCOUNT_TRADE_MODE.
Если не написано - значит неттинг.
Почему он выставляет по одной цене, а продает по-другой.
*** Но в итоге на графике ничего не меняется.***
? Как это не меняется? Если позиция открывается - то на графике будет значок открытия позиции.
*** И на счет того, что ордера не срабатывают по своим позициям.
Почему он выставляет по одной цене, а продает по-другой.
А теперь более подробно:
? Как это не меняется? Если позиция открывается - то на графике будет значок открытия позиции.
А теперь более подробно:
Я вас понял. Но как программа не успевает удалить противоположный отложенный ордер, если я вызываю функцию удаления сразу после срабатывания первого отложенного ордера?
В итоге, из журнала видно, что сначала исполняются 2 ордера, и потом только программа через OnTradeTransac пытается удалить якобы выставленный отложенный ордер
Из журнала видно, что все происходит в одно мгновение.
Вы пытаетесь торговать в 10-00 - вероятно это время открытия дневных торгов, а значит очень стакан пустой и будут огромные скачки цен.. Пройдите в тестере в режиме "Каждый тик на основе реальных тиков" в пошаговом режиме и просмотрите, как в этот момент изменяются котировки.
Из журнала видно, что все происходит в одно мгновение.
Вы пытаетесь торговать в 10-00 - вероятно это время открытия дневных торгов, а значит очень стакан пустой и будут огромные скачки цен.. Пройдите в тестере в режиме "Каждый тик на основе реальных тиков" в пошаговом режиме и просмотрите, как в этот момент изменяются котировки.
Вот теперь всё заработало так, как я и хотел. Не зная этих тонкостей, когда нужно просто поменять режим в тестере и всё получится, нервов потратишь много. Спасибо большое за помощь и за функцию от OnTradeTrandsac.