¿Un error en la función OrderSend()? - página 10

 
Roger:
No puedes hacer eso. Si no consigues la condición adecuada a la primera, toda la hora se irá al garete.


En H1 la condición dura 60 minutos, es decir, hasta la siguiente barra

//+------------------------------------------------------------------+
//|                                                     чернoвик.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

static datetime LastTime = 0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(NewBar()==true)
       {
        
           int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-250*Point,Ask+250*Point," ",16384,0,Green);
        
       }
  Comment ("LastTime   ",LastTime,"   NewBar   ",NewBar());  
//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar() 
    {
       
       if (iTime(NULL,0,0) != LastTime) 
       {
          LastTime = iTime(NULL,0,0);      
          return (true);
       } 
       else
          return (false);
     
    }

Busca el comentario en el probador.

 
pako:


mantener sólo una posición abierta en cada barra

Pako, ¡me sorprende! Me has estado pinchando con el "código albanés" a lo largo de este hilo, pero ¿qué has ofrecido? :) Lo mismo, ¡sólo que de lado! Al fin y al cabo, tiene la misma función de una barra nueva, sólo que con un uso más primitivo. Y luego tienes la función de enviar una orden, pasando por encima de todas las señales y así sucesivamente. ¡Y la solución al problema no estaba aquí! Así que tienes el albanés.

Swan:
Taki entonces
sólo si la orden se abre en la barra actual. es decir, esta línea en la función OpenBuy/Sell mover





Cisne, ¡gracias! Esto es lo que había que hacer. Si la hora de la nueva barra se asigna en la función de apertura de la orden, entonces no hay huecos. Ya lo he comprobado y no puedo superar lo bien que funciona todo. Mi Asesor Experto funciona exactamente como debe ser.

Todavía tengo una pregunta. ¿Por qué no ha funcionado el ejemplo anterior? El ejemplo anterior también ha tenido la condición:

// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);

Pensé que el código se lee así... si la funciónTrade(signal) devuelve falso, entonces salga de la función... y antes de que se actualice la variablelastBarTime de la línea:

lastBarTime = iTime(NULL, 0, 0);

no se actualizará. Pero resulta que no es así. ¿Puedo pedirle que explique este punto? Es muy interesante incluso. Estoy intrigado.

 
hoz:

Cisne, ¡gracias! Esto es lo que había que hacer. Si la nueva hora de la barra se asigna en la función de orden abierta, entonces . sin omisiones. Ya lo he comprobado y no puedo superar lo bien que funciona todo. Mi Asesor Experto funciona exactamente como debe ser.

Queda una pregunta. ¿Por qué no ha funcionado la última opción? Ahí también había una condición:

Pensé que el código se leía así... si la funciónTrade(signal)) devuelve falso, entonces salga de la función... y antes de que se actualice la variablelastBarTime de la línea:

no se actualizará. Pero resulta que no es así. ¿Puedo pedirle que explique este punto? Es muy interesante incluso. Estoy intrigado.

Sí, pero si
signal == SIGNAL_NO

en el primer tick de una nueva barra se actualiza lastBarTime...


quizás sin...

   if (signal != SIGNAL_NO)
funcionará como está previsto... Es difícil por el código, tienes que comprobarlo)
 
hoz:

Pako, ¡me sorprende! Me has estado pinchando con el "código albanés" a lo largo de este hilo, pero ¿qué has sugerido? :) ¡Lo mismo, pero de lado! Al fin y al cabo, tiene la misma función de una barra nueva, sólo que con un uso más primitivo. Y luego está la función de enviar una orden, pasando por encima de todas las señales y así sucesivamente. ¡Y la solución al problema no estaba aquí! Así que tú eres el albanés.

pako:
Si no te importa formular los TdR de nuevo, ¿por qué necesitas controlar un nuevo bar?


hoz:
¡Fórmula y fácil! Todavía no he pensado en 1 punto, pero voy a explicar todo el punto.

No debería haber ninguna limitación en el número de pedidos. Es decir, los pedidos pueden abrirse en cualquier cantidad... ... no importa cuántas tengamos, pero necesitamos que se abra sólo 1 orden en la barra actual. Eso es todo.

Es decir, se abre una nueva barra, por lo que podemos abrir 1 orden durante esta barra, pero no más de 1 orden en la barra actual. La siguiente orden sólo puede abrirse en la siguiente barra, no antes.

¿Está claro ahora?

Escribí según los TdR que se abre una posición en una nueva barra

No veo nada más en los TdR.

Buena suerte para ti

Razón de la queja: