¿función de cálculo automático del tamaño del lote? - página 2

 
Esto es de oro. Me ha ahorrado horas de trabajo. ¡Eres el hombre!
 

Disfruta... pero no te prives de la confianza que supone construir tu propio código y así saber exactamente cómo funciona. El uso de código preexistente es una buena manera de mejorar tus conocimientos en una forma de "tirar de ti mismo por tus botas", yo no estaría aquí si no tuviera código para usar como ejemplos en mis primeros días, pero asegúrate y oblígate a aprender a pescar. Es muy valioso para todo lo demás que hagas.

 

@Phillip

¿Qué te parece esto?

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) );

if(tradeVolume<MarketInfo(Symbol(),MODE_MINLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MINLOT);

if(tradeVolume>MarketInfo(Symbol(),MODE_MAXLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MAXLOT);

res=OrderSend(Symbol(),OP_BUY,tradeVolume,Ask,3,Ask - 0.2,Ask + 0.4,"",MAGICID,0,Red);

 
Ricotter:

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) );


Sin probarlo personalmente para confirmar la matemática, pero asumiendo que la matemática es correcta, eso parece correcto siempre y cuando lo apliques únicamente a pares de divisas para los que la moneda del contador es también la denominación de la cuenta.

Por ejemplo, si su cuenta está basada en el USD, entonces debería aplicar ese método de cálculo del volumen de operaciones sólo a los pares de divisas con el USD como contador - EURUSD, GBPUSD, etc.

En mis códigos este tipo de par de divisas se designa como "Tipo 2".

El cálculo será erróneo si lo aplica a un símbolo que tiene como base la denominación de la cuenta (USDJPY cuando la cuenta está basada en USD, por ejemplo). Y del mismo modo estará en error si se aplica a cualquier cruce.

Revise la función de llamada SymboType() en el archivo "Analyze Currency Symbol" que estaba en mi otro post, la sección de cabecera comentada explica un poco la base de los diferentes tipos de símbolos y por qué necesita calcular la equidad en riesgo y el tamaño del volumen (tamaño del lote) de manera diferente dependiendo del tipo de símbolo.

¡Pero si su plan es sólo el comercio de los pares de tipo EURUSD y GBPUSD entonces su código parece bueno para ir!
 

Hola de nuevo Phillip... puede que recuerdes que en uno de mis posts anteriores había dicho "Parece que el código tenía algunos problemas con los pares JPY. ¿Se ha resuelto?". Bueno, creo que ese problema puede haber surgido de nuevo conmigo. Añadí su rutina correctamente (estoy bastante seguro) en mi EA y establecí mi MaxPercentEquityAtRisk= 1.0 (1 por ciento). La equidad en mi cuenta de demostración es de alrededor de 2300 dólares, por lo que estoy dispuesto a arriesgar aproximadamente 23 dólares en cualquier comercio dado. Mi EA utiliza stop losses y objetivos de ganancias de igual tamaño, por lo que si arriesgo 23 dólares en una operación, estoy apuntando a una ganancia de 23 dólares. De todos modos, mi EA generó 2 operaciones anoche:

(1) COMPRA de EUR/JPY, con un stoploss de 9,8 pips y un objetivo de beneficios de 9,8 pips. Su rutina calculó un tamaño de lote de 0.80 lotes (demasiado grande) y la operación resultó en una ganancia de 10 pips de $96.91

(2) COMPRA de NZDJPY, 16.3 pips de stoploss y 16.3 pips de objetivo de beneficio. Su rutina calculó un tamaño de lote de 0,28 lotes y la operación resultó en una pérdida de -56,56 dólares.


Me parece que ambas operaciones deberían haberme dado aproximadamente una ganancia o una pérdida de 23 dólares, dado que sólo estoy arriesgando el 1% de mi capital de 2300 dólares, ¿no?


Gracias.

Shawn

 

Esto podría ayudar a Phillp - aquí está el registro de las declaraciones de impresión de su código justo después de que calcula los tamaños de los lotes para las dos órdenes que he mencionado anteriormente:


05:14:56 EURJPY,H1: BUY - EURJPY Max EquityAtRisk = $21.99 y Max Lotsize = 0.8085
05:14:56 EURJPY,H1: BUY - EURJPY Current EquityAtRisk = $21.76 y Current Lotsize = 0.8
05:14:56 EURJPY,H1: BUY - EURJPY MarketInfo(MODE_STOPLEVEL) = 30.00000
05:14:56 LibOrderReliable EURJPY,H1: cargado con éxito
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1:
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1: Intento de COMPRA STOP 0.80000000 lotes @114.78700000 sl:114.68900000 tp:114.88500000



09:02:36 NZDJPY,H1: BUY - NZDJPY Max EquityAtRisk = $23.29 and Max Lotsize = 0.2814
09:02:36 NZDJPY,H1: BUY - NZDJPY Current EquityAtRisk = $23.18 and Current Lotsize = 0.28
09:02:36 NZDJPY,H1: BUY - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000
09:02:36 LibOrderReliable NZDJPY,H1: cargado con éxito
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: Intentado BUY STOP 0.28000000 lotes @64.29700000 sl:64.13400000 tp:64.46000000
09:02:37 LibOrderReliable NZDJPY,H1: open #155492665 buy stop 0.28 NZDJPY at 64.297 sl: 64.134 tp: 64.460 ok
09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: Ticket #155492665: Orden de COMPRA STOP colocada con éxito, los detalles siguen.
09:02:37 LibOrderReliable NZDJPY,H1: #155492665 2010.11.04 13:02 buy stop 0.28 NZDJPY 64.297 64.134 64.460 64.197 0.00 0.00 0.00 NZDJPY73650016 73650016
09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:


... parece que está calculando la cifra de Max EquityAtRisk bien... pero esos tamaños de lotes resultan en ganancias/pérdidas mucho más grandes que mi 1% de riesgo deseado de equidad.


Gracias

Shawn

 

¿Cuál es tu broker?

En FXDD cuando introduzco esas órdenes de stop obtengo un tamaño de lote de 0,15 para el EURJPY (@25,66 EaR)

2010.11.04 16:05:39 Assisted_Order_Script_2010.11.01 EURJPY,Daily: open #95896902 buy stop 0.15 EURJPY at 114.827 sl: 114.689 tp: 114.885 ok<br / translate="no"> 2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily: attempted OP_BUYSTOP 0.15000000 lots @114.82700000 sl:114.68900000 tp:114.88500000
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily: EquityAtRisk actual = $25.66 y Lotsize actual = 0.15 y Profit Target = $10.78 para una relación Profit:Loss de 0.4:1
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Diario: Máximo permitido EquityAtRisk = $25.84 y Max computed Lotsize = 0.1511
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Entradas diarias: Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

En IBFX obtengo un tamaño de lote de 0,16 con un EaR de 26,77 dólares (mayor capital inicial en la cuenta)

2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: open #94468219 buy stop 0.16 EURJPY at 114.824 sl: 114.689 tp: 114.885 ok
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: attempted OP_BUYSTOP 0.16000000 lots @114.82400000 sl:114.68900000 tp:114.88500000
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: EquityAtRisk actual = $26.77 y Lotsize actual = 0.16 y Profit Target = $12.10 para una relación Profit:Loss de 0.5:1
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4: Max allowed EquityAtRisk = $27.19 and Max computed Lotsize = 0.1625
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4 inputs: Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

Con el NZDJPY obtengo un tamaño de lote de 0,09 lotes y un EaR de 24,53 en IBFX:

2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: open #94468343 buy stop 0.09 NZDJPY at 64.354 sl: 64.134 tp: 64.460 ok
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: attempted OP_BUYSTOP 0.09000000 lots @64.35400000 sl:64.13400000 tp:64.46000000
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: EquityAtRisk actual = $24.53 y Lotsize actual = 0.09 y Profit Target = $11.82 para una relación Profit:Loss de 0.5:1
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: Max allowed EquityAtRisk = $27.19 and Max computed Lotsize = 0.0998
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 inputs: Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

Hay nueve brokers con los que compruebo la compatibilidad, estos códigos se sabe que funcionan en Alpari(US), CitiFXPro, CMS, Forex.com (Gain Capital), FXCM, FXDD, IBFX, MIG Bank, y ODL.

Estos corredores difieren lo suficiente como para que yo haya estado satisfecho hasta ahora que los códigos son agnósticos corredor basado en ellos hábilmente el manejo de las diferencias en los parámetros del mercado de corredores que abarcan estos corredores.

Pero estamos asumiendo que su implementación del código no está roto, así que vamos a eliminar eso primero. Pruebe el script adjunto, arrastre y suelte en EURJPY e introduzca los parámetros para su BUY STOP como lo hice anteriormente y hágame saber los resultados. (Utilizar sólo en una cuenta de demostración, obviamente)

Archivos adjuntos:
 

Gracias Phillip... Estoy usando una demo de Alpari UK, la equidad de la cuenta es de US$2272.85. Bien, añadí el script a un gráfico horario de EURJPY (tal y como utiliza mi EA). No hizo nada ni colocó ninguna orden pendiente, así que revisé la pestaña "Expertos" para ver si había algún mensaje de error... esto es lo que decía:


2010.11.04 20:39:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: eliminado
2010.11.04 20:38:38 Assisted_Order_Script_2010.11.01 EURJPY,H1: cargado con éxito
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: eliminado
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: zero divide
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max allowed EquityAtRisk = $22.73 and Max computed Lotsize = 0
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;


¡Gracias!

Shawn

 

Nota: Probé el script de nuevo ahora mismo Phillip, los mismos números pero puse MinLotOverride en true... lanzó una orden de MERCADO inmediata (aunque mi precio de compra era 115.827 y el mercado estaba sólo en 114.945. Tamaño del lote = 0.01 y no hay orden de stopploss o de objetivo de beneficio - ambos eran 0.0000

Gracias

Shawn

 

Sólo para confirmar, la denominación de su cuenta es USD, ¿correcto?

Estoy descargando Alpari UK ahora para comprobarlo.

La apertura de la orden como mercado en lugar de comprar stop está totalmente controlada por la rutina orderreliable... muy extraño. Tendré que investigar eso también entonces.

Una cosa que me llama la atención es este aviso:
"El apalancamiento en una cuenta demo se ajusta automáticamente al apalancamiento máximo de 1:500."

No es que el apalancamiento deba afectar a un cálculo de tamaño de lote, sólo debería afectar a los cálculos de margen libre, según creo.

Editar: no importa, veo que la plataforma en realidad no se ajusta a esto, es 1:100 apalancamiento máximo