OrderSend() Soruları - sayfa 3

 
komposter :

MT5'te sipariş muhasebesi tam bir bilimdir: OnTrade() işlevini kullanarak bir Uzman Danışmanda ticaret olaylarını işlemek

Hiçbir duraklama sizi yeniden açılmaktan kurtaramaz, her zaman emrin 1 saniye daha yürütüleceği bir durum olabilir.

ps: ve sihri unutma.

Suç ortağı mı?

Hiçbir bilim sizi küresel metanın entrikalarından kurtaramaz.                                                                                                               

kayıtsızlık.

sınanmış

 
her.human :
Göndermeden önce düşünmek iyi bir tarz olarak kabul edilir.
 

Ne yazık ki, MT5'in MT4'ten çok daha fazla tuzağı var.

OrderSend () işleminin başarılı bir şekilde yürütülmesinden sonra verilerin güncellenmesindeki gecikme ile ilgili sorun, aşağıdaki örneğin en son satırında çözülmüştür:

 MqlTradeRequest request;
MqlTradeResult result;
...
OrderSend (request,result);
...
Ticket= false ;
Error==result.retcode;
if (Error== 10008 || Error== 10009 ){Ticket= true ;}
...
if (Ticket== true ){ while (! HistoryDealSelect (result.deal)){RefreshRates(); Sleep ( 1 );}}   

Güncelleme işlevi:

 bool RefreshRates()
  {
   MqlTick tick;
   return ( SymbolInfoTick ( Symbol (),tick));
  }
 
sergey1294 :

her şeyi çalışır durumda tut


 //+------------------------------------------------------------------+
//|                                                         Deal.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetTimer ( 1 );

//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---

   if (zOrderSend( _Symbol , 0.1 , ORDER_TYPE_BUY )== 10009 ) // 10009 TRADE_RETCODE_DONE Заявка выполнена
     {
       Alert ( "Купили!" );
     }
   else Alert ( "Не купили...." );
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---

  }
//+------------------------------------------------------------------+
uint zOrderSend( string zSymbol, double zVolume, ENUM_ORDER_TYPE zORDER_TYPE)
  {
   MqlTradeRequest       request;
   MqlTradeCheckResult   ch_result;
   MqlTradeResult        result;

// обнулим структуру запроса перед заполнением
   ZeroMemory (request);

   Alert ( "*****************" ,zSymbol, " " ,zVolume, " " ,zORDER_TYPE);
// заполняем структуру
   request.action= TRADE_ACTION_DEAL ;
   request.type_filling= ORDER_FILLING_AON ;
   request.symbol=zSymbol;
   request.type=zORDER_TYPE;
   request.deviation= 30 ;
   request.sl= 0.0 ;
   request.tp= 0.0 ;
   request.volume=zVolume;
   if (zORDER_TYPE== ORDER_TYPE_BUY )request.price= NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits );
   if (zORDER_TYPE== ORDER_TYPE_SELL )request.price= NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits );

// выводим на печать заполненную структуру торгового запроса
   Alert ( "   ENUM_TRADE_REQUEST_ACTIONS    request.action;           // Тип выполняемого действия                                     =" ,request.action, "=" );
   Alert ( "   ulong                         request.magic;            // Штамп эксперта (идентификатор magic number)                   =" , request.magic,         "=" );
   Alert ( "   ulong                         request.order;            // Тикет ордера                                                  =" , request.order,         "=" );
   Alert ( "   string                        request.symbol;           // Имя торгового инструмента                                     =" , request.symbol,         "=" );
   Alert ( "   double                        request.volume;           // Запрашиваемый объем сделки в лотах                            =" , request.volume,         "=" );
   Alert ( "   double                        request.price;            // Цена                                                          =" , request.price,         "=" );
   Alert ( "   double                        request.stoplimit;        // Уровень StopLimit ордера                                      =" , request.stoplimit,     "=" );
   Alert ( "   double                        request.sl;               // Уровень Stop Loss ордера                                      =" , request.sl,             "=" );
   Alert ( "   double                        request.tp;               // Уровень Take Profit ордера                                    =" , request.tp,             "=" );
   Alert ( "   ulong                         request.deviation;        // Максимально приемлемое отклонение от запрашиваемой цены       =" , request.deviation,     "=" );
   Alert ( "   ENUM_ORDER_TYPE               request.type;             // Тип ордера                                                    =" , request.type,           "=" );
   Alert ( "   ENUM_ORDER_TYPE_FILLING       request.type_filling;     // Тип ордера по исполнению                                      =" , request.type_filling,   "=" );
   Alert ( "   ENUM_ORDER_TYPE_TIME          request.type_time;        // Тип ордера по времени действия                                =" , request.type_time,     "=" );
   Alert ( "   datetime                      request.expiration;       // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED) =" , request.expiration,     "=" );
   Alert ( "   string                        request.comment;          // Комментарий к ордеру                                          =" , request.comment,       "=" );

// отправляем структуру запроса на проверку
   if ( OrderCheck (request,ch_result)== false )
     {
       Alert ( "OrderCheck выявил ошибку: " + IntegerToString (ch_result.retcode)+ "/" +ch_result.comment);
       return ch_result.retcode;
     }
// отправляем запрос на торговый сервер
   if ( OrderSend (request,result)== false )
     {
       Alert ( "OrderSend возвратил ошибку: " + IntegerToString (result.retcode)+ "/" +result.comment);
       return result.retcode;
     }
// выводим на печать структуру ответа сервера
   Alert ( "Код результата операции сервера: " + IntegerToString (result.retcode));
   Alert ( "deal Тикет сделки "                 + IntegerToString (result.deal));
   Alert ( "order Тикет ордера "                + IntegerToString (result.order));
   Alert ( "volume Объем сделки "               + DoubleToString (result.volume));
   Alert ( "price Цена в сделке "               + DoubleToString (result.price));
   Alert ( "bid(цены реквоты) "                 + DoubleToString (result.bid));
   Alert ( "ask(цены реквоты) "                 + DoubleToString (result.ask));
   Alert ( "Комментарий: " +result.comment);

   return result.retcode;
  }
//+------------------------------------------------------------------+

Bu harika kodda - her şey harika çalıştı,

ancak programlama dilinde değişiklikler oldu.

mql5'ten kaldırıldı

 ORDER_FILLING_AON ;

Ve şimdi derleme bu noktada çalışmıyor.

Lütfen şimdi yapıyı nasıl doğru bir şekilde dolduracağımı söyler misiniz?

 // заполняем структуру
   request.action= TRADE_ACTION_DEAL ;
   request.type_filling= ORDER_FILLING_AON ;
   request.symbol=zSymbol;
   request.type=zORDER_TYPE;
   request.deviation= 30 ;
   request.sl= 0.0 ;
   request.tp= 0.0 ;
   request.volume=zVolume;
   if (zORDER_TYPE== ORDER_TYPE_BUY )request.price= NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits );
   if (zORDER_TYPE== ORDER_TYPE_SELL )request.price= NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits );
 
awkozlov :

Bu harika kodda - her şey harika çalıştı,

ancak programlama dilinde değişiklikler oldu.

mql5'ten kaldırıldı

Cevap burada - https://www.mql5.com/en/forum/6343/page8#comment_189991 . Evet bu anı patlattılar ve nedense duyurularda duyurmadılar.
 

Teşekkürler, Rosh!

Rağmen. Değiştirdim - "sahip olduğumuz şeyi alıyoruz", çünkü Olması muhtemel olmayan agresif bir darbe var.

Geliştiricilerin Rusça veya ithal transkripsiyondaki birincil kısaltmalarla hangi araçları kastettikleri gerçekten ilginç?

Sadece meraktan soruyorum, 2 seçenek sözlü olarak nasıldı?

 
awkozlov :

Sadece meraktan soruyorum, 2 seçenek sözlü olarak ne anlama geliyordu?

  • ORDER_FILLING_AON - Sadece belirtilen hacimde ve siparişte belirtilene eşit veya daha iyi bir fiyatla işlem yapılabilir. Piyasada şu anda emrin sembolü için yeterli miktarda teklif yoksa, emir gerçekleştirilmeyecektir.
  • ORDER_FILLING_CANCEL - Piyasadaki maksimum hacimde, emirde belirtilen limitler dahilinde ve belirtilen fiyata eşit veya daha iyi bir fiyatla işlem yapmayı kabul edin. Aynı zamanda, eksik hacim için ek siparişler verilmez.
  •  

    Bir piyasa emri için ORDER_FILLING_FOK ve ORDER_FILLING_IOC olmak üzere iki doldurma politikamız olabileceğinden, işlem talebinde request.type_filling alanını aşağıdaki gibi doldurmak ne kadar doğru:

    request.type_filling= ORDER_FILLING_FOK | ORDER_FILLING_IOC
    Derleyici yalnızca bir uyarı verir: örtük enum dönüştürme. Aracı/bayi tarafından belirlenen yürütme ilkesinden bağımsız olarak isteğin doğru bir şekilde işlenmesi için yeterli mi?
     
    Yedelkin :
    Derleyici yalnızca bir uyarı verir: örtük enum dönüştürme. Aracı/bayi tarafından belirlenen yürütme ilkesinden bağımsız olarak isteğin doğru bir şekilde işlenmesi için yeterli mi?

    "Sütlü sade kahve" gibi - birbirini dışlayan iki politika. İşte size İngilizce linkler:

    Fill Or Kill (FOK) Definition | Investopedia
    Fill Or Kill (FOK) Definition | Investopedia
    • www.investopedia.com
    A type of time-in-force designation used in securities trading that instructs a brokerage to execute a transaction immediately and completely or not at all. This type of order is most likely to be used by active traders and is usually for a large quantity of stock. The order must be filled in its entirety or canceled (killed). The purpose of a...
     
    Yedelkin :

    Bir piyasa emri için iki doldurma politikamız olabileceğinden, ORDER_FILLING_FOK ve ORDER_FILLING_IOC,

    Bu, iki seçenek arasından seçim yapabileceğiniz anlamına gelir.
    Neden: