Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции SELL :) В определенном месте программы вызывается функция:
По существу, открыть ордер на BUY - проблем не вызывает, при открытии ордера на SELL: GetLastError() возвращает 4756, result.retcode возвращает 10013. Версия клиента: BT5 540й билд :) Удивляет больше всего то, что клиента я не обновлял, программный код данных функция я не модифицировал, что произошло разобраться не выходит, буду благодарен за помощь :)
Инициализируйте все поля структуры MqlTradeRequest. Это можно сделать одним вызовом ZeroMemory(request).
Если структуры объявлены на глобальном уровне, то инициализацию делать один раз в OnInit()? Или при каждом вызове функции (в начале функции) в которой используются структуры?
Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции 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]
и результат, не могу протестировать стратегию
Может что с тестером случилось, потому как ранее проблем не было, и я свой модуль не менял уже минимум пол года
Какой смысл вообще писать экспы под пятёрку, если замки нельзя открывать?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть несколько простых советников, которые я написал, в какой-то момент в них перестала работать функция, открывающая позиции 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й билд :) Удивляет больше всего то, что клиента я не обновлял, программный код данных функция я не модифицировал, что произошло разобраться не выходит, буду благодарен за помощь :)