SOMENTE VELA / BARRA - Como catalogar ou segregar uma vela? - POR FAVOR, ME CORRIJA! - página 5

 
Wodzuuu:

Pergunta 1. Tenho usado MyPips em vela, nesta função? bool BULL4()

Sim. No entanto, a afirmação está correta na função BULL4()? Quer dizer, você está procurando aquela vela que está calculando?

Wodzuuu:

E eu PROGRAMA DE GROTE para mim é bom :) e você?

É seu, portanto tem que ser bom para você, não me formar.

Alguns comentários:

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);
  }
 

Eu corrijo os últimos erros

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);
  }

Acrescento a segunda compra

condição para abrir :

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);
   }

Abrir e VerificarParaFechar e Fechar o mesmo código como para BULL41 (somente pips difrent)

A função de início tem esse aspecto:

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();      
  }
//+------------------------------------------------------------------+

E agora eu preciso de bandeira, resignações e mudar a função de início

Minha imaginação diz:

Novo bar:

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;
      }
   }

e começar é como se fosse

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();      
  }

O código está funcionando, mas talvez eu tenha alguns erros


	          
 

Eu sinto falta de ResetSignals() para que não funcione bem

 
Wodzuuu:

Eu corrijo os últimos erros
...
...
...

O código está funcionando, mas talvez eu tenha alguns erros


Eu não disse, o resto está errado na função CheckForCloseBULL41(), porque não foi bem formada. Você não mudou nada. Se mais de uma das ordens em aberto corresponder às ordens abaixo, você terá problemas, pois o loop não passa por todas as ordens.

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

Você não precisa das bandeiras de sinalização desde que você só abra novas ordens em um número específico de ordens já abertas. Isto também impede que o código abra mais pedidos.

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

Sua função Fun_New_Bar() não está correta.

 

1. outro problema

se isto não for correto, vou procurar novamente.

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. novo problema na 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 do sinal 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();      
  }

Se eu escrevi pontos 2 e 3 ruins , não terei idéias para consertá-los, pedirei maiores direções Se eu pudesse.

 

1. outro problema
Fixo

2. Novo problema na barra
Fixo

3. problema do sinal de reset

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;
     }
As correções acima são para as bandeiras. Mas a questão em aberto é: você precisa delas? Se você só abre um novo pedido, se um número específico de pedidos já estiver aberto, você provavelmente não precisa dele. Isto é o que eu quis dizer com a expressão marcada em amarelo:
if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Mas não se preocupe, ele também funciona com as bandeiras e você pode eliminá-las mais tarde, quando se verificar que estão obsoletas.

 

Acho que a bandeira não é necessária, mas pode ser útil um dia.

Como ter duas EAem uma EA?
Eu fiz cópias do BULL4 da EA e mudei o idex BULL6 e os espaçadores .
Cópia da EA BULL4 + EA BULL6 muito nova EA (tudo após o dígito ()) Fazer mudanças dentro da função iniciar () e magicma2...

Minha EA funciona muito bem, os cenários não interferem uns com os outros. Eu estou feliz.

Queria agradecer-lhe por sua ajuda, sem sua ajuda e especialmente seu apoio Kronin eu não a escreveria.

Na minha opinião, o assunto está encerrado.

Cumprimentos

 
Wodzuuu:

Minha EA funciona muito bem, os cenários não interferem uns com os outros. Estou feliz.

Queria agradecer-lhe por sua ajuda, sem sua ajuda e especialmente sem seu apoio Kronin eu não a escreveria.

Seja bem-vindo. Obrigado pelo agradável feedback.