cerrando una orden de compra

¿Tiene dudas sobre el trading con divisas? No se preocupe, FXWizard tiene todas las respuestas.

cerrando una orden de compra

Notapor ramsalper » 10 Abr 2015, 09:47

Hola FXWizard

escribo porque soy nuevo en esto de la programación y también en este foro.
he escrito un código muy sencillito pero cuya orden abierta no puede cerrar usando OrderSelect() y OrderClose(). no se cual es el fallo y seguro que echándole un vistazo rápido no tendrás problema en identificar donde se encuentra.
aqui te dejo el código.
Muchas gracias de antemano.
--------------
input double Lots=0.01;
input double macd_rapido=12;
input double macd_lento=26;
input int macd_signal=9;
input int slippage=3;
input int magic=12345;
//--------------



int init()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void deinit()
{
//---
return;
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- definimos variables a usar
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
bool cerrar;

int i,ticket,total;
//----------------
double SL=Ask-30*Point;
double TP=Ask+70*Point;

MacdCurrent=iMACD(Symbol(),0,macd_rapido,macd_lento,macd_signal,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(Symbol(),0,macd_rapido,macd_lento,macd_signal,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(Symbol(),0,macd_rapido,macd_lento,macd_signal,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(Symbol(),0,macd_rapido,macd_lento,macd_signal,PRICE_CLOSE,MODE_SIGNAL,1);

total=OrdersTotal();
//-------------------------------
if (total<1)
{
if(MacdCurrent>MacdPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,SL,TP,NULL,magic,0,clrGreen);
for (i=0;i<total;i++)
{
if (OrderSelect(ticket,SELECT_BY_TICKET)==False) continue;
if ((OrderType()==OP_BUY)&& (OrderSymbol()==Symbol()))
{
if ((MacdCurrent<MacdPrevious))

cerrar=OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);

}


}
return;
}
}
}
ramsalper
 
Mensajes: 5
Registrado: 10 Abr 2015, 09:31
Karma: 0

Re: cerrando una orden de compra

Notapor FXWizard » 10 Abr 2015, 17:38

Hola ramsalper, la verdad es que no acabo de ver por donde puede estar el error. No obstante te recomiendo que pruebes a modificar el MACD Sample que viene de serie con Metatrader, creo que trabajando sobre la estructura original conseguirás que funcione sin problema.

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Re: cerrando una orden de compra

Notapor cdtrader » 10 Abr 2015, 21:41

el primer error que se encuentra a simple vista es que cierras incorrectamente los "if"
tu codigo dice:
Código: Seleccionar todo
if (total<1)
{
if(MacdCurrent>MacdPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,SL,TP,NULL,magic,0,clrGreen);
for (i=0;i<total;i++)
.
.
.

{

deberia decir:
Código: Seleccionar todo
if (total<1)
{
if(MacdCurrent>MacdPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,SL,TP,NULL,magic,0,clrGreen);
}
}

for (i=0;i<total;i++)
.
.
.

{

y logicamente sacar los "}" que estan de mas luego en el codigo.

PD:cuando luego de un if tienes una sola sentencia puedes ahorrarte poner los " { ...} " y se hace mas facil de leer
Imagen
Avatar de Usuario
cdtrader
 
Mensajes: 1428
Registrado: 23 Ago 2014, 13:47
Karma: 17

Re: cerrando una orden de compra

Notapor ramsalper » 11 Abr 2015, 10:36

Gracias dacontrader!!
así lo haré...
ramsalper
 
Mensajes: 5
Registrado: 10 Abr 2015, 09:31
Karma: 0

Re: cerrando una orden de compra

Notapor MF1Forex » 11 Abr 2015, 19:51

Yo creo que defines "cerrar", pero no lo ejecutas... solo lo defines aqui:
Código: Seleccionar todo
if ((MacdCurrent<MacdPrevious))

cerrar=OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);

Si estoy en lo cierto deberías definir mas arriba y luego ejecutar asi:
Código: Seleccionar todo
bool cerrar=OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);

if (MacdCurrent<MacdPrevious) cerrar=TRUE;


EDITO: Ni caso, los comandos de cierre de órdenes son mi punto flaco, pero puedes probar:
Código: Seleccionar todo
if (MacdCurrent<MacdPrevious) OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);
Avatar de Usuario
MF1Forex
 
Mensajes: 1078
Registrado: 02 Dic 2013, 10:54
Ubicación: Cyberdyne Systems
Karma: 13

Re: cerrando una orden de compra

Notapor cdtrader » 11 Abr 2015, 20:39

MF1Forex escribió:Yo creo que defines "cerrar", pero no lo ejecutas... solo lo defines aqui:
Código: Seleccionar todo
if ((MacdCurrent<MacdPrevious))

cerrar=OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);

Si estoy en lo cierto deberías definir mas arriba y luego ejecutar asi:
Código: Seleccionar todo
bool cerrar=OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);

if (MacdCurrent<MacdPrevious) cerrar=TRUE;


EDITO: Ni caso, los comandos de cierre de órdenes son mi punto flaco, pero puedes probar:
Código: Seleccionar todo
if (MacdCurrent<MacdPrevious) OrderClose(OrderTicket(),Lots,Bid,slippage,clrNONE);


la igualdad no tiene nada de malo, es mas, yo siempre la pongo porque sino me da los "warnings" cuando compilo y soy jodido :lol:
Imagen
Avatar de Usuario
cdtrader
 
Mensajes: 1428
Registrado: 23 Ago 2014, 13:47
Karma: 17

Re: cerrando una orden de compra

Notapor ramsalper » 13 Abr 2015, 15:36

graciass!!! todo muy util ehh!1
ya conseguí que funcionara.ahora a darle sentido y consistencia al sistema

Un saludo
ramsalper
 
Mensajes: 5
Registrado: 10 Abr 2015, 09:31
Karma: 0

Re: cerrando una orden de compra

Notapor FXWizard » 14 Abr 2015, 10:57

Me alegro ;) :grindance:

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Siguiente

Volver a Pregunte a FXWizard

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron