Obtención del "precio medio ponderado" de una posición abierta con varias transacciones - página 2
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Me surge la duda siguiente:
Mi algoritmo de colocación de TP pide precio BID (posición BUY) con la estructura MqlTick
y luego suma los puntos de beneficio buscados. Y esto está bien si la posición tiene una sola transacción.
Pero si tiene dos o más transacciones, ese algoritmo me estaría estableciendo TP con respecto al precio de la última transacción. Entiendo que para establecer un TP correcto a partir de la segunda transacción debo obtener el precio con...
que da precio medio ponderado BID y a ese valor sumar los puntos TP (BUY). Si estoy en SELL, al valor obtenido con POSITION_PRICE_OPEN deberé sumarle el spread para obtener ASK, y a continuación sumar restar puntos TP.
¿Es correcto mi razonamiento?
Realmente no puedo contestar porque depende de los resultados que desea. Lo mejor sería tomar un ejemplo numérico.
En el ejemplo del post de 2013.12.12 18:37 quedamos de acuerdo en que POSITION_OPEN_PRICE devuelve 1.37400.
La transacción 1ª se efectua en 1.37800 y la 2ª en 1.37200.
Si estamos en "compra-BUY" y aplicamos el algoritmo de cálculo de TP habitual (por ejemplo 200 puntos), el precio TP sería...
Al alcanzar el precio 1.37400 se cierra la posición, pero obtendríamos beneficio cero porque el precio de la posición (el que devuelve POSITION_OPEN_PRICE) es 1.37400, cuando en realidad esperamos 200 puntos de beneficio.
Por eso creo que lo correcto es el algoritmo que ayer le describía, donde el precio TP se obtiene siempre a partir de...
sea cual sea el número de transacciones (trades) de la posición. No creo haberlo visto implementado en ningún artículo, no por dificultad sino por la inercia de mql4.
Con StopLoss y TraillingStop ocurre igual a mi parecer.
Alex, acabo de ver un error de ejecución que me produce PositionGetDouble(POSITION_PRICE_OPEN).
En optimización y en depuración (en real no se) esta función devuelve el precio medio de las transacciones anteriores a la recién abierta, pero no incluye la actual. Es decir, si teníamos ejecutadas dos transacciones (a 1.34000 y 1.36000) su precio medio es 1.35000, tras abrir una tercera a 1.36000 PositionGetDouble(POSITION_PRICE_OPEN) devuelve 1.35000 cuando el nuevo precio medio es 1.35500 (que si se refleja en el terminal). Sólo al abrir una cuarta transacción PositionGetDouble(POSITION_PRICE_OPEN) nos da 1.35500.
Esto es importante, por ejemplo, al calcular TP, que es donde he descubierto el error, porque inmediatamente después de abrir transaccción modificaba la orden para definirle TP, pero el precio de referencia que daba PositionGetDouble(POSITION_PRICE_OPEN) es erróneo al no incorporar el nuevo precio de apertura
Alex, acabo de ver un error de ejecución que me produce PositionGetDouble ( POSITION_PRICE_OPEN ).
En optimización y en depuración (en real no se) esta función devuelve el precio medio de las transacciones anteriores a la recién abierta, pero no incluye la actual. Es decir, si teníamos ejecutadas dos transacciones (a 1.34000 y 1.36000) su precio medio es 1.35000, tras abrir una tercera a 1.36000 PositionGetDouble ( POSITION_PRICE_OPEN ) devuelve 1.35000 cuando el nuevo precio medio es 1.35500 (que si se refleja en el terminal). Sólo al abrir una cuarta transacción PositionGetDouble ( POSITION_PRICE_OPEN ) nos da 1.35500.
Esto es importante, por ejemplo, al calcular TP, que es donde he descubierto el error, porque inmediatamente después de abrir transaccción modificaba la orden para definirle TP, pero el precio de referencia que daba PositionGetDouble ( POSITION_PRICE_OPEN ) es erróneo al no incorporar el nuevo precio de apertura
¿Quién es Alex?
Si está seguro de que es un error, puedes reportarlo ServiceDesk por favor. Si usted necesita un segundo consejo, por favor enviar un código de ejemplo para reproducir el error y el procedimiento para capturar el error.