Скачать MetaTrader 5

Не пнятная прблема с ордерами на SELL

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Авторизуйся на MQL5.community с помощью OpenID. Это удобно!
Сергей
21
Сергей 2011.11.15 09:55 

 Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции SELL :) В определенном месте программы вызывается функция:

void Bulls_Open()

{

//order

MqlTradeRequest request; // структура запроса

MqlTradeResult result; // структура ответа

request.action=TRADE_ACTION_DEAL; // Тип выполняемого действия

request.symbol=symbol_global; // Имя торгового инструмента

request.volume=0.10;

request.sl=0; // Уровень Stop Loss ордера

request.tp=0; // Уровень Take Profit ордера

request.deviation=50; // Максимально приемлемое отклонение от запрашиваемой цены

request.type_filling=ORDER_FILLING_AON; // Тип ордера по исполнению

request.price=SymbolInfoDouble(symbol_global,SYMBOL_BID); //

request.type=ORDER_TYPE_BUY; // Тип ордера

//DEBUG & OPEN

bool fix=OrderSend(request,result);

if(!fix){

Print(GetLastError()," ",result.retcode);

}

}


void Bears_Open()

{

//order

MqlTradeRequest request; // структура запроса

MqlTradeResult result; // структура ответа

request.action=TRADE_ACTION_DEAL; // Тип выполняемого действия

request.symbol=symbol_global; // Имя торгового инструмента

request.volume=0.10;

request.sl=0; // Уровень Stop Loss ордера

request.tp=0; // Уровень Take Profit ордера

request.deviation=50; // Максимально приемлемое отклонение от запрашиваемой цены

request.type_filling=ORDER_FILLING_AON; // Тип ордера по исполнению

request.price=SymbolInfoDouble(symbol_global,SYMBOL_ASK); //

request.type=ORDER_TYPE_SELL; // Тип ордера

//DEBUG & OPEN

bool fix=OrderSend(request,result);

if(!fix){

Print(GetLastError()," ",result.retcode);

}

}


По существу, открыть ордер на BUY - проблем не вызывает, при открытии ордера на SELL: GetLastError() возвращает 4756, result.retcode возвращает 10013. Версия клиента: BT5 540й билд :) Удивляет больше всего то, что клиента я не обновлял, программный код данных функция я не модифицировал, что произошло разобраться не выходит, буду благодарен за помощь :)

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
Ilyas
1206
Ilyas 2011.11.15 13:15  
serega955:

 Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции SELL :) В определенном месте программы вызывается функция:


По существу, открыть ордер на BUY - проблем не вызывает, при открытии ордера на SELL: GetLastError() возвращает 4756, result.retcode возвращает 10013. Версия клиента: BT5 540й билд :) Удивляет больше всего то, что клиента я не обновлял, программный код данных функция я не модифицировал, что произошло разобраться не выходит, буду благодарен за помощь :)

Данный вопрос неоднократно уже поднимался после выхода 540 билда.

Инициализируйте все поля структуры MqlTradeRequest. Это можно сделать одним вызовом ZeroMemory(request).
Alexander Laur
7694
Alexander Laur 2011.11.15 16:53  
mql5:
Данный вопрос неоднократно уже поднимался после выхода 540 билда.

Инициализируйте все поля структуры MqlTradeRequest. Это можно сделать одним вызовом ZeroMemory(request).
Если структуры объявлены на глобальном уровне, то инициализацию делать один раз в OnInit()? Или при каждом вызове функции (в начале функции) в которой используются структуры?
Ilyas
1206
Ilyas 2011.11.15 19:06  
papaklass:
Если структуры объявлены на глобальном уровне, то инициализацию делать один раз в OnInit()? Или при каждом вызове функции (в начале функции) в которой используются структуры?
Да, для переменных на глобальном уровне ZeroMemory можно не вызывать. И инициализацию достаточно сделать один раз в OnInit.
Борис Смирнов
279
Борис Смирнов 2011.11.26 23:49  
serega955:

 Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции SELL :) В определенном месте программы вызывается функция:

void Bulls_Open()

{

//order

MqlTradeRequest request; // структура запроса

MqlTradeResult result; // структура ответа

request.action=TRADE_ACTION_DEAL; // Тип выполняемого действия

request.symbol=symbol_global; // Имя торгового инструмента

request.volume=0.10;

request.sl=0; // Уровень Stop Loss ордера

request.tp=0; // Уровень Take Profit ордера

request.deviation=50; // Максимально приемлемое отклонение от запрашиваемой цены

request.type_filling=ORDER_FILLING_AON; // Тип ордера по исполнению

request.price=SymbolInfoDouble(symbol_global,SYMBOL_BID); //

request.type=ORDER_TYPE_BUY; // Тип ордера

//DEBUG & OPEN

bool fix=OrderSend(request,result);

if(!fix){

Print(GetLastError()," ",result.retcode);

}

}

void Bears_Open()

{

//order

MqlTradeRequest request; // структура запроса

MqlTradeResult result; // структура ответа

request.action=TRADE_ACTION_DEAL; // Тип выполняемого действия

request.symbol=symbol_global; // Имя торгового инструмента

request.volume=0.10;

request.sl=0; // Уровень Stop Loss ордера

request.tp=0; // Уровень Take Profit ордера

request.deviation=50; // Максимально приемлемое отклонение от запрашиваемой цены

request.type_filling=ORDER_FILLING_AON; // Тип ордера по исполнению

request.price=SymbolInfoDouble(symbol_global,SYMBOL_ASK); //

request.type=ORDER_TYPE_SELL; // Тип ордера

//DEBUG & OPEN

bool fix=OrderSend(request,result);

if(!fix){

Print(GetLastError()," ",result.retcode);

}

}

По существу, открыть ордер на BUY - проблем не вызывает, при открытии ордера на SELL: GetLastError() возвращает 4756, result.retcode возвращает 10013. Версия клиента: BT5 540й билд :) Удивляет больше всего то, что клиента я не обновлял, программный код данных функция я не модифицировал, что произошло разобраться не выходит, буду благодарен за помощь :)

Вы уж простите, а что у Вас с русским языком?? это такой стиль изложения или вы просто не грамотный? Вы не соблюдаете элементарые правила в написании слов и составлении предложений

Gennady Mazur
5488
Gennady Mazur 2011.12.01 16:05  

Помогите, пожалуйста, или объясните в чем дело.

на демосчете советник работает как часы и на Бай и на Селл, а в тестере выдает ошибку запроса

я в своей библиотеке описал свой запрос на открытие ордера, как мне удобно и понятно

 bool Trade::OpenOrder(string symbol,string typeorder,double price,double volume,ulong deviation=50,double sl=0,double tp=0,ulong magic=0)

{

   bool in=false;

   if(magic==0) magic=7777;

   if(typeorder=="" || symbol=="" || price==0 || volume==0)

   {

      Print("Не указаны параметры ордера");

      return(in);

   }

   else

   {

      MqlTradeRequest request;

      if(typeorder=="BUY") request.type=ORDER_TYPE_BUY;

      if(typeorder=="SELL") request.type=ORDER_TYPE_SELL;

      request.price=price;

      request.action=TRADE_ACTION_DEAL;

      request.magic=magic;

      request.symbol=symbol;

      request.volume=volume;

      request.sl=sl;

      request.tp=tp;

      request.deviation=deviation;  

      request.comment="";

      MqlTradeResult result;

      OrderSend(request,result);

      if (result.retcode == TRADE_RETCODE_DONE) in=true;

      else Print(result.retcode," ",request.price," ",request.sl," ",request.tp);

      return(in);

   }

}

Советник у меня использует наследование от того класса, поэтому из него запрос у меня выглядит так

 G_Symbol определен при инициализации

 type="BUY"

 price цена Аск

 Lots   0.1

 ......................

OpenOrder(G_Symbol,type,price,Lots);

 на демо позиция открывается, а в тестере пишет вот такое

 2011.12.01 13:18:46 2010.01.29 00:00:52   10013 1.386 0 0

2011.12.01 13:18:46 2010.01.29 00:00:52   failed market buy 0.10 EURUSD [Invalid request]

 

 2011.12.01 14:14:40 Core 1 2011.04.18 18:07:46   10013 1.42278 0 0

2011.12.01 14:14:40 Core 1 2011.04.18 18:07:46   failed instant sell 0.10 EURUSD at 1.42278 [Invalid request]


и результат, не могу протестировать стратегию

Может что с тестером случилось, потому как ранее проблем не было, и я свой модуль не менял уже минимум пол года 

У меня 540 билд и похоже что это случилось после обновления на него.
31337
95
31337 2011.12.01 17:30  
Какой смысл вообще писать экспы под пятёрку, если замки нельзя открывать?
Nikolay Demko
12465
Nikolay Demko 2011.12.01 17:46  
31337:
Какой смысл вообще писать экспы под пятёрку, если замки нельзя открывать?
:)) какой смысл ставить замки если они запрещены?
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий