Strateji arayışının otomatikleştirilmesi. - sayfa 3

 
Aliaksandr Hryshyn:

Gerçekten de pek çok küçük şey var.

Evrensel bir sistem yapmaya çalışıyorum, böylece minimum çabayla göstergeleri, mum çubuklarını vb. analiz etmek için farklı olasılıklar eklemek mümkün. Her fonksiyonun hangi verilerle çalışabileceği ve hangi verilerin çıktısının alınacağı hakkında bilgileri vardır. Göstergeler, ne tür veriler sağladıkları da açıklanacaktır. Veriler hem basit hem de karmaşık türlere ayrılır, örneğin {double} ve {int,double}. Kategorilere ayrılırlar, aynı örnek için "fiyat" ve "grafikteki pozisyonlar", başka bir örnek: "düz çizgi" (kanalları tanımlamak için kullanılabilir), vb. "Ölçek türüne" göre kategorize edilir, örneğin "sabit" (strateji parametresi), "endeks" (minimum ve maksimum vardır), "oran" (yalnızca bir referans noktası vardır, örneğin fiyat, hacim) vb. Stratejiyi tutarlı bir şekilde değiştirmek gerekir, böyle bir nüans vardır, bir yerdeki değişiklik başka bir yerdeki değişiklik koşullarını etkileyebilir.

Bu doğru... Aramanın kombinasyon sayısını azaltmak ve yukarıdaki kısıtlamaları (tür, ölçek, kategori) kullanmak için şimdilik yeterli olacaktır ve nokta değişiklikleri (bir / birkaç işlev ekleme / çıkarma).

"rekombinasyon da kendiliğinden, ancak tüm hazır çözümlerin" - bu düşünce akla geldi), nasıl gerçekleştirilebileceğini hayal etmek zordur. Birleştirilmiş bir grup işlevin "dış dünya" ile tek bir işlevden daha fazla bağlantısı olacaktır, dolayısıyla hepsini bir araya getirmek için daha az fırsat olacaktır. Algoritma çok karmaşık hale gelir, bunu daha iyi zamanlara bırakalım)).

Düşünceme açıklık getireyim. Varyant sayısını azaltmak ve birindeki değişikliğin diğer blokları etkilememesi için daha da evrensel olmalıdır. İşin püf noktası, aynı görevlerin farklı yöntemlerle gerçekleştirilebilmesi ve genellikle hangisinin daha iyi olduğunun önceden belli olmamasıdır. Örneğin, TRANSFORMASYON adı verilen belirli bir evrensel görev tanımladık. Her biri bu evrenselliği kendi yöntemiyle tanımlayan yaklaşık bir düzine osilatör var. Osilatör komut dosyasında görevi TÜM göstergeleri veya tüm yöntemleri deneyecek şekilde ayarladığımızı varsayalım. O zaman bu blokların kodun geri kalanıyla etkileşimini standart hale getirmeliyiz. Diyelim ki etkileşim standardını en üstteki yüzdeler olarak seçtik. Oluşturucu sırayla koda Oversold1 adında bir blok parçası ekler, bu blokta test edilecek değişkenleri bulur, bir volkin-forward çalıştırır ve test sonuçlarını hatırlar. Daha sonra, orijinal göstergenin tam sayıları göstermesine ve hatta sıfırdan farklı bir işarete sahip olmasına rağmen, yüzdeleri de veren Oversold 2 bloğu ile Uzman Danışmanın yeni bir sürümünü hazırlar. Testin sonunda, en başarılı bloğu bırakır ve başka bir göreve geçer.

Aynı zamanda, başlamak için çok fazla blok hazırlamak gerekli değildir, 2 veya 3 blok yeterli olacaktır. Önemli olan etkileşim kurmaktır.

Bağımlılıklar için de aynı şey geçerlidir. A, B, C var. İlk olarak, eğer A B'den büyükse, C doğrudur. Sonra eğer B A'dan büyükse ve bu böyle devam eder.

Daha sonra daha karmaşık etkileşimlere geçebiliriz.

 

"Seçenek sayısını azaltmak ve birindeki değişikliğin diğer blokları etkilememesi için ÇOK daha çok yönlü olmalıdır." => "Diyelim ki etkileşim standardını seçtik - üstteki yüzdeler." - Demek istediğinizi anladım)). Göstergeleri tek bir görünüme getirmeyi, yani ön işlemeyi içerir. Benim sistemimde her şey çok biçimsel, hepsini tutmak istiyorum, zaten ölçek, kategori gibi şeyleri uygulamak için çalışıyorum, zaten nasıl yapılacağını buldum, gerçekten bazı blokların bağlantısı var, diğer yerlerdeki blokların bağlantısını etkiliyor. Göstergelerin standardizasyonu, göstergenin kendisinin açıklamasından geçer ve buna bağlı olarak belirli bloklar otomatik olarak bağlanır. Bloklardan biri kolayca bir değerin diğerinden yüzdesinin hesaplanması olabilir, sadece bu değerlerin aralarında kontrol edilecek bir bağlantıya sahip olması gerekir, örneğin:

  1. Yüzde( Açık[0] , Açık[3] )
  2. Yüzde(Açık[0], Timsah[3])
  3. Yüzde(Hacim[0], Timsah[3])

1. ve 3. seçenekler iyi ve mantıklı, ancak 3 mantıklı değil.

Endeksler de hesaplanacaktır, örneğin Open[ Max_on_position(iAC,0,30) ] ]

 
Youri Tarshecki:

Aynı zamanda, başlangıçta çok fazla blok hazırlamak gerekli değildir, 2 veya 3 blok yeterli olacaktır. Önemli olan etkileşim kurmaktır.

Bağımlılıklar için de aynı şey geçerlidir. A, B, C var. Önce A'nın B'den büyük olup olmadığını, sonra C'nin doğru olup olmadığını, sonra da B'nin A'dan büyük olup olmadığını kontrol ederiz.

Daha sonra daha karmaşık etkileşimlere geçebiliriz.

Zaten var.

Aşağıdaki şekilde uygulanmaktadır:

  1. int, double, bool gibi temel tipler vardır
  2. karmaşık tipler temel tiplerden oluşturulur (bunları ekleyebilirsiniz), örneğin (int,double) - grafikte koordinat, (x,b) - çizgi denkleminin katsayıları, (a,b,c,d) - en fazla 4 değer için destek.
  3. göstergeler bir elemanlı karmaşık tipler kümesi olarak temsil edilir
  4. sabitler karmaşık tipler olarak temsil edilir, bunlar optimize edilen strateji parametreleridir
  5. fonksiyonlar belirli karmaşık değişken türlerini girdi olarak alır, bunların sayısı sınırlı değildir, çıktı da karmaşık türlerdir.
  6. fonksiyonlar bu verilerin nereden geldiğini umursamaz, önemli olan türlerin bir yazışması olmasıdır
  7. mql4'te mevcut olan tüm siparişler desteklenir (6 adet)
  8. strateji yalnızca bir tür emir tanımlar (al veya sat veya buy_stop veya ...)
  9. beklemede olmayan emirler için grafiğin üstünde 4 düğüm vardır: piyasaya giriş koşulu, çıkış koşulu, tp ve sl.
  10. bloklar (grafiğin fonksiyonları / düğümleri) göstergelerden, sabitlerden, diğer düğümlerden giriş parametreleri alabilir, diğer birçok düğümün bir düğümün sonucundan giriş parametreleri olarak veri almasına izin verilir, grafikte döngülere izin vermenin imkansız olması dışında herhangi bir kısıtlama yoktur.
  11. Daha sonra grafik sıralı bir koda çevrilir ve bu kod yürütme için Uzman Danışmana gönderilir, MQL'de hiçbir şeyin derlenmesine gerek yoktur.
İşte örnek bir kod:

#define
 symbol          GBPUSD;
period          60;
repeat_signal_skip      True;
stop_level              60;
trade           op_buy;
max_shift               13;
stack           4;
const           9;
cache           1;
#data
{True},{-1.26761795},{4.67108999},
{2.08088665},{-0.33782435},{22},
{1.63150050},{-11},{-0.22006371};
#program
 push    [0];
push    [1];
push    [2];
call    F_plus_d;
push    [3];
push    [4];
call    F_plus_d;
push    [5];
get     .Ichimoku_2;
call    F_plus_d;
push    [6];
call    F_minus_d;
save    [0];
push    [7];
get     .Open;
call    F_plus_d;
call    F_less;
load    [0];
push    [8];
#end

Henüz her şey yapılmadı, gerekli tüm bilgiler kodda değil, kod tip kontrolü açısından doğru şekilde yürütülüyor, anlamsız ifadeler henüz dikkate alınmıyor.

Kodda sadece basit tipler kullanılmıştır.

 

Stratejilerin HTTP protokolü aracılığıyla iletilebileceğini varsayıyorum, MQL'in bu şekilde stratejileri alma imkanı var.

Her şeyi tamamen otomatik hale getirmek, stratejileri aramak, strateji portföyleri oluşturmak, Uzman Danışmana aktarmak vb.

MQL'deki sistemin bir kısmı% 90 hazır, birçok stratejiyle çalışıyor (pozisyon kontrolü, riskler, hata işleme vb.).

Hala yapılması gereken çok iş var.

 
Yuriy Asaulenko:
Eğer bir strateji arıyorsanız, bu hiç de kolay değil. Gerisini bilmiyorum, hiç düşünmedim. Yine de, herhangi bir modelleme özel ortamlarda daha kolaydır, MT'de değil. MT nihai bir üründür, araştırma için yaratılmamıştır ve bunun için çok uygun değildir
Katılıyorum, başlangıçta bu fikri Matlab'da kendim modelledim. Yine de, MT test cihazı bir kara kutu.
 
Aliaksandr Hryshyn:
İşte anlamsız bir ifadeye başka bir örnek: =Yüksek>(Açık-Kapalı), bu da geçmeyecektir.

Neden anlamsız olduğunu açıklayın. Gerçekten, ben olsam şöyle yazardım

=High>MathAbs(Open-Close)

ю

 

Aliaksandr Hryshyn:

daha sonra grafik bir seri koda çevrilir ve bu kod yürütme için Uzman Danışmana gönderilir, MQL'de hiçbir şeyin derlenmesine gerek yoktur.


Nasıl, lütfen açıklayın?
 

Her zaman true dönecektir)).

(Açma-Kapama) her zaman (Yüksek) değerinden küçük olacaktır

 
Alexey Volchanskiy:

Nasıl olduğunu açıklar mısınız lütfen?
Hangisi, yayın mı yoksa performans mı?
 
Aliaksandr Hryshyn:

Her zaman true dönecektir)).

(Açma-Kapama) her zaman (Yüksek) değerinden küçük olacaktır

Frenleme ))))))))))