Если не трудно помогите подправить код будущего советника, а именно:
1. при компиляции выводит предупреждение
при этом ссылается на вот эту строку
2. при прогонке в тестере стротегий (встроенного в мт4) не вырисовывается "ломанная зигзага".ExtDepth+","+ExtDeviation+","+ExtBackstep
?
и примените функцию
https://www.mql5.com/ru/docs/convert/integertostring
![Документация по MQL5: Преобразование данных / IntegerToString Документация по MQL5: Преобразование данных / IntegerToString](https://c.mql5.com/36/26/dokumentaciya-po-mql5-preobrazovanie__1.png)
- www.mql5.com
1. Все верно тебя предупредили. У тебя функция должна принимать строку - имя индикатора. А ты передаешь туда цифры. Вот, компилятор и предупреждает тебя, как именно он тебя понял. В функцию IndicatorShortName() надо передавать строчную переменную, у тебя она складывается из нескольких подстрок - причем ты к строке прибавляешь число. А это - разные типы. Верно сказал Ренат - используй функцию преобразования числа в строку.
2. Кроме прохода под отладчиком, и проверки, какие именно значения выводятся на ломанную зигзага, и выводятся ли они вобще - что-то придумать сложно.
так как функция start устарела, попробуй заменить функции OnInit() и DeInit() на старые варианты init() и deinit()
или добавь обработчик
и в ней вызывай start()
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { start(); return rates_total; }
...
2. при прогонке в тестере стротегий (встроенного в мт4) не вырисовывается "ломанная зигзага".А что она делает, если не вырисовывается?
так как функция start устарела, попробуй заменить функции OnInit() и DeInit() на старые варианты init() и deinit()
или добавь обработчик
и в ней вызывай star
так как функция start устарела, попробуй заменить функции OnInit() и DeInit() на старые варианты init() и deinit()
или добавь обработчик
и в ней вызывай start()
Спасибо за помощь всё заработало. Правда пока "ломал голову", "пришла мысль" отказаться от "встроенного" индикатора (чтобы система работала независимо от того, есть вышеуказанный индюк в МТ4 или нет). Решил прописать параметры в самом роботе.
По поводу того зачем мне нужно было что бы вырисовывался зигзаг. Хотел при тесте в дальнейшем (когда добавлю magd) проконтролировать работу системыСпасибо за помощь всё заработало. Правда пока "ломал голову", "пришла мысль" отказаться от "встроенного" индикатора (чтобы система работала независимо от того, есть вышеуказанный индюк в МТ4 или нет). Решил прописать параметры в самом роботе.
По поводу того зачем мне нужно было что бы вырисовывался зигзаг. Хотел при тесте в дальнейшем (когда добавлю magd) проконтролировать работу системыКак вариант можно использовать #resource, и будете таскать индикатор с экспертом.
------------------------------------------------------------------+ //| Test advisor on ZigZag.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https:/goga342@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Copyright c 2010, MQL для тебя." #property link "http://mql4you.ru" #property strict extern double lots = 0.01; // extern int TakeProfit=60; // extern int StopLoss=100; // extern int Magic=111111111; extern int Slippage=3; extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; datetime Today=0; double SL,TP; int ticket; //±-----------------------------------------------------------------+ int OnInit() { if(Digits==3 || Digits==5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //±-----------------------------------------------------------------+ int deinit() {return(0);} //±-----------------------------------------------------------------+ int start() { if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят //:проверим открытие новой свечи if(Time[0]==Today) return(0); Today=Time[0]; //:получим значение ZigZag на предыдущей свече double lZZ=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,1); // открытие продаж if(CountSell()==0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,1,0)==Low[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,1,0)==Low[0]) { SL = NormalizeDouble(Bid+StopLoss*Point, Digits); TP = NormalizeDouble(Bid-TakeProfit*Point, Digits); { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,SL,TP,"macd sample",Magic,0,Red); if(ticket>0) { // закрытие продаж if(CountSell()>0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,0,1)==High[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,0,1)==High[0]) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderMagicNumber()==Magic && OrderType()==OP_SELL) if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrNONE)) Print("Ошибка открытия ордера на покупку !"); } } } } } } // открытие покупок if(CountBuy()==0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,0,1)==High[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,0,1)==High[0]) { TP = NormalizeDouble(Ask+TakeProfit*Point, Digits); SL = NormalizeDouble(Ask-StopLoss*Point, Digits); { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,SL,TP,"macd sample",Magic,0,Green); if(ticket>0) { // закрытие покупок if(CountBuy()>0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,1,0)==Low[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,1,0)==Low[0]) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderMagicNumber()==Magic && OrderType()==OP_BUY) if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrNONE)) Print("Ошибка открытия ордера на продажу!"); } } } } } } return(0); } //+------------------------------------------------------------------+ int CountSell()//проверкна открытие ордеров на продажу { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) { if(OrderType()==OP_SELL) count++; } } } return(count); } //+------------------------------------------------------------------+ int CountBuy()// проверкна открытие ордеров на покупку { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) { if(OrderType()==OP_BUY) count++; } } } return(count); } //+------------------------------------------------------------------+
Правда не могу условия правильно прописать, а именно
// открытие продаж if(CountSell()==0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,1,0)==Low[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,1,0)==Low[0]) // закрытие продаж if(CountSell()>0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,0,1)==High[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,0,1)==High[0]) // открытие покупок if(CountBuy()==0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,0,1)==High[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,0,1)==High[0]) // закрытие покупок if(CountBuy()>0 && iCustom(NULL,0,"ZigZag_Rosh",12,5,3,1,0)==Low[0] && iCustom(NULL,0,"ZigZag_Rosh",48,20,12,1,0)==Low[0])
Люди если не трудно, разъясните, что и как надо подправить. При компиляции ошибок и предупреждения нет.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Если не трудно помогите подправить код будущего советника, а именно:
1. при компиляции выводит предупреждение
при этом ссылается на вот эту строку
2. при прогонке в тестере стротегий (встроенного в мт4) не вырисовывается "ломанная зигзага".