XAUUSD : mauvais dimensionnement de lot sur un compte libellé en GBP ?

 

Je sais que ce problème a été brièvement abordé dans le passé, mais je voulais le soulever à nouveau car je teste mon EA avec un petit compte réel.

Toutes les tailles de position avec les paires de devises sont correctes. Comme mon compte est libellé en GBP, la taille minimale des ticks est plus importante que celle d'un compte de trading libellé en USD (bien sûr).

Quoi qu'il en soit, comme je négocie avec FXCM, la taille minimale de la position dans MT4 est de "1,00" once troy. Cela équivaut approximativement à 0,0624 pence pour un mouvement de 1 cent. (c'est-à-dire, hors spreads 1 200,00 > 1 200,01 = 0,0624 £).

Voici le code que j'utilise... Pour une raison quelconque, je suis sûr qu'il ne calcule pas le dimensionnement correct de la position...

//+------------------------------------------------------------------+
//| 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);
 
Pourquoi cela serait-il la raison des lots plus petits que d'habitude alloués à la position sur XAUUSD ?
 
DomGilberto:
Pourquoi cela serait-il la raison des lots plus petits que d'habitude alloués à la position sur XAUUSD ?
Alors, est-ce que vous obtenez une erreur de compilation ? ou est-ce une faute de frappe ? ou avez-vous déclaré Digit et s comme quelque chose ? et si vous avez déclaré Digit, quelle est sa valeur ?
 

Aucun - Je dis que ce que je vous ai montré dans le code ci-dessus fonctionne parfaitement sur toutes les paires FX... Sur le XAUUSD, cela fonctionne parfaitement, mais les lots alloués à la transaction sont environ la moitié de ce qu'ils devraient être, en fonction du pourcentage de risque de mon solde que j'ai l'intention d'utiliser par transaction...

Donc, en termes simples, je veux risquer 2%, si cette transaction (XAUUSD) s'arrête, ce sera plutôt une perte de 1%. .... c'est bizarre ?

UPDATE : désolé, j'ai accidentellement espacé les s de Digit... Pour que vous puissiez le lire plus facilement ! C'est censé être Digits (la fonction).

Je suppose que ce que j'essaie de dire, c'est que mon compte étant libellé en GBP, cela a un effet sur la taille correcte du lot qui devrait être alloué... alors que si j'avais un compte en USD, cela ne serait-il pas plus précis (corrigez-moi si je me trompe !).

 
DomGilberto:
Aucun - Je dis que ce que je vous ai montré dans le code ci-dessus fonctionne parfaitement sur toutes les paires FX... Sur le XAUUSD, cela fonctionne parfaitement, mais les lots alloués à la transaction sont environ la moitié de ce qu'ils devraient être, en fonction du pourcentage de risque de mon solde que j'ai l'intention d'utiliser par transaction...

Donc, en termes simples, je veux risquer 2 %, si cette transaction (XAUUSD) s'arrête, ce sera plutôt une perte de 1 %, à la place.... c'est bizarre ?
OK, imprimez toutes les variables impliquées dans le calcul, exécutez-le sur XAUUSD et voyez quelle(s) variable(s) est (sont) incorrecte(s)... alors vous serez plus proche de savoir pourquoi c'est faux.
 

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

C'est dans le cadre du ST cependant... donc comme vous me l'avez déjà dit, il n'y aura pas de différence sur la dénomination du compte.....

Ça vous semble correct ? 23,64 points ?


(Mise à jour : juste pour que vous sachiez, ce sont les impressions pour le côté vente ! Désolé si cela vous a troublé... Je n'avais pas réalisé :P)

 

D'après ce que je vois, cela devrait fonctionner correctement.

La seule chose qui est un peu étrange est TV = 0,01, ce qui semble faible même pour un compte micro et je ne m'attendrais pas à cela pour un compte en GBP.

S'agit-il d'un compte de spread betting par hasard ?

 
DomGilberto:
double pips_to_ssl = SellStopPrice - sellPrice;
Est-ce que ça vous semble correct ? 23,64 points ?

C'est un changement de prix, pas un nombre de points (2364.) Vous ne convertissez pas le changement en nombre de points.

Vous ne voulez pas de points dans votre

pips_to_bsl/ ts * tv

calcul. Renommez la variable en change_to_ssl.

 
Non ce n'est pas un compte de spread betting.

@WHRoader - Comment ça, je ne veux pas de points dans ce calcul ? :s ?

Comment puis-je appliquer le risque correct à la transaction donnée en fonction de la distance au stop si je n'inclus pas les points dans la formule... ? (confus).

23.64 || 2,364 points... C'est ce que j'essaie de comprendre... Pour être franc, je suis convaincu que j'applique trop peu de positions d'une once troy parce que j'ai un compte libellé en livres sterling... J'ai juste besoin de quelqu'un pour me dire que j'ai raison / tort à partir de ce que j'ai montré ?
 
DomGilberto:
Non, ce n'est pas un compte de spread betting.

@WHRoader - Comment ça, je ne veux pas de points dans ce calcul ? :s ?

Comment puis-je appliquer le risque correct à la transaction donnée en fonction de la distance au stop si je n'inclus pas les points dans la formule... ? (confus).

23.64 || 2,364 points... C'est ce que j'essaie de comprendre... Pour être franc, je suis convaincu que j'applique trop peu de positions d'une once troy parce que j'ai un compte libellé en livres sterling... J'ai juste besoin de quelqu'un pour me dire que j'ai raison / tort à partir de ce que j'ai montré ?


Pouvez-vous s'il vous plaît montrer votre code qui résulte de cette impression ?

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 : formule loss_for_1_lot1 : 23.64 / 0.01 * 0.01 = 23.64

Vous pourriez peut-être ajouter cette impression

Print("Devise du compte = ",AccountCurrency() ) ;

pour confirmer que vous négociez réellement des GBP dans le ST, car je ne vois pas comment la TV peut être de 0,01.