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

 

Ah, ya veo el problema... has configurado el script para que coloque una orden de "COMPRA" en lugar de cambiar la variable externa para que sea de COMPRA STOP... por eso ha colocado una orden de mercado.

De tu post:

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;

Pruebe con el STOP de compra.


Obtengo 0.12 lotes para EURJPY en una cuenta demo financiada con $2300 USD

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155713274 buy stop 0.12 EURJPY at 115.840 sl: 115.689 tp: 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: attempted OP_BUYSTOP 0.12000000 lots @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: EquityAtRisk actual = $22.44 y Lotsize actual = 0.12 y Profit Target = $6.69 para una relación Profit:Loss de 0.3:1
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max allowed EquityAtRisk = $23.00 y Max computed Lotsize = 0.123
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
 

También hice el ejemplo de NZDJPY buystop:

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1: open #155714279 buy stop 0.10 NZDJPY at 64.319 sl: 64.134 tp: 64.460 ok<br / translate="no"> 2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: attempted OP_BUYSTOP 0.10000000 lots @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: EquityAtRisk actual = $22.90 y Lotsize actual = 0.1 y Profit Target = $17.45 para una relación Profit:Loss de 0.8:1
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Max allowed EquityAtRisk = $23.00 and Max computed Lotsize = 0.1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 inputs: Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Ahora, el precio de la orden de entrada de 64,297 estaba demasiado cerca del precio actual del mercado, por lo que la rutina orderreliable movió el precio de entrada a 64,319 por esa razón, pero sigo obteniendo un tamaño de lote razonable de 0,10.

En este punto voy a tener que concluir que hay algo que está mal en tu código en la forma en que has implementado los archivos de inclusión y / o cómo se utilizan las salidas. Tendrás que subir el código para que lo inspeccione para que pueda seguir investigando.

 

Sip, es una cuenta demo denominada en USD, apalancamiento 1:100. OK, lo acabo de ejecutar en EURJPY como un BUY STOP, parece que tenemos buenos números esta vez. El registro del experto dice:


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: eliminado
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155719095 buy stop 0.11 EURJPY at 115.843 sl: 115.689 tp: 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: attempted OP_BUYSTOP 0.11000000 lots @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: EquityAtRisk actual = $20.95 y Lotsize actual = 0.11 y Profit Target = $5.71 para una relación Profit:Loss de 0.3:1
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max allowed EquityAtRisk = $22.73 and Max computed Lotsize = 0.1193
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1: cargado con éxito
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: eliminado
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1: cargado con éxito



... y colocó la orden pendiente de buystop como 0.11 lotes. perfecto. Sip, supongo que algo está "borked up" en mi código, como usted dice ... lol. Siempre fui muy cuidadoso al poner tu código... qué podría ser. OK, voy a hacer un poco de depuración aquí y te lo haré saber. ¡Perdona que te moleste Phillip!


Gracias

Shawn

 

¿Debo empezar de nuevo con la nueva versión que acabas de publicar, Phillip?


Shawn

 

Tiene sentido utilizar el más reciente, yo.

 

Hola Phillip, estaba a punto de volver a operar mi EA para actualizarlo a tu última versión que publicaste hace unos días, pero después de volver a leer ese post... me dejó con un buen número de preguntas. He pensado que debería preguntarte primero antes de destrozar mi EA:


(1) Usted menciona que hay 2 nuevos archivos de inclusión:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


... ¿y el antiguo StopLoss_Manager_2010.05.24.mqh? ¿Ese archivo ya no es necesario en su nueva versión?


(2) Donde dices:


"Paso 2: Agregue lo siguiente a la parte superior de su EA para que tenga acceso a las funciones de llamada contenidas en los archivos adjuntos

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>"


... ¿es esta una nueva versión o OrderReliable? Yo estaba usando LibOrderReliable.mqh. ¿Ha cambiado algo con eso? Además, ¿no tenemos que incluir el nuevo archivo Analyze_Currency_Symbol_2010.10.29.mqh también?


(3) En esta línea de código que dice que hay que añadir cuando se utiliza su nueva versión:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... ¿qué es OpenPrice_ND y StopLossPrice_ND? ¿Son variables que tengo que declarar, o están incrustadas en algún lugar de sus archivos de inclusión? También en esta nueva versión de su función LotSize, el número de parámetros y el orden de los mismos ha cambiado bastante, ¿no es así? La llamada a LotSize en su versión anterior era


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);


(4) Me he dado cuenta de que en mi código usando tu versión anterior, había asignado CurrentOrderType=OP_BUY; en realidad, estoy haciendo una orden de stop de compra. ¿Habría alguna diferencia?



Perdona que te moleste, pero es que estaba un poco desconcertado con estas cosas.


Gracias

Shawn

 

(1) You mention there's 2 new include files:


Analizar_Símbolo_de_divisa_2010.10.29.mqh (34.54 KB)

Gestión_de_posiciones_2010.10.29.mqh (26.68 KB)


... ¿y el antiguo StopLoss_Manager_2010.05.24.mqh? ¿Ese archivo ya no es necesario en su nueva versión?


Realmente no estoy seguro de por qué he añadido esa parte a mi post original, que no sea para asegurar que el usuario final tendría un conjunto completo de archivo para dibujar sobre.

Personalmente uso una versión actualizada de ese gestor de stoploss pero no tiene ninguna relación con este hilo, deberías implementar cualquier procedimiento de stoploss que prefieras usar. El código que subí en este hilo no depende de un archivo de inclusión de stoploss pero sí depende de que usted configure correctamente su código para identificar el precio de stoploss de manera que pueda enviarlo a la función de llamada de equityatrisk.

(2) Donde dices:


"Paso 2: Agregue lo siguiente a la parte superior de su EA para que tenga acceso a las funciones de llamada contenidas en los archivos adjuntos

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>"


... ¿se trata de una nueva versión o de OrderReliable? Yo estaba usando LibOrderReliable.mqh. ¿Ha cambiado algo con eso? Además, ¿no hay que incluir también el nuevo archivo Analyze_Currency_Symbol_2010.10.29.mqh?

Es una nueva versión, he publicado el enlace a la misma en la parte inferior de mi post en la parte inferior de la primera página de este hilo (Me enlace a ella, pero la búsqueda es roto, argh!)

He modificado la nueva versión para que funcione de forma transparente con los brokers tipo ecn. Envía tus órdenes a través de ordersendreliable y no importa si el broker acepta o no SL & TP en las órdenes de mercado, el script de orderreliable lo maneja por ti.

(3) En esta línea de código que dice que hay que añadir cuando se utiliza su nueva versión:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... ¿qué es OpenPrice_ND y StopLossPrice_ND? ¿Son variables que tengo que declarar, o están incrustadas en algún lugar de sus archivos de inclusión? También en esta nueva versión de su función LotSize, el número de parámetros y el orden de los mismos ha cambiado bastante, ¿no es así? La llamada a LotSize en su versión anterior era:

Sí, estas son variables que necesitas declarar en algún punto de tu código y asignarles los precios de mercado para los que vas a abrir la nueva posición (OpenPrice_ND) y el precio de stopploss (StopLossPrice_ND).

Alternativamente, usted podría renombrar mis variables con las que ya está utilizando. Considere esas variables como marcadores de posición, sustituya sus variables donde sea apropiado.

(4) Me he dado cuenta de que en mi código usando tu versión anterior, había asignado CurrentOrderType=OP_BUY; En realidad, estoy haciendo una orden de stop de compra. ¿Habría alguna diferencia?
No hay ninguna diferencia. Todo lo que es importante es que usted pase el tipo de orden correctamente a las respectivas funciones de llamada. Ellas ya están codificadas para hacer lo correcto dependiendo del tipo de orden. Si no envías el tipo de orden correcto a la función de llamada, entonces definitivamente obtendrás resultados inválidos de las propias funciones de llamada.

Todas estas son buenas preguntas, si no las haces no puedes esperar aprender ;)
 
1005phillip:

Realmente no estoy seguro de por qué añadí esa parte a mi post original, aparte de asegurarme de que el usuario final tuviera un conjunto completo de archivos a los que recurrir.

Personalmente utilizo una versión actualizada de ese gestor de stoploss pero no tiene ninguna relación con este hilo, debes implementar cualquier procedimiento de stoploss que prefieras utilizar. El código que subí en este hilo no depende de un archivo de inclusión de stoploss pero sí depende de que usted configure correctamente su código para identificar el precio de stoploss de manera que pueda enviarlo a la función de llamada de equityatrisk.



>>> ¡BIEN! Tengo mis propios stoplosses así que no necesito eso - ¡lo quitaré!



Es una nueva versión, he puesto el enlace al final de mi post en la parte inferior de la primera página de este hilo (lo enlazaría pero la búsqueda está estropeada, ¡argh!)

He modificado la nueva versión para que funcione de forma transparente con los brokers de tipo ecn. Envía tus órdenes a través de ordersendreliable y no importa si el broker acepta o no SL & TP en las órdenes de mercado, el script de orderreliable lo maneja por ti.


>>> Vale, ya estoy usando el OrderSendReliable2Step, así que dejaré mi código como está, usando mi LibOrderReliable.mqh existente. Sin embargo, ¿no es necesario incluir el nuevo archivo Analyze_Currency_Symbol_2010.10.29.mqh también?



Sí, son variables que debes declarar en algún punto de tu código y asignarles los precios de mercado para los que vas a abrir la nueva posición (OpenPrice_ND) y el precio de stopploss (StopLossPrice_ND).

Alternativamente podrías renombrar mis variables con las que ya estás usando. Considera esas variables como marcadores de posición, sustituye tus variables donde sea apropiado.


>>> Entendido, eso es lo que me imaginaba que eran. Creo que te has saltado este comentario que he hecho --> "También en esta nueva versión de tu función LotSize, el número de parámetros y el orden de los mismos ha cambiado bastante, ¿no?"




La diferencia es nula. Lo único que importa es que pases correctamente el tipo de orden a las respectivas funciones de llamada. Ellas ya están codificadas para hacer lo correcto dependiendo del tipo de orden. Si no envías el tipo de orden correcto a la función de llamada, entonces definitivamente obtendrás resultados inválidos de las propias funciones de llamada.


>>> DE ACUERDO.



Todas estas son buenas preguntas, si no preguntas entonces no puedes esperar aprender ;)


>>> Lo estoy intentando. Gracias Phillip.


Shawn


 

>>> ¿No es necesario incluir también el nuevo archivo Analyze_Currency_Symbol_2010.10.29.mqh?

No en su EA, pero necesita el archivo en su directorio de inclusión porque es llamado desde el archivo de inclusión de Gestión de Posición Comercial.

Al tener #include <Trade_Position_Management_2010.10.29.mqh> en tu EA ya has enlazado tantoTrade_Position_Management_2010.10.29.mqh como Analyze_Currency_Symbol_2010.10.29.mqh.

>>>También en esta nueva versión de su función LotSize, el número de parámetros y el orden de los mismos ha cambiado bastante, ¿no es así?

Ya no es necesario basar el CurrentSymbolType ni el CurrentCounterPairForCross. Se maneja internamente ahora.

Si usted mira dentro del archivo de Posición de Comercio usted verá la sección equityatrisk y hay comentarios con respecto al uso de la función. Podrían ser de ayuda, aunque no estoy seguro de que sean autoexplicativos.

 

¿Esun error que sólo me ha ocurrido a mí?
No puedo compilar ningún archivo con MetaEditor mq4 si pongo una línea con # include.
Tampoco he podido compilar archivos mq4 que tengan una línea # include en el código.
Sólo habilita las líneas
# Include<stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>