SOLO VELA / BAR - ¿Cómo catalogar o segregar la vela? - ¡POR FAVOR CORRÍJANME! - página 5

 
Wodzuuu:

Pregunta 1. ¿Tengo uso MyPips en la vela, en estos función? bool BULL4()

Sí. Sin embargo, ¿es correcta la sentencia if en la función BULL4()? Es decir, ¿busca esa vela que está calculando?

Wodzuuu:

Y ESCRITO PROGRAMA para mí es bueno :) ¿qué pasa con usted?

Es tuyo, así que tiene que ser bueno para ti, no para mí.

Algunos comentarios:

bool CheckForCloseBULL4()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            
   else return(false);   // <-- the else here is wrong. Use {} if you are unsure what is processed where
}


int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)   // <-- do it like you do it in the other loops!
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;  // <-- break? Why not using always the same code for the same thing? 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) //     Look at the for loop you used in CheckForCloseBULL4().       
        {
         if(OrderType()==OP_BUY) buys++; // <-- why this additional if? Simplify it to: 
        }                                //     if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY) buys++;  
     }
   return(buys);
  }
 

Corrijo los últimos errores

bool CheckForCloseBULL41()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            else return(false);                                                                              // <-- the else is correct now
}

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)                                                                     // Loop is correct and use the same code
     {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY)buys++;
     }
   return(buys);
  }

Agrego la segunda compra

a la condición de apertura:

bool BULL42send()
   {
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
      else return(false);
   }

Open y CheckForClose y Close el mismo código como para BULL41 (pips difrent solamente)

La función de inicio se ve así:

void start()
  {
   if(BULL4() && BULL41send() && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
     }
   if(BULL42send() && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }
//+------------------------------------------------------------------+

Y ahora necesito la bandera, resetsignals y cambiar la función de inicio

Mi imaginación dice:

Nueva barra:

bool New_Bar = false;

bool Fun_New_Bar()
   {
   static datetime New_Time=0;
   New_Bar=false;   
   if(New_Time!=Time[0])
      {
         New_Time=Time[0];
         New_Bar=true;
      }
   }

y el inicio se ve así

void start()
  {
   bool SignalBULL41Executed=false;
   bool SignalBULL42Executed=false;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

El código está funcionando, pero tal vez tengo algunos errores


	          
 

Me falta ResetSignals() para que no funcione bien

 
Wodzuuu:

Corrijo los últimos errores
...
...
...

El código está funcionando, pero tal vez tengo algunos errores


No dije, el else es incorrecto en la función CheckForCloseBULL41(), porque no estaba bien formateado. No ha cambiado nada. Si más de una de las órdenes abiertas coincide con la de abajo, tendrás problemas ya que el bucle no recorre todas las órdenes.

if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )

No necesita las banderas de señal mientras sólo abra nuevas órdenes sobre un número específico de órdenes ya abiertas. Esto también evita que el código abra más órdenes.

if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Su función Fun_New_Bar() no es correcta.

 

1. otro problema

si esto no es correcto voy a buscar de nuevo.

bool CheckForCloseBULL41()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
   {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
        {
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
            {
            if(OrderOpenPrice()+8*MyPips < Ask)
               {
                  return(true);
               }
            }
         }
    }    
   return(false); 
}

2. Problema de la nueva barra

bool Fun_New_Bar()                
   {                                
   static datetime New_Time=0;      
                     
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      return(true);            
      }

   return(false);
   }

3. problema de laseñal de reset

void start()
  {
   bool SignalBULL41Executed;
   bool SignalBULL42Executed;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

si escribo mal los puntos 2 y 3, no tengo ideas para arreglarlos, pediré mayores indicaciones si puedo.

 

1. Si no es así, el problema es
.

2. Problema dela barra nueva
Corregido

3. problema de la señalde reinicio

void start()
  {
   bool SignalBULL41Executed;  //<-- if defined inside the start function, the flags get reset with every tick.
   bool SignalBULL42Executed;  //    define it outside in global scope.
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position   //<-- As far as I remember, you defined this as bool. Do only set the flag, if the function returns true.
       SignalBULL41Executed=true;            //    change to: if(OpenBULL41())SignalBULL41Executed=true;
     }
Las correcciones anteriores son para las banderas. Pero la pregunta abierta es, ¿lo necesitas? Si sólo abres una nueva orden, si un número específico de órdenes ya está abierto, probablemente no lo necesites. Esto es lo que quise decir con la expresión marcada en amarillo:
if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Pero no te preocupes, funciona también con las banderas y puedes eliminarlas después, cuando resulte que están obsoletas.

 

Creo que la bandera no es necesaria, pero puede ser útil algún día.

¿Cómo tener dos EAen un solo EA?
Hice copias del EA BULL4 y cambié el idex BULL6 y el espaciamiento pips.
Copie el EA Bull4 + el EA Bull6 también el nuevo EA (todo después del dígito ()) Hacer cambios dentro de la función de inicio () y magicma2...

Mi EA funciona muy bien, los escenarios no interfieren entre sí. Estoy feliz.

Quería darle las gracias por su ayuda, sin su ayuda y sobre todo su apoyo Kronin no lo escribiría.

El tema es el final en mi opinión.

Saludos

 
Wodzuuu:

Mi EA funciona muy bien, los escenarios no interfieren entre sí. Estoy contento.

Quería darle las gracias por su ayuda, sin su ayuda y sobre todo su apoyo Kronin no lo escribiría .

De nada. Gracias por los buenos comentarios.