Tener el precio de apertura de la vela en una hora específica. - página 2

 
Kane59:

¡Ok, he insertado tu código en mi EA y funciona perfectamente ! ¡¡¡Sonreí cuando vi que el EA se ejecutaba como yo quería !!!

Muchas gracias muy muy ......

Está en backtest porque el mercado está cerrado...

Pero hay un problema:

El EA abre correctamente las posiciones, pero las compras nunca se cierran y las ventas se cierran inmediatamente cuando se abren.

¿No quiere saber si su OrderClose() ha fallado y si lo ha hecho por qué lo ha hecho? ¿Por qué no está comprobando el valor de retorno de la función OrderClose() e informando de cualquier error? podría encontrar que tanto la compra como la venta están intentando cerrarse inmediatamente pero la Buy OrderClose() falla...

¿Qué son los valores de retorno de la función? ¿Cómo los utilizo?

 

No hay ningún error en la pestaña Diario.


Voy a colocar valores de retorno. ¿Puedo hacerlo?

Close = CloseOrder(....)

if (Close < 1)

Print ("Close Failed", GetLastError())
 
Kane59:

No hay ningún error en la pestaña Diario.


Voy a colocar valores de retorno. ¿Puedo hacerlo?

Cerrar tiene un significado diferente... OrderClose() devuelve un bool...

if ( ! OrderClose(....) )

Print ("Close Failed", GetLastError())
 
RaptorUK:

Close tiene un significado diferente... OrderClose() devuelve un bool...


Ok ok lo haré, gracias :)
 

He insertado:

if(OrdersTotal()>0)
            { 
               for(int i=OrdersTotal()-1; i>=0; i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  {
                     if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1))
                     {
                        if(OrderType() == OP_BUY)
                        {
                           OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))
                              {
                                 Print ("Close Buy Failed", GetLastError());
                              }
                           }
                        }
                        if(OrderType() == OP_SELL)
                        {
                           OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE))
                              {
                                 Print ("Close Sell Failed", GetLastError());

No se ha escrito ningún error.

 
Kane59:

He insertado:

No se ha escrito ningún error.

No se puede cerrar la misma orden dos veces. . .

 OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);            //  first attempt to close
    {
    if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))       //  second attempt to close
 

He resuelto el problema, las condiciones del bucle no estaban codificadas correctamente...

Gracias de nuevo.

 

Hola a todos,

He utilizado el código dado por WHRoeder, pero veo con el tiempo que EA sólo toma un "#define" para ser una referencia para las 4 horas diferentes.

    #define HR0900 23400    // 9*3600
    #define HR1500 54000
    #define HR1900 68400
    #define HR2300 59800

Intenté de otra manera:

Construí un arraysize con Int que son referencia de velas y es lo mismo, sólo se considera uno no el número 4, ¿cómo puedo solucionarlo?

 
Kane59:

¡Ok, he insertado tu código en mi EA y funciona perfectamente! ¡¡¡Sonreí cuando vi que el EA se ejecutaba como yo quería !!!

¿Qué hiciste para romperel código deWHRoeder?
 
Kane59:

. . . ¿cómo puedo solucionarlo?

Creo que necesitas mostrar tu código.