Отталкиваясь от информации, которая касается Стакана Цен в Справке, схема для теста будет выглядеть приблизительно так:
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
MarketBookAdd(_Symbol);
//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
MarketBookRelease(_Symbol);
}
//+------------------------------------------------------------------+//| OnBook Event |//+------------------------------------------------------------------+MqlBookInfo priceArray[];
//---voidOnBookEvent(conststring &symbol_name)
{
bool getBook=MarketBookGet(_Symbol,priceArray);
//---if(!getBook)
{
Print("Не удалось получить содержимое стакана по символу ",Symbol());
}
}
//+------------------------------------------------------------------+//| OnChart event handler |//+------------------------------------------------------------------+voidOnChartEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam)
{
double price_buy=0.0,price_sell=0.0;
//---
TRADE_EXEMODE=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_EXEMODE); // Узнаем тип исполнения//---if(TRADE_EXEMODE==SYMBOL_TRADE_EXECUTION_MARKET ||
TRADE_EXEMODE==SYMBOL_TRADE_EXECUTION_EXCHANGE)
{
mytrade.SetTypeFilling(ORDER_FILLING_IOC);
//---if(TRADE_EXEMODE==SYMBOL_TRADE_EXECUTION_EXCHANGE)
{
int size=ArraySize(priceArray);
//---for(int i=size-1; i>=0; i--)
{
if(priceArray[i].type==1)
{
price_buy=priceArray[i].price; // Получим ближайшую цену для BUY
price_sell=priceArray[i+1].price; // Получим ближайшую цену для SELL
//---break;
}
}
}
else
{
price_buy=mylast_tick.ask;
price_sell=mylast_tick.bid;
}
}
//---//... Далее следуют функции для совершения торговых операций
}
//---
Но при совершении торговых операций в журнал экспертов выводится сообщение, из которого видно, что хоть в запросе и была именно та цена, которая была в стакане цен ближайшая:
price_request=mytrade.RequestPrice();
в результате цены нет (0.000):
price_result=mytrade.ResultPrice();
, а торговая функция возвращает false:
//---
В журнале видим, что попытка открыть позицию была по нулевой цене:
, но позиция всё таки открывается по текущей цене.
//---
Если этой информации недостаточно, чтобы определить на чьей стороне ошибка, напишу в Сервисдеск.
Терминал не логинится к mql5 community. В настройках терминала ввожу логин и пароль, нажимаю ок и ничего не происходит. При повторном заходе в настройки логин сохраняется, а на месте пароля пусто. Из маркета ничего не скачивается. На форум захожу без проблем.
Отталкиваясь от информации, которая касается Стакана Цен в Справке, схема для теста будет выглядеть приблизительно так:
//---
Но при совершении торговых операций в журнал экспертов выводится сообщение, из которого видно, что хоть в запросе и была именно та цена, которая была в стакане цен ближайшая:
в результате цены нет (0.000):
, а торговая функция возвращает false:
//---
В журнале видим, что попытка открыть позицию была по нулевой цене:
, но позиция всё таки открывается по текущей цене.
//---
Если этой информации недостаточно, чтобы определить на чьей стороне ошибка, напишу в Сервисдеск.
Подскажите чайнику, пожалуйста, как снять отложенный ордер?
trReq.order=order_ticket;
trReq.type=TRADE_ACTION_REMOVE;
OrderSend(trReq,trRez);
У меня компилятор выдает : TRADE_ACTION_REMOVE can't convert enum
причем 2 раза про одну и ту же ошибку.
пробовал так же обнулять перед этим:
trReq.symbol =Symbol(); //NULL
trReq.magic =MAGIC; //0
trReq.volume =0.0;
trReq.type =0;
trReq.price =0.0;
trReq.sl =0.0;
trReq.tp =0.0;
trReq.type_time =0;
trReq.expiration=0;
не помогает. билд 597.
Дайте полный пример пожалуйста. Заранее благодарен.
...
Дайте полный пример пожалуйста. Заранее благодарен.
Полный пример есть в стандартной библиотеке. Функция OrderDelete(). Документация. Также там можно взять за основу функции для всех торговых операций.
А с какой целью обрезается строка при задании ее в качестве внешнего параметра?
input string - максимум 105 символов можно задать, если больше - справа обрезается.
build 597
подскажите, пжл, почему следующий код не находит соответствующего окна (проверял, окно с таким классом существует)
Похоже какая то ошибка в
При коде возврата 10008 (ордер размещен), данный метод возвращает false.
В итоге все же ордер исполняется.
Из за этого на демо счете было открыто более чем нужное количество ордеров.
и лог экспертов
Скажите когда могут быть ситуации когда рыночный ордер размещен на сервере но не исполнен (пусть даже частично)?Похоже какая то ошибка в
При коде возврата 10008 (ордер размещен), данный метод возвращает false.
В итоге все же ордер исполняется.
Из за этого на демо счете было открыто более чем нужное количество ордеров.
и лог экспертов
Скажите когда могут быть ситуации когда рыночный ордер размещен на сервере но не исполнен (пусть даже частично)?Эта же проблема описана в самом начале страницы. Вот здесь: https://www.mql5.com/ru/forum/1111/page679#comment_164002. Ответа пока не дали.
//---
Где у Вас открыт демо-счёт?
Эта же проблема описана в самом начале страницы. Вот здесь: https://www.mql5.com/ru/forum/1111/page679#comment_164002. Ответа пока не дали.
//---
Где у Вас открыт демо-счёт?
1. Поздно увидел эту ветку.
2. В А*****и
И вот это размещал в юморе на 4-ом форуме, но думаю и сюда нужно :
Сижу разбираю полеты эксперта (МТ5) и вот что в логах нашел
... Где ... в ДЦ ???Если в режим отладчика запустить этот код, то при закрытии окна графика (запущенного под отладчика) не срабатывает событие OnDeinit.
Сработает только, если щелкнуть на скрипте правой кнопкой и выбрать "удалить".