[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 184

 
deyron:
Se ci fossero tentativi di aprire un ordine, ci sarebbe un errore nei messaggi. E se non c'è nessun tentativo di aprire un ordine, perché dovrebbe esserci un errore. La questione è se le condizioni del passaggio di Macha attraverso i livelli sono impostate correttamente. Perché gli ordini si aprono molto più tardi del previsto quando i parametri sono hardcoded?

Print() e GetLastError() nei posti giusti risponderebbero a tutte le vostre domande.
 

Buon pomeriggio!

Ho bisogno di trovare il valore dell'ultimo punto di una serie parabolica passata. Diciamo questo:

Ho scritto una funzione per trovarlo:

double FindLastLevel ()                             
 {double Level; int i;
  for (i=0; Level==0; i++) 
  {double SAR0=iSAR(Symbol(),Period(), Step, Maximum, i),
          SAR1=iSAR(Symbol(),Period(), Step, Maximum, i+1),
          SAR2=iSAR(Symbol(),Period(), Step, Maximum, i+2);

   if (SAR0>SAR1){if(SAR1<SAR2){Level=SAR2; return (Level);}}
   if (SAR0<SAR1){if(SAR1>SAR2){Level=SAR2;return (Level);}}
  }}

Cioè ricalcola ogni valore di Parabolic, a partire dalla barra corrente. Non appena la condizione di diminuzione/aumento graduale dei valori viene violata, la funzione restituisce il valore su quella barra che ha "rotto" la tendenza. Tuttavia, se ci fosse un salto di 1 barra, come questo:


La funzione "non lo vede".

Si prega di consigliare come riscrivere la funzione? Forse c'è una soluzione pronta?

 
Heroix:

Buon pomeriggio!

Ho bisogno di trovare il valore dell'ultimo punto di una serie parabolica passata. Diciamo questo:

Ho scritto una funzione per trovarlo:

Cioè ricalcola ogni valore di Parabolic, a partire dalla barra corrente. Non appena la condizione di diminuzione/aumento graduale dei valori viene violata, la funzione restituisce il valore su quella barra che ha "rotto" la tendenza. Tuttavia, se ci fosse un salto di 1 barra, come questo:


La funzione "non lo vede".

Si prega di consigliare come riscrivere la funzione? Forse c'è una soluzione pronta?

Bisogna anche guardare la posizione in relazione al prezzo.
 
Zhunko:
Bisogna anche guardare la posizione in relazione al prezzo.

Cioè confrontare non solo l'indicatore stesso, ma anche la posizione dei suoi valori in i rispetto al valore del prezzo in i, diciamo?
 

Controlla questo consulente per vedere se c'è qualcosa di interessante https://www.mql5.com/ru/code/10649

 
La gente mi dice perché if(OPN<CLS && (CLS-OPN)>=50*Point) non cerca????
 
nlp2311:

Domanda.

Perché la condizione non va

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;

...

Invece di

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;

fare così

if (Close_1>Open_1)
{  if (Close_1-Open_1>=30*Point) buffer[i]=High_1;
}

Posta qui la parte di codice in cui è presente questa condizione. Forse c'è un errore nel ciclo. Pubblicare il codice sul forum usando SRC.

 
paladin80:

Prova questo invece di

come questo.

Posta qui la parte di codice in cui è presente questa condizione. Forse c'è un errore nel ciclo. Sul forum, pubblicate il codice usando SRC.


Provato.... non funziona.

Ho messo le parentesi in diversi modi, contorto come potevo... non posso più!!!!!!!!!!!))))

Ecco perché sto chiedendo COME posso farlo senza distorsioni):?

Sembra che questa creep MT4 non veda affatto i pip per condizione if(.....)...((

Per di più, ho scritto separatamente un indicatore per mantenere questa condizione... non posso(...):

Perché è così?

 
nlp2311:

Eccolo qui.... bastardo(((!!!!

già arrabbiato...


Cosa avete controllato?
 

Ciao, ho scritto un indicatore con due diversi MACD nella stessa finestra e nella stessa scala.

Ora ho bisogno di ripercorrere tutte le barre SEEN e trovare il momento in cui la seconda linea di segnale dell'indicatore (arancione) sulla barra ZERO sarà uguale alla prima linea di segnale (rossa).

Qualcuno può aiutarmi a capirlo?


Код 2
-----

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color5 Aqua
#property indicator_color6 DarkOrange
#property  indicator_width1  2
#property  indicator_width5  2


//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
double Macd3Buffer[];
double Signa13Buffer[];

//--- for one bar
datetime last;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexBuffer(3,Signal2Buffer);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexBuffer(4,Macd3Buffer);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,Signa13Buffer);
   
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    if(last>=Time[0]) return;
  
    double max_M1=-0.01,min_M1=0.01,
           max_M2=-0.01,min_M2=0.01,
           max_S1=-0.01,min_S1=0.01,
           max_S2=-0.01,min_S2=0.01,
           max1=-0.01,min1=0.01,
           max2=-0.01,min2=0.01,
           max3,
           M,
           Dmax_3,
           D_sig,
           D_sig_Last=1.0;
  
  
   int j=0;                                             
       
    while(j<WindowBarsPerChart()-1)
{          
//----
   for(int i=0;i<=j;i++)
       
      { 
           Macd1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_MAIN,i+1);          // основная линия 1-ого MACD        
           Macd2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1);         // основная линия 2-ого MACD
           
              max_M1=MathMax(Macd1Buffer[i],max_M1);
              min_M1=MathMin(Macd1Buffer[i],min_M1);
           
              max_M2=MathMax(Macd2Buffer[i],max_M2);
              min_M2=MathMin(Macd2Buffer[i],min_M2); 
     
           Signal1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_SIGNAL,i+1);      // сигнальная линия 1-ого MACD   
           Signal2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1);     // сигнальная линия 2-ого MACD
              
              max_S1=MathMax(Signal1Buffer[i],max_S1);
              min_S1=MathMin(Signal1Buffer[i],min_S1);
           
              max_S2=MathMax(Signal2Buffer[i],max_S2);
              min_S2=MathMin(Signal2Buffer[i],min_S2); 
    
              max1=MathMax(max_M1,max_S1);                                              // максимум 1-ого MACD
              min1=MathMin(min_M1,min_S1);                                              // минимум 1-ого MACD
           
              max2=MathMax(max_M2,max_S2);                                              // максимум 2-ого MACD
              min2=MathMin(min_M2,min_S2);                                              // минимум 2-ого MACD
      }   
        
           M=(max1-min1)/(max2-min2);                                                   // соотношение диапазонов max-min 1-ого и 2-ого MACD  
           max3=max2*M;                                                                 // max 3-его MACD,т.е."нового" 2-ого MACD
           Dmax_3=max1-max3;                                                            // смещение 3-ого MACD относительно 1-ого MACD
            
           
    for( i=0;i<=j;i++)
       
      {       
         Macd3Buffer[0]=Macd2Buffer[0]*M+Dmax_3;                                        // приведение диапазона max-min 2-ого MACD к диапазону 1-ого MACD,
                                                                                        // т.е.подучаем 3-ий MACD и совмещаем max и min 3-его MACD с                                                                                    // max и min 1-ого MACD                                                                                                                                       
         Signa13Buffer[0]=Signal2Buffer[0]*M+Dmax_3;                                    // max и min 1-ого MACD                                            
      }  
      
      
         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
 if(Signa13Buffer[0]==Signal1Buffer[0])
      
        break;          
             
              D_sig_Last=D_sig; 
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
               
               
               
               
               
               
//----
   last=Time[0];
//----
   return(0);
  }
//+------------------------------------------------------------------+
Motivazione: