Come fa MetaTrader 5 a calcolare il profitto?

 

Esecuzione di un semplice script:

//+------------------------------------------------------------------+
//|                                                       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

L'errore è chiaramente visibile...

Il problema deve venire daSYMBOL_TRADE_TICK_VALUE_PROFIT eSYMBOL_TRADE_TICK_VALUE_LOSS.

Avremo bisogno diSYMBOL_TRADE_TICK_VALUE_LONG e SYMBOL_TRADE_TICK_VALUE_SHORT.

La ricerca ha rivelato qualcosa di interessante:

Renat:

Я вчера, когда смотрел код, неверно выразился по поводу разной стоимость пункта в зависимости от направления.

Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid.


Questo è sbagliato, ovviamente. Per una posizione corta, prezzo al contrario....

Spero davvero che l'errore sia involontario! Puoi correggerlo, per favore!

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

Sfortunatamente, la domanda non è esposta chiaramente e non c'è alcuna conclusione dall'esempio proposto. Non è chiaro - cosa esattamente è indicato come un errore.

Formulate la vostra domanda con precisione, allegate i risultati ottenuti e indicate dove si trova l'errore, per favore.

Per esempio, indicate qui dov'è l'errore:

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

Ho aggiunto i valori SYMBOL_TRADE_TICK_VALUE_PROFIT e SYMBOL_TRADE_TICK_VALUE_LOSS alla fine.

Si può vedere che il profitto prende effettivamente in considerazione diversi valori di un tick, a seconda della redditività o della perdita di un trade. Questo perché c'è un'operazione implicita di conversione nella valuta di deposito, quando si deve vendere (se è un profitto) o ricomprare (se è una perdita) il risultato finanziario ottenuto in una valuta per la conversione.

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

 

Il valore di un tick non dipende dal profitto o dalla perdita di un trade.

Profitto e perdita si chiuderanno allo stesso prezzo. La conversione è la stessa.

Solo gli scambi brevi e lunghi possono avere una differenza nel valore del tick e possono essere contati diversamente per la conversione nella valuta di deposito.

L'esempio BuyPlus e BuyMinus sarebbe uguale. Anche il SellPlus e il SellMinus. Puoi solo comprare.... è diverso da Vendere...

Lei sta confondendo qualcosa qui:

Renat:

... Quando devivendere(se è un profitto) oricomprare(se è una perdita) il risultato finanziario in una valuta per la conversione.

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

Quando apri un trade per EURGBP, e la valuta del deposito è USD,in pratica hai (approssimativamente) Compra EURUSD e Vendi GBPUSD. (La differenza di volume non ha importanza, perché non cambiano quando si chiude)

Per aprire:Compra EURUSD a Ask(EURUSD) e vendi GBPUSD a Bid(GBPUSD).

Alla chiusura(se è un profitto,se è una perdita) avete lo stesso prezzo: Bid (EURUSD) e Ask (GBPUSD).

Perché il valore del tick è diverso per ilprofitto/perdita?

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

Questo è il risultato di un malinteso di lunga data degli sviluppatori:

Renat:

È più preciso dire che il TickValue durante la conversione nella valuta di destinazione dipende dal fatto che sia una perdita o meno. Cioè, se abbiamo una perdita di 1 pip, dobbiamo ricomprarlo al prezzo Ask, e se abbiamo un profitto di 1 pip, dobbiamo venderlo al prezzo Bid.

 
Manov:

Ilvalore di un tick non dipende dal fatto che un trade sia redditizio o meno.

Profitto e perdita si chiuderanno allo stesso prezzo. Alla conversione, anche il prezzo.

È così e basta.

Per fare questo, è necessario comprendere la matematica dei calcoli con conversioni incrociate complesse. Finché si opera con major come EURUSD e GBPUSD, non si vedrà nulla.

Sì, a prima vista può sembrare che non dipenda da questo, ma se si esaminano le croci nei dettagli, si vedrà che è così.

 
Renat:

Questo è il punto, dipende.

Questo è in realtà un punto controverso. La logica di Renat è chiara e sembra persino corretta a prima vista:

Quando fai un trade crossover, realizzi un profitto nella sua valuta di base. Per esempio, il profitto di un trade EURGBP è misurato in GBP. Ma non c'è il concetto di profitto multivaluta in MT5, quindi il profitto in GBP viene convertito nella valuta del conto al volo. Quindi, sembra che in caso di profitto positivo deve essere convertito al tasso di cambio corrente GBPUSD_Bid, e in caso di negativo - GBPUSD_Ask.

Tuttavia, ecco un controesempio:

  1. Avete due conti indipendenti. Avete deciso di trasferire fondi da uno all'altro.
  2. Su EURGBP si imposta lo spread interno su un conto BuyLimit. Di conseguenza, il prezzo dell'offerta diventa vostro.
  3. Sull'altro conto, usando un ordine a mercato si esegue SELL.
  4. Con questa semplice operazione avete venduto a voi stessi.
  5. Passa un po' di tempo e si decide di chiudere gli affari.
  6. Sul primo conto si imposta il SellLimit all'interno dello spread. Ora il tuo prezzo diventa il prezzo di Ask.
  7. Sull'altro conto, si usa l'ordine di mercato per COMPRARE.
  8. Si scopre che ora hai comprato dal tuo stesso conto.
  9. Entrambi i trade di ogni conto sono stati chiusi. Hai comprato e venduto a te stesso.
  10. In un conto hai un profitto positivo e nell'altro negativo.
  11. Pensate che l'ammontare dei fondi in entrambi i vostri conti sia cambiato (senza includere la commissione del broker)?
  12. Secondo la logica di Renat, è cambiato. Perché il profitto in un conto non sarà uguale alla perdita nell'altro conto. E questo nonostante il fatto che lei stesso comprava e vendeva.
  13. È corretto?

Stavamo parlando di condizioni di mercato - broker ECN/STP.

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

Tuttavia, un controesempio:
  1. È la cosa giusta da fare?

Si trattava di condizioni di mercato - broker ECN/STP.

Considerate che ci sono almeno altre due operazioni di conversione interna con i loro propri spread.
 
Renat:

Questo è il punto: dipende.

Per fare questo è necessario scavare abbastanza in profondità nella matematica dei calcoli con conversioni incrociate complesse. Finché si opera con le major come EURUSD e GBPUSD, non si vedrà nulla.

Sì, sembra a prima vista che non dovrebbe dipendere, ma se si esaminano le croci nei dettagli, si vedrà che è così.

Il calcolo Ask/Bid può esserecomplicato, ma in realtà,per tutti i cross, hai 2 trade:

1. comprare o vendereSYMBOL_CURRENCY_BASE-ACCOUNT_CURRENCY su Ask/Bid

2) Comprare o vendereSYMBOL_CURRENCY_PROFIT -ACCOUNT_CURRENCY per Ask/Bid

Ogni trade, se lo abbiamo aperto con Bid, lo chiuderemo con Ask. E viceversa...

Il segno di risultato non ha importanza per i prezzi di chiusura, come fa ora su MetaTrader 5!

 
Renat:
Tenete presente che ci sono almeno altre due conversioni interne con i loro spread.

Di quali operazioni di conversione stiamo parlando? La logica è semplice, bisogna convertire i profitti multivaluta nella valuta del conto, niente di più. Nel caso dell'esempio, il profitto in GBP deve essere convertito in USD. Non importa se il profitto è positivo o negativo, bisogna convertirlo.

Avete rinunciato al modello di mercato di prendere profitti in più valute e convertirli al momento del rollover. Questo è un allontanamento dalle condizioni di mercato di MT5, che è posizionata come una piattaforma di mercato. Ma per motivi di semplificazione questa partenza può essere compresa e non comporta in molti casi (non in tutti) costi gravi.

Ma nel caso del calcolo dei profitti, per chiamare le cose con il loro nome proprio, state, intenzionalmente o accidentalmente, contribuendo a uno schema fraudolento per prendere soldi dai clienti a favore di un broker che usa MT5. Mi spiego, al momento un broker sta facendo un profitto extra su MT5 dal trading di tutti i clienti pari (approssimativamente) al fatturato di tutti i suoi clienti sui cross, moltiplicato per lo spread corrispondente delle major.

Avete implementato uno schema gratuito per fare soldi sullo spread, e su qualsiasi spread. Per esempio, durante le notizie, sullo stesso GBPUSD, lo spread può essere molto ampio e se c'è una chiusura/apertura presso i clienti del broker, il broker guadagna questo enorme spread su un punto piatto.

Questo è uno svantaggio e la rinuncia al profitto multicurrency, perché lo spread multicurrency può essere convertito a prezzi molto cattivi durante le notizie. E infatti durante il rollover il profitto multivaluta viene convertito al netting totale di tutti i clienti. E non è possibile che si verifichino tali squilibri, come mostrato nel controesempio di cui sopra.

Motivazione: