XAUUSD dimensionamento del lotto sbagliato su un conto denominato in GBP?

 

Mi rendo conto che questo è stato brevemente toccato in passato, ma ho voluto riproporlo perché sto testando il mio EA con un piccolo conto live.

Tutti i dimensionamenti di posizione con le coppie di valute sono corretti. Poiché il mio conto è denominato in GBP, il minimo di tick è più grande di quello di un conto di trading denominato in USD (ovviamente).

In ogni caso, dato che sto facendo trading con FXCM, la dimensione minima della posizione all'interno di MT4 è "1.00" oncia troy. Questo equivale all'incirca a 0,0624 pence per 1 cent di movimento. (cioè escludendo gli spread 1.200,00 > 1.200,01 = 0,0624 sterline).

Questo è il codice che sto usando... Per qualche ragione, sono sicuro che non sta calcolando il corretto dimensionamento della posizione...

//+------------------------------------------------------------------+
//| Order Enter Function                                             |
//+------------------------------------------------------------------+
void OrderEntry(int direction)
{
   //Padding for the stop and padding for the entry too. 
   double ATR_Pad = iATR(NULL,60,14,1) / 2; 
   double Buy_Pad = NormalizeDouble(ATR_Pad,Digits);
   double Sell_Pad = NormalizeDouble(ATR_Pad,Digits);
   
   //Stop calculations.    
   double ATR = iATR(NULL,60,14,1);
   double MA = iMA(NULL,60,MA_Period,0,1,0,1);
  
   //Lot calculation.
   double risk_amount = AccountBalance( ) * RiskPercent / 100;
   double Lot_Step = MarketInfo(Symbol(), MODE_LOTSTEP);
   double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
   double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
   double minlot = MarketInfo(Symbol(), MODE_MINLOT);
         
          
//+-------------------------------------------------------------------------------------+
//| Order Buy Function                                                                  |
//+-------------------------------------------------------------------------------------+   

//Place a pending buystop if no orders exists. Pending or otherwise.
if(direction==0)
{ 
      
      //Get Highest Price in our lookback range and set buy price above it.
      int iTBT = iBarShift(NULL,60, triggerBarTime, true),
      iHH = iHighest( NULL,60, MODE_HIGH, iTBT + CandlesBeforeBiasObtained, 0 );
      double Buy_Here = High[iHH] + Buy_Pad;
      double buyPrice = NormalizeDouble( Buy_Here,Digits);
            
      double BuyStopPriceMath = MA - ATR;
      double BuyStopPrice = NormalizeDouble( BuyStopPriceMath,Digits );

      //get our buystop price from below the ma and our takeprofit based on our r:r ratio.
      double pips_to_bsl = buyPrice - BuyStopPrice;
      double buy_tp_price = ( pips_to_bsl * RewardRatio ) + buyPrice;
      double buy_takeprofit_price = NormalizeDouble( buy_tp_price, Digits );
      
      double loss_for_1_lot = pips_to_bsl/ ts * tv ;
      double LotSize_Buy = MathFloor( risk_amount / loss_for_1_lot/ Lot_Step) * Lot_Step ;


...
 

??

double buyPrice = NormalizeDouble( Buy_Here,Digit s);
 
Perché questo sarebbe il motivo dei lotti più piccoli del solito assegnati alla posizione su XAUUSD?
 
DomGilberto:
Perché questo sarebbe il motivo dei lotti più piccoli del solito assegnati alla posizione su XAUUSD?
Quindi ottieni un errore di compilazione ? o è un errore di battitura ? o hai dichiarato Digit e s come qualcosa ? e se hai dichiarato Digit qual è il suo valore ?
 

Nessuno - Sto dicendo che quello che ti ho mostrato in quel codice sopra funziona perfettamente su tutte le coppie FX... Su XAUUSD, funziona perfettamente, ma i lotti assegnati al trade sono tipo la metà di quello che probabilmente dovrebbe essere; in accordo con la % di rischio del mio saldo che intendo usare per trade...

Quindi, in termini profani; voglio rischiare il 2%, se quel trade (XAUUSD) si ferma, sarà più come una perdita dell'1% invece.... è strano?

AGGIORNAMENTO: scusate, ho accidentalmente distanziato la s di Digit... In modo che voi poteste leggerlo più facilmente! Dovrebbe essere Digits (la funzione).

Credo che quello che sto cercando di dire è che il mio conto denominato in GBP sta avendo un effetto sul corretto dimensionamento del lotto che dovrebbe essere assegnato... mentre se avessi un conto in USD, non sarebbe più accurato (correggetemi se sono fuori strada!).

 
DomGilberto:
Nessuno - Sto dicendo che quello che ti ho mostrato in quel codice sopra funziona perfettamente su tutte le coppie FX... Su XAUUSD, funziona perfettamente, ma i lotti assegnati al trade sono tipo la metà di quello che probabilmente dovrebbe essere; in accordo con la % di rischio del mio saldo che intendo usare per trade...

Quindi, in termini profani; voglio rischiare il 2%, se quel trade (XAUUSD) si ferma, sarà più una perdita dell'1% invece.... è strano?
OK, allora stampa tutte le variabili coinvolte nel calcolo, eseguilo su XAUUSD e vedi quale variabile o quali variabili non sono corrette. . . allora sarai più vicino a sapere perché è sbagliato.
 

double LotSize_Sell = MathFloor( risk_amount / loss_for_1_lot1/ Lot_Step) * Lot_Step ;
2013.11
.08 23:40:30     2013.06.19 19:00  V1 - XAUUSD XAUUSD,H1:  LotSize_Sell formula: ( 200 / 23.64 / 1 ) * 1 = 8
double loss_for_1_lot1 = pips_to_ssl/ ts * tv ;
2013.11.08 23:40:30     2013.06.19 19:00  V1 - XAUUSD XAUUSD,H1:  loss_for_1_lot1 formula: 23.64 / 0.01 * 0.01 = 23.64
 double pips_to_ssl = SellStopPrice - sellPrice;

2013.11.08 23:40:30     2013.06.19 19:00  V1 - XAUUSD XAUUSD,H1:  pips_to_ssl formula: 1378.45 - 1354.81 = 23.64

Questo è all'interno della ST però... quindi come mi hai detto prima, non sarà diverso sulla denominazione dell'account....

Ti sembra che vada bene? "23,64" punti?


(Aggiornamento: per tua informazione, sono le stampe per il lato vendita! Scusa se questo ti ha confuso... Non mi ero reso conto :P)

 

Per quanto posso vedere, dovrebbe funzionare bene.

L'unica cosa un po' strana è TV = 0.01, sembra basso anche per un conto micro e non me lo aspetterei per un conto in GBP.

È un conto di spread betting per caso?

 
DomGilberto:
double pips_to_ssl = SellStopPrice - sellPrice;
Ti sembra che vada bene? "23,64" punti?

Questo è un cambiamento di prezzo, non un numero di punti (2364.) Non stai convertendo il cambiamento in numero di punti.

Non volete punti nel vostro

pips_to_bsl/ ts * tv

calcolo. Rinomina la variabile in change_to_ssl

 
No, non è un conto di spread betting.

@WHRoader - Cosa vuol dire che non voglio punti nel calcolo?

Come posso applicare il rischio corretto al trade dato in base alla distanza dallo stop se non includo i punti nella formula...? (confuso).

23.64 || 2.364 punti... Questo è quello che sto cercando di capire... Ad essere sincero, sono convinto che sto applicando troppo poche posizioni da 1 oncia troy perché ho un conto denominato in GBP... Ho solo bisogno di qualcuno che mi dica che ho ragione / sbagliato da quello che ho mostrato?
 
DomGilberto:
No, non è un conto spread betting.

@WHRoader - Cosa vuol dire che non voglio punti in quel calcolo?

Come posso applicare il rischio corretto al trade dato in base alla distanza dallo stop se non includo i punti nella formula...? (confuso).

23.64 || 2.364 punti... Questo è quello che sto cercando di capire... Ad essere sincero, sono convinto che sto applicando troppo poche posizioni da 1 oncia troy perché ho un conto denominato in GBP... Ho solo bisogno di qualcuno che mi dica che ho ragione / sbagliato da quello che ho mostrato?


Puoi per favore mostrare il tuo codice che risulta in questa stampa?

double loss_for_1_lot1 = pips_to_ssl/ ts * tv ;

2013.11.08 23:40:30 2013.06.19 19:00 V1 - XAUUSD XAUUSD,H1: formula loss_for_1_lot1: 23.64 / 0.01 * 0.01 = 23.64

Forse si potrebbe aggiungere questa stampa

Print("Account currency = ",AccountCurrency() );

per confermare che stai effettivamente scambiando GBP nella ST perché non vedo come la tv possa essere 0,01