¿XAUUSD tamaño de lote incorrecto en la cuenta denominada en GBP?

 

Aprecio que esto se ha tocado brevemente en el pasado, pero quería traerlo de nuevo, ya que estoy probando mi EA con una pequeña cuenta real.

Todos los tamaños de posición con los pares de divisas son correctos. Debido a que mi cuenta está denominada en libras esterlinas, el tamaño mínimo de los ticks es mayor que el de una cuenta de operaciones que estuviera denominada en dólares (por supuesto).

De cualquier manera, como estoy operando con FXCM, el tamaño mínimo de la posición dentro de MT4 es "1.00" onza troy. Esto equivale aproximadamente a 0,0624 peniques por cada movimiento de 1 céntimo. (es decir, excluyendo los spreads 1.200,00 > 1.200,01 = £ 0,0624).

Este es el código que estoy utilizando... Por alguna razón, estoy seguro de que no está calculando el tamaño de la posición correcta ...

//+------------------------------------------------------------------+
//| 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);
 
¿Por qué sería esa la razón de los lotes más pequeños de lo habitual asignados a la posición en XAUUSD?
 
DomGilberto:
¿Por qué sería esa la razón de los lotes más pequeños de lo habitual asignados a la posición en XAUUSD?
Entonces, ¿obtiene un error de compilación? o ¿es un error tipográfico? o ¿declaró Digit y s como algo? y si declaró Digit ¿cuál es su valor?
 

Ninguno - Digo que lo que te he mostrado en ese código de arriba funciona en todos los pares FX perfectamente... En el XAUUSD, funciona perfectamente, pero los lotes asignados al comercio es como la mitad de lo que probablemente debería ser; de acuerdo con lo que el riesgo% de mi saldo tengo la intención de utilizar por el comercio ...

Así que en términos de laicos; Quiero arriesgar el 2%, si ese comercio (XAUUSD) se detiene a cabo, será más como una pérdida del 1% en lugar .... su extraño?

ACTUALIZACIÓN: lo siento, accidentalmente espacié la s de Digit... ¡Así que usted podría leer más fácil! Se supone que es Dígitos (la función).

Supongo que lo que estoy tratando de decir es que mi cuenta, al estar denominada en libras esterlinas, está afectando al tamaño correcto del lote que debería asignarse... mientras que si tuviera una cuenta en dólares, no sería más preciso (¡corríjanme si estoy muy equivocado!).

 
DomGilberto:
Ninguno - Digo que lo que te he mostrado en ese código de arriba funciona en todos los pares FX perfectamente... En el XAUUSD, funciona perfectamente, pero los lotes asignados al comercio es como la mitad de lo que probablemente debería ser; de acuerdo con lo que el riesgo% de mi saldo tengo la intención de utilizar por el comercio ...

Así que, en términos simples, quiero arriesgar un 2%, si esa operación (XAUUSD) se detiene, será más bien una pérdida del 1% en lugar de .....
OK, así que imprimir todas las variables que intervienen en el cálculo, ejecutarlo en XAUUSD y ver qué variable o variables son incorrectas ... entonces usted estará más cerca de saber por qué está mal.
 

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

Pero eso es dentro de la ST... así que como me has dicho antes, no será diferente en la denominación de la cuenta....

¿Te parece bien? ¿23,64 puntos?


(Actualización: Para que lo sepas, ¡son las impresiones para la parte vendedora! Lo siento si eso te ha confundido... No me di cuenta :P)

 

Por lo que veo, debería funcionar bien.

Lo único que es un poco extraño es TV = 0.01, parece bajo incluso para una cuenta micro y no esperaría eso para una cuenta de GBP.

¿Es una cuenta de apuestas por extensión por casualidad?

 
DomGilberto:
double pips_to_ssl = SellStopPrice - sellPrice;
¿Te parece bien? ¿23,64 puntos?

Eso es un cambio en el precio, no un número de puntos (2364). No estás convirtiendo el cambio en número de puntos.

No quieres puntos en tu

pips_to_bsl/ ts * tv

cálculo. Cambia el nombre de la variable a change_to_ssl

 
No es una cuenta de spread betting.

@WHRoader - ¿Qué quieres decir con que no quiero puntos en ese cálculo? :s?

¿Cómo puedo aplicar el riesgo correcto a la operación dada en base a la distancia al stop si no incluyo puntos en la fórmula...? (confundido).

23,64 || 2.364 puntos... Eso es lo que estoy tratando de conseguir mi cabeza alrededor de ... Para ser franco, estoy convencido de que estoy aplicando muy poco las posiciones de 1 onza troy porque tengo una cuenta denominada en libras esterlinas... Sólo necesito que alguien me diga que estoy bien / mal de lo que he mostrado?
 
DomGilberto:
No es una cuenta de spread betting.

@WHRoader - ¿Qué quieres decir con que no quiero puntos en ese cálculo? :s?

¿Cómo puedo aplicar el riesgo correcto a la operación dada en base a la distancia al stop si no incluyo puntos en la fórmula...? (confundido).

23,64 || 2.364 puntos... Eso es lo que estoy tratando de conseguir mi cabeza alrededor de ... Para ser franco, estoy convencido de que estoy aplicando muy poco las posiciones de 1 onza troy porque tengo una cuenta denominada en libras esterlinas... Sólo necesito que alguien me diga que estoy bien / mal de lo que he mostrado?


¿Puede mostrar su código que resulta en esta impresión?

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

Tal vez usted podría añadir esta impresión

Print("Moneda de la cuenta = ",Moneda de la cuenta() );

para confirmar que realmente está negociando GBP en el ST porque no puedo ver ninguna manera de que tv puede ser 0,01