Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 223

 
ALXIMIKS :


Zamanım vardı - görev için bir algoritma buldum, açıkladım (ayrıntılı görünüyor, belki biri için neredeyse doğru - sonuçta, insanlar erişilebilirlik açısından farklıdır)

iğneleyici söz? Bilmiyorum, hiçbir düşünce yoktu, sadece yardım et.

biri kodu yazarmı henüz optimize? (Evet yapabilirim, ama buna değer mi?)

(ps artmedia70, alınmayın, genel olarak tavrınıza ve fikrinize saygı duyuyorum - dürüst olmak gerekirse, ancak geçen gün, hafifçe söylemek gerekirse, çok optimize edilmemiş, iCustom ile kodu kendiniz verdiniz.)

yeni bir çubuğun kontrolüne eklenirse bunun gibi bir şey çalışmalıdır.

Tüm çubuklar üzerinde sürekli yineleme yapmamak için belirli sayıda fraktaldan sonra kilkict=iBars(sy,tf)'yi daraltırsanız kod daha uygun olacaktır.

Teşekkür ederim. Algoritmanıza göre yazmaya başladım. Ama bayraklarla, kanserli Pekin'den önceki gibi sana bağlıyım. Tekrar teşekkürler.
 
gince :
Teşekkür ederim. Algoritmanıza göre yazmaya başladım. Ama bayraklarla, kanserli Pekin'den önceki gibi sana bağlıyım. Tekrar teşekkürler.


https://www.mql5.com/ru/forum/131516/page34

Aşağıda - erken bir makale deneyimini paylaştı. Bu konuyla ilgili.

 
tara :


https://www.mql5.com/ru/forum/131516/page34

Aşağıda - erken bir makale deneyimini paylaştı. Bu konuyla ilgili.


Teşekkür
 

ne yanlış olabilir?

bazen bir test sırasında test yaparken "O" ile bölme hata veriyor

 double LotsOptimized()
  {
   double lot=Lots;
   double Lot;
   if (isFloatLots == true )           // если флаг true то проводится оптимизация величины лота, иначе лот неизменен
     {  
         int orders=HistoryTotal();   // history orders total
         int losses= 0 ; // number of losses orders without a break
         double loss= 0 ;              
//---- select lot size
         double   lot_min         = MarketInfo( Symbol (), MODE_MINLOT  ); 
         double   lot_max         = MarketInfo( Symbol (), MODE_MAXLOT  ); 
         double   lot_step        = MarketInfo( Symbol (), MODE_LOTSTEP ); 
         double   lotcost         = MarketInfo( Symbol (), MODE_TICKVALUE );       
                
        lot                             = 0.0 ;
         double   dollarsPerPip   = 0.0 ;
        
        lot = AccountBalance()*MaxR/ 100.0 ;
        dollarsPerPip = lot/SL;
                
        lot = NormalizeDouble ( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble ( lot / lot_step, 0 ) * lot_step;
        
         if ( lot < lot_min ) lot = lot_min;
         if ( lot > lot_max ) lot = lot_max;
        
         if ( AccountFreeMarginCheck( Symbol (), type, lot ) < 10 || GetLastError () == 134 ) 
        { 
                 Alert ( "Impossible to open position with lot = " , DoubleToStr( lot, 2 ), ". Not enough money." );
                 return (- 1 );
        }
//---- return lot size
//         if(lot<0.1) lot=0.1;
           
//---- calcuulate number of losses orders without a break
           if (DcF> 0 )
          {  
         for ( int i=orders- 1 ;i>= 0 ;i--)
                  {
                 if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== false ) 
                   { 
                         Print ( "Ошибка в истории!" ); 
                         break ;
                   }
                 if (OrderSymbol()!= Symbol () || OrderType()>OP_SELL) 
                   continue ;
                 if (OrderProfit()> 0 )   break ;
                 if (OrderProfit()< 0 ) losses++;loss=loss-OrderProfit();
                  }
         if (losses>=losses_orders) {Lot= NormalizeDouble ( MathAbs (loss)/FV/MarketInfo( Symbol (),MODE_TICKVALUE)/TakeProfit1, 1 );
         }
       }
     }  
//---- return lot size
     if (Lot>lot) lot=Lot; 
   
  return (lot);
  }
 
Stells :

ne yanlış olabilir?

bazen bir test sırasında test yaparken "O" ile bölme hata veriyor


"/" işaretini ararız ve kullanıcıdan hangi değişkenlerin bölmede yer aldığını görürüz:

SL;

F.V.;

TakeProfit1 .

bunlardan biri 0 olur. Bir seçenek olarak.

 
Stells :

ne yanlış olabilir?

bazen bir test sırasında test yaparken "O" ile bölme hata veriyor

Tip kontrolü yapmak:

 if (!SL== 0 )
   {
  dollarsPerPip = lot/SL;
   }
Vb .
 
ALXIMIKS :


Tekrar teşekkürler. Kodunuzu anlamaya çalıştım ve yorum yazdım. Bunu anlamak için kendim için yaptım ve belki bir gün buna benzer bir şey yazarım. Başka birinin çalışmasının mantığını çözerek çalışırım. Sonra kendim denerim.

Belki yazdığım yorumları kontrol etmeye ve gerekirse düzeltmeye zaman bulursunuz. Ve başka bir soru.

   if (Bufer0!= EMPTY_VALUE ) 

Bu, gösterge arabelleğinin artık boş olmadığı anlamına mı geliyor yoksa bu değişken başka bir anlama mı geliyor? Gösterge tamponu

Bufer0[i]

Yorum içeren tüm kodlar

 int     counted_bars=IndicatorCounted();
//----
   int    a1= 0 ,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,
         frac,                               //frac - флаг существования фракталов,
         frac1= 0 ;                             //frac1- счетчик фракталов (+1 или 0 за цикл)
   int i;
   double Bufer0;                             //
   kilkict=iBars( NULL , 0 );

   for (i= 3 ; i<kilkict;i++){
      a2= 0 ;frac= 0 ;
       if ( iFractals ( NULL , 0 , MODE_UPPER, i)> 0 ) {            
         if (Bufer0!= EMPTY_VALUE ) {           //
            a2+= 1 ;                           //к числу фракталов добовляем 1
            frac= 1 ;                           //флаг - фрактал есть
            frac1++;                         //счечик увеличиваем на 1
         }
      }
       if ( iFractals ( NULL , 0 , MODE_LOWER, i)> 0 ) {            
         if (Bufer0!= EMPTY_VALUE ) {           //
             if (a2== 0 ){
               frac1++;                       //счечик увеличиваем на 1 
               frac= 1 ;                       //флаг - фрактал есть
            }
            a2+=- 1 ;                           //к числу фракталов добовляем -1(т. е. уменшаем)
         }
      } 
       if (frac== 0 ){ continue ;}                 // если флага нет (фрактал ненайден)
       if (frac1== 1 ){                         //если счечик равен 1,
         a1=a2; continue ;
      }          
      a3=a1+a2;
       if (a3< 0 )           { a1=a2; continue ;} //Два фрактала вниз  подряд найдено// 
       if (a3> 0 )           { a1=a2; continue ;} //Два фрактала вверх подряд найдено //
       if (a3== 0 && a1== 0 ) { a1=a2;} // Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   }

 

gince :

 if (Bufer0!= EMPTY_VALUE ) 

Bu, gösterge arabelleğinin artık boş olmadığı anlamına mı geliyor yoksa bu değişken başka bir anlama mı geliyor?

Bu satır kaldırılabilir, çünkü iFractals(), "boş bir değer" ( EMPTY_VALUE ) değil, bir fraktal olmadığı için sıfır döndürür.

Size bir sorum var: Ardışık iki fraktal arayacak bir gösterge yapmaya mı çalışıyorsunuz? Yoksa Expert Advisor'da mevcut çubuğa en yakın iki ardışık fraktal mı arıyorsunuz? Bu konu boş merak değil çünkü. Göstergedeki ve EA'daki arama yöntemleri farklıdır - gösterge sondan başa hesaplanır - geçmişten günümüze, EA ise çubukları şimdiden geçmişe tarar. Buna göre, Uzman Danışman ve göstergede arama yönleri de farklıdır.

Ve son soru: çıktı ne olmalı?

 
artmedia70 :

Bu satır kaldırılabilir, çünkü iFractals(), "boş bir değer" (EMPTY_VALUE) değil, bir fraktal olmadığı için sıfır döndürür.

Size bir sorum var: Ardışık iki fraktal arayacak bir gösterge yapmaya mı çalışıyorsunuz? Yoksa Expert Advisor'da mevcut çubuğa en yakın iki ardışık fraktal mı arıyorsunuz? Bu konu boş merak değil çünkü. Göstergedeki ve EA'daki arama yöntemleri farklıdır - gösterge sondan başa hesaplanır - geçmişten günümüze, EA ise çubukları şimdiden geçmişe tarar. Buna göre, Uzman Danışman ve göstergede arama yönleri de farklıdır.

Ve son soru: çıktı ne olmalı?



Gösterge ve sonra göreceğiz. Göstergedeki ve EA'daki arama yöntemleri farklıdır - gösterge sondan başa hesaplanır - geçmişten günümüze, EA ise çubukları şimdiden geçmişe tarar.

( i=kilkict;i> 0 ;i--) için

Sonuç, ilk iki -> sat (aşağı ok), alt iki -> satın al (yukarı ok). Fraktalın sağında +2 çubuk görünmesi için sinyal. Hikayelere ilk önce görsel olarak bakmak istediğim şey bu. Ve muhtemelen bir filtreye ihtiyacınız olacak.

 
ALXIMIKS :


...

böyle bir şey ...

...


Söyle bana, "bu" yerine "bu" yazmalarının nasıl olduğunu açıkla?

1. "Bu"nun "e" ile değil "e" harfiyle yazıldığını bilmiyor musunuz?

2. Elinizi "e" harfine taşımak için çok tembel, "e"ye basmak daha mı kolay?

3. Klavyede "e" tuşu yok mu? Değilse, neden değil?

4. Herhangi bir özel gösteri var mı?

5. Bilinmeyen başka bir neden. Hangi?