Ayuda Orderclose() Icustom()

Para añadir comentario, por favor Autorícese o regístrese
ffsss
31
ffsss  
Hola, estoy intentando escribir unas ordenes de compra/venta cuandos se den "X" condiciones, y cerrar esas operaciones cuando se den  "Y". He conseguido que empiece la operacion en las condiciones que le he dado, pero la condicion para que cierre la operacion incluye un indicador personalizado (si escribo Take Profit y Stop loss si que funciona), y no consigo hacer que cierre la operacion pues lo ignora completamente, y no se si es la parte de la orden de vender o la parte del indicador personalizado la que esta mal. Muchas gracias por adelantado.
input int a=100;
input int e=50;
input int i=0;
input int o=30;
input int u=125; 


void OnTick()
  {
  
    string signal="";
      
    double a = ---------------------------------------
     
    double e = ---------------------------------------
     
    
    
    double customindicator = iCustom(NULL,0,"..\\Indicators\\XXXXXXXXXXXXXX.ex4",i,o,u);   INDICADOR PERSONALIZADO, HE INTENDADO PONERLO DE VARIAS MANERAS PERO NO SE CUAL ES LA CORRECTA
     
     
    if ((-----------------------)&&(--------------------------------)) 
    signal="Sell";
     
     
    if ((--------------------------------)&&(--------------------------------)) 
    signal="Buy"; 
    
    
    if (signal == "Buy" && OrdersTotal() == 0)
    OrderSend (Symbol(), OP_BUY, 0.2, Ask, 3, 0, 0, NULL, 0, 0, Green);
         
    if (signal == "Sell" && OrdersTotal() == 0)
    OrderSend (Symbol(), OP_SELL, 0.2, Bid, 3, 0, 0, NULL, 0, 0, Red);



    HASTA AQUI EN TEORIA FUNCIONA, AHORA QUIERO CERRAR LA OPERACION (SOLO PUEDE HABER UNO AL MISMO TIEMPO) SEA DE COMPRA O DE VENTA QUE SE HAYA ABIERTO
    
    if ((customindicator==a)&&(customindicator>b))
    signal="Stopshort";
    
    if ((customindicator==a)&&(b<customindicator))
    signal="Stoplong";
    
    if(signal == "Stopshort" && OrdersTotal() == 1)
    OrderClose (Symbol(),OP_BUY,Ask,3,Green);
    
    if(signal == "Stoplong" && OrdersTotal() == 1)
    OrderClose (Symbol(),OP_SELL,Bid,3,Red);
    
        
    }
Miguel Antonio Rojas Martinez
2333
Miguel Antonio Rojas Martinez  
ffsss:
Hola, estoy intentando escribir unas ordenes de compra/venta cuandos se den "X" condiciones, y cerrar esas operaciones cuando se den  "Y". He conseguido que empiece la operacion en las condiciones que le he dado, pero la condicion para que cierre la operacion incluye un indicador personalizado (si escribo Take Profit y Stop loss si que funciona), y no consigo hacer que cierre la operacion pues lo ignora completamente, y no se si es la parte de la orden de vender o la parte del indicador personalizado la que esta mal. Muchas gracias por adelantado.

Amigo, DEBES tener el  el indicador   en la propia MT4/MT5 en la que estas usando el expert
una vez lo tengas asi, haz la correccion   de esta linea.

double customindicator = iCustom(NULL,0,"nombredelindicador_SinRUTA",i,o,u); 

o

double customindicator = iCustom(NULL,0,"nombredelindicador_SinRUTA.ex4",i,o,u); 



Otro  tema que debes considerar es que las compras las abres con Ask, y las cierras con Bid, y visceversa para las ventas
Porque me da la impresion que  estas haciendo el cierre  de manera equivocada

ffsss
31
ffsss  

Hola, muchas gracias por contestar.

He intentado poner la ruta tal y como me has indicado, pero no parece funcionar. He intentado descargar varios diferentes de internet pero no me funciona ninguno (aparece en el grafico actual, pero al empezar el backtest desaparece, aun despues de haber puesto el indicador en la plantiLLa de tester.tpl y ya no se a que se puede deber.


Con respecto al cierre, tal y como yo lo entiendo:


if (signal == "Buy" && OrdersTotal() == 0)
    OrderSend (Symbol(), OP_BUY, 0.2, Ask, 3, 0, 0, NULL, 0, 0, Green);   ORDEN DE ABRIR COMPRA CON ASK


if (signal == "Sell" && OrdersTotal() == 0)
    OrderSend (Symbol(), OP_SELL, 0.2, Bid, 3, 0, 0, NULL, 0, 0, Red);    ORDEN DE ABRIR VENTA CON BID



if(signal == "Stopshort" && OrdersTotal() == 1)				  ORDEN DE CERRAR VENTA CON ASK
    OrderClose (Symbol(),OP_BUY,Ask,3,Green);
    
    if(signal == "Stoplong" && OrdersTotal() == 1)			  ORDEN DE CERRAR  COMPRA CON BID
    OrderClose (Symbol(),OP_SELL,Bid,3,Red);


ASI LAS ORDENES DE COMPRA/VENTA Y SUS CORRESPONDIENTES CIERRES ESTARIAN CORRECTOS VERDAD? Y TENDRIA QUE CENTRARME EN HACER QUE EL INDICADOR ME FUNCIONE?


PD: SI TENGO EL CODIGO DEL INDICADOR, HAY ALGUNA MANERA DE PONERLO EN EL EA PARA VER SI ASI FUNCIONA? MUCHAS GRACIA POR RESPONDERME

https://ibb.co/n1jKHcj     INDICADOR FUNCIONA EN EL GRAFICO ACTUAL

https://ibb.co/tMVsQCj     INDICADOR SE PARA EN EL BACKTEST (EL INDICADOR ES EL MORADO)


Miguel Antonio Rojas Martinez
2333
Miguel Antonio Rojas Martinez  

ffsss:


Amigo, esto lo tienes malo

if(signal == "Stopshort" && OrdersTotal() == 1)				  ORDEN DE CERRAR VENTA CON ASK
    OrderClose (Symbol(),OP_BUY,Ask,3,Green);
    
    if(signal == "Stoplong" && OrdersTotal() == 1)			  ORDEN DE CERRAR  COMPRA CON BID
    OrderClose (Symbol(),OP_SELL,Bid,3,Red);


OrderClose debe llevar:
1. EL numero del ticket a cerrar,
2. el lotaje a cerrar,
3. El precio de cierre
4. El deslizamiento maximo permitido
5. (opcional) una flecha de algun color que deje  alguna marca.


Entonces, cuando recibas la señal de cierre, debes buscar o identificar la orden (el ticket) que vas a cerrar, lo seleccionas con OrderSelect
y teniendolo seleccionado puedes cerrar asi:

OrderClose (OrderTicket(),OrderLots(),Bid,100); // Para las compras
OrderClose (OrderTicket(),OrderLots(),Ask,100); // Para las Ventas



Para que veas el indicador en el backtesting debes guardar la plantilla con el mismo nombre del Experto, por ejemplo, el experto se llama "Experto_Estrategia_1.5.ex4";
Guardas la plantilla asi: "Experto_Estrategia_1.5.tpl"

Para añadir comentario, por favor Autorícese o regístrese