Всем привет!
С советниками, торгующими на одной валютной паре более-менее разобрался. Теперь вот дошло дело до мультивалютных советников. Решил узнать, как они работают. Только вот, примеров с комментариями практически нет. В Code Base нашел несколько мультивалютников, но они слишком сложные для понимания. Один из самых простых «MACD multi» https://www.mql5.com/ru/code/8879, что-то не совсем понятный. Для разбора принципа работы, вместо индикатора MACD, решил подставить самое простое решение для проверки хода работы. Если цена закрытия текущего бара выше цены закрытия предыдущего бара — покупаем, если меньше — продаем. Прикрепил к EURUSD, M5... посидел минут 20 и ничего не случилось! Может, у кого-нибудь есть в запасниках какой-нибудь «cheat sheet» по мультивалютникам или пример простейшего кода, как реализовать мультисоветник?
Ну, или хотя бы прокомментировать, что за алгоритм действий такой у «MACD multi» почему он не мультиработает? (вместо MACD... условия торговли по двум последним барам)
А что за код такой?
А что за код такой?
Взял код мультисоветника из «MACD multi» https://www.mql5.com/ru/code/8879
Там были условия на покупку и продажу по индикатору MACD
я заменил условия продажи на более простые для понимания и для тестирования... но, что-то, ни оригинальный, ни измененный код не работает.
Хотя, я пытаюсь понять, с чего начинать строить мультисоветники?!
Оригинал покажите
оригинал:
//+------------------------------------------------------------------+ //| MACD multi .mq4 | //| Oleg Krinichny © 2009 | //| | //+------------------------------------------------------------------+ extern string Instrument = "EURUSD"; extern double Lots = 0.1; extern int TakeProfit = 50; extern int TrailingStop = 0; extern int StopLoss = 50; extern int FirstOpenLevel = 5; extern int LastOpenLevel = 20; extern int Slope = 2; extern int CloseLevel = 20; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious; int i, total, p1, p2, p3, p4, p5, p6, p7, p8, p9; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); p1=0; p2=0; p3=0; p4=0; p5=0; p6=0; p7=0; p8=0; p9=0; OrderSelect(0,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(1,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(2,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(3,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(4,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} total=OrdersTotal(); for(i=0;i<total;i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Instrument) { if(OrderType()==OP_BUY) { if(MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent>CloseLevel*0.1*Point) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop || OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } if(OrderType()==OP_SELL) { if(SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent>CloseLevel*0.1*Point) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } if(TrailingStop>0) { if(OrderOpenPrice()-Ask>Point*TrailingStop) { if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } total=OrdersTotal(); if(total<5) { if((Instrument=="EURUSD" && p1<1) || (Instrument=="GBPUSD" && p2<1) || (Instrument=="USDCHF" && p3<1) || (Instrument=="USDJPY" && p4<1) || (Instrument=="EURCHF" && p5<1) || (Instrument=="EURGBP" && p6<1) || (Instrument=="AUDUSD" && p7<1) || (Instrument=="USDCAD" && p8<1) || (Instrument=="EURJPY" && p9<1)) { if(MacdCurrent<0 && MacdCurrent-SignalCurrent>SignalCurrent*FirstOpenLevel*(-0.01) && MacdCurrent-SignalCurrent<SignalCurrent*LastOpenLevel*(-0.01) && MacdCurrent-MacdPrevious>MacdPrevious*Slope*(-0.01) && MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent<(CloseLevel-10)*0.1*Point) { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green); return(0); } if(MacdCurrent>0 && SignalCurrent-MacdCurrent>SignalCurrent*FirstOpenLevel*0.01 && SignalCurrent-MacdCurrent<SignalCurrent*LastOpenLevel*0.01 && MacdPrevious-MacdCurrent>MacdPrevious*Slope*0.01 && SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent<(CloseLevel-10)*0.1*Point) { OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,0,Red); return(0); } } } }
оригинал:
И где такой код откопали?
.... опять целый день потерян! %(
Ну, а хотя бы в двух словах, базовая конструкция мультисоветника как выглядит?
В книге примеров нету... на форуме в поиске одни отрывки непонятно чего...
.... опять целый день потерян! %(
Ну, а хотя бы в двух словах, базовая конструкция мультисоветника как выглядит?
В книге примеров нету... на форуме в поиске одни отрывки непонятно чего...
Как и любой советник
1. анализ
2. принятие решения
.... опять целый день потерян! %(
Ну, а хотя бы в двух словах, базовая конструкция мультисоветника как выглядит?
В книге примеров нету... на форуме в поиске одни отрывки непонятно чего...
А что вообще вы называете "мультивалютным" советником? Советник использующий анализ нескольких валютных пар или/и советник торгующий по нескольким валютным парам? Если второе, то:
- советник не должен использовать "Symbol()" при отсылке торговых приказов;
- никаких Ask и Bid, а их запросы через MARKETINFO с помощью MODE_ASK и MODE_BID и указанием конкретной пары;
- в индикаторах тоже должна указываться конкретная пара, а не NULL;
- обращение к таймсериям должно быть тоже с указанием конкретного инструмента;
- и прочие очевидные вещи для того кто "С советниками, торгующими на одной валютной паре более-менее разобрался"
И еще, использование мультивалютного советника должно быть оправдано мультивалютным модулем приниятия торговых решений, в противном случае его (советник) заменить несколькими обычными советниками разбросаными на разные чарты.
Объясните толком и конкретно, что Вы хотите реализовать, и возможно кто-нибудь сможет помочь. Ваш код только усугубляет процесс пониманиея ваших устремлений)
З.Ы. Работающие мультивалютники есть в базе, и просто успешно гуглятся с просторов интернета.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
С советниками, торгующими на одной валютной паре более-менее разобрался. Теперь вот дошло дело до мультивалютных советников. Решил узнать, как они работают. Только вот, примеров с комментариями практически нет. В Code Base нашел несколько мультивалютников, но они слишком сложные для понимания. Один из самых простых «MACD multi» https://www.mql5.com/ru/code/8879, что-то не совсем понятный. Для разбора принципа работы, вместо индикатора MACD, решил подставить самое простое решение для проверки хода работы. Если цена закрытия текущего бара выше цены закрытия предыдущего бара — покупаем, если меньше — продаем. Прикрепил к EURUSD, M5... посидел минут 20 и ничего не случилось! Может, у кого-нибудь есть в запасниках какой-нибудь «cheat sheet» по мультивалютникам или пример простейшего кода, как реализовать мультисоветник?
Ну, или хотя бы прокомментировать, что за алгоритм действий такой у «MACD multi» почему он не мультиработает? (вместо MACD... условия торговли по двум последним барам)