В новом МТ4 Version : 4,00 Build 625 программные коды сохранили свою рабочую среду, но «Компилятор» выдаёт предупреждения о некорректности некоторых строк исходного кода в советниках.
Самые часто встречающиеся предупреждения : — return value of ‘OrderSelect‘ should be checked MACD Sample.mq4 92 7 на строку в коде —
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);-return value of ‘OrderClose’ should be checked MACD Sample.mq4 104 16 на строку в коде —
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);-return value of ‘OrderModify’ should be checked MACD Sample.mq4 115 22 на строку в коде —
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);и тому подобное…
Обращаюсь к знатокам за помощью, как это можно исправить? В чём корень недоразумения? Что нужно добавить в код или изменить?
Есть код:
void BuyOrder4()
{
double SL = Ask — BuyStoploss4*PipValue*Point;
if (BuyStoploss4 == 0) SL = 0;
double TP = Ask + BuyTakeprofit4*PipValue*Point;
if (BuyTakeprofit4 == 0) TP = 0;
int ticket = -1;
if (true)
ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, 0, 0, «My Expert», 1, 0, Blue);
else
ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, SL, TP, «My Expert», 1, 0, Blue);
if (ticket > -1)
{
if (true)
{
OrderSelect(ticket, SELECT_BY_TICKET); // вот здесь выдаёт предупреждение: return value of ‘OrderSelect’ should be checked
// Возвращаемое значение ‘OrderSelect «должны быть проверены
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue);
if (ret == false)
Print(«OrderModify() error — «, ErrorDescription(GetLastError()));
}
}
else
{
Print(«OrderSend() error — «, ErrorDescription(GetLastError()));
}
}
Компилятор выдаёт предупреждение: return value of ‘OrderSelect’ should be checked
Возвращаемое значение ‘OrderSelect «должны быть проверены
Как это сделать?
Так и не разобрался. Написал 4 советника с разными тралами. У всех в тесте ошибка 130. Не знаю почему она возникает и как сделать так, чтобы ее не было. Еще трал по фракталам вроде работает, но когда тестируешь с визуализацией — тест дальше первой сделки не идет( отрывается первый ордер и все, дальше никаких признаков жизни). А трала по pSAR заметил такую вещь. Советник открыл БАЙ, но цена тут же пошла вниз. А значения то индикатора получается сверху свечи, то есть стоплосс не может быть больше текущей цены. И у нас открыта позиция на долгое время без стоплосса. На скрине отметил это красной стрелкой. Подскажите как быть в данной ситуации?
Вот поправленный трал с фракталами:
void Trailing()
{
SL = 0;
fractal_down = NormalizeDouble(iFractals(NULL,0,MODE_LOWER,5),Digits);
fractal_up = NormalizeDouble(iFractals(NULL,0,MODE_UPPER,5),Digits);
for (int i =0;i {
if (OrderSelect(i,SELECT_BY_POS))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if (OrderType()==OP_BUY)
{
if(fractal_down>0)
{
SL=NormalizeDouble(fractal_down,Digits);
if (OrderStopLoss()!=SL)
{
if(SL bool rez = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType()==OP_SELL)
{
if(fractal_up>0)
{
SL=NormalizeDouble(fractal_up,Digits);
if (OrderStopLoss()!=SL)
{
if(SL > Ask + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
bool rez = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
} }
}
Ошибка 130 — это неправильные стопы.Возможно просто стоп-лосс который Вы хотите разместить находится слишком близко
от текущей цены.
Сделайте проверку
if(SL > Ask + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
Изменено 4 августа, 2015 пользователем Konstebl
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[])
{
//---
int Counted_bars; // Количество просчитанных баров
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
int i=Bars-Counted_bars-1; // Индекс первого непосчитанного
if (i>History-1) // Если много баров то ..
i=History-1; // ..рассчитывать заданное колич.
while(i>=0) // Цикл по непосчитанным барам
{
double MA_l_0 = iMA(NULL,0,perMA_1,0,modeMA_1,PRICE_CLOSE,i);
double MA_l_1 = iMA(NULL,0,perMA_1,0,modeMA_1,PRICE_CLOSE,i+1);
double MA_g_0 = iMA(NULL,0,perMA_2,0,modeMA_2,PRICE_CLOSE,i);
double MA_g_1 = iMA(NULL,0,perMA_2,0,modeMA_2,PRICE_CLOSE,i+1);
double STD_0 = iStdDev(NULL,0,perSTD,0,modeSTD,PRICE_CLOSE,i);
double STD_1 = iStdDev(NULL,0,perSTD,0,modeSTD,PRICE_CLOSE,i+1);
//double ELR_1=((High[i]+Low[i])/2)-iMA(NULL,0,perELR,0,1,PRICE_CLOSE,i);
//double ELR_2=((High[i]+Low[i])/2)-iMA(NULL,0,perELR,0,1,PRICE_CLOSE,i+1);
//Buy
if(MA_l_0 > MA_l_1 &&
MA_g_0 > MA_g_1 &&
STD_0 > STD_1)
if(Hour() < 9 || Hour() > 20) UPBuffer[i] = 0;
else UPBuffer[i] = Low[i];
else
//Sell
if(MA_l_0 < MA_l_1 &&
MA_g_0 < MA_g_1 &&
STD_0 > STD_1 )
if(Hour() < 9 || Hour() > 20) DNBuffer[i] = 0;
else DNBuffer[i] = High[i];
i--;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
Блог им. andresh
- 10 июня 2014, 16:55
- |
- Андрэ
попробовал запустить советник в МТ4 на MQL4:
extern int H = 14;
extern int M = 25;
int start()
{
if(OrdersTotal()==0 && Hour( )==H && Minute( ) ==M)
OrderSend(«USDJPY», OP_SELL,0.1,Bid,0,Ask+200*Point,Ask-200*Point,»»,123,0,Red);
}
и никак не могу разобраться, чего не хватает. ошибок нет, но есть 2 предупреждения:
return value of ‘OrderSend’ should be checked
not all control paths return a value
не могу понять, что ещё нужно… Пожскажите пожалуйста, а?
- Ключевые слова:
- MQL4,
- советники
- хорошо
-
0
25 комментариев
- 10 июня 2014, 17:08
- Ответить
Язык недавно сильно переработали, возможно поэтому.
- 10 июня 2014, 17:11
- Ответить
The0bald, пасип. да туповат я, видимо. не могу там найти. ща ещё раз попробую.)
- 10 июня 2014, 17:13
- Ответить
5й параметр — проскальзывание может добавить, чтобы больше нуля.
а если это весь код то должен быть последним оператор return(0);
- 10 июня 2014, 17:12
- Ответить
Бартоломей Цигенбальг, Ура, второе замечание исчезло!!! Осталось только: return value of ‘OrderSend’ should be checked
- 10 июня 2014, 17:14
- Ответить
Андрэ, это про return. про 5-й параметр соображаю…
- 10 июня 2014, 17:15
- Ответить
Бартоломей Цигенбальг, это про return. про 5-й параметр соображаю… не поясните?
- 10 июня 2014, 17:16
- Ответить
так красивее и все всех устраивает )))
проскальзывание дает шанс открыться по рынку при худшей цене на заданное отклонение именно этим параметром.
- 10 июня 2014, 17:17
- Ответить
Бартоломей Цигенбальг, ух ты!!! ошибок нет! Спасибо большое! )))) буду ковыряться дальше! )
- 10 июня 2014, 17:24
- Ответить
Андрэ, не совсем правильно в коде, потому что он за минуту пока удовлетворяет условиям может кучу ордеров наоткрывать )))
- 10 июня 2014, 17:26
- Ответить
не не норм. там есть проверка на количество открытых ордеров
- 10 июня 2014, 17:35
- Ответить
Бартоломей Цигенбальг, тоже присмотрелся, сообразил! )))) спасибо огромное! плюсануть не могу, плюсовалка не позволяет)
- 10 июня 2014, 17:37
- Ответить
имхо, лучше с mql5 начать изучение. 4 недавно сильно переделали — книга не актуальна, справка не доделана, не понятно какие функции заменили на аналог из мт5 какие старые оставили, косяки наверняка есть после серьезной переработки.
- 10 июня 2014, 17:44
- Ответить
The0bald, логично, НО, эти советники на МТ4 не работают, насколько я знаю. это придётся и платформу менять, а не хотелось бы.
- 10 июня 2014, 17:46
- Ответить
Андрэ, На новой МТ4 старые исходники все равно придется переделывать.
- 10 июня 2014, 18:24
- Ответить
The0bald, возможно. просто у меня сейчас 2 робота на МТ4 работают, я доволен. вот, взялся сам изучать роботописательство. пока я «БЛИЖЕ» к МТ4. ) вы пишете сами? успешно?
- 10 июня 2014, 18:28
- Ответить
Андрэ, Пишу давно, правда индикаторы в основном
- 10 июня 2014, 18:30
- Ответить
The0bald, Привет, можно обращятся с просьбой по поводу mql если не трудно?
- 10 июня 2014, 21:00
- Ответить
нужно посмотреть на один индюк, выдает сигнал не всегда а нужно чтобы всегда выдал, если вам удобно можно в скайп общятся, мой скайп dimii1000
- 10 июня 2014, 22:17
- Ответить
в личку не могу писать, рейтинга не хватает (( я тут больше читатель, почту оставьте если не трудно, моя почта [email protected]
- 10 июня 2014, 22:42
- Ответить
- 10 июня 2014, 22:53
- Ответить