Kutsal Kase'nin Peşinde... - sayfa 9

 
Hoper23 >> :
Sorun şu ki, görevin amacı son derece açık, ancak MQL dilinde uygulanma olasılığı belirsiz görünüyor, çünkü test cihazı optimize edicinin yerleşik dizisinin işlevine henüz aşina değilim. Şimdi MQL'deki kullanım kılavuzunu yeniden okumaya çalışıyorum ama henüz bu bloğu bulamıyorum. Ancak çekirdekten kendi kendine yapılan optimize edici güven vermeyen bir şey değil, sadece biraz anlaşılmaz. Orada, değişkenler bir şekilde karışıktır, ek açıklamalar yoktur ve daha önce önerilen bağlantıdan uygulanabilir sürümde temel olarak farklıdırlar. Zor değilse, sevgili çekirdek, 19 parametrenin tümünü sıkıştırabilmeniz ve sonucu otomatik olarak düzeltebilmeniz için güncel optimize ediciye bakış açınızı açıklayın.

Bunu bir programcıdan duymak benim için garip, ama onu raflara koymaya çalışacağım (çiğnemeye değil):

1. N sayıda giriş parametresi olan bir fonksiyonunuz olduğunu varsayalım.

fonksiyon(n1,n2,..,n19);

2.Parametreler

n1, n1Step adımlarında n1Min'den n1Max'e değişir

....

n19, n19Step adımlarında n19Min'den n19Max'e değişir


Şunlara ihtiyacınız var:

- Gelen parametrelerin tümünü (doğrusal yöntem için) veya tümünü değil (hızlı yakınsama yöntemi için) gelen parametreleri numaralandırın.

Biri genetik algoritma olmak üzere, hızlı bir şekilde yakınsamanın birçok yolu vardır.

- Girdi olarak her yeni parametre kümesi sağladığınızda, işlevin çıkışında işlevin yürütülmesinin sonucunu alırsınız.

- Bu sonuçları analiz etmek için bir blok yazmanız gerekiyor, bu sonucun ne kadar olduğuna karar verecek

iyi.

Anladığım kadarıyla analiz ünitesinde zorluk yaşıyorsunuz. Çünkü bir fonksiyonun nasıl yazılacağını veya nasıl yazılacağını bilmiyorsanız

gelen parametreleri sıralayın, o zaman bu benim için değil, bazı programlama kursları veya çiğnemeyi sevenler için

programlamanın temelleri.

Ayrıştırma bloğu ne yapar:

1. Analiz etmek istediğiniz en eski BAR_Y çubuğunu alır ve Y anındaki veri akımını

işlev. Onlar. işleviniz BAR_Y'nin TimeCurrent olduğunu düşünüyor.

2. Şimdi, fonksiyon(n1,n2,..,n19) 0 çubuğunda olsaydı alacağı kadar geçmiş derinliğinde çubuk alırız.

ve bir sonuç elde ederiz.

Örneğin, stratejiniz iMA3,iMA2,iMA1 tarafından bir ekstremum arıyor. Sonra iMA_Y+2,iMA_Y+1,iMA_Y var

Bu bir ekstremum nokta ise dururuz, değilse Y++ yaparız;

TAMAM. t konumundaki ekstremum noktasını bulduk, yani. iMAt+2,iMAt+1,iMAt

3.Şimdi TP mi yoksa SL mi çalışacağını hesaplamamız gerekiyor

Onlar. t noktasından t-1 çubuklarını azaltmak için bir adım atıyoruz ve Açık[t] ile Yüksek[t] ve Düşük[t] arasındaki mesafeyi analiz ediyoruz,

ve sonra Açık[t]'dan Yüksek[t-1]'e ve Düşük[t-1]'e, TP veya SL gelmediyse, devam edin - çalışana kadar t-2'yi vb.

TP veya SL veya her ikisi.

Burası Function(n1,n2,..,n19) için İLK koşulu bulduğumuz yer.

sonucu kaydediyoruz

Daha sonra t-- ve analiz işlemini bar 0'a kadar gerçekleştiriyoruz.

4.Shift Y-- ve işlemi tekrarlayın.

Böylece Function(n1,n2,..,n19) fonksiyonumuzun o ana kadarki tüm işlemlerini buluyoruz.

5. İçinde bulunduğumuz anı analiz eder ve geçmişte benzer durumlar olup olmadığını ve nasıl sona erdiğini görürüz.

6. Sonucu kaydedin.

7. Function(n1,n2,..,n19) için bir sonraki parametre n1,,n19 setini alıyoruz ve kontrol ediyoruz.

8. bu yüzden parametreler bitene kadar tekrarlayın.

9. En iyi parametre setini veya birkaç seti seçeriz ve tavsiyelerine göre SATIN AL, SAT veya

hiçbir şey yapmıyoruz.

Bu kadar.

Umarım zordur çünkü GERÇEKTEN zor.


 
Hoper23 >> :
Sorun şu ki, görevin amacı son derece açık, ancak MQL dilinde uygulanma olasılığı belirsiz görünüyor, çünkü test cihazı optimize edicinin yerleşik dizisinin işlevine henüz aşina değilim. Şimdi MQL'deki kullanım kılavuzunu yeniden okumaya çalışıyorum ama hala bu bloğu bulamıyorum. Ancak çekirdekten kendi kendine yapılan optimize edici güven vermeyen bir şey değil, sadece biraz anlaşılmaz. Orada, değişkenler bir şekilde karışıktır, ek açıklamalar yoktur ve daha önce önerilen bağlantıdan uygulanabilir sürümde temel olarak farklıdırlar. Zor değilse, sevgili çekirdek, 19 parametrenin tümünü sıkıştırabilmeniz ve sonucu otomatik olarak düzeltebilmeniz için güncel optimize ediciye bakış açınızı açıklayın.

Bu arada, bir değer numaralandırma bloğu ile başlamayın - onu yazmak bir analizörden çok daha kolaydır.

Ve yukarıdakilerin tümü sizin için çok karmaşık görünüyorsa, xeon'dan bir otomatik optimize edici arayın.

MetaTrader optimize ediciyi kullanır. Yerleşik bir otomatik optimizasyon özelliği aramayın. O değil.

 
Figar0 >> :

İşte göstergede yerleşik bir GA optimize ediciye sahip klot göstergesi.

Hoper23 genetik analizinin, bağlantı kopmuş olsun ya da olmasın, ulaşamayacağını düşünüyorum.

Özellikle de kırılmadığı için.

 

thecore==> sizin mantığınıza ve benimkine göre, genel anlamda (S = Sstart; S <= Gönder; S += Sstep) için çıkıyor. İşte aldığım şey

 void Optimization ( )
{
 int StartBar = iBarShift ( Symbol ( ) , 0 , TimeCurrent ( ) - 60 * ( EndDate + OptimDuration ) ) ;
 int EndBar = iBarShift ( Symbol ( ) , 0 , TimeCurrent ( ) - 60 * EndDate ) ;
 int Count = 0 ;
 double CurRF = - 999999 ;
 ArrayInitialize ( EqualProfit , 0 ) ;
 ArrayInitialize ( TransCount , 0 ) ;
 ArrayInitialize ( MaxDrowDown , 0 ) ;
 for ( S = Sstart ; S < = Send ; S + = Sstep )
 for ( O = Ostart ; O < = Oend ; O + = Ostep )
 for ( I = Istart ; I < = Iend ; I + = Istep )
 for ( G = Gstart ; G < = Gend ; G + = Gstep )
 for ( M = Mstart ; M < = Mend ; M + = Mstep )
 for ( CC = CCstart ; CC < = CCend ; CC + = CCstep )
 for ( CCI = CCIstart ; CCI < = CCIend ; CCI + = CCIstep )
 for ( F_EMA = F_EMAstart ; F_EMA < = F_EMAend ; F_EMA + = F_EMAstep )
 for ( S_EMA = S_EMAstart ; S_EMA < = S_EMAend ; S_EMA + = S_EMAstep )
 for ( SMA = SMAstart ; SMA < = SMAend ; SMA + = SMAstep )
 for ( stK = stKstart ; stK < = stKend ; stK + = stKstep )
 for ( stP = stPstart ; stP < = stPend ; stP + = stPstep )
 for ( stD = stDstart ; stD < = stDend ; stD + = stDstep )
 for ( W = Wstart ; W < = Wend ; W + = Wstep )
 for ( H = Hstart ; H < = Hend ; H + = Hstep )
 for ( C = Cstart ; C < = Cend ; C + = Cstep )
 for ( Skill = Skillstart ; Skill < = Skillend ; Skill + = Skillstep )
 for ( SkillMAX = SkillMAXstart ; SkillMAX < = SkillMAXend ; SkillMAX + = SkillMAXstep )
 for ( shirina = shirinastart ; shirina < = shirinaend ; shirina + = shirinastep )
   {
    int CurTrans = 0 ;
    double CurOpenPrice = 0 ;
    int EqualMax = 0 ;
    int EqualMin = 0 ;
     for ( int i = StartBar ; i > = EndBar ; i - - )
      {
       EqualMin = MathMin ( EqualProfit [ Count ] , EqualMin ) ;
       if ( EqualProfit [ Count ] > EqualMax )
        {
         MaxDrowDown [ Count ] = MathMax ( MaxDrowDown [ Count ] , EqualMax - EqualMin ) ;
         EqualMax = EqualProfit [ Count ] ;
         EqualMin = EqualMax ;
        }
        MaxDrowDown [ Count ] = MathMax ( MaxDrowDown [ Count ] , EqualMax - EqualMin ) ;
    if ( EqualProfit [ Count ] ! = 0 )
     if ( CurRF < MaxDrowDown [ Count ] / EqualProfit [ Count ] )
      {
       CurRF = MaxDrowDown [ Count ] / EqualProfit [ Count ] ;
       int Num = Count ;
       int BestS = S ;
       int BestO = O ;
       int BestI = I ;
       int BestG = G ;
       int BestM = M ;
       int BestCC = CC ;
       int BestCCI = CCI ;
       int BestF_EMA = F_EMA ;
       int BestS_EMA = S_EMA ;
       int BestSMA = SMA ;
       int BeststK = stK ;
       int BeststP = stP ;
       int BeststD = stD ;
       int BestW = W ;
       int BestH = H ;
       int BestC = C ;
       int BestSkill = Skill ;
       int BestSkillMAX = SkillMAX ;
       int Bestshirina = shirina ;

        }
     
    Count + + ;
   } // Цикл переменных 
 
   
 Alert ( "Оптимизация завершена. Прибыль max " , EqualProfit [ Num ] , " пунктов. Сделок " , TransCount [ Num ] , ". Просадка " , MaxDrowDown [ Num ] ) ;
 Alert ( "Параметры: S = " , BestS , ", O = " , BestO , ", I = " , BestI , ", G = " , BestG , ", M = " , BestM , ", CC = " , BestCC , ", CCI = " , BestCCI ,
  ", F_EMA = " , BestF_EMA , ", S_EMA = " , BestS_EMA , ", SMA = " , BestSMA , ", stK = " , BeststK , ", stP = " , BeststP , ", stD = " , BeststD ,
   ", W = " , BestW , ", H = " , BestH , ", C = " , BestC , ", Skill = " , BestSkill , ", SkillMAX = " , BestSkillMAX , ", shirina = " , Bestshirina ) ;
 LastOptim = TimeCurrent ( ) ;
 GlobalVariableSet ( "LastOptimization" , LastOptim ) ;
 if ( CurRF < 0 )
  if ( MessageBox ( "Фактор восстановления меньше нуля./nПринимать данные оптимизированные параметры?" , "Вопрос" , MB_YESNO ) = = IDNO ) 
    return ;    
        BestS = S ;
        BestO = O ;
        BestI = I ;
        BestG = G ;
        BestM = M ;
        BestCC = CC ;
        BestCCI = CCI ;
        BestF_EMA = F_EMA ;
        BestS_EMA = S_EMA ;
        BestSMA = SMA ;
        BeststK = stK ;
        BeststP = stP ;
        BeststD = stD ;
        BestW = W ;
        BestH = H ;
        BestC = C ;
        BestSkill = Skill ;
        BestSkillMAX = SkillMAX ;
        Bestshirina = shirina ;

 GlobalVariableSet ( "AutoS" , S ) ;
 GlobalVariableSet ( "AutoO" , O ) ;
 GlobalVariableSet ( "AutoI" , I ) ;
 GlobalVariableSet ( "AutoG" , G ) ;
 GlobalVariableSet ( "AutoM" , M ) ;
 GlobalVariableSet ( "AutoCC" , CC ) ;
 GlobalVariableSet ( "AutoCCI" , CCI ) ;
 GlobalVariableSet ( "AutoF_EMA" , F_EMA ) ;
 GlobalVariableSet ( "AutoS_EMA" , S_EMA ) ;
 GlobalVariableSet ( "AutoSMA" , SMA ) ;
 GlobalVariableSet ( "AutostK" , stK ) ;
 GlobalVariableSet ( "AutostP" , stP ) ;
 GlobalVariableSet ( "AutostD" , stD ) ;
 GlobalVariableSet ( "AutoW" , W ) ;
 GlobalVariableSet ( "AutoH" , H ) ;
 GlobalVariableSet ( "AutoC" , C ) ;
 GlobalVariableSet ( "AutoSkill" , Skill ) ;
 GlobalVariableSet ( "AutoSkillMAX" , SkillMAX ) ;
 GlobalVariableSet ( "Autoshirina" , shirina ) ;
Sonra durdurucu - Olumlu bir sonucu nasıl düzelteceğimi ve bunu otomatik olarak bir değişkene nasıl değiştireceğimi bilmiyorum.
 
Hoper23 писал(а) >>

Yyyyy..... "Sizi bu sayfaya getiren bağlantı öldü veya silindi." Nishtyak yönü!!! Yön gibi bir şey - x'e gidin ... d. (Alınmayın, eğlence amaçlı)

İşte teşekkürler), bağlantı için bana, bir tabakta aslında hazır çözüm için klot'y), orada hem test edici hem de optimize edici var, sadece ihtiyaçlarınıza göre biraz değiştirin ... Ve her şey açılır.

 

Cevap veriyorum açılmıyor!


 
Hoper23 >> :

thecore==> sizin mantığınıza ve benimkine göre, genel anlamda (S = Sstart; S <= Gönder; S += Sstep) için çıkıyor. İşte aldığım şey

1. Sorunu kafa kafaya çözmeye çalışmayın.

Tüm olası çözümler için neden TÜM seçenekleri kaydetmeniz gerekiyor?

Matematik problemi çözmüyorsun. Tarihte sahip olduğunuza benzer bir durum arıyorsunuz

bugün ve şimdi ne yapacağına karar vermek için gelişti.

Bu nedenle, önce mevcut durumu tanımlayın ve özellikle onu arayın.

Bu, geçişlerin, değişkenlerin ve sonuçların sayısını TIMES kadar azaltacaktır.

Sonra durdurucu - Olumlu bir sonucu nasıl düzelteceğimi ve bunu otomatik olarak bir değişkene nasıl değiştireceğimi bilmiyorum.

İlk aşamada bir dosyaya kaydettim. Yaklaşık 10.000-50.000 kazanan seçeneğin geçmişi ortaya çıktı.

daha sonra Excel'de analiz edildi.

2. Tam bir eşleşme aramayın. Sinüzoidi tarif etmiyoruz.

3. Önce BİR değişken için bir veri toplama bloğu yazın, hata ayıklayın ve ardından 18 tane daha veya kaç tane varsa ekleyin.

 

İyi. Fikir mantıklı. Peki, tek parametreli kombinasyonlar için optimizasyon formülü nasıl çözülür ??? Bütün mesele, bu örnekte bunların birbirine bağlı olmasıdır. MQL dilindeki sınırlamalarım nedeniyle henüz başka bir örnek bilmiyorum.

Combination = MathFloor((L1End-L1Start)/L1Step)*MathFloor((L2End-L2Start)/L2Step);
 

Bu muck çevrimdışı optimize etmek için tasarlanmıştır

 extern int setWeek   = 0 ;          //День недели старта оптимизации
extern int setHour   = 02 ;         //Час старта оптимизации
extern int setMinute = 25 ;         //Минута старта оптимизации
extern int ProgNumber = 2 ;          //номер программы оптимизации
extern bool OptimStart = false ;
extern bool report = false ;
#include <MacroAutoOptimization.mqh> 


int init ( ) {


 if ( IsOptimization ( ) ) {
    string Str ;
    int Cmd , Step , HandleStep ;    
    HandleStep = FileOpen ( "ExpertMessage.csv" , FILE_CSV | FILE_READ | FILE_WRITE , 0x7F ) ;
    if ( HandleStep > 0 ) {
       Str  = FileReadString ( HandleStep ) ;
       Cmd  = StrToInteger ( StringSubstr ( Str , 0 , StringFind ( Str , ";" , 0 ) ) ) ;
       Step = StrToInteger ( StringSubstr ( Str , StringFind ( Str , ";" , 0 ) + 1 , StringLen ( Str ) - StringFind ( Str , ";" , 0 ) - 1 ) ) + 1 ;
       FileSeek ( HandleStep , 0 , SEEK_SET ) ;
       FileWrite ( HandleStep , Cmd + ";" + Step ) ;
       FileClose ( HandleStep ) ;
  } } 

  
   return ( 0 ) ;
  }


int deinit ( )
  {
   Comment ( "Привет!" ) ;
   return ( 0 ) ;
  }

int start ( )
{

 if ( IsOptimization ( ) = = false & & IsTesting ( ) = = false ) {
        double Itog [ ] [ 17 ] ;
        int TecWeek = TimeDayOfWeek ( TimeLocal ( ) ) ;
        int TecHour = TimeHour ( TimeLocal ( ) ) ;
        int TecMinute = TimeMinute ( TimeLocal ( ) ) ;
        if ( ! OptimStart ) {  
           if ( TecWeek = = setWeek ) {  
              if ( TecHour = = setHour ) { 
                 if ( TecMinute > = setMinute & & TecMinute < setMinute + 4 ) { 
                    if ( AutoStart ( ProgNumber , Itog ) < 0 ) { Print ( "Оптимизация завершилась неудачей!" ) ; }
                    deinitialization ( ) ;
                    OptimStart = true ;
                    report = true ;
        } } } }
        if ( TecHour ! = setHour ) { OptimStart = false ; }              //Обнуление флага старта оптимизации
        if ( ArrayRange ( Itog , 0 ) > 0 ) {
//         Переменные для оптимизации
           stK     = Itog [ 0 ] [ 7 ] ;
           stP   = Itog [ 0 ] [ 8 ] ;
           stD  = Itog [ 0 ] [ 9 ] ;
           W = Itog [ 0 ] [ 10 ] ;
           H  = Itog [ 0 ] [ 11 ] ;
           C  = Itog [ 0 ] [ 12 ] ;
           CCI  = Itog [ 0 ] [ 13 ] ;
           F_EMA  = Itog [ 0 ] [ 14 ] ;
           S_EMA  = Itog [ 0 ] [ 15 ] ;
           SMA  = Itog [ 0 ] [ 16 ] ;
           shirina  = Itog [ 0 ] [ 17 ] ;
           S  = Itog [ 0 ] [ 18 ] ;
           O  = Itog [ 0 ] [ 19 ] ;
           I  = Itog [ 0 ] [ 20 ] ;
           M  = Itog [ 0 ] [ 21 ] ;
           G  = Itog [ 0 ] [ 22 ] ;
           CC  = Itog [ 0 ] [ 23 ] ;
           if ( report ) {
              Print ( "Новые параметры " , stK , " | " , stP , " | " , stD , " | " , W , " | " , H , " | " , C , " | " , CCI , " | " , F_EMA , " | " , S_EMA , " | " , SMA , " | " , shirina , " | " , S , " | " , O , " | " , I , " | " , M , " | " , G , " | " , CC ) ;
              report = false ;
     } } }   

İncil ona gider

 бла-бла-бла

Ve hala onun İncil'ine

 бла-бла-бла

VE NİCHRE'Yİ TAŞLAMAZ ... daha doğrusu, kaotik bir şey kendi içinde harekete geçer, çift gerilir, ancak değişkenlerde hiçbir değişiklik olmaz ve akıllıca bir şey yapar - birkaç saniye ve bu kadar. Anlamıyorum.
 
Hoper23 >> :

Bu muck çevrimdışı optimize etmek için tasarlanmıştır

İncil ona gider

Ve hala onun İncil'ine

VE NİCHRE'Yİ TAŞLAMAZ ... daha doğrusu, kaotik bir şey kendi içinde harekete geçer, çift gerilir, ancak değişkenlerde hiçbir değişiklik olmaz ve akıllıca bir şey yapar - birkaç saniye ve bu kadar. Anlamıyorum.



xeon'dan otomatik optimize edici ile çalışmaya başladınız

TestCommander (otomatik optimizasyon) Tüccar Aracı

öyleyse ona sor.

Bu arada yanlış hatırlamıyorsam bu ürün zaten ücretliydi.

Yardımı var, orada her şey açıkça anlatılıyor.

Neden: