- Что произойдет с открытой позицией. если стакан опустеет?
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
- Помогите с OrderModify()
1. чтобы работать с позицией, её нужно выбрать:
for(int i=PositionsTotal()-1;i>=0;i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if(m_position.Symbol()==m_symbol.Name()() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { } if(m_position.PositionType()==POSITION_TYPE_SELL) { } }
2. Что значит "срабатывают не по тем ценам, но при этом проскальзывания нету"? Приведите, пожалуйста логи тестера.
1. чтобы работать с позицией, её нужно выбрать:
2. Что значит "срабатывают не по тем ценам, но при этом проскальзывания нету"? Приведите, пожалуйста логи тестера.
На счет второго, я исправил там, забываю умножать на _Point. А вот на счет выбора позиций, ведь у нас на 1 инструменте может быть только 1 позиция в какую-то сторону. А закрыть ордер я могу по тикету в функции OrderDelete();
На счет второго, я исправил там, забываю умножать на _Point. А вот на счет выбора позиций, ведь у нас на 1 инструменте может быть только 1 позиция в какую-то сторону. А закрыть ордер я могу по тикету в функции OrderDelete();
На одном инструменте может быть:
- много позиция, причём разнонаправленных - это на торговых счетах с хеджингом
- одна позиция - на счетах с неттингом.
Поэтому нужно сразу говорить, на каком типе счёта работаете.
Ордер (отложенный) Вы можете УДАЛИТЬ, а не ЗАКРЫТЬ.
На одном инструменте может быть:
- много позиция, причём разнонаправленных - это на торговых счетах с хеджингом
- одна позиция - на счетах с неттингом.
Поэтому нужно сразу говорить, на каком типе счёта работаете.
Ордер (отложенный) Вы можете УДАЛИТЬ, а не ЗАКРЫТЬ.
Удалить, да. Некорректные выражения у меня бывают.
Fresto:
Здравствуйте. Интересует вопрос по выставлению лимиток в 2 стороны. Условие торговли - начало дня, тогда, когда новый бар только появляется. Я выставляю лимитки на 20 пунктов выше и ниже. И когда срабатывает 1 из условий, я закрываю другую лимитку. Но почему-то при отладке лимитки срабатывают не всегда по тем ценам ( проскальзывания нету ), и не получается закрывать 1, при срабатывании другой. В итоге они закрываются друг о друга. Можете подсказать пожалуйста, как это реализовать? Сделал с помощью события OnTrade
void OnTrade() { if(isBuy && isSell) { if(PositionSelect(_Symbol) == true) { if (m_position.PositionType() == POSITION_TYPE_BUY) { isSell = false; mytrade.OrderDelete(SellTicket); } if(m_position.PositionType() == POSITION_TYPE_SELL) { isBuy = false; mytrade.OrderDelete(BuyTicket); } } } }
Поскольку речь о двух разнонаправленных позициях, значит счёт hadge и соответственно выбирать позицию для обращения к её свойствам надо не по символу, а по индексу в списке позиций.
ps; Стоп. Я чуток тоже попутал. Два ордера, потом один стал позицией, имеем один ордер и одну позицию.
Кстати, момент срабатывания ордера лучше отлавливать в TradeTransaction:
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void CNewMartin::TradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- if transaction is result of addition of the transaction in history if(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); } else return; if(deal_symbol==Symbol() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_IN) { //--- если словили открытие BUY if(deal_type==DEAL_TYPE_BUY) { } //--- если словили открытие SELL if(deal_type==DEAL_TYPE_SELL) { } } } }
Поскольку речь о двух разнонаправленных позициях, значит счёт hadge и соответственно выбирать позицию для обращения к её свойствам надо не по символу, а по индексу в списке позиций.
Я говорю о двух разнонаправленных лимитках, но при срабатывании одного, вторая должна удаляться, поскольку на счете может быть позиция только в 1 сторону.
Я говорю о двух разнонаправленных лимитках, но при срабатывании одного, вторая должна удаляться, поскольку на счете может быть позиция только в 1 сторону.
На счёте может одновременно:
- на одном символе много позиций, причём они могут быть противоположными - на счетах с хеджингом
- на одном символе в одну строну может быть только одна позиция - на счетах с неттингом.
На счёте может одновременно:
- на одном символе много позиций, причём они могут быть противоположными - на счетах с хеджингом
- на одном символе в одну строну может быть только одна позиция - на счетах с неттингом.
Я всё пытаюсь вывести это в журнал из библиотеки AccountInfo) Сложно разбираться с mql5.
Я говорю о двух разнонаправленных лимитках, но при срабатывании одного, вторая должна удаляться, поскольку на счете может быть позиция только в 1 сторону.
Я понял это сразу, но пока писал о том что я не прав, ты уже это тоже заметил.
Ну, пройди в дебагере и посмотри где тараканы...

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования