Açık proje - kendin yap test cihazı optimize edici - sayfa 2

 
Doğru, derleyicinin tepkisini önceden bilmiyorum, gösterge gövdesindeki ticaret sabitlerini atlayacak mı, atlamayacak mı?
Büyük olasılıkla özleyecek.

Tabii ki olmalı, hepsi sadece tamsayılar, ayrı bir tür değil.

Küçük tavsiye.

Doğal olarak, stratejiyi test eden için veya başka bir şekilde yeniden yazmaya gerek olmaması arzu edilir - böylece yazılı strateji hem test edende hem de onsuz (gerçek hayatta) çalışır.

Bunu kütüphaneler yardımıyla yapabilirsiniz.
1. Ticaretle ilgili tüm işlevlerin adlarını değiştirin (benim... - çok iyi değil, belki daha iyi _....).
2. 2 kitaplık oluşturun. İlki test için kod içerir (aslında sipariş göndermeden), ikincisi standart fonksiyon çağrılarında parametreleri basitçe çoğaltır. Çalışma/Test anahtarı, kitaplığın değiştirilmesiyle yapılır.

Tabii ki, tüm bunları tek bir kütüphaneye yerleştirebilir ve geçiş için global bir parametre girebilirsiniz, ancak bu muhtemelen gereksizdir.

Ve IMHO'nun böyle bir test cihazının yazılmasını radikal bir şekilde basitleştireceği MT'ye bir işlev daha eklemek harika olurdu - bu, mevcut son çubuğu ayarlama işlevidir.

Onlar. Diyelim ki üzerinde test ettiğimiz tarihte 1000 bar var.
200 barı sonuncu olarak tanımlarız ve ardından Kapat[0] yerine her yerde Kapat[200] değiştirilir. Ve bu özellik tüm yerleşik işlevlerde çalışmalı (etkilemeli).

Test cihazı daha sonra bu değerin ayarlandığı (testteki son çubuk) ve stratejide başlatma fonksiyonunun çağrıldığı çubuk sayısına göre bir döngü gibi görünecektir.

aslında o kadar basit değil :)
biraz daha puan lazım..
 
Bunu anlamıyorum, lütfen açıklayın.
2. 2 kitaplık oluşturun. İlki test için kod içerir (aslında sipariş göndermeden), ikincisi ise parametreleri standart fonksiyon çağrılarında çoğaltır. Çalışma/Test anahtarı, kitaplığın değiştirilmesiyle yapılır.

"Test kodu" ifadesi bir testçinin kodu mu yoksa bir danışmanın kodu mu? Belirtin.

Ve bu da
Onlar. Diyelim ki üzerinde test ettiğimiz tarihte 1000 bar var.
Sonuncusu olarak 200 bar tanımlarız ve ardından Kapat[0] yerine her yerde Kapat[200] değiştirilir.
Ve bu özellik tüm yerleşik işlevlerde çalışmalı (etkilemeli).


Herhangi bir EA kodu kolaylıkla bir gösterge koduna dönüştürülebilir:
EA'nın start() bloğunu alıyoruz , değişken bildiriminden sonra for(testerconter=Bars;testerconter>=0;testerconter--) yapısını ekliyoruz
{
parantez ile bitir
}
Bağlantı kullanan tüm yerler [testerconter+link] ile değiştirilir

İşte yerleşik MACD_sample.mq4 EA'dan bir örnek.
Orjinal metin:
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,1);


değişti

   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+1);


Gördüğünüz gibi, herhangi bir sorun yok. İsterseniz, daha sonra testerconter=0'ı her zaman geçersiz kılabilirsiniz.
kod, bir Uzman Danışman değil, bir Uzman Danışman gövdesinde yürütülür.

 
"Test kodu" ifadesi bir testçinin kodu mu yoksa bir danışmanın kodu mu? Belirtin.

İlk kütüphanede, fonksiyon
_OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid + Stop * Point, Bid - Take * Point);


test cihazında sipariş yürütmeyi taklit eder, yani. test cihazındaki siparişler listesine ekler ve siparişi sunucuya göndermez.

İkinci kitaplıkta, bu işlev yalnızca yerleşik işlevi çağırır.

int _OrderSend( string symbol, int cmd, double volume, double price, int slippage, 
                double stoploss, double takeprofit, string comment=NULL, int magic=0, 
                datetime expiration=0, color arrow_color=CLR_NONE) 
{
   return (OrderSend(symbol, cmd, volume, price, slippage, stoploss, 
                        takeprofit, comment, magic, expiration, arrow_color) );
}


Herhangi bir EA kodu kolaylıkla bir gösterge koduna dönüştürülebilir:
EA'nın start() bloğunu alıyoruz, değişken bildiriminden sonra for(testerconter=Bars;testerconter>=0;testerconter--) yapısını ekliyoruz
{
parantez ile bitir
}
Bağlantı kullanan tüm yerler [testerconter+link] ile değiştirilir

Valla bende aynı şeyden bahsediyorum
MT'de (varsayılan 0) testerconter değişkeninin değerini ayarlayan bir işlevi çağırmak yerine değiştirmek yerine daha kolay olurdu ve bu değiştirme ([testerconter+referans]) MT'nin kendisinde yapılır.
O zaman bu ikamelerin stratejinin kendisinde yapılması gerekmeyecekti.

for(testerconter=Bars;testerconter>=0;testerconter--)
{
   SetTestPoint(testerconter);
      далее текст эксперта без переделки,
      или лучше вызов его функции start (или _start)
}



Lütfen değiştirin. ön alıntı "Öyleyse 1000 barımız olduğunu varsayalım ..."
ve sonra tekrar sayfa ayrıldı.

 
Alıntı ile değiştirdim, metniniz ayrılıyor gibi görünüyor, örneğinizde zorunlu bir satır beslemesi yapın
hakkında
int _OrderSend(dize sembolü,...


Sonuç: Görünüşe göre aynı şeyden bahsediyoruz. Şu anki son çubuğun talebini şimdilik unutabilirsiniz -
bunu yapmaya çalışmalısın.
Şimdilik, sadece standart ticaret fonksiyonlarını yeniden tanımlayın, _.. önekini de kullanabilirsiniz, bu daha da sağlam :)
 
avm'ye
Bu şekilde test edebilirsiniz. Ve yeterli kalite. Ama ne yazık ki, evrenselcilik işe yaramayacak.
Bu testler için birkaç hafta geçirdim. İlk bakışta, her şey basit görünüyor.


"Çok kanla" test ettiğinizden şüpheleniyorum, yani ticaret işlevlerini yeniden tanımlamadınız. Ve her yeni test
yeni bir test cihazı göstergesi yazmak gerekli. Ancak bunu yalnızca bir kez yapmak yeterlidir - ve sonra sorun olmaz.
Eğer yanılıyorsam - işlevleri sıralayın - cimri olmayın.
 
Başka bir an.

Görünüşe göre, Expert Advisor'dan doğrudan başlatma işlevini çağırmak mümkün olmayacak.
Bu nedenle, Expert Advisor'ın kodunu kütüphaneye yazıp _init, _deinit ve _start fonksiyonlarını buraya eklemek daha iyidir.

Sonra EA'nın kendisinde şunu yazıyoruz:
#include ".....";
   ...............

int init()
{
   return(_init());
}

int deinit()
{
   return(_deinit());
}

int start()
{
   return(_start());
}


Parametrelerle nasıl başa çıkılacağı biraz belirsiz.

 
Bu arada, birkaç Uzman Danışmanı/sinyalleri tek bir çizelgede birleştirebilirsiniz.
Omega'da nasıl yapılır:
#include "A1.....";
#include "A2.....";
   ...............

int init()
{
   _initA1();
   _initA2();
   return(0);
}

int deinit()
{
   _deinitA1();
   _deinitA2();
   return(0);
}

int start()
{
   _startA1();
   _startA2();
   return(0);
}


Çok güzel değil, ama işe yarayacak.
Genelde kendi kendine yapılan bir olay işleme sistemi elde edilir :))

 
Belki daha kolay? Bir mq4 dosyasına (danışman koduyla) karşı ayarlanmış bir ayrıştırıcı komut dosyası yapılır.
Bu kodu işler - Balance , Equity vb. altına her türlü içerme, çalışan diziler ekler,
Lot to ve _Lots (ve diğerleri) değişkenlerini yeniden adlandırır. Genel olarak, kaba işleri o yapacak.
Çıktıyı yalnızca bir dosya ile işlemek ve iletmek gerekli olacaktır. :)
Basit bir boru hattı yöntemi.
 
avm'ye
Bu şekilde test edebilirsiniz. Ve yeterli kalite. Ama ne yazık ki, evrenselcilik işe yaramayacak. Bu testler için birkaç hafta geçirdim. İlk bakışta, her şey basit görünüyor.

"Çok kanla" test ettiğinizden şüpheleniyorum, yani ticaret fonksiyonlarını yeniden tanımlamadınız. Ve her yeni test, yeni bir test cihazı göstergesinin yazılmasını gerektiriyordu. Ancak bunu yalnızca bir kez yapmak yeterlidir - ve sonra sorun olmaz. Eğer yanılıyorsam - işlevleri sıralayın - cimri olmayın.

Kesinlikle doğru. "Büyük kan". Yedek yoktu. Bu tür test cihazlarını MT3.x'te yaptım. MQL4, yeryüzünden cennet gibi MQL2'den farklıdır. Ancak MQL4 özelliklerinden faydalanmadım. Psikolojik uyuşukluk. Önce düşünmem, sonra çalışmam gerekiyordu.
Kadına "Önce düşün, sonra konuş" nasihat edildi. Kadın, "Henüz söylemediğim bir şeyi nasıl düşünebilirim?" diye yanıtladı.
 
Ayrıştırıcı hakkında biraz ilerledim, önce fonksiyonları yazmanız gerekiyor. Ancak geliştiricilerin söylediklerini hatırlıyorum - çoklu para birimi test cihazı (portföy) olmayacak. Yoksa bir şeyi karıştırıyor muyum? Kafamı karıştırmazsam - dahası, kendinizinkini yazmanız gerekir.