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
Hola a todos
Lo siento, pero he hablado demasiado pronto. Aunque añadir RefreshRates() parece marcar la diferencia, sigo teniendo el mismo problema. A veces abre las dos órdenes pendientes, a veces sólo una de las dos, y a veces ninguna. Sigo recibiendo el error 130 cuando no abre una orden, o las dos, pero no hay errores cuando se abren las dos. También me he dado cuenta de que en aquellos pares en los que mis entradas están por debajo de MODE_STOPLEVEL, nunca abre una orden y siempre tengo el error 130, a pesar de que el programa ajusta mis entradas como se solicita. Estoy imprimiendo los valores y se ajustan como se espera. Así que estoy tratando de averiguar por qué mi OrderSend no funciona realmente.
En un par como el EURUSD, donde el nivel de parada es 5, suele enviar ambas órdenes, pero no siempre, pero en un par como el EURAUD, donde el nivel de parada es 10, nunca envía una orden.
También lo he probado así, pero no hay diferencia:
Y aunque haga esto no hay diferencia:
Gracias por toda la ayuda a todos. Finalmente conseguí que funcionara. La única forma en que pude conseguir que funcionara de forma consistente fue cambiándolo por esto:
También descubrí que el nivel de Pipmove antes de que se active la orden pendiente también debe ser mayor que stoplevel. Así que todo parece funcionar ahora... Gracias
Gracias por toda la ayuda a todos. Finalmente conseguí que funcionara. La única forma en que pude conseguir que funcionara de forma consistente fue cambiándolo por esto:
También descubrí que el nivel de Pipmove antes de que se active la orden pendiente también debe ser mayor que stoplevel. Así que todo parece funcionar ahora... Gracias
La respuesta sencilla es no intentar abrir órdenes pendientes tan cerca del precio actual. 5 Puntos es normalmente medio pip
Gracias por la respuesta. Mi cálculo es en realidad en pips, por lo que las órdenes pendientes están al menos a 50 puntos (5 pips de distancia del precio actual), sin embargo, parece que funciona si lo muevo al menos 1 pip más lejos del stoplevel, que es de 50 puntos en el EURUSD. Parece que ahora abre ambas operaciones excepto la primera después de arrastrarla al gráfico. Pero estoy bien con esto por ahora. Mi código ahora se ve así:
Me encontré con un problema separado pero similar. Una vez que una de las órdenes pendientes se activa, una de dos cosas podría suceder. O bien activa el TrailingStop en cuyo momento la otra orden pendiente se elimina. o si ese comercio va en contra de mí debe abrir una cobertura en la dirección opuesta. Dependiendo de cómo escribo el código, se abrirá más de una cobertura o ninguna cobertura en absoluto. He intentado todo incluyendo los dos siguientes:
O:
¿Debo utilizar un bucle for separado para esto? Gracias
Hola a todos
Llevo semanas intentándolo y todavía no he hecho ningún progreso. Todo funciona ahora, excepto que bajo ciertas condiciones el EA abre más de una operación de cobertura sobre la operación original. El SL de la operación original es de 11 pips y el SL de la operación de cobertura es de 9 pips. A veces la operación de cobertura se detiene en 9 pips mientras la operación original sigue abierta. Entonces abrirá una segunda operación de cobertura e incluso una tercera y cuarta mientras la operación original sigue abierta. Simplemente quiero limitar la cantidad de operaciones de cobertura a una y si se detiene, simplemente esperar y ver qué pasa con la operación original.
Este es el tipo de resultados que obtengo:
576 2015.01.15 11:39 buy stop 29 0.48 1.16786 1.16616 0.00000 0.00 4834.24
577 2015.01.15 11:39 vender stop 30 0.48 1.16642 1.16812 0.00000 0.00 4834.24
578 2015.01.15 11:39 vender 30 0.48 1.16642 1.16812 0.00000 0.00 4834.24
579 2015.01.15 11:39 borrar 29 0.48 1.16786 1.16616 0.00000 0.00 4834.24
580 2015.01.15 11:42 comprar 31 1.44 1.16743 1.16653 0.00000 0.00 4834.24
581 2015.01.15 11:42 s/l 31 1.44 1.16653 1.16653 0.00000 -129.60 4704.64
582 2015.01.15 11:44 comprar 32 1.44 1.16742 1.16652 0.00000 0.00 4704.64
583 2015.01.15 11:44 s/l 30 0.48 1.16812 1.16812 0.00000 -81.60 4623.04
584 2015.01.15 11:48 modificar 32 1.44 1.16742 1.16893 0.00000 0.00 4623.04
Las órdenes buystop y sellstop (29 y 30) se abren como es debido. A continuación, el precio cae y la orden de venta (30) se ejecuta mientras que la buystop (29) se elimina. El precio vuelve a subir y la orden de cobertura (martingala) (31) se activa (3*tamaño de lote). A continuación, el precio vuelve a bajar y la orden de cobertura (31) se interrumpe, pero como la 30 sigue abierta, se activa otra orden de cobertura (32), etc. ¿Cómo puedo evitar que se active la orden 32? Gracias
Hola a todos. Hace ya más de un mes que intento resolver esto y empiezo a pensar que es programáticamente imposible de codificar. Así que si alguien me lo confirma por favor, podré dejarlo estar y seguir adelante. ¿No es posible establecer un nivel profundo para el número de órdenes de cobertura (martingala) como se explica en el post anterior? Gracias.
Lo mejor que tengo hasta ahora es:
Hay diferentes maneras de conseguirlo.
Cuando se abra la cobertura, cree una Variable Global del terminal del cliente.
Dele un nombre que incluya el número de ticket de la operación principal.
Dele un valor que actúe como indicador de que se ha abierto una operación de cobertura para ese número de ticket, o un recuento de cobertura si es necesario.
Compruebe el GV antes de abrir una cobertura.
La operación de cobertura y la principal tienen tamaños de lote diferentes.
Antes de abrir una cobertura, compruebe las órdenes abiertas y el historial para ver si se ha abierto una orden opuesta con el tamaño de lote correspondiente con una OrderOpenTime() posterior a la hora de apertura de la operación principal.
Hay diferentes maneras de conseguirlo.
Cuando se abra la cobertura, cree una Variable Global del terminal del cliente.
Darle un nombre que incluya el número de ticket de la operación principal.
Darle un valor que actúe como indicador de que se ha abierto una operación de cobertura para ese número de ticket, o un recuento de cobertura si es necesario.
Compruebe el GV antes de abrir una cobertura.
La operación de cobertura y la principal tienen tamaños de lote diferentes.
Antes de abrir una cobertura, compruebe las órdenes abiertas y el historial para ver si se ha abierto una orden opuesta con el tamaño de lote correspondiente con una OrderOpenTime() posterior a la hora de apertura de la operación principal.
Así que traté de lograr esto a través de una Variable Global, pero desde la adición de este código, no es la apertura de un comercio de cobertura en absoluto. Creo que el problema es que el EA está haciendo un GlobalVariableCheck, pero ya que ninguno se ha creado todavía, no va a continuar. Sin embargo, selecciona e imprime la entrada correcta no. Tal vez lo estoy haciendo mal. Aquí está el código correspondiente: