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

 

Soru, bir dizi kârsız siparişin nasıl hesaplanacağıdır????

Yani bilmek istiyorum, taktikleri test etmek, emirlerin kaç kez stop ile kapatılacağını ve sonuncularını öğrenmek istiyorum.

Erkeklerin buna gerçekten ihtiyacı var...

 
VOLDEMAR :

Soru, bir dizi kârsız siparişin nasıl hesaplanacağıdır????

Yani bilmek istiyorum, taktikleri test etmek, emirlerin kaç kez stop ile kapatılacağını ve sonuncularını öğrenmek istiyorum.

Erkeklerin buna gerçekten ihtiyacı var...


Ben kendim hakkında şöyle düşünüyorum:

Yineleme = stop (sizin anlayışınıza göre) zararda kapanıyorsa, siparişlerin stop tarafından kaç kez kapatılacağı.

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0 ; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0 ;   // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0 ,
Time_at_History_Previos = 0 ;     
 
 if ( OrdersHistoryTotal () != 0 )
   {
     for ( int counter = OrdersHistoryTotal ()- 1 ; counter >= 0 ; counter--)
      {
       OrderSelect (counter, SELECT_BY_POS, MODE_HISTORY);
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         {
           if ( OrderType () == OP_BUY || OrderType () == OP_SELL)
            {
             if ( OrderProfit () < 0 ) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if (Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                 //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                 if ( OrderProfit () >= 0 )
                   break ;
               }
            }
         }
      }
   }
 
Teşekkür ederim ! Ama anladığım kadarıyla bu kod ister 100 işlem öncesi, ister 5 işlem öncesi olsun, tarihteki tüm seriyi buluyor....
 
VOLDEMAR :
Teşekkür ederim ! Ama anladığım kadarıyla bu kod ister 100 işlem öncesi, ister 5 işlem öncesi olsun, tarihteki tüm seriyi buluyor....

Numara. Tarihin en aşırı kapalı durumundan örnekleme, kapalı bir tanesi kârda göründüğünde - seri, kârsız kapalı olanların sayısının bir satırdaki değerlerinin görüntülenmesiyle kesintiye uğrar = Yineleme.
 

Tünaydın.

Böyle bir bağlantı doğru olur mu?

   // заполним значениями сигнальные массивы и посчитаем их количество
   for (i=DisplayBars;i>= 0 ;i--) 
  {

    
if (Prz0 == 0 ) 
       {
           f= GetBarNumWithZerroDist(i); // на этом баре пересечение
         if (f!=- 1 )
          {
           Price01 = iClose (Symbol_1, 0 ,f);
           Price02 = iClose (Symbol_2, 0 ,f);
           Prz0 = 1 ;
           i=f;
           }
       } 
   }
 int GetBarNumWithZerroDist( int i)
{
double Smb1Cl0 = NormalizeDouble ( iClose (Symbol_1, 0 , 0 ), Digits );
double Smb2Cl0 = NormalizeDouble ( iClose (Symbol_2, 0 , 0 ),Digits2);
double Smb1Pnt = MarketInfo (Symbol_1, MODE_POINT);
double Smb2Pnt = MarketInfo (Symbol_2, MODE_POINT);
int     mBars   = MathMin ( iBars (Symbol_1, 0 ), iBars (Symbol_2, 0 ));

     for ( int f=i;f>= 0 ;f--) 
    {
        Price1 =   NormalizeDouble (Lot*(Smb1Cl0 - iClose (Symbol_1, 0 ,f)) / Smb1Pnt, 0 );
        Price2 = NormalizeDouble (K*Lot2*H*(Smb2Cl0 - iClose (Symbol_2, 0 ,f)) / Smb2Pnt, 0 );
        Spread = Price1 - Price2; 
         //Print ("Price1="+Price1, " Price2="+Price2);
         if ( MathAbs (Spread)== 0 ) return (f);
    }
     return (- 1 );
}
 

Bu benim hoşuma gitti :)

 if ( MathAbs (Spread)== 0 ) return (f);
 
Roger :

Bu benim hoşuma gitti :)


burada bir hata mı var?

Spread==0 olan bar değerini döndürmem gerekiyor,

böyle bir değer bulunamazsa, -1 döndürün.

 

Merhaba.

Soru: OrderSend() işlevi , yürütmeden sonra "0" değerini veya "-1"'den küçük bir değer döndürebilir mi? Böyle bir şeyle karşılaşan var mı? Veya "belgelerde" verilen bilgiler güvenilirdir:

int OrderSend ( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Bir pozisyon açmak veya bekleyen bir emir vermek için kullanılan ana fonksiyon.
İşlem sunucusu tarafından siparişe atanan biletin numarasını veya arıza durumunda -1'i döndürür .
Not: Telepat olarak çalışıyorum, başka birinin kodunda hata arıyorum...
 
Danışmanın yatay çizgiler kullanarak sanal bir trolünü yaptım, test cihazında iyi çalışıyor, ancak optimizasyon sırasında, görünüşe göre test cihazı bu çizgilerle çalışmıyor, neden? ve nasıl düzeltilir?
 
DimaMA :
Danışmanın yatay çizgiler kullanarak sanal bir trolünü yaptım, test cihazında iyi çalışıyor, ancak optimizasyon sırasında, görünüşe göre test cihazı bu çizgilerle çalışmıyor, neden? ve nasıl düzeltilir?

Neden yatay bir çizgiye ihtiyacınız var? Bir değişkendeki satırın değerini hatırlarsanız mutlu olursunuz!! Ve danışman daha hızlı "düşünecek"! Ve yatay çizgiyi yalnızca görsel bir efekt için bırakabilirsiniz.

Ve nedeni şudur: test cihazı sadece görsel modda grafik nesnelerle çalışır ! Optimizasyon yaparken görsel mod bile yok... Her ne kadar TF ve çift adından sonra parantez içinde "görsel" yazan grafiği açık bırakmayı deneyebilirsiniz... bu yardımcı olur veya olmaz. Kontrol etmedim. Ben de öyle düşündüm, çünkü bu çizelgede siparişlerin nasıl görünüp kaybolduğunu görebiliyorsunuz (ki bu daha önce testi görselleştirmek için kullanılıyordu) (her ne kadar tablo artık dahil değil gibi görünse de)... Biri bana söyleyebilir mi!?

Ama sana tavsiyem - grafik nesnelerden parametre çıkarmaktan uzaklaş. Bu parametrelerin değişkenlerde saklanmasına izin verin... Grafik nesnesini bir değişken yapmaya gerek yok! :))))