Kapatılan siparişler için kar hesaplaması "YARDIM" - sayfa 4

 
Renat Akhtyamov :

Hayır, bu satırı kaldırıyoruz. Zaten bir kar hesabı var, böyle olmayacak.

Koddaki kapatma komutu nerede - orada

//+----------------------------------------------------------------------------+
//     Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL( int op=- 1 ){ //"op" позиция (-1 любая позиция)
   double LastProfit= 0 ;
   for (i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic) {
       if ( OrderType ()!= op || OrderSymbol ()!= Symbol () || OrderMagicNumber ()!= magic) continue ;
    
       if (op< 0 || OrderType ()==op){ if ( OrderCloseTime ()>=t)LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();}
       }
   return (LastProfit);
   }

ve kapalı durumda

{CloseOrder(OrderTicket());t= TimeCurrent ();} 

{DeleteAll();t= TimeCurrent ();}

1 sayılmaz, 2 doğru sayılır, 3 sayılmaz 0

 
Natashe4ka :
//+----------------------------------------------------------------------------+
//     Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL( int op=- 1 ){ //"op" позиция (-1 любая позиция)
   double LastProfit= 0 ;
   for (i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic) {
       if ( OrderType ()!= op || OrderSymbol ()!= Symbol () || OrderMagicNumber ()!= magic) continue ;
    
       if (op< 0 || OrderType ()==op){ if ( OrderCloseTime ()>=t)LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();}
       }
   return (LastProfit);
   }

ve kapalı durumda

{CloseOrder(OrderTicket());t= TimeCurrent ();} 

{DeleteAll();t= TimeCurrent ();}

1 sayılmaz, 2 doğru sayılır, 3 sayılmaz 0

ve bu yüzden

{t= TimeCurrent ();CloseOrder( OrderTicket ());}
{DeleteAll();}

Ve ilerisi

Siparişleriniz biletle kapandı mı?

Bu yüzden dizinin kapanış başlangıç saatini daha da erken hatırlamanız gerekiyor.

Onlar. Seriyi kapatma kararının henüz alındığı yerde, gerçek bir kapanış olup olmayacağı önemli değil.

 
Natashe4ka :
//+----------------------------------------------------------------------------+

Israrınızı anlıyorum, ancak size gerçek ticaret için bir dizi pozisyonu kapatma ve test cihazında çalışmama gibi iyi bir işleve sahip çalışan bir sürüm verdim.

Terminal yeniden başlatılsa bile oradaki her şeyi sayar ve hatırlar.

Kontrol edin, test cihazında çalıştırın ve sonuçları işlem geçmişiyle karşılaştırın

not. Kodu yazmayı unuttum - işte düzeltme

Dosyalar:
e-info.mq4  10 kb
 
Vitaly Muzichenko :

Israrınızı anlıyorum, ancak size gerçek ticaret için bir dizi pozisyonu kapatma ve test cihazında çalışmama gibi iyi bir işleve sahip çalışan bir sürüm verdim.

Terminal yeniden başlatılsa bile oradaki her şeyi sayar ve hatırlar.

Kontrol edin, test cihazında çalıştırın ve sonuçları işlem geçmişiyle karşılaştırın

Bunu kodumda nasıl uygulayabilirim?

Diğer eylemim LastProfitCL değerine bağlı

 
Renat Akhtyamov :

ve bu yüzden

{t= TimeCurrent ();CloseOrder( OrderTicket ());}
{DeleteAll();}

Ve ilerisi

Siparişleriniz biletle kapandı mı?

Bu yüzden dizinin kapanış başlangıç saatini daha da erken hatırlamanız gerekiyor.

Onlar. Seriyi kapatma kararının henüz alındığı yerde, gerçek bir kapanış olup olmayacağı önemli değil.

Durak kapalıysa, {t= TimeCurrent ();CloseOrder( OrderTicket ());} {DeleteAll();} zaten kar değerini atlayacaktır.
 
Natashe4ka :

Bunu kodumda nasıl uygulayabilirim?

Diğer eylemim LastProfitCL değerine bağlı

Bu anlaşılabilir bir durum, sadece uygun gördüğünüz gibi kullanın.

   double LastProfit = LastProfitCL(- 1 , ( datetime ) GlobalVariableGet (GetGlobalVariableName( "LastProfit" )));
  
   Comment ( " Последний: " , DoubleToString (LastProfit, 1 ) , " Профит: " , DoubleToString (Profit, 1 ) );

Bir kez " LastProfit " ilan edin ve gerektiğinde kullanın

 
Natashe4ka :
Ve stop ile kapanırsa, {t= TimeCurrent ();CloseOrder( OrderTicket ());} {DeleteAll();} zaten kar değerini atlayacaktır.

Evet onlar yapacak.

Kaç tane "canlı" sipariş kaldığını her onay işaretiyle kontrol edebilirsiniz.

Aynıysa, seçenek olarak önceki tik saatini hatırlayın

O zaman ihtiyacın olanı alacaksın

Ancak otomatlarda genellikle durak yoktur.

 
Natashe4ka :
Durak kapalıysa, {t= TimeCurrent ();CloseOrder( OrderTicket ());} {DeleteAll();} zaten kar değerini atlayacaktır.

Yalnızca en son kapatılanları sayar ve kapanış miktarına bağlı değildir.

Genel olarak, görev tamamen açık değil, bu yüzden daha fazla tartışma yapmıyorum.

//------------------------------------------------ ---------

Burada her şeyi boyadım, artık görevi anlamıyorum:

Dosyalar:
e_info.mq4  10 kb
 
Vitaly Muzichenko :

Burada her şeyi boyadım, artık görevi anlamıyorum:

tamam teşekkürler
 

Bu nedenle, "cnt"nin sıfırlanıp sıfırlanmadığını da doğru bir şekilde değerlendirir, ancak daha sonra 3 No'lu ekranda olduğu gibi değer net değildir (kar değeri 4,27 olmalıdır).

double LastProfitCL( int op=- 1 ){ //"op" позиция (-1 любая позиция)
   int cnt= 0 ;
   double LastProfit= 0 ;
   for (i= 0 ;i< OrdersHistoryTotal ();i++)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic) {
       if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=magic) continue ;
       if ((op< 0 || OrderType ()==op) && cnt== 0 ) {LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap (); cnt++;} else {cnt= 0 ;}
       }
   return (LastProfit);
   }

Neden: