OrderSend() 질문 - 페이지 3

 
komposter :

MT5의 주문 회계는 전체 과학입니다. OnTrade() 함수를 사용하여 Expert Advisor에서 거래 이벤트 처리

일시 중지가 없으면 다시 열지 않아도 되며 주문이 1초 더 오래 실행되는 상황이 항상 있을 수 있습니다.

추신: 그리고 마법을 잊지 마세요.

공범자?

어떤 과학도 글로벌 메타 의 음모에서 당신을 구할 수 없습니다                                                                                                               

무관심.

시험을 마친

 
her.human :
게시 하기 전에 생각하는 것이 좋은 스타일로 간주됩니다.
 

불행히도 MT5에는 MT4보다 훨씬 더 많은 트랩이 있습니다.

OrderSend ()가 성공적으로 실행된 후 데이터 업데이트가 지연되는 문제는 다음 예제의 맨 마지막 줄에서 해결되었습니다.

 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 );}}   

업데이트 기능:

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

모든 작업을 유지


 //+------------------------------------------------------------------+
//|                                                         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;
  }
//+------------------------------------------------------------------+

이 멋진 코드에서 모든 것이 훌륭하게 작동했습니다.

그러나 프로그래밍 언어에 변화가 있었습니다.

mql5에서 제거됨

 ORDER_FILLING_AON ;

그리고 지금 컴파일은 이 시점에서 작동하지 않습니다.

지금 구조를 올바르게 채우는 방법을 알려주시겠습니까?

 // заполняем структуру
   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 :

이 멋진 코드에서 모든 것이 훌륭하게 작동했습니다.

그러나 프로그래밍 언어에 변화가 있었습니다.

mql5에서 제거됨

답은 여기에 있습니다 - https://www.mql5.com/en/forum/6343/page8#comment_189991 . 예, 그들은이 순간을 날려 버렸고 어떤 이유로 발표에서 발표하지 않았습니다.
 

고마워, 로쉬!

하지만. 나는 "우리는 우리가 가진 것을 가져갑니다"로 변경했습니다. 나는 일어날 것 같지 않은 공격적인 쿠데타를 가지고 있습니다.

사실, 개발자가 러시아어 또는 수입 필사본의 기본 약어를 의미하는 도구가 흥미 롭습니까?

그냥 궁금해서, 2가지 옵션이 구두로 어떤 의미였나요?

 
awkozlov :

그냥 궁금해서, 2가지 옵션이 구두로 어떤 의미였나요?

  • ORDER_FILLING_AON - 지정된 수량만큼만 주문에 지정된 가격 이상으로 거래가 가능합니다. 시장에 현재 주문의 상징에 대한 충분한 양의 제안이 없으면 주문이 실행되지 않습니다.
  • ORDER_FILLING_CANCEL - 주문에 지정된 한도 내에서 지정된 가격과 같거나 더 나은 가격으로 시장에서 사용할 수 있는 최대 수량에 대해 거래하는 데 동의합니다. 동시에 누락된 수량에 대한 추가 주문은 하지 않습니다.
  •  

    시장 주문에 대해 ORDER_FILLING_FOK 및 ORDER_FILLING_IOC라는 두 가지 채우기 정책 을 가질 수 있으므로 다음과 같이 거래 요청의 request.type_filling 필드를 채우는 것이 얼마나 정확합니까?

    request.type_filling= ORDER_FILLING_FOK | ORDER_FILLING_IOC
    컴파일러는 암시적 열거형 변환이라는 경고만 발행합니다. 브로커/딜러가 설정한 실행 정책과 상관없이 요청이 올바르게 처리되는 것으로 충분합니까?
     
    Yedelkin :
    컴파일러는 암시적 열거형 변환이라는 경고만 발행합니다. 브로커/딜러가 설정한 실행 정책과 상관없이 요청이 올바르게 처리되는 것으로 충분합니까?

    그것은 "우유가 든 블랙 커피"와 같습니다. 두 가지 상호 배타적인 정책입니다. 다음은 영어로 된 링크입니다.

    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 :

    시장 주문에 대해 ORDER_FILLING_FOK 및 ORDER_FILLING_IOC 라는 두 가지 채우기 정책 을 가질 수 있으므로

    즉, 두 가지 옵션 중에서 선택할 수 있습니다.