Ошибки, баги, вопросы - страница 668

 

Если ориентироваться на цвета в Стакане цен, то похоже, что есть путаница. 

 

//--- 

Кнопка Buy синего цвета. Поэтому и цены, по которым можно выставить заявку тоже должны быть синего цвета. Сейчас всё наоборот и нужно прилагать усилия, чтобы к этому привыкнуть и навряд ли получится. Это психологический нюанс. )))

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен - Документация по MQL5
 

Отталкиваясь от информации, которая касается Стакана Цен в Справке, схема для теста будет выглядеть приблизительно так:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   MarketBookAdd(_Symbol);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   MarketBookRelease(_Symbol);
  }
//+------------------------------------------------------------------+
//| OnBook Event                                                     |
//+------------------------------------------------------------------+
MqlBookInfo priceArray[];
//---
void OnBookEvent(const string &symbol_name)
  {
   bool getBook=MarketBookGet(_Symbol,priceArray);
//---
   if(!getBook)
     {
      Print("Не удалось получить содержимое стакана по символу ",Symbol());
     }
  }
//+------------------------------------------------------------------+
//| OnChart event handler                                            |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &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:

//---

В журнале видим, что попытка открыть позицию была по нулевой цене:

 

, но позиция всё таки открывается по текущей цене.

//---

Если этой информации недостаточно, чтобы определить на чьей стороне ошибка, напишу в Сервисдеск. 

 

Подскажите чайнику, пожалуйста, как снять отложенный ордер?

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.

Дайте полный пример пожалуйста. Заранее благодарен. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
stroka:
...

Дайте полный пример пожалуйста. Заранее благодарен. 

Полный пример есть в стандартной библиотеке. Функция OrderDelete(). Документация. Также там можно взять за основу функции для всех торговых операций.

//+------------------------------------------------------------------+
//| Delete specified pending order.                                  |
//| INPUT:  ticket - ticket of order for delete.                     |
//| OUTPUT: true-if successful, false otherwise.                     |
//| REMARK: no.                                                      |
//+------------------------------------------------------------------+
bool CTrade::OrderDelete(ulong ticket)
  {
//--- variables
   string action,result;
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action    =TRADE_ACTION_REMOVE;
   m_request.order     =ticket;
//--- order check
   if(!OrderCheck(m_request,m_check_result))
     {
      //--- copy return code
      m_result.retcode=m_check_result.retcode;
      if(m_log_level>LOG_LEVEL_NO)
         printf(__FUNCTION__+": %s [%s]",FormatRequest(action,m_request),FormatRequestResult(result,m_request,m_result));
      return(false);
     }
//--- order send
   if(!OrderSend(m_request,m_result))
     {
      if(m_log_level>LOG_LEVEL_NO)
         printf(__FUNCTION__+": %s [%s]",FormatRequest(action,m_request),FormatRequestResult(result,m_request,m_result));
      return(false);
     }
   if(m_log_level>LOG_LEVEL_ERRORS)
      printf(__FUNCTION__+": %s [%s]",FormatRequest(action,m_request),FormatRequestResult(result,m_request,m_result));
//--- ok
   return(true);
  }
 
Терминал не логинится к mql5 community. В настройках терминала ввожу логин и пароль, нажимаю ок и ничего не происходит. При повторном заходе в настройки логин сохраняется, а на месте пароля пусто. Из маркета ничего не скачивается. На форум захожу без проблем.
 
Dima_S:

А с какой целью обрезается строка при задании ее в качестве внешнего параметра?

input string - максимум 105 символов можно задать, если больше - справа обрезается.

build 597

buid 607 - проблема та же.
 

подскажите, пжл, почему следующий код не находит соответствующего окна (проверял, окно с таким классом существует)

 

#import "user32.dll"
   int FindWindowA(string &lpClassName, string &lpWindowName);
#import

string FormClass="TMyMainForm";
string FormName="";
int hnd = FindWindowA(FormClass,FormName);
if (hnd==0) printf("not found");
else printf("found");
 

Похоже какая то ошибка в

//+------------------------------------------------------------------+
//| Open position.                                                   |
//| INPUT:  symbol     -symbol for trade,                            |
//|         order_type -direct for open,                             |
//|         volume     -volume of position,                          |
//|         price      -price for open,                              |
//|         stop       -price of stop loss,                          |
//|         take       -price of take profit,                        |
//|         comment    -comment of position.                         |
//| OUTPUT: true-if successful, false otherwise.                     |
//| REMARK: no.                                                      |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,ENUM_ORDER_TYPE order_type,double volume,
                          double price,double sl,double tp,const string comment)

При коде возврата 10008 (ордер размещен), данный метод возвращает false.

В итоге все же ордер исполняется.

Из за этого на демо счете было открыто более чем нужное количество ордеров.

RQ      0       Trades  14:00:18        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
IO      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
MH      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MQ      0       Trades  14:00:18        '3119321' : deal #2888080 buy 0.10 USDCHF at 0.91144 done (based on order #4880065)
NL      0       Trades  14:00:18        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
MK      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
IS      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MN      0       Trades  14:00:19        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
NE      0       Trades  14:00:19        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
JQ      0       Trades  14:00:19        '3119321' : exchange buy 0.10 USDCHF at 0.00000
PJ      0       Trades  14:00:19        '3119321' : deal #2888081 buy 0.10 USDCHF at 0.91144 done (based on order #4880066)
KG      0       Trades  14:00:20        '3119321' : deal #2888082 buy 0.10 USDCHF at 0.91145 done (based on order #4880067)
KF      0       Trades  14:00:20        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
LM      0       Trades  14:00:20        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
HJ      0       Trades  14:00:20        '3119321' : exchange buy 0.10 USDCHF at 0.00000
DR      0       Trades  14:00:20        '3119321' : deal #2888083 buy 0.10 USDCHF at 0.91146 done (based on order #4880068)
HR      0       Trades  14:00:21        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
OJ      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
CE      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MN      0       Trades  14:00:21        '3119321' : deal #2888084 buy 0.10 USDCHF at 0.91146 done (based on order #4880069)
DI      0       Trades  14:00:21        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
CF      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
OP      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000
GI      0       Trades  14:00:22        '3119321' : deal #2888085 buy 0.10 USDCHF at 0.91146 done (based on order #4880070)
QD      0       Trades  14:00:22        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
JS      0       Trades  14:00:22        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
NK      0       Trades  14:00:22        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MD      0       Trades  14:00:22        '3119321' : deal #2888086 buy 0.10 USDCHF at 0.91146 done (based on order #4880071)
NS      0       Trades  14:00:23        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
MH      0       Trades  14:00:23        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
IG      0       Trades  14:00:23        '3119321' : exchange buy 0.10 USDCHF at 0.00000
....

и лог экспертов

(EURUSD,H1)     14:00:18        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:18        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:19        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:20        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:21        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:21        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:22        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:23        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:23        CTrade::PositionOpen:  [placed]
....

Скажите когда могут быть ситуации когда рыночный ордер размещен на сервере но не исполнен (пусть даже частично)?
Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Торговые функции / OrdersTotal - Документация по MQL5
 
olyakish:

Похоже какая то ошибка в

При коде возврата 10008 (ордер размещен), данный метод возвращает false.

В итоге все же ордер исполняется.

Из за этого на демо счете было открыто более чем нужное количество ордеров.

и лог экспертов

Скажите когда могут быть ситуации когда рыночный ордер размещен на сервере но не исполнен (пусть даже частично)?

Эта же проблема описана в самом начале страницы. Вот здесь: https://www.mql5.com/ru/forum/1111/page679#comment_164002.  Ответа пока не дали. 

//--- 

Где у Вас открыт демо-счёт?  

 
tol64:

Эта же проблема описана в самом начале страницы. Вот здесь: https://www.mql5.com/ru/forum/1111/page679#comment_164002.  Ответа пока не дали. 

//--- 

Где у Вас открыт демо-счёт?  

1. Поздно увидел эту ветку.

2. В А*****и

И вот это размещал в юморе на 4-ом форуме, но думаю и сюда нужно :

Сижу разбираю полеты эксперта (МТ5) и вот что в логах нашел

.....(EURUSD,H1)        16:43:16        CTrade::PositionClose:  [not enough money]
... Где ... в ДЦ ???
Причина обращения: