SOLO CANDELA / BAR - Come catalogare o segregare la candela? - PER FAVORE CORREGGIMI! - pagina 5

 
Wodzuuu:

Domanda 1. Devo usare MyPips in candela, in queste funzioni? bool BULL4()

Sì. Tuttavia, l'istruzione if è corretta nella funzione BULL4()? Cioè, sta cercando la candela che sta calcolando?

Wodzuuu:

E ho scritto programma per me è buono :) come circa voi?

È tuo, quindi deve essere buono per te, non per me.

Alcuni commenti:

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

Correggo gli ultimi errori

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

Aggiungo il secondo acquisto

all'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 e CheckForClose e Close lo stesso codice come per BULL41 (solo pip diversi)

La funzione di avvio è così:

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 ora ho bisogno di flag, resettare i segnali e cambiare la funzione di inizio

La mia immaginazione dice:

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

e l'inizio è così

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

Il codice funziona ma forse ho qualche errore


	          
 

Mi manca ResetSignals() quindi non funziona bene

 
Wodzuuu:

Correggo gli ultimi errori
...
...
...

Il codice funziona ma forse ho qualche errore


Non ho detto che l'altro è sbagliato nella funzione CheckForCloseBULL41(), perché non era formulato bene. Non hai cambiato nulla. Se più di uno degli ordini aperti corrisponde al sottostante, avrai problemi perché il ciclo non passa attraverso tutti gli ordini.

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

Non hai bisogno delle bandiere di segnalazione finché apri nuovi ordini solo su un numero specifico di ordini già aperti. Questo impedisce anche al codice di aprire altri ordini.

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

La tua funzione Fun_New_Bar() non è corretta.

 

1. altro problema

se questo non è corretto cercherò di nuovo.

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. Nuovo problema della 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 del segnale di 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 ho scritto male i punti 2 e 3, non avrò idee per risolverli, chiederò indicazioni più grandi se posso.

 

1. Altrimenti il problema
è risolto

2. Problema della nuova barra
Corretto

3. problema del segnale di 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;
     }
Le correzioni di cui sopra sono per le bandiere. Ma la domanda aperta è: ne hai bisogno? Se aprite solo un nuovo ordine, se un numero specifico di ordini è già aperto, probabilmente non ne avete bisogno. Questo è ciò che intendevo con l'espressione contrassegnata in giallo:
if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Ma non preoccupatevi, funziona anche con le bandiere e potete eliminarle dopo, quando si scopre che sono obsolete.

 

Penso che la bandiera non sia necessaria, ma può essere utile un giorno.

Come avere due EAin un unico EA?
Ho fatto copie del BULL4 EA e cambiato il BULL6 idex e la spaziatura pips.
Copiare EA Bull4 + EA Bull6 troppo nuovo EA (tutto dopo la cifra ()) Fare le modifiche all'interno della funzione start () e magicma2...

Ilmio EA funziona molto bene, gli scenari non interferiscono tra loro. Sono felice.

Volevo ringraziarvi per il vostro aiuto, senza il vostro aiuto e soprattutto il vostro supporto Kronin non avrei scritto .

Il soggetto è la fine, secondo me.

Saluti

 
Wodzuuu:

Ilmio EA funziona molto bene, gli scenari non interferiscono tra loro. Sono felice.

Volevo ringraziarti per il tuo aiuto, senza il tuo aiuto e soprattutto il tuo supporto Kronin non lo scriverei.

Non c'è di che. Grazie per il bel feedback.

Motivazione: