Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Опубликовал:
- Vladimir Karputov
- Просмотров:
- 2682
- Рейтинг:
- Опубликован:
- 2017.05.12 13:56
- Обновлен:
- 2018.02.16 13:34
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Автор идеи: ef91 (начало обсуждения на форуме #62)
Автор mql5 кода: Vladimir Karputov.
Мы ждем, когда TP или SL сработают, и после этого открываем позицию в противоположном направлении. Проверка на достаточность средств перед отсылкой торгового приказа. OnTradeTransaction.
Например, уже была открыта позиция Buy. Когда TP или SL сработают, мы открываем новую позицию Sell. Затем, когда TP или SL сработают, мы открываем новую позицию Buy.
Вот так отлавливается закрытие сделки в "OnTradeTransaction":
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(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; long deal_time =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); deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME); } else return; if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) { if(deal_entry==DEAL_ENTRY_OUT) { if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL) { if(deal_type==DEAL_TYPE_BUY) m_close_pos_type=POSITION_TYPE_SELL; else if(deal_type==DEAL_TYPE_SELL) m_close_pos_type=POSITION_TYPE_BUY; else return; m_is_trade=true; } } else if(deal_entry==DEAL_ENTRY_IN) { m_is_trade=false; } } } }
Check volume before OrderSend (на примере открытия позиции Buy):
//+------------------------------------------------------------------+ //| Open Buy position | //+------------------------------------------------------------------+ void OpenBuy(double sl,double tp) { sl=m_symbol.NormalizePrice(sl); tp=m_symbol.NormalizePrice(tp); //--- check volume before OrderSend to avoid "not enough money" error (CTrade) double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),InpLots,m_symbol.Ask(),ORDER_TYPE_BUY); if(check_volume_lot!=0.0) { if(check_volume_lot>=InpLots) { if(m_trade.Buy(InpLots,NULL,m_symbol.Ask(),sl,tp)) { if(m_trade.ResultDeal()==0) { Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } else { Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } else { Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } else { m_is_trade=false; } } else { m_is_trade=false; } //--- }

Размер бара. Размер свечи считается по формуле: "уменьшаемое" минус "вычитаемое".

Торговая стратегия по RSI и Bollinger Bands.

Индикатор TotalPowerIndicatorX с возможностью изменения таймфрейма индикатора во входных параметрах.

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