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

 

Kapanan emirlerin karı doğru hesaplanır ancak kapandıktan sonra bir öncekine bir değer katar (5; 5+5=10; 10+5=15)
Serinin her bir kapalı kârı, bir öncekinin (5; 5; 5) artı değil, yeni olması nasıl yapılır?
Bir dizi kapalı emirde, alış ve satış emirleri olabilir veya sadece al ve sadece sat emirleri olabilir.

color ProfitColor;

// START //
   if (LastProfitCL(- 1 )< 0 ) ProfitColor=Red;
   if (LastProfitCL(- 1 )> 0 ) ProfitColor=LimeGreen;
   if (LastProfitCL(- 1 )== 0 )ProfitColor=DarkGray;
   ObjectCreate ( "Last Profit" , OBJ_LABEL , 0 , 0 , 0 );
   ObjectSet ( "Last Profit" , OBJPROP_CORNER , 1 );
   ObjectSet ( "Last Profit" , OBJPROP_XDISTANCE , 5 );
   ObjectSet ( "Last Profit" , OBJPROP_YDISTANCE , 15 );
   ObjectSetText ( "Last Profit" , StringConcatenate ( "Last Profit: " , DoubleToStr (LastProfitCL(- 1 ), 2 )), 10 , "Arial" ,ProfitColor);
// END START //

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
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) {LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();}
       }
   return (LastProfit);
   }
 

Kapanan siparişleri serilere bölmek için bir koşul eklemeniz gerekiyor

Algoritmayı veya bölme ilkesini söyleyin

 
Natashe4ka : ... Kapanan emirlerin karı ... bir öncekine değer katar (5; 5+5=10; 10+5=15)

Serinin her bir kapalı kârı, bir öncekinin (5; 5; 5) artı değil, yeni olması nasıl yapılır? .....

Aritmetik toplam yerine, bir karakter dizisine istediğiniz gibi bir boşluk veya noktalı virgül ve boşluk kullanarak eklemek gerekir.
 
STARIJ :
Aritmetik toplam yerine, bir karakter dizisine istediğiniz gibi bir boşluk veya noktalı virgül ve boşluk kullanarak eklemek gerekir.

İyi bir fikir

Ya da belki bir dizide

 
Natashe4ka :

Kapanan emirlerin karı doğru hesaplanır ancak kapandıktan sonra bir öncekine bir değer katar (5; 5+5=10; 10+5=15)
Serinin her bir kapalı kârı, bir öncekinin (5; 5; 5) artı değil, yeni olması nasıl yapılır?
Bir dizi kapalı emirde, alış ve satış emirleri olabilir veya sadece al ve sadece sat emirleri olabilir.

color ProfitColor;

// START //
   if (LastProfitCL(- 1 )< 0 ) ProfitColor=Red;
   if (LastProfitCL(- 1 )> 0 ) ProfitColor=LimeGreen;
   if (LastProfitCL(- 1 )== 0 )ProfitColor=DarkGray;
   ObjectCreate ( "Last Profit" , OBJ_LABEL , 0 , 0 , 0 );
   ObjectSet ( "Last Profit" , OBJPROP_CORNER , 1 );
   ObjectSet ( "Last Profit" , OBJPROP_XDISTANCE , 5 );
   ObjectSet ( "Last Profit" , OBJPROP_YDISTANCE , 15 );
   ObjectSetText ( "Last Profit" , StringConcatenate ( "Last Profit: " , DoubleToStr (LastProfitCL(- 1 ), 2 )), 10 , "Arial" ,ProfitColor);
// END START //

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
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 ( OrderSymbol ()!= Symbol ()) continue ;
       if ( OrderMagicNumber ()!= magic) continue ;        
       if ( OrderType ()!= op) continue ;
       if (op< 0 || OrderType ()==op) {LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();}
       }
   return (LastProfit);
   }
Global bir değişken girebilir ve mevcut karı yazabilirsiniz, kapattıktan sonra önceki tutarı çıkarın ve geriye kalan kârdır ve hatırlayın.
 

Her şey karmaşık, belki daha kolay bir şey var mı?
Ve örnekler verilebilir, yoksa beyinler kaynar mı?

 
Natashe4ka :
Her şey karmaşık, belki daha kolay bir şey var mı?

Hayır, daha kolay olmayacak. LastProfitCL işlevinin uygulandığı önceki zamanlarda sayılanlar da dahil olmak üzere TÜM siparişleri her zaman sayarsınız. Ve daha fazla sipariş olduğu için kar miktarı da artıyor.

Yeni siparişler tükendiğinde döngünün kesintiye uğramasına göre bir koşul belirlemek gerekir.

 
Vitalie Postolache :

Yeni siparişler tükendiğinde döngünün kesintiye uğramasına göre bir koşul belirlemek gerekir.

İşte doğru düşünme şekli))

 
Natashe4ka :

İşte doğru düşünme şekli))

İyi?

Durum nerede?

 
Renat Akhtyamov :

İyi?
Durum nerede?

bunun gibi bir şey:

double cnt= 0 ;

if (op< 0 || OrderType ()==op) {lastprof+= OrderProfit ()+ OrderCommission ()+ OrderSwap (); cnt++}  

ve bir şekilde cnt new'u geçmişten çıkarmanız gerekiyor
cnt 1,2,3 geçmiş
cnt 4,5,6 yeni

 
Natashe4ka :

bunun gibi bir şey:

double cnt= 0 ;

if (op< 0 || OrderType ()==op) {lastprof+= OrderProfit ()+ OrderCommission ()+ OrderSwap (); cnt++}  

ve bir şekilde cnt new'u geçmişten çıkarmanız gerekiyor
cnt 1,2,3 geçmiş
cnt 4,5,6 yeni

Hayır, zaten yazdıklarınızdan bahsetmiyorum.

Kelimelerle anlatın - ilgilendiğiniz kapalı siparişler için kar hesaplaması

Örneğin:

- günlük

- kârsız

- Son sipariş

ya da başka nasıl?

Seriyi tanımlayın