MetaTrader 5는 수익을 어떻게 계산합니까?

 

간단한 스크립트를 실행해 보겠습니다.

 //+------------------------------------------------------------------+
//|                                                       profit.mq5 |
//+------------------------------------------------------------------+
string com;
string Sy[ 28 ]={ "EURGBP" , "EURAUD" , "EURNZD" , "EURUSD" , "EURCAD" , "EURCHF" , "EURJPY" , "GBPAUD" , "GBPNZD" , "GBPUSD" ,
               "GBPCAD" , "GBPCHF" , "GBPJPY" , "AUDNZD" , "AUDUSD" , "AUDCAD" , "AUDCHF" , "AUDJPY" , "NZDUSD" , "NZDCAD" ,
               "NZDCHF" , "NZDJPY" , "USDCAD" , "USDCHF" , "USDJPY" , "CADCHF" , "CADJPY" , "CHFJPY" };
double a[ 28 ],b[ 28 ],BuyPlus[ 28 ],BuyMinus[ 28 ],SellPlus[ 28 ],SellMinus[ 28 ];
double diff= 0.001 ;

void OnStart ()
  {com= "" ;
   for ( int i= 0 ;i< 28 ;i++)
      {b[i]= SymbolInfoDouble (Sy[i], SYMBOL_BID );a[i]= SymbolInfoDouble (Sy[i], SYMBOL_ASK );
       OrderCalcProfit ( ORDER_TYPE_BUY ,Sy[i], 1.0 ,a[i],a[i]+diff,BuyPlus[i]);
       OrderCalcProfit ( ORDER_TYPE_BUY ,Sy[i], 1.0 ,a[i],a[i]-diff,BuyMinus[i]);
       OrderCalcProfit ( ORDER_TYPE_SELL ,Sy[i], 1.0 ,b[i],b[i]+diff,SellPlus[i]);
       OrderCalcProfit ( ORDER_TYPE_SELL ,Sy[i], 1.0 ,b[i],b[i]-diff,SellMinus[i]);
       
       com=com+ "\n" +Sy[i]+ "  BuyPlus="   + DoubleToString (BuyPlus[i], 4 )
                         + "  BuyMinus=" + DoubleToString (BuyMinus[i], 4 )
                         + "  SellPlus=" + DoubleToString (SellPlus[i], 4 )
                         + "  SellMinus=" + DoubleToString (SellMinus[i], 4 );
      } //for
   Comment (com);
  } //start

오류가 분명합니다...

문제는 아마도 SYMBOL_TRADE_TICK_VALUE_PROFIT SYMBOL_TRADE_TICK_VALUE_LOSS에서 비롯된 것입니다.

SYMBOL_TRADE_TICK_VALUE_LONG 및 SYMBOL_TRADE_TICK_VALUE_ SHORT 가 필요합니다.

검색 결과 흥미로운 것이 나타났습니다.

Renat :

어제 코드를 보니 방향에 따라 포인트 비용이 다르다고 잘못 표현했네요.

보다 정확하게는 TickValue를 대상 통화로 변환할 때 수익성이 없는지 여부에 따라 다릅니다. 즉, 1핍의 손실이 있으면 Ask 가격으로 다시 사야 하고 이익이 1핍이면 Bid 가격으로 매도해야 합니다.


이것은 물론 잘못된 것입니다. 숏 포지션의 경우 반대 가치를....

오류가 파동이 아니길 진심으로 바랍니다! 고쳐주세요!

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

불행히도 질문이 명확하게 기술되지 않았으며 제안된 예에서 결론이 나오지 않았습니다. 정확히 무엇을 오류로 표시하는지 명확하지 않습니다.

질문을 정확하게 공식화하고 얻은 결과를 첨부하고 오류가 어디에 있는지 표시하십시오.

예를 들어, 오류가 어디에 있는지 표시하십시오.

EURGBP  BuyPlus=158.40000000  BuyMinus=-158.48000000  SellPlus=-158.48000000  SellMinus=158.40000000  Profit=1.58398000  Loss=1.58482000

마지막에 SYMBOL_TRADE_TICK_VALUE_PROFIT 및 SYMBOL_TRADE_TICK_VALUE_LOSS 값을 추가했습니다.

이익은 실제로 거래의 수익성 또는 비수익성에 따라 다른 틱 비용을 고려한 것임을 알 수 있습니다. 받은 재무성과를 하나의 통화(이익인 경우) 로 매도 하거나(손실인 경우) 환매 (손실인 경우)해야 하는 경우 예금통화로 암묵적으로 전환하는 작업이 있기 때문입니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

 

틱 비용은 거래의 수익성이나 손실에 의존하지 않습니다.

손익은 같은 가격으로 마감됩니다. 변환할 때 - 너무.

단기 거래와 장기 거래만 틱 값에 차이가 있을 수 있으며 예금 통화 로의 전환을 위해 다르게 계산될 수 있습니다.

이전 예에서 BuyPlus와 BuyMinus는 같아야 합니다. SellPlus 및 SellMinus도 있습니다. 구매만 가능합니다.... 판매와 다릅니다...

당신은 여기에서 뭔가를 혼동하고 있습니다:

레나트 :

...받은 재무 결과를 하나의 통화 로 매도 (이익인 경우)하거나 환매 (손실인 경우)를 위해 환매해야 할 때.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 

EURGBP에서 거래를 시작하고 예치 통화 가 USD이면 실제로 (대략) EURUSD를 매수하고 GBPUSD를 매도하게 됩니다. (볼륨의 차이는 중요하지 않습니다. 닫을 때 변경되지 않기 때문입니다)

오픈하려면: EURUSD를 매도 호가(EURUSD)로 매수하고 GBPUSD 매도 - 입찰(GBPUSD).

닫을 때( 이익이면 손실이면) Bid(EURUSD) 및 Ask(GBPUSD)와 동일한 가격이 됩니다.

손익 에 따라 틱 값이 다른 이유는 ?!?!

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 

이것은 오랜 개발자의 오해 의 결과입니다.

Renat :

보다 정확하게는 TickValue를 대상 통화로 변환할 때 수익성이 없는지 여부에 따라 다릅니다. 즉, 1핍의 손실이 있으면 Ask 가격으로 다시 사야 하고 이익이 1핍이면 Bid 가격으로 매도해야 합니다.

 
Manov :

틱 값은 거래의 수익성이나 손실에 의존하지 않습니다 .

손익은 같은 가격으로 마감됩니다. 변환할 때 - 너무.

그것은 단지 요점입니다.

이렇게 하려면 복잡한 십자가의 변환으로 계산의 수학에 대해 충분히 깊이 파고들 필요가 있습니다. EURUSD 및 GBPUSD와 같은 전공을 운영하는 한 아무 것도 볼 수 없습니다.

그렇습니다. 언뜻 보기에는 의존해서는 안 되는 것처럼 보이지만 십자가 를 자세히 살펴보면 의존한다는 것을 알게 될 것입니다.

 
Renat :

그것은 단지 요점입니다.

사실 이것은 논점입니다. Renat의 논리는 이해할 수 있고 얼핏 보기에도 정확해 보입니다.

교차 작업을 수행하면 기본 통화 로 이익을 받습니다. 예를 들어 EURGBP 거래로 인한 이익은 GBP 로 측정됩니다. 그러나 MT5 에는 다중 통화 이익의 개념이 없으므로 GBP 이익은 즉시 계정 통화로 변환됩니다. 그리고 양의 이익이 있으면 현재 환율 GBPUSD_Bid 로 변환되어야 하고 음수인 GBPUSD_Ask 로 변환되어야 합니다.

그러나 반대 예 :

  1. 두 개의 독립 계정이 있습니다. 그리고 당신은 자금을 다른 곳으로 이체하기로 결정합니다.
  2. EURGBP 에서는 하나의 BuyLimit 계정에 스프레드 내부에 게시합니다. 따라서 입찰 가격은 귀하가 됩니다.
  3. 다른 계정에서 SELL 시장 주문을 만드십시오.
  4. 그런 간단한 조작으로 당신은 자신을 팔았습니다.
  5. 특정 시간이 지나면 거래를 종료하기로 결정합니다.
  6. 첫 번째 계정에서 스프레드 내부에 SellLimit 을 설정합니다. 귀하의 가격은 이제 Ask 가격이 됩니다.
  7. 다른 계정에서 BUY 시장 주문을 만드십시오.
  8. 당신은 이제 자신에게서 구입 한 것으로 나타났습니다.
  9. 각 계정의 두 거래가 모두 마감되었습니다. 당신은 자신에게 사고 팔았습니다.
  10. 한 계정에는 양수 이익이 있고 다른 계정에는 음수 이익이 있습니다.
  11. 두 계정의 자금 금액이 변경되었다고 생각하십니까(브로커 수수료 제외)?
  12. 논리적으로 Renata 는 변경되었습니다 . 왜냐하면 한 계정의 이익은 다른 계정의 손실과 같지 않습니다. 그리고 이것은 당신 자신이 판매하고 샀음에도 불구하고.
  13. 맞나요?

그것은 시장 상황에 관한 것이었습니다 - ECN/STP 중개인.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
hrenfx :

그러나 반대 예 :
  1. 맞나요?

그것은 시장 상황에 관한 것이었습니다 - ECN/STP 중개인.

자체 스프레드가 있는 다른 내부 전환이 두 개 이상 있다는 점에 유의하십시오.
 
Renat :

그것은 단지 요점입니다.

이렇게 하려면 복잡한 십자가의 변환으로 계산의 수학에 대해 충분히 깊이 파고들 필요가 있습니다. EURUSD 및 GBPUSD와 같은 전공을 운영하는 한 아무 것도 볼 수 없습니다.

그렇습니다. 언뜻 보기에 의존해서는 안 되는 것처럼 보이지만 십자가 를 자세히 살펴보면 의존한다는 것을 알게 될 것입니다.

Ask/Bid 가격을 계산하는 것은 까다로울 수 있지만 실제로는 모든 교차에 대해 2개의 거래가 있습니다.

1. 매수/매도 SYMBOL_CURRENCY_BASE - ACCOUNT_CURRENCY by Ask/Bid

2. 매수 또는 매도 SYMBOL_CURRENCY_PROFIT - ACCOUNT_CURRENCY by Ask/Bid

입찰에 의해 열린 경우 각 거래 - 질문에 의해 마감됩니다. 그 반대...

결과의 표시는 현재 MetaTrader 5에 있으므로 마감 가격에 대해 중요하지 않습니다.

 
 
Renat :
자체 스프레드가 있는 다른 내부 전환이 두 개 이상 있다는 점에 유의하십시오.

어떤 변환 작업에 대해 이야기하고 있습니까? 논리는 간단합니다. 더 이상 다중 통화 이익을 계정 통화로 변환해야 합니다. 예시의 경우 GBP의 수익을 USD로 환산해야 합니다. 이익이 양수인지 음수인지는 중요하지 않지만 변환해야 합니다.

다중 통화 이익을 유지하고 롤오버 시 전환하는 시장 계획을 포기했습니다. 이는 마켓플랫폼으로 자리 잡은 MT5의 시장상황에서 탈피한 것이다. 그러나 단순함을 위해 그러한 이탈은 이해될 수 있으며 많은 경우에(전혀 아님) 심각한 비용을 초래하지 않습니다.

그러나 이익 계산의 경우 스페이드를 스페이드라고 부르는 것은 고의 또는 실수로 MT5를 사용하는 중개인에게 유리하게 고객으로부터 돈을 빼는 사기 계획을 조장하는 것입니다. 현재 브로커는 MT5에서 추가 금액을 받습니다. 모든 고객의 거래에서 얻은 이익은 (대략) 모든 고객의 십자가 회전율에 해당하는 메이저의 스프레드를 곱한 것과 같습니다.

스프레드 및 모든 수익에 대한 무료 계획을 구현했습니다. 예를 들어 뉴스 중에 동일한 GBPUSD에 대한 스프레드가 매우 넓을 수 있으며 브로커의 고객에 대한 마감/오픈이 있는 경우 브로커는 갑자기 이 엄청난 스프레드를 얻습니다.

이것은 뉴스 중에 다중 이익이 매우 나쁜 가격으로 전환 될 수 있기 때문에 다중 통화 이익 거부의 마이너스입니다. 그러나 실제로 롤오버 동안 다중 통화 이익의 전환은 일반적으로 모든 고객의 총 상계에 따라 발생합니다. 그리고 위의 반례에서 보듯이 그러한 왜곡은 어떤 방법으로도 일어날 수 없습니다.