[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 366

 
lottamer :


onay kutuları yok.

belki de danışman içindeki normalleşme eksikliği böyle bir etki yaratır.

ancak, giriş parametreleri sekmesinin görünümü elde edildiğinde, optimizasyonun kendisi gerçekleşmez.

Test cihazı bir şeyler yapıyor, aşağıda mevcut yineleme sayısını görebilirsiniz (7/ 62), ancak tamamlandıktan sonra sekmelerde optimizasyon sonuçları ve optimizasyon grafiği BOŞ!

parametredeki onay işareti essno'dur ....

Hangi yoldan gideceğimi bile bilmiyorum...


Test sırasında yayılma bilinen hiçbir şekilde değişmediği için, test cihazı değişmemiş verilerle sonuçların tekrarlanabilirliğini sağlamaz.

Tıp: https://www.mql5.com/ru/forum/119830

 
Chiripaha :

Boş değerler, belirli parametrelerin optimizasyonunun sonucunun kârsız olduğunu gösterebilir - yani. boşaltmak. Görselleştirme ile parametrelerden birini çalıştırmayı deneyin ve bu sonucu görebilirsiniz.

Normalleşme konusunda da böyle bir etki olmayacağını düşünüyorum çünkü. değerler aynı olduğundan, matematiksel sayılar tamamen aynı olacaktır - dolayısıyla değişiklik olmaz.

"Hangi yönde düşünmeli" hesabından - Bazen düşünmemek ve soruyu bir kenara bırakmak daha iyidir - Fikir ve düşünceler biraz sonra gelir. Beyne gerginlik olmadan manevra yapma, rahatlama ve düşünme fırsatı vermek gerekir.


1. danışman kârlıdır.

2. Ellerimle kontrol ettim - tüm parametre aralığında karlı. Sadece aralığı biraz genişletmek ve daha küçük bir adım atmak istedim.

 
tara :


Test sırasında yayılma bilinen hiçbir şekilde değişmediği için, test cihazı değişmemiş verilerle sonuçların tekrarlanabilirliğini sağlamaz.

Tıp: https://www.mql5.com/ru/forum/119830



yayılma dalgalanıyor mu? düzeltilemez.

başka bir şey de, tarihe sabitlenmesi gerektiğidir ...

genel olarak, sonuç biraz yüzer ve işlem sayısı değişmez ... bu nedenle bu soru beni çok korkutmuyor ...

Nifiga'nın optimize edicisinin çalışmadığı başka bir konu! bu can sıkıcı...

Test cihazının günlüğe yazdığı şey şudur:



2013.05.29 12:20:10 Optimizasyon sırasında 8 geçiş yapıldı, 8 sonuç önemsiz olarak atıldı

 
tara :


Test sırasında yayılma bilinen hiçbir şekilde değişmediği için, test cihazı değişmemiş verilerle sonuçların tekrarlanabilirliğini sağlamaz.

Tıp: https://www.mql5.com/ru/forum/119830

Belki bu mümkündür, ancak forma boyutum Bilgi olarak ayarlandı - ve değiştirilirken görüntüleniyor. Test cihazında, yayılmanın yüzdüğünü fark etmedim. Bu standart parametreleri cari hesabın MarketInfo'sundan alır ve değiştirmez.

Bu ilaç, yayılma çözümünü değiştirir, böylece farklı yayılmalarla farklı optimizasyon sonuçları görebilirsiniz. Anladığım kadarıyla, sadece bu program için bağlantı gerekli.

 
lottamer :


2013.05.29 12:20:10 Optimizasyon sırasında 8 geçiş yapıldı, 8 sonuç önemsiz olarak atıldı

Bu doğru - Bu sonuçlar önemsiz, önemsiz (önemsiz) olarak işaretlendi. - Dolayısıyla ne sonuçlara ne de grafiğe yansımaz.
 
Chiripaha :
Bu doğru - Bu sonuçlar önemsiz (önemsiz) olarak işaretlendi. - Dolayısıyla ne sonuçlara ne de grafiğe yansımaz.



Görünüşe göre burada daha derin bir delik var.

dünkü ilk sorum şuydu: özel bir işlev içindeki parametreleri nasıl optimize edeceğim.

bana cevap verdiler - onları harici çifte koy

Çıkardım.

ve şimdi optimize edici sonucu atıyor ... görünüşe göre onları bir şekilde yanlış çıkardım.

işte kod. bu normal bir dur ve al değiştiricisidir

DUR ve AL yerine eskiden 100 ve 200 sayıları vardı

Sayıları DUR ve AL ile değiştirdim

ve kodun başına eklendi

harici çift DUR = 100;
harici çift ALMA = 200;

bir yerde hata mı var?

(değiştiricinin kendisi %100 çalışıyor)

 int My_modify()
 {
   bool    result;
   double take_profit,stop_loss,point;
   int     cmd,total,error;
//----
   total= OrdersTotal ();
   point=MarketInfo( Symbol (),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
       if ( OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if (cmd==OP_BUY || cmd==OP_SELL)
           {
             //---- modify first market order
             while ( true )
              {
               if (cmd==OP_BUY) stop_loss=OrderOpenPrice()- STOP *point;
               else             stop_loss=OrderOpenPrice()+ STOP *point;
               
                 if (cmd==OP_BUY) take_profit=OrderOpenPrice()+ TAKE *point;
                           else take_profit=OrderOpenPrice()- TAKE *point;
               
               
               result=OrderModify(OrderTicket(), 0 ,stop_loss, take_profit, 0 , CLR_NONE );
               if (result!=TRUE) { error= GetLastError (); Print ( "LastError = " ,error); }
               else error= 0 ;
               if (error== 135 ) RefreshRates();
               else break ;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//            break;
           }
        }
       else { Print ( "Error when order select " , GetLastError ()); }
//     }
//----
   return ( 0 );
  }
 

Ben koda bakarken, ama yol boyunca birkaç yoruma izin vereceğim.

Bu satır hiç mantıklı değil:

point=MarketInfo( Symbol (),MODE_POINT);  /* поскольку это ровным счетом то же самое, что штатный параметр */ Point 

Yalnızca çok para birimli bir stratejiniz varsa gerekli olacaktır, ancak daha sonra bunun yerine

 Symbol ()

Bu normal işlevi değil, önceden belirlenmiş diğer değerleri değiştirmek gerekli olacaktır.

Ayrıca, bu değişken gereksizdir.

total= OrdersTotal ();

çünkü işlevin içinde, numaralandırmada yalnızca bir kez kullanırsınız, bu nedense yorumlanır ve yalnızca kodu karıştırır. - Bu nedenle soru - Siparişlere göre arama neden yorumlandı?

Bu:

 if (cmd==OP_BUY) stop_loss=OrderOpenPrice()- STOP *point;
else             stop_loss=OrderOpenPrice()+ STOP *point;
               
if (cmd==OP_BUY) take_profit=OrderOpenPrice()+ TAKE *point;
           else take_profit=OrderOpenPrice()- TAKE *point;

genel olarak gruplamak daha iyidir - durum aynıdır. Bu arada, yapı olarak farklı yazmışsınız. - bu yapı kaybı sorunudur. Yazma stili aynı olmalıdır - o zaman yapı görünür hale gelir ve olası hatalar kar eridikten sonra tümsekler gibi yükselir.

 if (cmd==OP_BUY){ stop_loss   = OrderOpenPrice()- STOP *point;
                 take_profit = OrderOpenPrice()+ TAKE *point; }

else            { stop_loss   = OrderOpenPrice()+ STOP *point;
                 take_profit = OrderOpenPrice()- TAKE *point; }

Sunduğunuz temel noktalardan, sonucu neyin etkileyebileceğini açıklamadım. Ama!... Burada yalnızca bir işlev sundunuz (yorumlanan numaralandırma dışında oldukça özensiz - bu soruya yansır). Kararı söylemek için - bir işleve değil, bir program koduna ihtiyacınız var, çünkü. sebebinin nerede ve neyden kaynaklandığı bilinmez ve aranması gerekir. Bunu yapmak için programı test cihazında çalıştırmanız gerekir - gösterilen pervazlara kendi gözlerinizle bakın. Ardından kodu (veya ters sırada) gözden geçirin ve bu nedeni arayın.

Genel bir his olarak, Oleg'in oldukça fazla ihmaliniz olduğunu söyleyebilirim (kayıtsızlık, diyebilirim). Bu, kullanılan sistemin 1. çöpe atılmasına neden olabilir. 2. Bu çöplük sonucu yapı kaybı ve sövenin teşhis ve teşhis zorluğu. Bu nedenle tavsiye verebilirim. - Mümkünse, koddaki tüm "çöpleri" (ekstra) atın - hatayı bulmak daha açık olacaktır. - Bu, çoğu insanın yardım istediği klasik bir hatadır - ihmal.

 
lottamer :


Görünüşe göre burada daha derin bir delik var.

dünkü ilk sorum şuydu: özel bir işlev içindeki parametreleri nasıl optimize edeceğim.

bana cevap verdiler - onları harici çifte koy

Çıkardım.

ve şimdi optimize edici sonucu atıyor ... görünüşe göre onları bir şekilde yanlış çıkardım.

Hayır, bence yanılıyorsunuz. Test cihazı, oluşturulan parametreler nedeniyle değil - sonuçlar anlamlılık kriterlerini geçmediği için atıyor.

Ancak programın kendisinin bir hata içermesi mümkündür. Ayrıca, dolaylı olarak kararsız sonuçlarla gösterilir. - Yani bir şeyler yanlış. Uygulamamda, bu tür programlara gerçeğe izin vermiyorum. Çünkü bir şeyler yanlışsa, durum kontrol altında değildir. Ve her şey ortaya çıkabilir.

Zarar Durdur ve Kâr Al parametreleri, tanım gereği, yalnızca optimize edilmeleri gerektiği için değil, herhangi bir programdaki harici değişkenlerdedir. Bunları değiştirmek için her seferinde koda girmeyeceksiniz. Bu nedenle, dış veya iç değişkenler - önemli değil. - Kesinlikle.

 
Chiripaha :

Ben koda bakarken, ama yol boyunca birkaç yoruma izin vereceğim.

Bu satır hiç mantıklı değil:

Yalnızca çoklu para birimi stratejiniz varsa gerekli olacaktır, ancak daha sonra bunun yerine

Bu normal işlevi değil, önceden belirlenmiş diğer değerleri değiştirmek gerekli olacaktır.

Ayrıca, bu değişken gereksizdir.

Çünkü işlevin içinde, numaralandırmada yalnızca bir kez kullanırsınız, bu nedense yorumlanır ve yalnızca kodu karıştırır. - Bu nedenle soru - Siparişlere göre arama neden yorumlandı?

Bu

Genel olarak gruplamak daha iyidir - durum aynıdır.

Peki, sunduklarından, sonucu etkileyebilecek hiçbir temel nokta açıklamadım. Ama!... Burada yalnızca bir işlev sundunuz (yorumlanan yineleme dışında oldukça özensiz - bu soruya yansır). Kararı söylemek için - bir işleve değil, bir program koduna ihtiyacınız var, çünkü. sebebinin nerede ve neyden kaynaklandığı bilinmez ve aranması gerekir. Bunu yapmak için programı test cihazında çalıştırmanız gerekir - gösterilen pervazlara kendi gözlerinizle bakın. Ardından kodu (veya ters sırada) gözden geçirin ve bu nedeni arayın.

Genel bir his olarak, Oleg'in oldukça fazla ihmaliniz olduğunu söyleyebilirim (kayıtsızlık, diyebilirim). Bu, kullanılan sistemin 1. çöpe atılmasına neden olabilir. 2. Bu çöplük sonucu yapı kaybı ve sövenin teşhis ve teşhis zorluğu. Bu nedenle tavsiye verebilirim. - Mümkünse, koddaki tüm "çöpleri" (ekstra) atın - hatayı bulmak daha açık olacaktır. - Bu, çoğu insanın yardım istediği klasik bir hatadır - ihmal.


Bu modu ben yazmadım.

Kütüphanelerden hazırlayıp aldım.

bu yüzden temizleyemiyorum. Ana şey,% 100 çalışıyor olmasıdır.

ve bu yüzden içindeki parametre optimize edilmedi - soru bu .....

temel hatalar yok!

kodun geri kalanı çalışıyor.

algoritmaya herhangi bir koşul koyun.

- satın almak

-değiştir

- kapat

----------------------------

ve siparişim MODIFIER içindeki parametreyi optimize etmeye çalışın - yani. dur ve al

 
Chiripaha :

Hayır, bence yanılıyorsunuz. Test cihazı, oluşturulan parametreler nedeniyle değil - sonuçlar anlamlılık kriterlerini geçmediği için atıyor.

Ancak programın kendisinin bir hata içermesi mümkündür. Ayrıca, dolaylı olarak kararsız sonuçlarla gösterilir. - Yani bir şeyler yanlış. Uygulamamda, bu tür programlara gerçeğe izin vermiyorum. Çünkü bir şeyler yanlışsa, durumun kontrol altında olmadığı anlamına gelir. Ve her şey ortaya çıkabilir.

Zarar Durdur ve Kâr Al parametreleri, tanım gereği, yalnızca optimize edilmeleri gerektiği için değil, herhangi bir programdaki harici değişkenlerdedir. Bunları değiştirmek için her seferinde koda girmeyeceksiniz. Bu nedenle, dış veya iç değişkenler - önemli değil. - Kesinlikle.

peki, bak

şimdi her şeyi geri verirsem, yani. DUR VE AL harici parametrelerini kaldırırsam ve bunun yerine fonksiyonun içine sayılar yazarsam, o zaman 10 hafta boyunca her hafta çalıştırılan danışman net sonuçlar gösterir. tam olarak ne gerekiyorsa onu yapar. anlaşmadan sonra görsel olarak kontrol edilen anlaşma.

Ve eğer dur ve al parametrelerini manuel olarak değiştirirsem, her şey işe yarayacak ve biraz farklı sonuçlar verecektir (bu doğaldır)

ve şimdi neden bu parametreleri değiştiricinin dışına koyduğumda, optimize edici bunları önemsiz olarak görüyor?

Neden: