Хочу фильтровать колебания цены в советнике при помощи индикатора 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 диагональ, то есть образовалась линия с левого верхнего угла до до правого нижнего угла. Вот как то так. Я понимаю, что это пишется через массивы. Но я думал,что если индикатор встроенный, то массивы не нужны.
Спасибо за помощь.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования

При компиляции данный код выдаёт ошибку
Помогите пожалуйста подправить данный код.