Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 404
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Начал писать обертку для функций открытия и модиффикафий ордеров (думал исправит мой проблемы с возвратом значения от этих операторов)а там такая же проблема.
Объясните уже в чем дело та? ( что бы не написал всегда проблема с возратом значений от ОрдерСенд,ОрдерСелекс и МодифиОрдер)
Код обертки .
int start()
{
if (signal == 1)
{
OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Red);
}
return(0);
}
//-----------------------------------------------
int OrderSendX (string symbol,int cmd, double volume,double price,int slippage,double stoploss,double takeprofit,string comment,
int magic,datetime expiration,color arrow_color)
{
int err=GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;
int Retry = 10;
int cnt = 0;
if(cmd == OP_BUY || cmd == OP_SELL) //проверка типа ордера на открытия
{
while(!exit_loop)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err = GetLastError();
switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES:
case ERR_REQUOTE:
RefreshRates();
continue;
default:
exit_loop = true;
break;
}
if(cnt>Retry)
exit_loop = true;
if(!exit_loop)
{
Sleep(1000);
RefreshRates();
}
else
{
if(err !=ERR_NO_ERROR)
{
Print("Ошибка : " + err);
}
}
if(err ==ERR_NO_ERROR)
{
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}
Print("Ошибка открытия ордера после" + cnt + "попыток");
return(-1);
}
}
}
Начал писать обертку для функций открытия и модиффикафий ордеров (думал исправит мой проблемы с возвратом значения от этих операторов)а там такая же проблема.
Объясните уже в чем дело та? ( что бы не написал всегда проблема с возратом значений от ОрдерСенд,ОрдерСелекс и МодифиОрдер)
https://docs.mql4.com/ru/trading/ordermodify
OrderModify() возвращает да , нет
Не кто не может объяснить.
Попробуем по другом на примере, а не копированием справки по 100 раз мне.
Как должно быть правильно? я на примере пойму исправления
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(OrderStopLoss()!=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
неужели вставлять
"""ticket """= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0); каждый раз и есть правильно?
И Благодарю, всех кто пытался объяснить .
К сожалению я не понимаю как обозначить переменную переменной которая предопределена как функция.
И Благодарю, всех кто пытался объяснить .
К сожалению я не понимаю как обозначить переменную переменной которая предопределена как функция.
Уважаемый Leanid. Учитесь читать справку и работать с ошибками и предупреждениями. Если Вы не научитесь этого делать, то и программировать нормально не будете. Это основы. Вы пробовали перевести то, что написано в предупреждении? Вы понимаете смысл функций, которые "требуют проверки"? В справке описан корректный пример работы с данными функциями. Например, OrderModify(). Смотрим справку:
Возвращаемое значение
Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
и далее идет пример:
Как Вы видите, возвращаемое значение функции обрабатывается в операторе if-else. Переменная res не просто так "для красоты" нужна. Это результат выполнения торговой функции! Функции, от которой зависят Ваши деньги! Соответственно, чтобы максимально корректно обработать все возможные варианты (обработка в данном примере не представлена) и нужны переменная res и код ошибки, возвращаемый функцией GetLastError(). Разработчики специально включили предупреждения как напоминание, чтобы программисты не забывали, что есть "важные" функции, на обработку значений которых нужно обратить внимание! Также заметьте, если значение не проверить ошибки не будет! Т.е., в данном случае, функция итак будет работать, но, если произойдет нештатная ситуация, ее обработки не произойдет. Список нештатных ситуаций - коды возврата функции GetLastError().
Надеюсь, так понятнее.
Начал писать обертку для функций открытия и модиффикафий ордеров (думал исправит мой проблемы с возвратом значения от этих операторов)а там такая же проблема.
И в данном случае не нужно писать обертку. Она не решит проблем с предупреждением о проверке возвращаемого значения! Загляните в примеры этих функций и сделайте так же!
Как указано в справке дает ошибку.
Я написал так и нормально
if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))
{
Print("Модификация прошла успешно.");
}
else Print("Ошибка модификации ордера.");
Вставляйте код в сообщения правильно: Правильно вставляем код на форуме
Почему Тралинг не работает на продажу ? на покупку работает!
Ошибок и предупреждений нет , при генетической компиляции.
Вот код: