오류, 버그, 질문 - 페이지 1740

 
대체 그게 뭐야?!
2016.10 . 20 15 : 40 : 44      Tester  MQL5 Cloud Server "4.agents.mql5.com:443" not found
2016.10 . 20 15 : 40 : 41      Core 1   connection closed
2016.10 . 20 15 : 40 : 16      History nothing to analyze

2016.10 . 20 15 : 40 : 16      Core 1   common synchronization completed
2016.10 . 20 15 : 40 : 16      Tester  RTS- 12.16 ,M1 (BCS-MetaTrader5): visual testing of Experts\fxsaber\Test9.ex5 from 2016.10 . 19 00 : 00 to 2016.10 . 20 00 : 00
2016.10 . 20 15 : 40 : 16      Core 1   authorized (agent build 1455 )
2016.10 . 20 15 : 40 : 16      Core 1   connected
2016.10 . 20 15 : 40 : 16      Core 1   connecting to 127.0 . 0.1 : 3000

글쎄, 갑자기 기록이 없다면 어떤 이유로 한 번의 실행에 28(25 + 3)초가 걸리나요? 예, 그는 클라우드에 대해 이야기하고 있습니다!

이것은 내가 안전하게 잊어 버린 시각화 창을 연 상태에서 발생했습니다. 불분명하다.

 
Alexey Kozitsyn :
테스터에서 경주하지 않았습니다.
표준 라이브러리를 공부하고 테스트 고문을 작성했습니다.
#define SLTP ( 10 * _Point )

#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>

// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order( const double Price )
{
  CTrade Trade;
  
   if (( ENUM_SYMBOL_TRADE_EXECUTION ):: SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_EXEMODE ) == SYMBOL_TRADE_EXECUTION_EXCHANGE )
    Trade.SetTypeFilling( ORDER_FILLING_RETURN );

  Trade.OrderOpen( _Symbol , ORDER_TYPE_SELL_LIMIT , 1 , 0 , Price, 0 , 0 , ORDER_TIME_GTC , 0 , __FUNCTION__ );

   const ulong Ticket = Trade.ResultOrder();
  
   if (Ticket > 0 )
  {
    COrderInfo Order;
    
     if (Order.Select(Ticket))
      Trade. OrderModify (Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
  }      
}

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

// Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT4Order( const double Price )
{
   const int Ticket = OrderSend ( _Symbol , OP_SELLLIMIT , 1 , Price, 0 , 0 , 0 , __FUNCTION__ );
  
   if ((Ticket > 0 ) && OrderSelect (Ticket, SELECT_BY_TICKET ))
     OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice () + SLTP, OrderOpenPrice () - SLTP, OrderExpiration (), clrNONE );
}

void OnTick ()
{
   static bool FirstRun = true ;
  
   if (FirstRun)
  {
     const double Price = SymbolInfoDouble ( _Symbol , SYMBOL_BID ) + 100 * _Point ;
    
    MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
    MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
    
    FirstRun = false ;
  }
}

결과(상향식)
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    order modified [ # 3 sell limit 1.00 RTS- 12.16 at 100 ]
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    sell limit 1.00 RTS- 12.16 at 100 ( 0 / 0 / 97600 )
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    CTrade:: OrderSend : modify # 2 at 100.00000 (sl: 110.00000 tp: 90.00000 ) [invalid fill]
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    failed modify order # 2 sell limit 1.00   at 100.00000 sl: 0.00000 tp: 0.00000 -> 100.00000 , sl: 110.00000 tp: 90.00000 [Unsupported filling mode]
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    CTrade:: OrderSend : sell limit 1.00 RTS- 12.16 at 100 [done]
2016.10 . 20 16 : 49 : 14.986 2016.10 . 18 10 : 00 : 00    sell limit 1.00 RTS- 12.16 at 100 ( 0 / 0 / 97600 )
2016.10 . 20 16 : 49 : 14.985 RTS- 12.16 : real ticks begin from 2016.10 . 18 00 : 00 : 00
SB의 오류는 굵게 강조 표시됩니다. 동시에 MT4Order 및 MT5Order 함수의 코드를 비교할 수 있습니다.
 
fxsaber :
표준 라이브러리를 공부하고 테스트 고문을 작성했습니다.
#define SLTP ( 10 * _Point )

#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>

// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order( const double Price )
{
  CTrade Trade;
  
   if (( ENUM_SYMBOL_TRADE_EXECUTION ):: SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_EXEMODE ) == SYMBOL_TRADE_EXECUTION_EXCHANGE )
    Trade.SetTypeFilling( ORDER_FILLING_RETURN );

  Trade.OrderOpen( _Symbol , ORDER_TYPE_SELL_LIMIT , 1 , 0 , Price, 0 , 0 , ORDER_TIME_GTC , 0 , __FUNCTION__ );

   const ulong Ticket = Trade.ResultOrder();
  
   if (Ticket > 0 )
  {
    COrderInfo Order;
    
     if (Order.Select(Ticket))
      Trade. OrderModify (Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
  }      
}

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

// Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT4Order( const double Price )
{
   const int Ticket = OrderSend ( _Symbol , OP_SELLLIMIT , 1 , Price, 0 , 0 , 0 , __FUNCTION__ );
  
   if ((Ticket > 0 ) && OrderSelect (Ticket, SELECT_BY_TICKET ))
     OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice () + SLTP, OrderOpenPrice () - SLTP, OrderExpiration (), clrNONE );
}

void OnTick ()
{
   static bool FirstRun = true ;
  
   if (FirstRun)
  {
     const double Price = SymbolInfoDouble ( _Symbol , SYMBOL_BID ) + 100 * _Point ;
    
    MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
    MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)
    
    FirstRun = false ;
  }
}

결과(상향식)
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    order modified [ # 3 sell limit 1.00 RTS- 12.16 at 100 ]
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    sell limit 1.00 RTS- 12.16 at 100 ( 0 / 0 / 97600 )
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    CTrade:: OrderSend : modify # 2 at 100.00000 (sl: 110.00000 tp: 90.00000 ) [invalid fill]
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    failed modify order # 2 sell limit 1.00   at 100.00000 sl: 0.00000 tp: 0.00000 -> 100.00000 , sl: 110.00000 tp: 90.00000 [Unsupported filling mode]
2016.10 . 20 16 : 49 : 14.987 2016.10 . 18 10 : 00 : 00    CTrade:: OrderSend : sell limit 1.00 RTS- 12.16 at 100 [done]
2016.10 . 20 16 : 49 : 14.986 2016.10 . 18 10 : 00 : 00    sell limit 1.00 RTS- 12.16 at 100 ( 0 / 0 / 97600 )
2016.10 . 20 16 : 49 : 14.985 RTS- 12.16 : real ticks begin from 2016.10 . 18 00 : 00 : 00
SB의 오류는 굵게 강조 표시됩니다. 동시에 MT4Order 및 MT5Order 함수의 코드를 비교할 수 있습니다.

집에서 코드를 실행했습니다(MT4 제외).

2016.10 . 20 19 : 05 : 31.150 2016.09 . 16 10 : 00 : 00    order performed buy 1.00 at 96500 [ # 3 buy 1.00 RTS- 12.16 at 110 ]
2016.10 . 20 19 : 05 : 31.150 2016.09 . 16 10 : 00 : 00    deal performed [ # 3 buy 1.00 RTS- 12.16 at 96500 ]
2016.10 . 20 19 : 05 : 31.150 2016.09 . 16 10 : 00 : 00    deal # 3 buy 1.00 RTS- 12.16 at 96500 done (based on order # 3 )
2016.10 . 20 19 : 05 : 31.150 2016.09 . 16 10 : 00 : 00    stop loss triggered # 2 sell 1.00 RTS- 12.16 100 sl: 110 tp: 90 [ # 3 buy 1.00 RTS- 12.16 at 110 ]
2016.10 . 20 19 : 05 : 31.148 2016.09 . 16 10 : 00 : 00    order performed sell 1.00 at 100 [ # 2 sell limit 1.00 RTS- 12.16 at 100 ]
2016.10 . 20 19 : 05 : 31.148 2016.09 . 16 10 : 00 : 00    deal performed [ # 2 sell 1.00 RTS- 12.16 at 100 ]
2016.10 . 20 19 : 05 : 31.148 2016.09 . 16 10 : 00 : 00    deal # 2 sell 1.00 RTS- 12.16 at 100 done (based on order # 2 )
2016.10 . 20 19 : 05 : 31.148 2016.09 . 16 10 : 00 : 00    order [ # 2 sell limit 1.00 RTS- 12.16 at 100 ] triggered
2016.10 . 20 19 : 05 : 31.121 2016.09 . 16 10 : 00 : 00    CTrade:: OrderSend : modify # 2 at 100.00000 (sl: 110.00000 tp: 90.00000 ) [done]
2016.10 . 20 19 : 05 : 31.121 2016.09 . 16 10 : 00 : 00    order modified [ # 2 sell limit 1.00 RTS- 12.16 at 100 ]
2016.10 . 20 19 : 05 : 31.121 2016.09 . 16 10 : 00 : 00    CTrade:: OrderSend : sell limit 1.00 RTS- 12.16 at 100 [done]
2016.10 . 20 19 : 05 : 31.121 2016.09 . 16 10 : 00 : 00    sell limit 1.00 RTS- 12.16 at 100 ( 0 / 0 / 96650 )
2016.10 . 20 19 : 05 : 31.118 RTS- 12.16 : real ticks begin from 2016.09 . 16 00 : 00 : 00
2016.10 . 20 19 : 05 : 30.941 RTS- 12.16 ,M1: testing of Experts\test_filling_mode.ex5 from 2016.09 . 16 00 : 00 to 2016.09 . 20 00 : 00 started
2016.10 . 20 19 : 05 : 30.941 RTS- 12.16 ,M1 ( Open -Broker): generating based on real ticks
2016.10 . 20 19 : 05 : 30.940 RTS- 12.16 ,M1: history begins from 2015.01 . 15 10 : 08
2016.10 . 20 19 : 05 : 30.937 RTS- 12.16 ,M1: history cache allocated for 645942 bars and contains 15277 bars from 2015.01 . 15 10 : 08 to 2016.09 . 15 23 : 49
 
코드:
#property version    "1.00"
#define SLTP ( 10 * _Point )

#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   static bool FirstRun= true ;

   if (FirstRun)
     {
       const double Price= SymbolInfoDouble ( _Symbol , SYMBOL_BID )+ 100 * _Point ;

      MT5Order(Price); // Через MT5-Стандартную Библиотеку - only MT5
                       //MT4Order(Price); // Через MT4-ОЯС - кроссплатформенный вариант (MT4/5)

      FirstRun= false ;
     }
  }
//+------------------------------------------------------------------+

// Через MT5-Стандартную Библиотеку - only MT5
// Выставляет SellLimit и затем устаналивает ему SL/TP
void MT5Order( const double Price)
  {
   CTrade Trade;

   if (( ENUM_SYMBOL_TRADE_EXECUTION ):: SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_EXEMODE )== SYMBOL_TRADE_EXECUTION_EXCHANGE )
      Trade.SetTypeFilling( ORDER_FILLING_RETURN );

   Trade.OrderOpen( _Symbol , ORDER_TYPE_SELL_LIMIT , 1 , 0 ,Price, 0 , 0 , ORDER_TIME_GTC , 0 , __FUNCTION__ );

   const ulong Ticket=Trade.ResultOrder();

   if (Ticket> 0 )
     {
      COrderInfo Order;

       if (Order.Select(Ticket))
         Trade. OrderModify (Order.Ticket(),Order.PriceOpen(),Order.PriceOpen()+SLTP,Order.PriceOpen()-SLTP,Order.TypeTime(),Order.TimeExpiration());
     }
  }
//+------------------------------------------------------------------+
 
Alexey Kozitsyn :

집에서 코드를 시작했습니다(MT4 제외).

2016.10 . 20 19 : 05 : 30.941 RTS- 12.16 ,M1 ( Open -Broker ): generating based on real ticks
어쩌면 그게
2016.10 . 20 16 : 49 : 14.944 RTS- 12.16 ,M1 ( BCS-MetaTrader5 ): generating based on real ticks
 
fxsaber :
어쩌면 그게
2016.10 . 20 16 : 49 : 14.944 RTS- 12.16 ,M1 ( BCS-MetaTrader5 ): generating based on real ticks
나는 아무것도 만지지 않았으므로 분명히 중개인의 측면을 봐야합니다.
 
fxsaber :
눈치채지 못했다
내가 아는 한, 이 기능은 이미 1년 동안 사용되었습니다.
물론 엘리트를 제외하고는 누구에게도 간섭하지 않기 때문에 더 우선 순위가 높은 작업에 종사할 가능성이 큽니다.
 
Sergey Dzyublik :
내가 아는 한, 이 기능은 이미 1년 동안 사용되었습니다.
기능 간행물에만 있습니까?
 
MQL 우아함 테마 터치
class A
{
public :
   virtual string classname() const
  {
     return ( typename ( this ));
  }
};

class B : public A
{
public :  
   virtual string classname() const
  {
     return ( typename ( this ));
  }
};

void OnStart ()
{
  B b;
  
   Print (b.classname());
}

각 상속된 클래스에서 동일한 처방을 해야 합니다.

virtual string classname() const
{
   return ( typename ( this ));
}

MQL에서 그러한 꼬리를 당기지 않을 수 있습니까?