[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 240

 
artmedia70 :
Ve bunlar, görebildiğin tüm farklar mı?
gördüğüm her şey, çünkü geri kalanına bakmadım, gri kodu okumak uygun değil
 
artmedia70 :

Belki gerekli? :

 //===================================================================================
double CalculateProfit() 
{
   double ld_ret_0 = 0 ;
   for ( int cnt = 0; cnt < OrdersTotal (); cnt++) {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!= Symbol ())           continue ;
         if (OrderType()> 1 )                     continue ;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
       else if (! OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ( "Func: CalculateProfit(), Select Order Error = " , GetLastError ());
         break ;
         }
      }
   return (ld_ret_0);
}
//===================================================================================



Her şey mükemmel çalışıyor!!!!!!!!!!!!
 

Test cihazında üç bool parametresi optimize edilirse, değerlerinin 9 kombinasyonunun tümünü geçeceğini doğru anlıyorum. onlar.

1) bool1=doğru, bool2=doğru, bool3=doğru,
2) bool1=doğru, bool2=doğru, bool3=yanlış,
3) bool1=doğru, bool2=yanlış, bool3=doğru,
4) bool1=doğru, bool2=yanlış, bool3=yanlış vb.
 
eddy :

Test cihazında üç bool parametresi optimize edilirse, değerlerinin 9 kombinasyonunu da çalıştıracağını doğru anlıyorum....

Bana öyle geliyor ki, optimizasyon sırasında bool adım atılamaz. Bunun yerine bir int alıyorum ve 0'dan 1'e koşuyorum.
 

iyi, adım yok. Yoksa atılması gereken bir adım mı var? Sadece bir bool ekleyebileceğinizi düşündüm ve seçenekleri true ve false ile çalıştıracak.

Henüz optimizasyonu hiç kullanmadım, bu yüzden konuyu tanıyorum

 
Dene. Alamadım.
 
daytrader19 :

Değerli meslektaşlarım, MQL programlaması açısından hala tam bir "çaydanlık" sayılırım, bu konuyu çok yakın zamanda incelemeye başladım. Ama ilk Uzman Danışmanımı yazmaya başladım, en azından deniyorum.

Bu konunun 182. sayfasında, bu Uzman Danışmanın ticaret yapması gereken ticaret kriterlerini özetledim. Lütfen orada ne yazdığına bakın (sayfadaki son gönderi). Zaten üç haftadır uğraşıyorum ve kodun alım satım kriterlerinden sorumlu kısmını buraya yazamıyorum. Ders kitabında bu konuya ayrılmış bölümü okudum, ancak bu özel durumda bana yardımcı olmadı.

Programlama ile mücadele ettiğim süre boyunca, kodun bu bölümünün birkaç düzine farklı versiyonunu yazmayı başardım, ama ne yazık ki, hiçbiri gerektiği gibi çalışmıyor. Tabii benim bilgim yeterli değil, MQL çok hızlı ustalaşma. Genel olarak, olması gerektiği gibi, en azından yaklaşık olarak işlem gören kod seçeneklerinden birini yayınlıyorum.

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0 ;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR ( Symbol (), 0 , SARStep, SARMaximum, 0 );
 double EnvUp = iEnvelopes ( Symbol (), 0 , EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1 );
 double EnvDn = iEnvelopes ( Symbol (), 0 , EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1 );
 double StochM = iStochastic ( Symbol (), 0 , StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1 );
 double StochS = iStochastic ( Symbol (), 0 , StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1 );
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
 if (SAR < Low[ 1 ])
   {
    Signal = 3 ;                                                           // Закрытие SELL
     if (StochM > StochS && StochM >= 80 && StochS >= 80 && High[ 1 ] >= EnvUp && SAR < Open[ 1 ])
      Signal = 1 ;                                                         // Открытие BUY
   }   
 
 if (SAR > High[ 1 ])
   {
    Signal = 4 ;                                                           // Закрытие BUY
     if (StochM < StochS && StochM <= 20 && StochS <= 20 && Low[ 1 ] <= EnvDn && SAR > Open[ 1 ])
      Signal = 2 ;                                                         // Открытие SELL
   }   
// - 2 - == Окончание блока =============================================================
}

Kodun tamamen kavisli, eğik ve genellikle bölme konumları olduğunu biliyorum. ve satış takas edilir. Ancak bu, Stokastik ve Zarfların birbirini görmezden gelmeden birlikte ticaret yaptığı tek kod seçeneğidir. Aynı zamanda, bazı nedenlerden dolayı, ticaret yaparken Parabolik sinyaller hiç dikkate alınmaz. Genel olarak, böyle bir "aşırı heveslilik" için beni azarlamamanızı rica ediyorum, kodun doğru olmadığını çok iyi anlıyorum.

Lütfen danışman kodunu düzeltmeme yardım edin. Kronik olarak başarısızım. Birkaç basit stratejiyi (Hareketler + Momentum; Hareketler + RSI ) uygulamak zaten mümkün oldu, ancak bu hiç çalışmıyor. Bana yardım etmen için sana yalvarıyorum. Danışmanın 182. sayfada anlattığım kurallara göre işlem yapması için lütfen yanlış satırları yeniden yazın. Çok gerekli.

s. _ S .: Hazır MQL şablonları kullandığım için EA kodunu tam olarak yayınlamadım .

Sanırım ana (belki de tek değil) hatamın ne olduğunu anladım. Alım satım kriterlerimdeki tüm koşullar mantıklı bir "ve" ile birleştirilmiştir. Anladığım kadarıyla bu, tüm koşulların aynı anda yerine getirilmesi gerektiği anlamına geliyor. Ve sistemin kurallarına göre, bu yanlış, Zarflar ve Stokastik sinyaller senkronize olmalı - evet. Ancak Parabolic , Envelopes ve Stochastic'ten sinyal aldıktan sonra işlemin açılışını onaylamalıdır . Hatta 5-10 bar sonra bir onay verebilir (ve bu oldukça normaldir).

Soru: Bu "sonra" koda nasıl yazılır? Mümkünse, lütfen kodumu örnek olarak kullanarak gösterin.
Bana yardım etmen için sana yalvarıyorum. Bu ticaret kriterlerinden sadece bıktım.
 
eddy :

Test cihazında üç bool parametresi optimize edilirse, değerlerinin 9 kombinasyonunun tümünü geçeceğini doğru anlıyorum. onlar.


İkinin üçüncü kuvveti her zaman sekizdi :-)
 
daytrader19 :

Sanırım ana (belki de tek değil) hatamın ne olduğunu anladım. Alım satım kriterlerimdeki tüm koşullar mantıklı bir "ve" ile birleştirilmiştir. Anladığım kadarıyla bu, tüm koşulların aynı anda yerine getirilmesi gerektiği anlamına geliyor. Ve sistemin kurallarına göre, bu yanlış, Zarflar ve Stokastik sinyaller senkronize olmalı - evet. Ancak Parabolic , Envelopes ve Stochastic'ten sinyal aldıktan sonra işlemin açılışını onaylamalıdır . Hatta 5-10 bar sonra bir onay verebilir (ve bu oldukça normaldir).

Soru: Bu "sonra" koda nasıl yazılır? Mümkünse, lütfen kodumu örnek olarak kullanarak gösterin.
Bana yardım etmen için sana yalvarıyorum. Bu ticaret kriterlerinden sadece bıktım.


Öyleyse deneyin, kod kurallarınız tam burada sayfada - kendim kontrol etmedim - yorumlara dikkat edin.

Hepsi 182 sayfadaki açıklamaya göre.

 bool Buy_signal=false, Sell_signal=false; // эту строку разместить в глобальные переменные эксперта!!!!!!!!!!

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0 ;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR ( Symbol (), 0 , SARStep, SARMaximum, 1 );                             // тут тоже правки в коде - вместо "0"-го используем первый бар 
 double EnvUp = iEnvelopes ( Symbol (), 0 , EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1 );
 double EnvDn = iEnvelopes ( Symbol (), 0 , EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1 );
 double StochM1 = iStochastic ( Symbol (), 0 , StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1 );
 double StochS1 = iStochastic ( Symbol (), 0 , StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1 );
 double StochM2 = iStochastic ( Symbol (), 0 , StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 2 );
 double StochS2 = iStochastic ( Symbol (), 0 , StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 2 );

// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
   if (SAR > High[ 1 ]) {Buy_signal=false; Sell_signal=false;                                 // сбрасываем флаги условий открытия по стохастику и энвелопсу 
                       Signal = 4 ;}                                                         // Закрытие BUY

   if (SAR < Low[ 1 ])  {Buy_signal=false; Sell_signal=false;

                       Signal = 3 ;}                                                          // Закрытие Sell

    
   if ( StochM2 < StochS2 && StochM1 > StochS1 &&  StochM1 <= 20 && Low[ 1 ] <= EnvDn)        // ставим флаги условий открытия по стохастику и энвелопсу в лонг 
       { 
          Buy_signal=true;
          Sell_signal=false;
        }          
    if (SAR < Low [ 1 ] && Buy_signal==true &&  Sell_signal==false) 
         Signal = 1 ;                                                         // Открытие BUY
      
 
     
   if ( StochM2 > StochS2 && StochM1 < StochS1 &&  StochM1 >= 80 && High[ 1 ] >= EnvUp)        // ставим флаги условий открытия по стохастику и энвелопсу в шорт
       { 
          Buy_signal=false;
          Sell_signal=true;
        }          
    if (SAR > High [ 1 ] && Buy_signal==false &&  Sell_signal==true) 
          Signal = 2 ;                                                         // Открытие SELL
      
// - 2 - == Окончание блока =============================================================
}
 
Roger :

İkinin üçüncü kuvveti her zaman sekizdi :-)

Güzel not :-)))