Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1055

 
Igor Makanu:

è tutto chiaro, ma come si fa a calcolare correttamente la differenza di 2 prezzi in punti interi?

È qui che si può applicare l'arrotondamento. Sta a voi decidere in che modo, o semplicemente a un numero intero.

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

E questo è corretto? Nel ciclo dell'ordine, SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT); verrebbe ricalcolato ogni volta, perchéOrderSymbol() sarà diverso ogni volta?

Il problema lì è leggermente diverso - il profitto totale in pip per tutti i simboli.

 
Konstantin Nikitin:

È qui che si può applicare l'arrotondamento. Sta a voi decidere in che modo, o semplicemente a un numero intero.


ebbene sì, ho dimenticato tali costruzioni, nelle funzioni di calcolo del lotto di Kim c'era un arrotondamento corretto
fxsaber:

Quindi il compito lì è leggermente diverso - il profitto totale in pip per tutti i simboli.

Ok, ma perché const - come si comporta il compilatore se il ciclo cambia const?

PS: il codice è leggibile, ma bisogna controllare, mai usato questo

 
Igor Makanu:

Ok, ma perché const - come si comporta il compilatore se const viene cambiato nel ciclo?

PS: il codice è leggibile, ma bisogna controllare, mai usato questo

Ad ogni passo verrà creata una variabile. const - in questo passo non è previsto di cambiare da nessuna parte.

 
fxsaber:

Ogni passo creerà una variabile. const - non ci sono piani per cambiare da nessuna parte in questo passo.

il passo è un'iterazione del ciclo?

Non è ancora chiaro come si comporterà una tale costruzione, abbiamo bisogno di uno script per controllare

 
fxsaber:

Quindi l'obiettivo è leggermente diverso - profitto totale in pip su tutti i simboli.

Bene, allora è così

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

Calcolo i profitti in pip di una posizione, ma penso che non sarà un problema applicarlo a me stesso

 
Igor Makanu:

un passo è un'iterazione di un ciclo?

Sì.

non è ancora chiaro come si comporterebbe una tale costruzione, abbiamo bisogno di uno script per controllare

Ecco un esempio di un uso conveniente della vita variabile

Forum sul trading, sistemi di trading automatico e test di strategia

Discussione su "LifeHack per trader: mescolare ForEach sulle definizioni (#define)"

fxsaber, 2018.02.14 10:54

Misurazione delle prestazioni

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


Risultato

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

Forum sul trading, sistemi di trading automatico e test di strategia

FAQ da principianti MQL5 MT5 MetaTrader 5

Konstantin Nikitin, 2019.06.04 19:58

Bene allora

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

Calcolo i profitti in pip di una posizione ma penso di non avere problemi.

Questa si chiama conversione dei profitti con costi in pip VERI (non alla chiusura).

 
fxsaber:

Questo è chiamato un trasferimento di profitto di costo in punti CORRENTI (non al momento della chiusura).

È così che deve tradurre il profitto in punti. Quando si calcolano quelli chiusi, bisogna ancora prendere il valore del punto come base. Il profitto in pip non deve essere uguale alla differenza in pip tra i prezzi di apertura e di chiusura. e prezzi di chiusura.

 
Konstantin Nikitin:

Quindi ha bisogno di tradurre il profitto in punti.

A volte pensano che profitto = OrderProfit().

Quando si calcola un simbolo chiuso, si dovrebbe ancora usare il valore del pip. Il valore in pip del profitto non deve essere uguale alla differenza in pip tra il prezzo di apertura e quello di chiusura.

Il valore dei punti alla chiusura non è uguale al valore dei punti al momento del calcolo. Inoltre, al momento del calcolo il simbolo potrebbe semplicemente non essere nel Market Watch.

Ecco perché vengono calcolati sia i valori dei punti che il loro valore al momento della chiusura.