Algoritmalar, karar yöntemleri, performanslarının karşılaştırılması - sayfa 22

 

2269'a güncellendi. Büyük (sentetik olmayan) bir Uzman Danışmanın profil oluşturucusunun sonuçları.


test cihazı



sanal


Muhtemelen profilci yanlış ölçümler yapıyor. Aksi takdirde, beş OrderSend'in ortalama 912 ms sürdüğü ortaya çıkıyor.

 

Bir algoritma tarafından normalize edilen herhangi bir çift (örneğin, NormalizeDouble aracılığıyla) doğrudan birbiriyle karşılaştırılabilir.


Bu bariz durum, birçok durumda gerçek sayıları karşılaştırmak için maliyetli yapılardan kaçınmayı mümkün kılar. Bu, bazı görevlerde verimliliği önemli ölçüde artırabilir.

Muhtemelen bu görevlerin en açıklayıcılarından biri Test Cihazıdır. Bir örneğe bakalım.


BuyLimit'e değer. Test eden kişi, BuyLimit'i her bir işarette Satış fiyatı ile karşılaştırmak zorundadır. Staff Tester şimdi bunu böyle yapıyor

 if ( NormalizeDouble (BuyLimit_Price - Ask , Symbol_Digits) >= 0 )
  BuyLimit -> Buy;


Onlar. herhangi bir ticaret seviyesi ( bekleyen emir veya SL/TP) bir Normalleştirme çağrısı oluşturur.


Ancak fiyatlar önceden normalize edilmişse (geri testten önce) her zaman çok verimli bir karşılaştırma yapısı ile idare edebilirsiniz.

 if (BuyLimit_Price >= Ask)
  BuyLimit -> Buy;


Karşılaştırmaya çalışalım. Bu robotu Sanal aracılığıyla Test Cihazında başlattı.

 #include <MT4Orders.mqh>

#define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh>

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

input int inAmountOrders = 10 ;
input int inFakeRange = 0 ;

void OnTick ()
{
   static bool FirstRun = true ;
  
   if (FirstRun)
  {
     for ( int i = 0 ; i < inAmountOrders; i++)    
       OrderSend ( _Symbol , OP_BUYLIMIT, 0.1 , Ask - 10000 * _Point , 0 , 0 , 0 );
      
    FirstRun = false ;
  }
}


Normalleştirme yoluyla fiyat karşılaştırması.

pass 0 returned result 100000.000000 in 0 : 00 : 01.578
pass 1 returned result 100000.000000 in 0 : 00 : 00.759
pass 2 returned result 100000.000000 in 0 : 00 : 00.894
pass 3 returned result 100000.000000 in 0 : 00 : 00.769
pass 4 returned result 100000.000000 in 0 : 00 : 00.806
pass 5 returned result 100000.000000 in 0 : 00 : 00.772
pass 6 returned result 100000.000000 in 0 : 00 : 01.253
pass 7 returned result 100000.000000 in 0 : 00 : 01.200
pass 8 returned result 100000.000000 in 0 : 00 : 01.089
pass 9 returned result 100000.000000 in 0 : 00 : 00.780
pass 10 returned result 100000.000000 in 0 : 00 : 01.258
optimization finished, total passes 11
optimization done in 0 minutes 11 seconds
shortest pass 0 : 00 : 00.759 , longest pass 0 : 00 : 01.578 , average pass 0 : 00 : 01.014


Normalleşme yok.

pass 0 returned result 100000.000000 in 0 : 00 : 01.743
pass 1 returned result 100000.000000 in 0 : 00 : 00.844
pass 2 returned result 100000.000000 in 0 : 00 : 00.672
pass 3 returned result 100000.000000 in 0 : 00 : 00.817
pass 4 returned result 100000.000000 in 0 : 00 : 00.635
pass 5 returned result 100000.000000 in 0 : 00 : 00.604
pass 6 returned result 100000.000000 in 0 : 00 : 00.867
pass 7 returned result 100000.000000 in 0 : 00 : 00.611
pass 8 returned result 100000.000000 in 0 : 00 : 00.899
pass 9 returned result 100000.000000 in 0 : 00 : 00.649
pass 10 returned result 100000.000000 in 0 : 00 : 00.742
optimization finished, total passes 11
optimization done in 0 minutes 09 seconds
shortest pass 0 : 00 : 00.604 , longest pass 0 : 00 : 01.743 , average pass 0 : 00 : 00.825


Fiyatları karşılaştırırken normalleştirmezseniz kazancın %20'den fazla olduğu görülebilir.


Sonuç olarak, kurum içi Test Cihazı normalleştirilmiş fiyatlara dönüştürülür ve fiyatlar karşılaştırılırken dahili normalizasyon kullanılmazsa, performansta önemli bir artış elde edilebilir.

 
Paspassız doğrudan atamadan sonra. operasyonlar da
 
TheXpert :
Paspassız doğrudan atamadan sonra. operasyonlar da

Elbette atama, değişmeden sayının bayt temsilini kopyalar.

 

Belki netlik için bir saniyeden uzun süren bir test yapın?

Burada, bir versiyonda, yayılma 3 kattır: en kısa geçiş 0:00:00.604, en uzun geçiş 0:00:01.743. neyi karşılaştırıyoruz?

 
Andrey Khatimlianskii :

Belki netlik için bir saniyeden uzun süren bir test yapın?

Burada, bir versiyonda, yayılma 3 kattır: en kısa geçiş 0:00:00.604, en uzun geçiş 0:00:01.743. neyi karşılaştırıyoruz?

Elbette en kısa olanı karşılaştırıyoruz. Filtrelenmiş keneler üzerinde sürmek için kullanılır. Filtresiz olanları daha sonra yapacağım.

 
fxsaber :

Elbette en kısa olanı karşılaştırıyoruz.

Niye ya??? Optimizasyon tek geçişten oluşmaz. Ortalama çok farklı değilse, birinin bu kadar hızlı kayması ne fark eder?


fxsaber :

Filtrelenmiş keneler üzerinde sürmek için kullanılır. Filtresiz olanları daha sonra yapacağım.

Belki sadece daha uzun bir aralık. En az 30 saniye test gitti.

 
Andrey Khatimlianskii :

Niye ya??? Optimizasyon tek geçişten oluşmaz. Ortalama çok farklı değilse, birinin bu kadar hızlı kayması ne fark eder?

Bu ayar optimize edildi

 input int inFakeRange = 0 ;

Ve mantığı etkilemez. Bu nedenle, en kısa.

 
fxsaber :

Bu ayar optimize edildi

Ve mantığı etkilemez. Bu nedenle, en kısa.

Burada danışmanın mantığı nedir? Test cihazının hızını ölçüyoruz.

 
Andrey Khatimlianskii :

Burada danışmanın mantığı nedir? Test cihazının hızını ölçüyoruz.

Bir Aracı bu şekilde çalışır, aynı şeyi sırayla sayar. Her türlü kazayı ortadan kaldırırsak, net performans en kısa olana yakındır.

Neden: