Хочу фильтровать колебания цены в советнике при помощи индикатора zig-zag. Проюзав интернет набрёл на советник на основе вышеуказанного индикатора.
При компиляции данный код выдаёт ошибку
Помогите пожалуйста подправить данный код.Ну так он же Вам пишет: return value of 'OrderSelect' should be checked zig-zag.mq4 76 7 , т.е. значение OrderSelect нужно проверить, даже указана строка и позиция в коде...
Ну так он же Вам пишет: return value of 'OrderSelect' should be checked zig-zag.mq4 76 7 , т.е. значение OrderSelect нужно проверить, даже указана строка и позиция в коде...
Да пишет, я начинаю править там ещё хлеще ошибки выходят. Там этих return столько, что я решил переделать данный код. Все равно потом в свой робот его вставлять. Вот что у меня получилось
//+------------------------------------------------------------------+ //| Test advisor on iDeMarker.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https:/goga342@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------параметры советника ------------------------------- extern double lots=0.01; // extern int Magic=1111678111; extern int Slippage=1; //double sell_level=0.7; //double buy_level=0.3; extern double StopLoss=50; extern double TakeProfit=50; extern double TrailingStop=30; double SL,TP; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(Digits==3 || Digits==5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; // int cnt,total; // открытие продаж 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,3,0,Bid-TakeProfit*Point,"macd sample",16384,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,3,0,Ask+TakeProfit*Point,"macd sample",16384,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)==true) { 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)==true) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) { if(OrderType()==OP_BUY) count++; } } } return(count); } //+------------------------------------------------------------------+При компиляции ошибок и предупреждений нет. Правда позиции не открывает (открыл только 1 позицию в покупку и закрыл её по тейку).
В чём проблема пока не знаю. Видно опять с логикой в условии попутал.
Поправил обе версии, есть недочёты
Здравствуйте(извиняюсь сразу ни знаю как Вас звать). Спасибо за подправленный код. Скажите пожалуйста зачем в данном коде нужна функция "Подсчет открытых ордеров по типу"(это делается для чего)? Если вам не трудно подскажите: 1. как сделать так, чтобы открывался на графике один зиг-заг. 2. как сделать так, чтобы сделки открывались не посередине движения, а к примеру открывалась сделка на минимуме, а закрывалась на максимуме.
Заранее спасибо.
Здравствуйте(извиняюсь сразу ни знаю как Вас звать). Спасибо за подправленный код. Скажите пожалуйста зачем в данном коде нужна функция "Подсчет открытых ордеров по типу"(это делается для чего)? Если вам не трудно подскажите: 1. как сделать так, чтобы открывался на графике один зиг-заг. 2. как сделать так, чтобы сделки открывались не посередине движения, а к примеру открывалась сделка на минимуме, а закрывалась на максимуме.
Заранее спасибо.
Это тоже самое что в коде
int CountSell()//проверкна открытие ордеров на продажу
int CountBuy()// проверкна открытие ордеров на покупку
только в компактной версии
1. Не понятен вопрос, наверно на график присоединить индикатор зиг-заг
2. А от куда знать что именно это и есть минимум или максимум? Пока свеча не закроется ни кто не знает что достигли какого-то пика.
Это тоже самое что в коде
int CountSell()//проверкна открытие ордеров на продажу
int CountBuy()// проверкна открытие ордеров на покупку
только в компактной версии
1. Не понятен вопрос, наверно на график присоединить индикатор зиг-заг
2. А от куда знать что именно это и есть минимум или максимум? Пока свеча не закроется ни кто не знает что достигли какого-то пика.
Спасибо за разъяснения по поводу проверка на открытие ордера (в дальнейшем буду применять в своей работе).
Теперь, что касается 2 пунктов (или вопросов).
1. При тесте данного кода на графике образуется 2 зиг-зага (2 ломанные) вместо одной. Как сделать так, чтобы на графике отображался 1 зиг-заг?
2. В коде советника есть строка
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])
я так понимаю, что параметры берутся из индикатора ZigZag_Rosh который находится в папке индикаторы. В этом индикаторе происходит сравнения массива данных, куда записаны минимальные и максимальные точки цены.
Теперь по поводу открытия позиций я напишу как понимаю. Если, что поправите меня. Позиции для открытия сделки происходит тогда, индикатор зиг-заг сформировал уже 1 плечо. Сделка открываться в противоположную сторону. Пример: индикатор образовал 1 диагональ (с нижнего левого угла до правого верхнего угла). Советник открывает позицию в противоположную сторону, то есть с левого верхнего угла и сделка закрывается когда будет сформирована 2 диагональ, то есть образовалась линия с левого верхнего угла до до правого нижнего угла. Вот как то так. Я понимаю, что это пишется через массивы. Но я думал,что если индикатор встроенный, то массивы не нужны.
Спасибо за помощь.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При компиляции данный код выдаёт ошибку
Помогите пожалуйста подправить данный код.