MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 287

 
안녕하세요. 기능을 도와주세요. 마감된 주문의 손실을 요약하여 주문 마감 기능과 함께 사용하면 메타 트레이더가 충돌합니다. 이 기능에 어떤 종류의 오류가 있는지 생각합니다.
이중 ClosProfit()
{
이중 합=0 ;
정수 주문=OrdersHistoryTotal();
{
for(int i=orders-1;i>=0;i--)
{
if( 주문선택(i,SELECT_BY_POS, MODE_HISTORY )==거짓)
{
Print("기록에 오류가 있습니다!");
부서지다;
}
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
계속하다;
//---
if(OrderProfit()>0) 휴식;
If(OrderProfit()<0)i++;
}
만약(i<0)
summa=OrderProfit()+합계;
}
If(OrderProfit()>합계)
summa=OrderProfit()+합계;
반환(합);
}
 
Lowech :
안녕하세요. 기능을 도와주세요. 마감된 주문의 손실을 요약하여 주문 마감 기능과 함께 사용하면 메타 트레이더가 충돌합니다. 이 기능에 어떤 종류의 오류가 있는지 생각합니다.

이미 볼 준비가되어 있고 필요한 경우 스스로 수정하십시오. GetProfitFromDateInCurrency()

 
Lowech :
안녕하세요. 기능을 도와주세요. 마감된 주문의 손실을 요약해 주세요. 마감된 주문의 기능과 함께 사용하면 메타 트레이더가 충돌 합니다. 이 기능에 어떤 종류의 오류가 있는지 생각합니다.

메타 트레이더 충돌 은 무엇을 의미합니까? 프로그램이 오류와 함께 컴파일됩니다!!!

세 군데에 if 대신 소문자 소문자로 쓴다 큰 대문자로 쓴다면

중괄호 쌍은 분명히 불필요합니다: int orders=OrdersHistoryTotal(); summa=OrderProfit()+summa; - 하지만 그것은 중요하지 않다

뭐, 아직...

 
Lowech :
안녕하세요. 기능을 도와주세요. 마감된 주문의 손실을 요약하여 주문 마감 기능과 함께 사용하면 메타 트레이더가 충돌합니다. 이 기능에 어떤 종류의 오류가 있는지 생각합니다.

다음과 같이 시도하십시오.

 double ClosProfit()
{ double summa= 0 ;
   int orders= OrdersHistoryTotal (); 
   for ( int i=orders- 1 ;i>= 0 ;i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== false ) { Print ( "Error in history!" ); break ; }
     if ( OrderSymbol ()!= Symbol () || OrderType ()> OP_SELL ) continue ;
     if ( OrderProfit ()< 0.0 ) summa= OrderProfit ()+summa;
  }
   return (summa);
}
 
쓰다가 2분 늦었다... 이 부분을 좀 더 자세히 살펴보자.
   for ( int i=orders- 1 ;i>= 0 ;i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== false )
    {
       Print ( "Error in history!" );
       break ;
    }
     if ( OrderSymbol ()!= Symbol () || OrderType ()> OP_SELL ) continue ;
     if ( OrderProfit ()> 0 ) break ;
     if ( OrderProfit ()< 0 )i++;
  }
   if (i< 0 )

#property strict 지시문으로 컴파일 - 마지막 줄 'i' - 선언되지 않은 식별자를 꾸짖습니다. 문제는 변수가 주기에서 선언되고 그 안에서만 유효하다는 것입니다. #property strict 지시어가 없으면 오류 없이 컴파일되지만 이것은 나쁩니다. 지시문을 사용해야 합니다.

if( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)==false) 대신 if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))를 작성하는 것이 더 쉽습니다. 이제 더 나아가야 합니다. 이것은 루프에서 나가는 출구입니다. 그리고 다른 주문을 처리해야 합니다. 그러나 이것은 역사에서 중복됩니다. 시장 및 보류 중인 주문 에 오류가 발생합니다. 처리 시점에 주문이 마감되었고 누락된 경우입니다. 일반적으로 if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 계속합니다. - 계속해서 다음 주문 처리

같은 이유로 if(OrderProfit()>0) break; if(OrderProfit()>0)으로 교체 계속

다음은 오류의 원인입니다. if(OrderProfit()<0) i++ ; - 잃는 숫자가 있으면 지수가 증가합니다. 그리고 루프 헤더 for(int i=orders-1;i>=0; i-- )는 그것을 줄입니다. 동일한 순서의 처리가 반복됩니다 - 프로그램 루프. 아마도 다음과 같아야 합니다.

 #property   strict
double ClosProfit()
{
   double summa= 0 ;
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
  {
     if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
     if ( OrderSymbol ()!= Symbol () || OrderType ()> OP_SELL ) continue ;
    if ( OrderProfit ()< 0 ) summa+= OrderProfit ();
  }
   return (summa);
}
 
STARIJ :
쓰다가 2분 늦었다... 이 부분을 좀 더 자세히 살펴보자.

#property strict 지시문으로 컴파일 - 마지막 줄 'i' - 선언되지 않은 식별자를 꾸짖습니다. 문제는 변수가 주기에서 선언되고 그 안에서만 유효하다는 것입니다. #property strict 지시어가 없으면 오류 없이 컴파일되지만 이것은 나쁩니다. 지시문을 사용해야 합니다.

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 대신 if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))를 작성하는 것이 더 쉽습니다. 이제 더 나아가야 합니다. 이것은 루프에서 나가는 출구입니다. 그리고 다른 주문을 처리해야 합니다. 그러나 이것은 역사에서 중복됩니다. 시장 및 보류 중인 주문 에 오류가 발생합니다. 처리 시점에 주문이 마감되었고 누락된 경우입니다. 일반적으로 if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 계속합니다. - 다음 주문을 계속 처리

같은 이유로 if(OrderProfit()>0) break; if(OrderProfit()>0)으로 교체 계속

다음은 오류의 원인입니다. if(OrderProfit()<0) i++ ; - 잃는 숫자가 있으면 지수가 증가합니다. 그리고 루프 헤더 for(int i=orders-1;i>=0; i-- )는 그것을 줄입니다. 동일한 순서의 처리가 반복됩니다 - 프로그램 루프. 아마도 다음과 같아야 합니다.


감사합니다. 메타 트레이더는 더 이상 충돌하지 않습니다) 정보

if(OrderProfit()>0) 휴식; if(OrderProfit()>0)으로 교체 계속

주문이 이익으로 마감된 경우 함수가 이 이익을 고려하지 않고 손실 금액과 이익으로 마감된 첫 번째 주문까지만 계산해야 합니다. 저것들.

if(OrderProfit()>0) 휴식;


주문이 이익으로 마감되면 카운터를 중지해야 합니다. 제가 제대로 이해하고 있습니까?
 
Lowech :

감사합니다, 메타트레이더는 더 이상 충돌하지 않습니다) 저는 주문이 이익으로 마감된 경우 함수가 이 이익을 고려하지 않고 손실 금액과 이익으로 마감된 첫 번째 주문까지만 고려해야 합니다. . 저것들.
주문이 이익으로 마감되면 카운터를 중지해야 합니다. 제가 올바르게 이해하고 있습니까?
당신의 추론은 거의 정확합니다. 주문 이력에서 주문에 대한 보장은 없습니다. 자신을 위해 - 당신은 할 수 있습니다, 판매용 - 나쁜
 
STARIJ :
당신의 추론은 거의 정확합니다. 주문 이력에서 주문에 대한 보장은 없습니다. 자신을 위해 - 당신은 할 수 있습니다, 판매용 - 나쁜
주문별 주기는 주문을 순서대로 계산하지 않습니까?
 
STARIJ :

소스가 있는 경우 - DROW_NONE - 도면 없음

도움이 되지 않았습니다. 여전히 모서리에 숫자가 표시됩니다.

 
Lowech : 주문의 루프는 주문을 순서대로 계산하지 않습니까?

목록에서 순서대로. 그러나 이 목록의 주문에 대한 보장은 없습니다.