마감된 주문 "HELP"에 대한 이익 계산

 

마감된 주문의 이익은 올바르게 계산되지만 마감된 후에는 이전 주문에 값을 추가합니다(5; 5+5=10; 10+5=15).
시리즈의 각 닫힌 이익을 새 것으로 만들고 이전 이익을 더하지 않는 방법(5, 5, 5) ??
일련의 마감된 주문에는 매수 및 매도 주문이 있거나 매수 및 매도만 주문이 있을 수 있습니다.

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);
   }
 

마감된 주문을 시리즈로 나누기 위한 조건을 추가해야 합니다.

알고리즘이나 나눗셈의 원리를 말하라

 
Natashe4ka : ... 마감된 주문의 이익 ... 이전 주문에 가치 추가(5; 5+5=10; 10+5=15)

시리즈의 각 닫힌 이익을 새 것으로 만들고 이전 이익을 더하지 않는 방법(5, 5, 5) ?? .....

산술 합산 대신 원하는대로 공백이나 세미콜론과 공백을 통해 문자열에 추가해야합니다
 
STARIJ :
산술 합산 대신 원하는대로 공백이나 세미콜론과 공백을 통해 문자열에 추가해야합니다

좋은 생각

아니면 배열로

 
Natashe4ka :

마감된 주문의 이익은 올바르게 계산되지만 마감된 후에는 이전 주문에 값을 추가합니다(5; 5+5=10; 10+5=15).
시리즈의 각 닫힌 이익을 새 것으로 만들고 이전 이익을 더하지 않는 방법(5, 5, 5) ??
일련의 마감된 주문에는 매수 및 매도 주문이 있거나 매수 및 매도만 주문이 있을 수 있습니다.

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);
   }
전역변수를 입력하고 현재 이익을 쓰고 닫은 후 이전 금액을 빼면 남은 이익은 이익이고 기억합니다
 

모든 것이 복잡합니다. 어쩌면 더 쉬운 것이 있습니까?
그리고 예를 들 수 있습니다. 그렇지 않으면 두뇌가 끓고 있습니까?

 
Natashe4ka :
모든 것이 복잡합니다. 어쩌면 더 쉬운 것이 있습니까?

아니, 더 쉽지 않을 것입니다. LastProfitCL 함수가 적용된 이전 시간에 계산된 주문을 포함하여 항상 모든 주문을 계산합니다. 그리고 주문이 많아지면서 수익도 증가합니다.

새로운 주문이 소진되었을 때 사이클이 중단될 조건을 마련할 필요가 있습니다.

 
Vitalie Postolache :

새로운 주문이 소진되었을 때 사이클이 중단될 조건을 마련할 필요가 있습니다.

이것이 올바른 사고 방식입니다))

 
Natashe4ka :

이것이 올바른 사고 방식입니다))

잘?

조건은 어디에 있습니까?

 
Renat Akhtyamov :

잘?
조건은 어디에 있습니까?

그런 것 :

double cnt= 0 ;

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

그리고 당신은 어떻게 든 과거의 것에서 cnt의 새로운 것을 빼야합니다.
cnt 1,2,3 과거
cnt 4,5,6 신규

 
Natashe4ka :

그런 것 :

double cnt= 0 ;

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

그리고 과거에서 cnt new를 어떻게든 빼야 합니다.
cnt 1,2,3 과거
cnt 4,5,6 신규

아니요, 나는 당신이 이미 쓴 것에 대해 말하는 것이 아닙니다.

단어로 알려주십시오-관심있는 마감 주문에 대한 이익 계산

예를 들어:

- 하루

- 수익성이 없는

- 마지막 주문

아니면 어떻게?

시리즈 설명