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

 

 Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции 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
 
serega955:

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


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

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

Инициализируйте все поля структуры MqlTradeRequest. Это можно сделать одним вызовом ZeroMemory(request).
 
papaklass:
Если структуры объявлены на глобальном уровне, то инициализацию делать один раз в OnInit()? Или при каждом вызове функции (в начале функции) в которой используются структуры?
Да, для переменных на глобальном уровне ZeroMemory можно не вызывать. И инициализацию достаточно сделать один раз в OnInit.
 
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й билд :) Удивляет больше всего то, что клиента я не обновлял, программный код данных функция я не модифицировал, что произошло разобраться не выходит, буду благодарен за помощь :)

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

 

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

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

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

 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:
Какой смысл вообще писать экспы под пятёрку, если замки нельзя открывать?
:)) какой смысл ставить замки если они запрещены?