MetaTrader 5 Strateji Test Cihazı: Hatalar, Hatalar, İyileştirme Önerileri - sayfa 42

 
fxsaber :

Herhangi bir karakter üzerinde oynamak için talimatlar mevcuttur. Sorular var - sadece koşun.

Hayır, sen daha iyi, kodlarını çözerken neden başladığımı unutacağım))

Bunu bir borsa vadeli işleminde test edebilir misiniz, örneğin Si ? Test için takas hesabı veriyor musunuz?

 
Sergey Chalyshev :

Hayır, sen daha iyi, kodlarını çözerken neden başladığımı unutacağım))

Bunu bir borsa vadeli işleminde test edebilir misiniz, örneğin Si ? Test için takas hesabı veriyor musunuz?

Borsada düşük likidite sorunu ve sipariş kuyruğu var. Bu nedenle, Moskova Borsasındaki test cihazı doğru değil. Forex'te küçük partilerde pratikte böyle bir fenomen yoktur. Ara sıra olmasına rağmen.

 
Sergey Chalyshev :

Test için takas hesabı veriyor musunuz?

Haydi. Ama hemen bir rezervasyon yapacağım, Tester'daki son fiyatlardaki herhangi bir uygulama bir hatadır.

 
Test Cihazının doğruluğu için doğrulama kodu.
 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void CloseAll()
{
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS))
    {
       if (OrderType() <= OP_SELL)
        OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0 );
       else
        OrderDelete(OrderTicket());
    }    
}

bool Check1()
{
   bool Res = true ;
  
  Res &= OrderSend ( _Symbol , OP_BUY, 1 , Ask, 0 , Bid, 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderSend ( _Symbol , OP_BUY, 1 , Ask, 0 , 0 , Bid) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderSend ( _Symbol , OP_SELL, 1 , Bid, 0 , Ask, 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderSend ( _Symbol , OP_SELL, 1 , Bid, 0 , 0 , Ask) && ! OrdersTotal ();
  CloseAll();
  
   return (Res);
}

bool Check2()
{
   bool Res = true ;
  
  Res &= OrderModify( OrderSend ( _Symbol , OP_BUY, 1 , Ask, 0 , 0 , 0 ), Ask, Bid, 0 , 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderModify( OrderSend ( _Symbol , OP_BUY, 1 , Ask, 0 , 0 , 0 ), Ask, 0 , Bid, 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderModify( OrderSend ( _Symbol , OP_SELL, 1 , Bid, 0 , 0 , 0 ), Bid, Ask, 0 , 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderModify( OrderSend ( _Symbol , OP_SELL, 1 , Bid, 0 , 0 , 0 ), Bid, 0 , Ask  , 0 ) && ! OrdersTotal ();
  CloseAll();
  
   return (Res);
}

bool Check3()
{
   bool Res = true ;
  
  Res &= OrderSelect ( OrderSend ( _Symbol , OP_BUYLIMIT, 1 , Ask, 0 , 0 , 0 ), SELECT_BY_TICKET) && (OrderType() <= OP_SELL);
  CloseAll();

  Res &= OrderSelect ( OrderSend ( _Symbol , OP_SELLLIMIT, 1 , Bid, 0 , 0 , 0 ), SELECT_BY_TICKET) && (OrderType() <= OP_SELL);
  CloseAll();

  Res &= OrderSelect ( OrderSend ( _Symbol , OP_BUYSTOP, 1 , Ask, 0 , 0 , 0 ), SELECT_BY_TICKET) && (OrderType() <= OP_SELL);
  CloseAll();

  Res &= OrderSelect ( OrderSend ( _Symbol , OP_SELLSTOP, 1 , Bid, 0 , 0 , 0 ), SELECT_BY_TICKET) && (OrderType() <= OP_SELL);
  CloseAll();
  
   return (Res);
}

bool Check4()
{
   bool Res = true ;
  
   const double TickSize = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_SIZE );
  
  Res &= OrderModify( OrderSend ( _Symbol , OP_BUYLIMIT, 1 , Ask - TickSize, 0 , 0 , 0 ), Ask, 0 , 0 , 0 ) && ( OrdersTotal () == 1 ) && ( OrderSelect ( 0 , SELECT_BY_POS)) && (OrderType() <= OP_SELL);
  CloseAll();  

  Res &= OrderModify( OrderSend ( _Symbol , OP_BUYSTOP, 1 , Ask + TickSize, 0 , 0 , 0 ), Ask, 0 , 0 , 0 ) && ( OrdersTotal () == 1 ) && ( OrderSelect ( 0 , SELECT_BY_POS)) && (OrderType() <= OP_SELL);
  CloseAll();

  Res &= OrderModify( OrderSend ( _Symbol , OP_SELLLIMIT, 1 , Bid + TickSize, 0 , 0 , 0 ), Bid, 0 , 0 , 0 ) && ( OrdersTotal () == 1 ) && ( OrderSelect ( 0 , SELECT_BY_POS)) && (OrderType() <= OP_SELL);
  CloseAll();

  Res &= OrderModify( OrderSend ( _Symbol , OP_SELLSTOP, 1 , Bid - TickSize, 0 , 0 , 0 ), Bid, 0 , 0 , 0 ) && ( OrdersTotal () == 1 ) && ( OrderSelect ( 0 , SELECT_BY_POS)) && (OrderType() <= OP_SELL);
  CloseAll();

   return (Res);
}

bool Check5()
{
   bool Res = true ;

   const double TickSize = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_SIZE );
  
  Res &= OrderModify( OrderSend ( _Symbol , OP_BUYLIMIT, 1 , Ask - TickSize, 0 , 0 , 0 ), Ask, Bid, 0 , 0 ) && ! OrdersTotal ();
  CloseAll();  

  Res &= OrderModify( OrderSend ( _Symbol , OP_BUYSTOP, 1 , Ask + TickSize, 0 , 0 , 0 ), Ask, Bid, 0 , 0 ) && ! OrdersTotal ();
  CloseAll();  

  Res &= OrderModify( OrderSend ( _Symbol , OP_SELLLIMIT, 1 , Bid + TickSize, 0 , 0 , 0 ), Bid, Ask, 0 , 0 ) && ! OrdersTotal ();
  CloseAll();  

  Res &= OrderModify( OrderSend ( _Symbol , OP_SELLSTOP, 1 , Bid - TickSize, 0 , 0 , 0 ), Bid, Ask, 0 , 0 ) && ! OrdersTotal ();
  CloseAll();  

   return (Res);
}

bool Check6()
{
   bool Res = true ;
  
  Res &= OrderSend ( _Symbol , OP_BUYLIMIT, 1 , Ask, 0 , Bid, 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderSend ( _Symbol , OP_BUYSTOP, 1 , Ask, 0 , Bid, 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderSend ( _Symbol , OP_SELLLIMIT, 1 , Bid, 0 , Ask, 0 ) && ! OrdersTotal ();
  CloseAll();

  Res &= OrderSend ( _Symbol , OP_SELLSTOP, 1 , Bid, 0 , Ask, 0 ) && ! OrdersTotal ();
  CloseAll();
  
   return (Res);
}


#define TOSTRING(A) #A + " = " + ( string )(A) + "\n"

void OnTick ()
{
   Print (TOSTRING(Check1()) + TOSTRING(Check2()) + TOSTRING(Check3()) +
        TOSTRING(Check4()) + TOSTRING(Check5()) + TOSTRING(Check6()));

   ExpertRemove ();
}


Doğru yapıldığında, olmalıdır

 2019.12 . 19 00 : 27 : 59.263 2019.12 . 13 00 : 00 : 00    Check1() = true
2019.12 . 19 00 : 27 : 59.263 2019.12 . 13 00 : 00 : 00    Check2() = true
2019.12 . 19 00 : 27 : 59.263 2019.12 . 13 00 : 00 : 00    Check3() = true
2019.12 . 19 00 : 27 : 59.263 2019.12 . 13 00 : 00 : 00    Check4() = true
2019.12 . 19 00 : 27 : 59.263 2019.12 . 13 00 : 00 : 00    Check5() = true
2019.12 . 19 00 : 27 : 59.263 2019.12 . 13 00 : 00 : 00    Check6() = true
 
fxsaber :

Haydi. Ama hemen bir rezervasyon yapacağım, Tester'daki son fiyatlardaki herhangi bir uygulama bir hatadır.

özelden yazdım

Doğal olarak, sürelerin yürütülmesi anlamsızdır (saçma).

 
Sergey Chalyshev :

Bunu bir borsa vadeli işlemlerinde test edebilir misiniz, örneğin Si ?


Daha iyi. Gerçek keneler tarafından, ancak TP paletler tarafından yürütülür.

 
fxsaber :

Kötü.

Hayır, test cihazınızda bir sorun var. Tüm keneler veya gerçek keneler için nasıl test yaparsınız?

Si'yi deneyin.

9:45'te piyasa hala kapalı, bu saatte her şey olabilir, 10:01'den sonra açmanız gerekir.
 
Sergey Chalyshev :

Bir takas sembolü ve bir net hesap varsa, ancak o zaman cari fiyattaki limit limiti kabul edilir.

Ne yazık ki, tüm piyasalar (TP dahil) paletlerde yürütülmektedir. Bu nedenle, Tester'daki marketleri kullanmamak daha iyidir.

 
Peki, test cihazından tüm yüklü çubuklara erişime ne dersiniz? Cevap lütfen. Veya bu yapay kısıtlamaya neden ihtiyaç duyulduğunu açıklayın.
 
Alexey Kravchenko :
Peki, test cihazından tüm yüklü çubuklara erişime ne dersiniz? Cevap lütfen. Veya bu yapay kısıtlamaya neden ihtiyaç duyulduğunu açıklayın.

Uzman Danışmanların %99'unun testini hızlandırmak için.

Kalan %1 için bir koltuk değneği ekleyebilirsiniz.