초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1055

 
Igor Makanu :

이것은 모두 명확하지만 전체 포인트에서 두 가격 간의 차이를 올바르게 계산하는 방법은 무엇입니까?

여기에서 반올림을 사용할 수 있습니다. 그리고 어느 방향으로 또는 전체에 대해 결정하는 것은 당신에게 달려 있습니다.

 int pips_profit = ( int ) MathFloor (OrderOpenPrice()-OrderClosePrice())/ _Point );
 
Igor Makanu :

그리고 그게 맞나요? 주문 루프에서 SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT ); OrderSymbol ()이 매번 다르기 때문에 다시 계산합니까?

따라서 작업은 약간 다릅니다. 모든 기호에 대한 총 이익입니다.

 
Konstantin Nikitin :

여기에서 반올림을 사용할 수 있습니다. 그리고 어느 방향으로 또는 전체에 대해 결정하는 것은 당신에게 달려 있습니다.


글쎄, 나는 그런 구성을 잊어 버렸습니다. Kim의 로트 계산 기능에 올바른 반올림이있었습니다.
fxsaber :

따라서 작업은 약간 다릅니다. 모든 기호에 대한 총 이익입니다.

알겠습니다. 하지만 왜 const - 루프에서 const가 변경되면 컴파일러는 어떻게 작동합니까?

추신: 코드를 읽을 수 있지만 확인해야 합니다. 사용한 적이 없습니다.

 
Igor Makanu :

알겠습니다. 하지만 왜 const - 루프에서 const가 변경되면 컴파일러는 어떻게 작동합니까?

추신: 코드를 읽을 수 있지만 확인해야 합니다. 사용한 적이 없습니다.

각 단계에서 변수가 생성됩니다. const - 이 단계에서는 아무데도 변경할 계획이 없습니다.

 
fxsaber :

각 단계는 변수를 생성합니다. const - 이 단계에서는 아무데도 변경할 계획이 없습니다.

단계는 루프의 반복입니까?

이러한 구성이 어떻게 작동하는지 아직 명확하지 않습니다. 확인하는 스크립트가 필요합니다.

 
fxsaber :

따라서 작업은 약간 다릅니다. 모든 기호에 대한 총 이익입니다.

그럼 그럼

 short pipsProfitOrder = ( short ) MathFloor ( ( OrderProfit()+OrderSwap()+OrderCommission() ) / ( SymbolInfoDouble (_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE )*OrderLots()) );

한 포지션의 점수차이를 계산하지만 본인은 지원하는데 문제가 없을 거라고 생각합니다

 
Igor Makanu :

단계는 루프의 반복입니까?

네.

이러한 구성이 어떻게 작동하는지 아직 명확하지 않습니다. 확인하는 스크립트가 필요합니다.

다음은 가변 수명을 편리하게 사용하는 예입니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

"상인을 위한 LifeHack: 정의(#define)에 ForEach 반죽" 기사에 대한 토론

fxsaber , 2018.02.14 10:54

성능 측정

 #define BENCH(A)                                                              \
{                                                                             \
   const ulong StartTime = GetMicrosecondCount ();                              \
  A;                                                                          \
   Print ( "Time[" + #A + "] = " + ( string )( GetMicrosecondCount () - StartTime)); \
}

double GetAsk()
{
   static MqlTick tick = { 0 };
  
   return ( SymbolInfoTick ( Symbol (),tick) ? tick.ask : 0 );
}

#define AMOUNT 1 e6

void OnStart ()
{
   double Sum = 0 ;
  
  BENCH( for ( int i = 0 ; i < AMOUNT; i++) Sum += GetAsk())
  BENCH( for ( int i = 0 ; i < AMOUNT; i++) Sum += SymbolInfoDouble ( _Symbol , SYMBOL_ASK ))
  
   Print (Sum);
}


결과

 Time [ for (inti= 0 ;i<AMOUNT;i++)Sum+=GetAsk()] = 78952
Time [ for (inti= 0 ;i<AMOUNT;i++)Sum+= SymbolInfoDouble ( _Symbol , SYMBOL_ASK )] = 162606
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

초보자의 질문 MQL5 MT5 MetaTrader 5

콘스탄틴 니키틴 , 2019.06.04 19:58

그럼 그럼

 short pipsProfitOrder = ( short ) MathFloor ( ( OrderProfit()+OrderSwap()+OrderCommission() ) / ( SymbolInfoDouble (_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE )*OrderLots()) );

한 포지션의 점수차이를 계산하지만 본인은 지원하는데 문제가 없을 거라고 생각합니다

이를 비용이 포함된 이익을 CURRENT(종료 시점이 아님) 포인트로 전환하는 것입니다.

 
fxsaber :

이를 비용이 포함된 이익을 CURRENT(종료 시점이 아님) 포인트로 전환하는 것입니다.

따라서 그는 이익을 포인트로 변환해야 합니다. 마감 위치를 계산할 때 여전히 포인트 값에서 진행해야 합니다. 시작 가격 간의 포인트 차이와 반드시 같지는 않은 포인트 단위의 이익 폐쇄.

 
Konstantin Nikitin :

따라서 그는 이익을 포인트로 변환해야 합니다.

때때로 이익 = OrderProfit()으로 간주됩니다.

마감 위치를 계산할 때 여전히 포인트 값에서 진행해야 합니다. 포인트 수익은 시가와 종가 사이의 포인트 차이와 같을 필요는 없습니다.

마감 시점의 핍 가치는 결제 시점의 핍 가치와 동일하지 않습니다. 또한 계산 시 기호가 단순히 Market Watch에 없을 수도 있습니다.

따라서 포인트 가치와 마감 시점의 가치가 모두 계산됩니다.

사유: