Test (Optimizasyon) Tekniği ve Expert Advisor Parametrelerinin Seçiminde Bazı Kriterler

Rider | 14 Ocak, 2022


Giriş

Görünüşe göre yeterli parametre seçiminin alım satım taktiklerinin seçilmesinden ve bir Expert Advisor oluşturulmasından daha az önemli olmadığı büyük bir sır değil. Bunun kanıtı, otomatik alım satım ile ilgili şu veya bu şekilde çok sayıda forumda konuyla ilgili süregelen tartışmalarda bulunabilir. Alım satım işlemlerinin otomasyonu oldukça açık ve şeffaf görünse de, mantıksal olarak eksiksiz bir zincirde derlenen optimizasyon sonuçlarının işlenmesi için iyi kötü kullanılabilir bir otomatikleştirilmiş algoritmaya rastlamadım.

Ve sürecin çok zor ve zaman alıcı olduğunu, bu nedenle en azından tüm işlemleri maksimum seviyede otomatikleştirmek ve tek bir algoritmaya indirgemek için çaba sarfetmeyi hak ettiğini kabul etmeliyiz. Bu yaklaşım ve yöntem, bu makalede aşağıda açıklanacaktır.


Konsept

Görev. Optimizasyon sırasında alınan ve gerçek bir alım satım işlemi için kasten etkisiz olan Expert Advisor parametrelerinin analizi ve taranması. Terminal performans yeteneklerinin maksimum kullanımı ve manuel işlemlerin otomasyonu.

Bu işlem çeşitli aşamalardan oluşur. Böyle bir bölümün, sürekli bir otomatik algoritmanın uygulanmasının karmaşıklığı ile, optimizasyon aşamasında, sistem parametrelerine gerekli gereksinimleri (toleranslar ve filtreler) erken tanımlayamama gibi, çok fazla ilgisi yoktur. Genel olarak konuşursak buna gerek yok.

Bence bir makinenin stratejik kararlar almasını sağlamak "iyi bir fikir" değil. Parametre seçimi (parametre grupları) bir stratejidir. Hesaplama, alım satım, hayatımızı kolaylaştırma: bunlar işlevleridir ancak donanımın uyması gereken çalışma kurallarına karar veren yatırımcıdır.

Her aşama ve aşamalar arasındaki geçişler, uygun olduğu kadar maksimum seviyede otomatikleştirildi.


Aşama 1. Optimizasyon. İsteğe bağlı kullanıcı ayarlarına sahip standart varyant.

Yine, bu bir sır değil ama dışarıda bırakılamaz.
Genetik elbette yararlı bir şeydir, ancak makul seviyede. Gerçek şu ki, algoritması size haksız bir oyun oynayabilir - karlı olarak gördüğü bir dizi parametre bulunduğunda, tüm optimizasyon süreci oradan itibaren sonuna kadar "onun etrafında" devam edecektir. Bunun neye yol açabileceğini anladığınıza inanıyorum. Aksi takdirde optimizasyon alanının ötesinde çalışacak olan gerçekten iyi varyantların çoğu dışarıda bırakılacak ve "Optimizasyon Sonuçları" tablosuna kaydedilmeyecektir.

Bu durumdan kurtulmanın birkaç yolu var. En etkililerinden biri, optimizasyon için Genetik Algoritmayı kullanmamaktır. Ancak bu, şu veya bu nedenle her zaman uygun değildir. Sonraki ikisi yetersiz önlemlerdir ama hiç yoktan iyidir:

- optimizasyonu yalnızca bir kez değil, iki veya daha fazla kez çalıştırmak için. İlk seferde "Denge" ile ve bir dahaki sefere "Maksimal Düşüş" veya diğer parametreler ile diyelim. Expert Advisor özelliklerinin "Test" sekmesindeki "Optimize Edilmiş Parametre" penceresi bu seçimi sağlar. Daha sonra, alınan sonuç tablolarını birleştirin ve birleşik bir tabloyla çalışın.

- parametre kombinasyonlarının sayısını maksimum düzeyde azaltmak için.

Optimizasyonu uygularken dikkate alınması gereken başka bir ince ayrıntı daha vardır. Birisi bunu faydalı bulabilir.

Expert Advisor özelliklerinin "Optimizasyon" sekmesinde çeşitli limitler belirlenebilir ve bunlardan biri hakkında birkaç şey söylemek istiyorum - "Maksimal Düşüş". Bu parametreyi kullanırken, bunun yüzde olarak mevcut bakiye düşüşü olduğunu unutmayın. Burada nelere dikkat edilmesi gerekiyor. Örneğin %10'luk bir limit belirleyip 10000 başlangıç bakiyesi alırsak, optimizasyon sürecinde bakiye en az 15000'e ulaştığında başlangıç 1000 1500 olur; bunlar açık şekilde farklı rakamlar. Başlangıç depozitosu (bu tür bir düşüşün alım satımın en başında olmayacağını kim garanti edebilir?) onlara farklı tepki verecektir. 1000000 başlangıç depozitosu ve %0,1 limit belirlenirse bu bin yaklaşık bin olarak kalacaktır.


Aşama 2. "Optimizasyon Sonuçları" ile Çalışma. Tüm sonuçlar Excel'e kopyalanır ve orada işlenir. Birçok set olacak ve bunların azaltılması gerekiyor. "Kesme" raporun herhangi bir sütununda gerçekleştirilebilir - bu yatırımcıya bağlıdır.


Aşama 3. Test. Test için geçmişin bir bölümünü seçiyoruz ve önceki aşama taramasını "geçen" setlerin otomatik grup testini yapıyoruz. Belirtiyorum: bir grup testi. Bu aşamada her bir testi ayrı ayrı değerlendirmeye gerek yoktur, mesele kalan tüm setlerin test sonuçlarını bir kerede almaktır. Terminal aslında aynı optimizasyonu uygulayacak ancak önceden oluşturulmuş bir dosyadaki parametreleri kullanacak.

2. aşamaya benzer şekilde, alınan tüm sonuçlar, optimizasyon sonuçlarını içeren aynı Excel tablosuna kopyalanır.


Aşama 4. Analiz ve Tarama.

Açıkçası, negatif testler acımasızca atılır (satırlar silinir). Soru, kalanların nasıl değerlendirileceğidir?

Birçoğunuz, denge grafiğinin görsel algısının, sistem karakteristikleri hakkında rapordaki rakamlara denk ve bazen daha iyi bir fikir verdiğini fark etmişsinizdir. Kural olarak, eğri "iyi" görünüyorsa rapordaki rakamlar da "iyi"dir, ancak sürekli bir büyüme trendinden yoksunsa o zaman hiçbir rakam bunun "iyi" olduğuna yeterince inandırıcı olamaz.

Sorun şu ki, geriye kalan epeyce varyant var ve raporu analiz etmek ve her birinin grafiğine bakmak için bunları ayrı ayrı test etmek çok zor... Ama biri inat ederse o zaman...

Bu sorunu önlemek ve set sayısını daha da azaltmak için karşılaştırılan alanlara uygulanabilecek bir "oran" kriteri oluşturdum. Üç değer karşılaştırılır: Optimizasyon ve test alanlarında sırasıyla Günlük Kar, Günlük Yatırım Sayısı ve Maksimal Düşüş. Kabaca, belirli bir tolere edilebilir sınır içinde, birbirleriyle tutarlılarsa, set çalışır halde kalır, değilse kalan analizlerin dışında tutulur. Ayrıca, belirli koşullar altında, daha spesifik olarak - test alanları çok uzun pozisyon değilse yukarıdaki üç değer bir dereceye kadar "pürüzsüz" bir denge eğrisi fikri üretebilir.

Aşama 3 ve 4, ilk olarak, seçilen sonuçların güvenilirliğini doğrulamak ve ikinci olarak, sayısal olarak maksimum düzeyde azaltmak için geçmişin farklı bölümlerinde birkaç kez tekrarlanabilir ve tekrarlanmalıdır. Kalan 3-5 varyant, bilinçli nihai seçim için oldukça yeterli olacaktır.

Aşama 3 ve 4'ün tamamlanması, kalan setlerden set dosyalarının oluşturulmasını, geçmişin herhangi bir bölümünde bireysel testlerin uygulanmasını, bunlar arasında karşılaştırmayı, seçimi vb. içerir.

Temel olarak, bu her yatırımcı için nitelik, zevk ve tercih meselesidir ve bu makalenin kapsamı dışındadır.


Teknik

Burada zor ve akıl almaz bir şey yok, tek ihtiyacınız olan dikkat ve hassasiyet. Hadi başlayalım.

1. Bilgisayar Yapılandırması - Kontrol Paneli/Bölge ve Dil Seçenekleri/Bölgesel Seçenekler/Rusça - Özelleştir/Sayılar/Ondalık Sembol - "virgül" yerine "nokta" seçmeniz gerekir - bu, (test) optimizasyon sonuçlarının Terminalden bir Excel tablosuna kopyalanması üzerine doğru veri yansıması için yapılır;

- Bilgisayarınızda Microsoft Office (Excel gereklidir) yüklü olmalıdır - sürüm 2000 ve üzeri.

- Excel güvenlik ayarlarında makrolar etkinleştirilmeli ve Analise.bas modülü (makaleye ekli) içe aktarılmalıdır. Sıradan kullanıcıların modülde herhangi bir değişiklik yapmasına veya düzenlemesine gerek olmadığı ve "sıradışı" kullanıcılar, isterlerse kendileri çözeceklerinden, modülün ve yapısının gözden geçirilmesi bu makalede verilmemiştir.

2. Expert Advisor Hazırlığı

Hazırlanan Expert Advisor örneği ekte mevcuttur.

Kodun en başında, harici parametrelerden önce aşağıdakiler eklenmelidir:

// Test and optimization parameters
extern int          VarOptimTest    = 0;       // 0 - standard optimization (normal operation of the Expert Advisor)
                                                                     // 1 - test run of the selected sets         
                                                                     // 2 - generation of set-files
extern int          Counter              = 1;       // counter    
extern string       nameEA          = "MA";  // Expert Advisor name

Bu değişkenler, optimizasyon ve test modlarını kontrol edecektir.

init() işlevi aşağıdaki gibi görünmelidir:

int init() 
{
   // BLOCK OF THE OPTImizaTION AND TESTING FUNCTION CALL
   if(IsOptimization() && VarOptimTest !=0)
      {
      if (VarOptimTest == 1 && Counter !=0) _ReadParametrs();
      if (VarOptimTest == 2 && Counter !=0)
         {_ReadParametrs(); _WriteSet();}
      }   
...........
...........
return (0);
} 

Buradan, tüm sürecin otomasyonunu sağlayacak olan iki işlev çağrılacak.

start() işlevine aşağıdaki satır eklenir:

int start() 
{
   if(IsOptimization() && VarOptimTest ==2) return(0);
..........

1. (Test) optimizasyon sonuçlarının analizinden sonra oluşturulan bir Excel dosyasını okumak için parametre okuma işlevi.

İşlevin değişken kısmı kalın harflerle yazılmıştır. Expert Advisor›ın, varsa optimizasyon ve testten sorumlu ilk üçü ile bool ve dize türü değişkenleri haricindeki tüm girdi parametrelerini aynı yapı ve sözdizimi takip edilerek doğru ve dikkatli bir şekilde listelemek gerekir.

void  _ReadParametrs()
{
   string FileName="test.csv";
   int handle=FileOpen(FileName,FILE_READ||FILE_CSV);//,''); 
   if(handle<1) return(0);
   FileSeek(handle,0,SEEK_SET);
   int str = StrToInteger(FileReadString(handle)); 
   int data = StrToInteger(FileReadString(handle)); 
   if (data < Counter) 
      {
      Alert("Incorrect number of test runs entered. Sorry");
      return(0);
      }
   for (int y=1; y <=Counter; y++)
      {
      for (int x=1; x <= str; x++)
         {
         string s = FileReadString(handle); 
         string ds = FileReadString(handle); 
         if (y != Counter) continue;
         s=StringTrimLeft(s);s=StringTrimRight(s);
         ds = StringTrimLeft(ds);ds=StringTrimRight(ds);
         double d = StrToDouble(ds);

         if (s == "Lots"){Lots=d;continue;}
         if (s == "MaximumRisk"){MaximumRisk=d;continue;}
         if (s == "DecreaseFactor"){DecreaseFactor=d;continue;}
         if (s == "MovingPeriod"){MovingPeriod=d;continue;}
         if (s == "MovingShift"){MovingShift=d;continue;}
         
         }
      }
   FileClose(handle);
  return(0);
}

2. Set dosya oluşturma ve yazma işlevi. Yapısı, Expert Advisor set dosyası yapısını yansıtmalıdır. İşlevin değişken kısmı kalın harflerle yazılmıştır.

void  _WriteSet ()
{
   string FileName=nameEA+"_"+Symbol()+Period()+"_"+Counter+".set";
   int handle=FileOpen(FileName,FILE_WRITE|FILE_CSV);
   if(handle<1) return(0);

   FileWrite(handle,"VarOptimTest="+0);
   FileWrite(handle,"VarOptimTest,F="+0);
   FileWrite(handle,"VarOptimTest,1="+0);
   FileWrite(handle,"VarOptimTest,2="+0);
   FileWrite(handle,"VarOptimTest,3="+0);
   
   FileWrite(handle,"Counter="+0);
   FileWrite(handle,"Counter,F="+0);
   FileWrite(handle,"Counter,1="+1);
   FileWrite(handle,"Counter,2="+1);
   FileWrite(handle,"Counter,3="+100);

   FileWrite(handle,"nameEA="+nameEA+"_"+Symbol()+Period()+"_"+Counter);

   FileWrite(handle,"Lots="+Lots);
   FileWrite(handle,"Lots,F="+0);
   FileWrite(handle,"Lots,1="+0.00000000);
   FileWrite(handle,"Lots,2="+0.00000000);
   FileWrite(handle,"Lots,3="+0.00000000);
   
   .................................
   
   FileWrite(handle,"MovingShift="+MovingShift);
   FileWrite(handle,"MovingShift,F="+1);
   FileWrite(handle,"MovingShift,1="+2);
   FileWrite(handle,"MovingShift,2="+1);
   FileWrite(handle,"MovingShift,3="+4);
   
   FileClose(handle);
return(0);
}

3. İşlem

DİKKAT! Herhangi bir işlem gerçekleştirmeden önce çalışma sayfasını veya tüm çalışma kitabını kopyalamanızı şiddetle tavsiye ederim. Excel'de makro çalıştırmak geri dönüşü olmayan bir işlemdir ve bir hata durumunda optimizasyon sonuçları kaybolabilir, bu da zaman kaybı anlamına gelir. Ara sonuçların zaman zaman saklanmasında bir sakınca olmayacaktır.

3.1. Optimizasyon

Optimizasyonun özelliklerine ayrılmış yeterli bilgi var, şimdi bunun nasıl yapılabileceğini görelim. Expert Advisor özelliklerindeki optimizasyon ve test parametreleri, ekran görüntüsünde gösterildiği gibi ayarlanmalıdır:


Şek.1 Expert Advisor Özellikleri, "Giriş Parametreleri" Sekmesi. Optimizasyon ve Test Parametreleri


3.2. Optimizasyon Sonuçlarının Analizi ve İlk Parametre Taraması

Optimizasyon tamamlandıktan sonra sonuçlar panoya kopyalanmalıdır:


Şek. 2 Optimizasyon Sonuçlarının Kopyalanması

Excel'i başlatın ve kopyalanan verileri yeni bir çalışma sayfasına yapıştırın.

Kopyaladıktan sonra Optim_1 makrosunu çalıştırmalısınız. Her şey doğru yapıldıysa çalışma sayfası şuna benzer olacaktır:


Şek. 3 Excel Makrosunu Çalıştırma

Makroyu çalıştırırken, diyalog kutusuna optimizasyon dönemindeki gün sayısını girmeniz gerekecektir. Bu, ek kriterlerin hesaplanması için gereklidir.


Şek. 4 Gün Sayısı Girişi İçin İletişim Kutusu

Gördüğünüz gibi, sonuç tablosunda sütun adı yok. Bunun bir sebebi vardır. Birincisi, parametre sayısını girerken hatalardan kaçınmayı kolaylaştırır (daha sonra gerekecektir), ikincisi, bunlara özel bir ihtiyaç yoktur. Burada iki sütun dışında her şey tanıdık; mavi ve yeşil. Soldan sağa: Geçiş Sayısı, Kar, Günlük Kar, Toplam Yatırımlar, Günlük Yatırımlar, Kar Faktörü, Beklenen Kazanç, $ cinsinden Düşüş, % cinsinden Düşüş.

Tablo yalnızca daha sonraki çalışmalar için seçilen parametreleri içerdiğinde (yani istenmeyen satırlar silindiğinde), bir sonraki adıma geçiyoruz.

Sıralamayı kolaylaştırmak için modülde tek tek sütunlara göre sıralamaya izin veren bütün bir makro grubu vardır. Kısayol tuşları atayın ve ....


3.3. Parametreleri Dosyaya Kaydetme

"Yaz" makrosunu çalıştırmalı ve açılır iletişim kutusunda parametre dosyasının kaydedileceği yolu (.... terminal\tester\files\) girmelisiniz

Şek. 5 Parametre Dosyasını Kaydetmek İçin İletişim Kutusu

"Dosya Adı" penceresi önceden tanımlanmış bir "test" adına sahip olacaktır, lütfen çok gerekmedikçe değiştirmeyin ancak değiştirirseniz Expert Advisor'ınıza eklenen işlevlerde de aynısını yapmanız gerekecektir.

Bu işlemin tamamlanmasının ardından, belirtilen dizinde "test.csv" dosyası görünecektir (veya daha önce mevcutsa üzerine yazılacaktır).

Dikkat, bu önemlidir. Dosya oluşturulduktan sonra tablodaki satır pozisyonlarını değiştirmeyin, aksi takdirde test sonuçları artık testte kullanılan parametrelere bağlı olmayacaktır.


3.4. Test etme

Expert Advisor ayarları:




Şek.6-8 Grup Testi Uygulaması için Expert Advisor Ayarları

Sanırım açıklamalar, gerekli olsa bile, fazla önemli değil: Belirlenmiş limit yok, Genetik Algoritma devre dışı, Sayaç değişkeni 1'den N'ye ayarlandı, burada N, tabloda kalan satır sayısıdır, Optimizasyon yalnızca bu parametre tarafından etkinleştirilir.

Başka bir ayar:


Şek.9 "Optimizasyon Sonuçları" Sekmesinin Ayarları

Şimdi, test dönemi ve diğer asli optimizasyon parametreleri ayarlanmışsa "Başlat" düğmesine tıklayabilir ve Strateji Test Aygıtını "Optimizasyon" modunda çalıştırabilirsiniz.

Özellikle ilk çalıştırmada tablo hala büyükken oldukça uzun sürebilen testleri tamamladıktan sonra bir sonraki adıma geçebiliriz.


3.5. Test Sonuçlarıyla Çalışma

Öncelikle Excel tablosu yeni veri girişi için hazırlanmalıdır ve bu amaçla "Optim_2" makrosunu çalıştırıyoruz, bunun sonucunda da tablonun sol tarafında 7 boş sütun çıkacaktır. Alınan sonuçlar, geçiş numarasına göre artan düzende sıralanmalıdır:


Şek. 10 Test Sonuçlarının Sıralanması

Sonuçlar daha sonra kopyalanmalı (2. adımdaki gibi) ve yeni bir Excel çalışma sayfasına yapıştırılmalı, ardından ilk 7 sütun kopyalanarak tablomuzla çalışma sayfasında önceden hazırlanmış alana yapıştırılmalıdır.

Şimdi bir dizi "Optim_3" ve "Optim_4" makrosu çalıştırın. Her şey doğru yapıldıysa tablo aşağıdaki yapıyı alacaktır:


Şek. 11 Optimizasyon ve Test Sonuçlarının Kaydedilmesi ve İşlenmesinden Sonra Tablonun Yapısı

LT sütunlarını zaten konuştuk, D-K sütunları М-T sütunlarına benzer, ancak verileri test alanına başvurur.
Ancak ilk üç sütuna geçmeden önce, "Günlük Kar" ve "Günlük Yatırımlar" gibi kriterlerin neden getirildiğinin açıklanması gerekiyor.

Optimizasyon ve test dönemlerinin uzunluğu farklı olabilir. Bu durumda makul bir soru akla geliyor: Sonuçları nasıl karşılaştırmalıyız? Bu iki parametre, bu sorunu en azından kısmen çözmek ve sonuçları karşılaştırma sürecini kolaylaştırmak için tasarlanmıştır.

Yani, sütunlar: А = N/E (Gün Başına Kar oranı), B = P/G (Gün başına Yatırımların oranı), С =S/J (Düşüş oranı).

Görülebileceği gibi, bu sütunlardaki değerler şu anda 1 ile temsil edilmektedir; ideal varyant, yalnızca geçmişteki test alanı optimizasyon alanıyla örtüştüğünde mevcuttur. Bu gözden kaçmış bir durum değil, Expert Advisor'ın doğru hazırlanıp hazırlanmadığını kontrol etmenin yollarından birini göstermek için kasıtlı bir eylemdir. Benzer şekilde, set dosyalarının oluşturulmasının doğruluğu kontrol edilebilir.

Yani, analiz için her şey hazır. Tüm bilgiler mevcuttur. Her şey yatırımcının elindedir, Expert Advisor'ının tüm gizli özelliklerini bilen ve parametreleri taramak için sonuç aralığına gerekli tolere edilebilir sınırlar koyabilen kişidir.

Hareketli. Tablo daha da küçüldü ama bu hala yetersiz. Başka bir test yapmamızı hiçbir şey engelleyemez.
A-K sütunlarını kaldırın ve 3 adımına geri dönün.

3-4 testin uygulanmasının ardından 3-5-8 satırdan oluşan tablomuz olacaktır. Bu yeterli, dolayısıyla daha ileri gidiyoruz.


3.6. Set Dosyalarının Oluşturulması.

Birisi buna gerek olmadığını ve 5-8 set parametrenin manuel olarak işlenebileceğini söyleyebilir. Benim için farketmez; isterseniz böyle yapın. Ama rutin işi makinenin benim yerime yapmasını tercih ederim. Tek ihtiyacımız olan "Yaz" makrosunu çalıştırmak ve Strateji Test Aygıtını aşağıdaki Expert Advisor ayarlarıyla "Optimizasyon" modunda son bir kez çalıştırmak:


Şek. 12 Set Dosyalarının Oluşturulması için Expert Advisor Ayarları

Ayarlar, test modunda kullanılanlarla hemen hemen aynıdır, tek fark, bir değişkenin değeri ve son sayaç değeridir.

Optimizasyon sürecinin tamamlanmasının ardından Expert Advisor set dosyaları tester\\files dizininde oluşturulacaktır. İsimdeki son rakam tablomuzdaki satır numarasıdır.


Şek. 13 Oluşturulan Set Dosyaları

Standart Expert Advisor set dosyaları olarak işlenebilirler.

Nitekim artık makalenin konusu da tükendi.


Sonuç

Yukarıda belirtilen bilgiler, geleneksel olarak "Optimizasyon Teorisi" olarak adlandırılan alanda bir keşif olduğunu iddia etmemektedir.... Bu yalnızca pratik bir rehberdir, ne fazlası ne de azı... Bu muhtemelen açıktır ancak yine de bahsetmeyi gerekli buluyorum.
Burada açıklananların tümü, yalnızca yatırımcının işini en üst düzeyde kolaylaştırmak için tasarlanmış bir araçtır. Hiç kimse, grafiğin sağ kenarının dışındaki denge eğrisinin, grafiğin görünen kısmındaki kadar "iyi" görüneceğine dair %100 garanti veremez.

Bir şey daha. Sözcüklerin ve resimlerin sayısı sizi korkutmasın. Aslında her şey oldukça basit ve bu optimizasyonu birkaç kez yaptıktan sonra otomatik olarak yapmayı öğreneceksiniz.

Birinin optimizasyon ve test pencerelerinin nasıl daha verimli hale getirileceği konusunda bir fikri olabileceğine dair bir hissiyatım var...acaba :)

Size iyi şanslar ve kazançlar diliyorum.

Not: Birkaç düzine "fare" manipülasyonunu tanımlamanın bu kadar çok kelime gerektireceğini hiç düşünmemiştim. :)