마감된 주문 "HELP"에 대한 이익 계산 - 페이지 4

 
Renat Akhtyamov :

아니요, 우리는 이 줄을 제거합니다. 이미 이익 계산이 있으며 그렇게 작동하지 않습니다.

코드에서 닫기 명령은 어디에 있습니까?

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

그리고 닫힘 상태에서

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

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

1은 계산하지 않음, 2는 올바르게 계산, 3은 계산하지 않음 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);
   }

그리고 닫힘 상태에서

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

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

1은 계산하지 않음, 2는 올바르게 계산, 3은 계산하지 않음 0

그래서

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

그리고 더 나아가

티켓으로 주문을 마감했습니까?

따라서 시리즈 종료의 시작 시간을 더 일찍 기억해야 합니다.

저것들. 시리즈를 종료하기로 한 결정이 방금 형성된 경우 실제 종료 여부는 중요하지 않습니다.

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

나는 당신의 끈기를 이해하지만, 테스터에서 작동하지 않고 실제 거래를 위해 일련의 포지션을 닫는 좋은 기능이 있는 작동 버전을 제공했습니다.

터미널이 다시 시작되더라도 모든 것을 계산하고 기억합니다.

확인하고 테스터에서 실행하고 거래 내역 과 결과를 비교하기만 하면 됩니다.

추신. 코드 작성을 잊었습니다 - 여기에 수정 사항이 있습니다.

파일:
e-info.mq4  10 kb
 
Vitaly Muzichenko :

나는 당신의 끈기를 이해하지만, 테스터에서 작동하지 않고 실제 거래를 위해 일련의 포지션을 닫는 좋은 기능이 있는 작동 버전을 제공했습니다.

터미널이 다시 시작되더라도 모든 것을 계산하고 기억합니다.

확인하고 테스터에서 실행하고 거래 내역 과 결과를 비교하기만 하면 됩니다.

이것을 내 코드에 어떻게 적용할 수 있습니까?

추가 작업은 LastProfitCL 값에 따라 다릅니다.

 
Renat Akhtyamov :

그래서

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

그리고 더 나아가

티켓으로 주문을 마감했습니까?

따라서 시리즈 종료의 시작 시간을 더 일찍 기억해야 합니다.

저것들. 시리즈를 종료하기로 한 결정이 방금 형성된 경우 실제 종료 여부는 중요하지 않습니다.

그리고 정류장이 닫히면 {t= TimeCurrent ();CloseOrder( OrderTicket ());} {DeleteAll();} 이미 이익 값을 건너뜁니다.
 
Natashe4ka :

이것을 내 코드에 어떻게 적용할 수 있습니까?

추가 작업은 LastProfitCL 값에 따라 다릅니다.

글쎄, 그것은 이해할 수 있습니다, 당신이 적합하다고 생각하는대로 사용하십시오.

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

" LastProfit "을 한 번 선언하고 필요한 곳에 사용하십시오.

 
Natashe4ka :
그리고 스톱으로 닫히면 {t= TimeCurrent ();CloseOrder( OrderTicket ());} {DeleteAll();} 이미 이익 값을 건너뜁니다.

응 그들은 그럴거야.

"라이브" 주문이 얼마나 남았는지 모든 틱 을 확인할 수 있습니다.

같은 경우 옵션으로 이전 눈금의 시간을 기억하십시오.

그러면 필요한 것을 얻을 것이다.

하지만 일반적으로 자판기에는 정류장이 없습니다.

 
Natashe4ka :
그리고 정류장이 닫히면 {t= TimeCurrent ();CloseOrder( OrderTicket ());} {DeleteAll();} 이미 이익 값을 건너뜁니다.

마지막으로 마감된 것만 계산되며 마감 금액에 의존하지 않습니다.

일반적으로 작업이 완전히 명확하지 않으므로 더 이상 논의하지 않습니다.

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

여기에 모든 것을 그렸고 더 이상 작업을 이해하지 못합니다.

파일:
e_info.mq4  10 kb
 
Vitaly Muzichenko :

여기에 모든 것을 그렸고 더 이상 작업을 이해하지 못합니다.

알았어 고마워
 

따라서 "cnt"가 재설정되었는지 여부도 올바르게 고려하지만 다시 3번 화면에서와 같이 값이 명확하지 않습니다(이익 값은 4.27이어야 함).

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