Здравствуйте. Не подскажите как организовать трейлинг сразу нескольких пар в одном боте?!
В компоте?
Ну хотя бы) Есть бот, который торгует сразу 4-мя парами, а трейлит только одну. Проще было бы 4 бота запихать на 4 пары, но мне важно в тестере увидеть суммарную просадку (выдержет ли депозит). Вот голову ломаю как заставить его трейлить сразу 4 пары
Ну хотя бы) Есть бот, который торгует сразу 4-мя парами, а трейлит только одну. Проще было бы 4 бота запихать на 4 пары, но мне важно в тестере увидеть суммарную просадку (выдержет ли депозит). Вот голову ломаю как заставить его трейлить сразу 4 пары
Чудеса! Компот живой и торгует :)
Ладно, я больше не буду шутить.
Покажите код трейлинга Вашего советника.
Код:
void Trailing(const string symbol) { double sym1=SymbolInfoDouble(symbol, SYMBOL_BID); double sym2=SymbolInfoDouble(symbol, SYMBOL_ASK); if(InpTrailingStop==0) return; for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==symbol && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(sym1-m_position.PriceOpen()>ExtTrailingStop+ExtTrailingStep) if(m_position.StopLoss()<sym1-(ExtTrailingStop+ExtTrailingStep)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(sym1-ExtTrailingStop), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); RefreshRates(); m_position.SelectByIndex(i); PrintResultModify(m_trade,m_symbol,m_position); continue; } } else { if(m_position.PriceOpen()-sym2>ExtTrailingStop+ExtTrailingStep) if((m_position.StopLoss()>(sym2+(ExtTrailingStop+ExtTrailingStep))) || (m_position.StopLoss()==0)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(sym2+ExtTrailingStop), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); RefreshRates(); m_position.SelectByIndex(i); PrintResultModify(m_trade,m_symbol,m_position); } } } }
Код:
Нужно для каждого символа рассчитывать свои ExtTrailingStop и ExtTrailingStep.
А если ExtTrailingStop и ExtTrailingStep для всех пар одинаковые значение имееют ну допустим 20пунктов? Все пары по 5 символов после запятой
А если ExtTrailingStop и ExtTrailingStep для всех пар одинаковые значение имееют ну допустим 20пунктов? Все пары по 5 символов после запятой
Тогда можно использовать для всех символов ExtTrailingStop и ExtTrailingStep рассчитанные в OnInit. Но это неправильно и опасно будущими проблемами!
Ещё один НЕПРАВИЛЬНЫЙ совет: удалите условие m_position.Symbol()==symbol вообще.
В oninit'e
ExtTrailingStop= InpTrailingStop * m_adjusted_point; ExtTrailingStep= InpTrailingStep * m_adjusted_point; ExtTrailingStopnzd= InpTrailingStopnzd * m_adjusted_point; ExtTrailingStepnzd= InpTrailingStepnzd * m_adjusted_point; ExtTrailingStopcad= InpTrailingStopcad * m_adjusted_point; ExtTrailingStepcad= InpTrailingStepcad * m_adjusted_point; ExtTrailingStopaud= InpTrailingStopaud * m_adjusted_point; ExtTrailingStepaud= InpTrailingStepaud * m_adjusted_point;
----------------------------------------------------
В OnTick'e
Trailing(Symbol_01,ExtTrailingStop,ExtTrailingStep); Trailing(Symbol_02,ExtTrailingStopcad,ExtTrailingStepcad); Trailing(Symbol_03,ExtTrailingStopnzd,ExtTrailingStepnzd); Trailing(Symbol_04,ExtTrailingStopaud,ExtTrailingStepaud); ----------------------------------------------------- Сам трейлинг void Trailing(const string symbol, double exttrail,double extstep) { double sym1=SymbolInfoDouble(symbol, SYMBOL_BID); double sym2=SymbolInfoDouble(symbol, SYMBOL_ASK); if(InpTrailingStop==0) return; for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if( m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(sym1-m_position.PriceOpen()>exttrail+extstep) if(m_position.StopLoss()<sym1-(exttrail+extstep)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(sym1-exttrail), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); RefreshRates(); m_position.SelectByIndex(i); PrintResultModify(m_trade,m_symbol,m_position); continue; } } else { if(m_position.PriceOpen()-sym2>exttrail+extstep) if((m_position.StopLoss()>(sym2+(exttrail+extstep))) || (m_position.StopLoss()==0)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(sym2+exttrail), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); RefreshRates(); m_position.SelectByIndex(i); PrintResultModify(m_trade,m_symbol,m_position); } } } }
И всё-равно ничего не работает)
В oninit'e
----------------------------------------------------
В OnTick'e
И всё-равно ничего не работает)
Пожалуйста вставляйте код правильно. Я поправил, но в следующий раз, если будете постить простыни из простого текста - буду всё удалять.

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