por MiguelSgo » 11 Dic 2017, 13:51
Buenas, me ha surgido un problema con mi EA que no consigo resolver, a ver si a alguien se le ocurre una solución: Estoy creando un EA que establece órdenes pendientes de compra y venta cada ciertos niveles. El problema está en que cuando hay un GAP, dejan de establecerse y me aparece el típico error 130. Tengo la teoría que esto es debido al slippage establecido en mi código porque solo da error cuando hay un GAP. Esta es la línea de código que me falla: - Código: Seleccionar todo
ticketCompra[arriba+2] = OrderSend(Symbol(),OP_BUYSTOP ,0.01,abrir_compra_pendiente[arriba+2],1000000,0,0,"",1,0,clrGreen); //Abrir orden pendiente de compra.
He probado a cambiar el slippage de "0" a "1000000" y aún así no se establecen las órdenes pendientes. ¿Se os ocurre alguna idea para abrir órdenes pendientes cuando hay GAPs de por medio? Muchas gracias de antemano.
-
MiguelSgo
-
- Mensajes: 16
- Registrado: 05 Ene 2016, 18:23
- Karma: 0
por cdtrader » 12 Dic 2017, 16:51
No será el tipo de orden que abres? Quizá debería ser en lugar de stop un limit
Enviado desde mi Moto G (4) mediante Tapatalk
-
cdtrader
-
- Mensajes: 1428
- Registrado: 23 Ago 2014, 13:47
- Karma: 17
por cdtrader » 12 Dic 2017, 16:51
También el lugar de 0 aveces debes poner NULL
Enviado desde mi Moto G (4) mediante Tapatalk
-
cdtrader
-
- Mensajes: 1428
- Registrado: 23 Ago 2014, 13:47
- Karma: 17
por MiguelSgo » 13 Dic 2017, 01:00
El parámetro "BUYSTOP" es correcto en mi caso ya que la orden pendiente de compra debe abrirse por encima del nivel de precio actual. Y respecto al "NULL" en el parámetro de slippage lo he probado y tampoco funciona. Aunque agradezco tus respuestas Probaré a tratar el error mediante la función GetLastError() y que ejecute un OrderSend con parámetro "OP_BUY", es decir, ejecución instantánea de compra al mercado cuando detecte el GAP. No se me ocurre otra opción
-
MiguelSgo
-
- Mensajes: 16
- Registrado: 05 Ene 2016, 18:23
- Karma: 0
por cdtrader » 13 Dic 2017, 01:37
me referia a NULL para los valores de stop loss y take profit, sino estas poniendo esos valores como 0 en lugar de NULL (no es lo mismo dar el valor 0 que poner NULL)
-
cdtrader
-
- Mensajes: 1428
- Registrado: 23 Ago 2014, 13:47
- Karma: 17
por MiguelSgo » 13 Dic 2017, 10:19
cdtrader escribió:me referia a NULL para los valores de stop loss y take profit, sino estas poniendo esos valores como 0 en lugar de NULL (no es lo mismo dar el valor 0 que poner NULL)
Sí, he probado a poner: - Código: Seleccionar todo
ticketCompra[arriba+2] = OrderSend(Symbol(),OP_BUYSTOP ,0.01,abrir_compra_pendiente[arriba+2],1000000,NULL,NULL,"",1,0,clrGreen); //Abrir orden pendiente de compra.
y aún así no funciona
-
MiguelSgo
-
- Mensajes: 16
- Registrado: 05 Ene 2016, 18:23
- Karma: 0
por MiguelSgo » 14 Dic 2017, 00:11
MiguelSgo escribió:El parámetro "BUYSTOP" es correcto en mi caso ya que la orden pendiente de compra debe abrirse por encima del nivel de precio actual. Y respecto al "NULL" en el parámetro de slippage lo he probado y tampoco funciona. Aunque agradezco tus respuestas Probaré a tratar el error mediante la función GetLastError() y que ejecute un OrderSend con parámetro "OP_BUY", es decir, ejecución instantánea de compra al mercado cuando detecte el GAP. No se me ocurre otra opción
Me autorespondo por si alguien le interesa saber la solución a este problema: - Código: Seleccionar todo
//Si detectas el error 130, abre una operación de compra al precio actual: int error = GetLastError(); if(error==130){ ticketCompra[arriba+2] = OrderSend(Symbol(),OP_BUY ,0.01,Bid,1000000,0,0,"",1,0,clrGreen); //Abrir orden pendiente de compra. }
Solucionado!
-
MiguelSgo
-
- Mensajes: 16
- Registrado: 05 Ene 2016, 18:23
- Karma: 0
por FXWizard » 15 Dic 2017, 11:45
Genial MiguelSgo, gracias por compartir, muy buena solución!
Saludos, FXWizard
-
FXWizard
-
- Mensajes: 8493
- Registrado: 12 Feb 2008, 15:17
- Karma: 35
|
|