Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 465

 
kashi_ann:

Cosa sto facendo di sbagliato?

Questo indicatore non ha parametri di input? (intendo la funzione iCustom(...))

(Spero che qui manchi solo una parentesi di chiusura)

E dato che stai copiando solo 2 elementi, li stai copiando in un buffer allocato staticamente?

 
Caro,

Ho aperto il codice dell'indicatore per NT7
contiene if ( v>=a && v<b)
Ho bisogno di aggiungere un'altra condizione: non uguale a 25

è corretto?
se ( v>=a && v<b && v<25 && v>25)
 

Artyom Trishkin
:

1. Può iMaOnArray()
2. Forse avete guardato il Momentum sbagliato? Indicatori --> Oscillatori --> Momento
3. Le tue MA nella sottofinestra sono strane. Dove prendete tutto questo? Indicatori --> Trending --> Media mobile

Artyom, grazie per la risposta, risulta che è nel menu... Ho gli indicatori sbagliati :) Ho cliccato su Indicators\Momentum nella finestra "Navigator" ma viene aggiunto ad una nuova sottofinestra ogni volta e sembra incasinato.
Potete per favore suggerire cosa potrebbe mettere meno a dura prova il processore se la procedura viene ripetuta spesso:
1) Mettere il mio indicatore (complesso) in una sottofinestra e prendere i valori da qui
o
2)Leggere il valore dell'indicatore tramite OnTime(), usando (MQL4)iCustom.
Se ho capito bene, nel caso 2) l'indicatore non viene disegnato nella finestra, viene calcolato su richiesta. Tuttavia, non capisco se il codice eseguibile dell'indicatore viene caricato una volta o ogni volta che viene chiamato ...
P.S. Il secondo indicatore è ancora aggiunto alla nuova sottofinestra attraverso il menu ... Come aggiungerlo a un indicatore già esistente in una sottofinestra?

 

Александр:
Уважаемые,

открыл код индикатора к NT7
вижу в нём if ( v>=a && v<b)
а мне надо добавить ещё условие: неравно числу 25

правильно ли будет следующее?
if ( v>=a && v<b && v<25 && v>25)

Non funziona mai, perché:"v<25 && v>25" è sempre falso.

Dovrebbe andare più o meno così:

v!=25

 
Yury Kirillov:

Non funziona mai, perché:"v<25 && v>25" è sempre falso.

Dovrebbe andare più o meno così:

v!=25

Grazie! Sì:

se ( v>=a && v<b && (v<25|| v>25)) ose ( v>=a && v<b && v!=25)

 
Александр:
grazie! un altro forum ha suggerito: if ( ( v>=a && v<b && (v<25|| v>25))

Nel mio lo scriverei così:

{if((v>=a)&&(v<b)&&(v!=25)) 
{
        //разные действия 
}}//if((v>=a)&&(v<b)&&(v!=25)) 

 
 
Oksana Berenko:

Questo indicatore non ha parametri di input? (intendo la funzione iCustom(...))

(Spero che vi siate persi la parentesi di chiusura solo qui)

E dato che stai copiando solo 2 elementi, li stai copiando in un buffer allocato staticamente?

L'indicatore ha molti parametri di input.

Non capisco dove manca la parentesi.

Temo di non capire cosa significhi un buffer statico. Se non le dispiace spiegare, per favore.

 
Mike:

Artem, grazie per la risposta, risulta che è nel menu... Ho messo gli indicatori nel posto sbagliato :) Ho cliccato su Indicators\Momentum nella finestra Navigator ma viene aggiunto ad una nuova sottofinestra ogni volta e sembra incasinato.
Potete per favore suggerire cosa potrebbe mettere meno a dura prova il processore se la procedura viene ripetuta spesso:
1) Mettere il mio indicatore (complesso) in una sottofinestra e prendere i valori da qui
o
2)Leggere il valore dell'indicatore da OnTime(), usando (MQL4)iCustom.
Se ho capito bene, nel caso 2) l'indicatore non viene disegnato nella finestra, viene calcolato su richiesta. Tuttavia, non capisco se il codice eseguibile dell'indicatore viene caricato una volta o ogni volta che viene chiamato ...
P.S. Il secondo indicatore è ancora aggiunto alla nuova sottofinestra attraverso il menu ... Come aggiungerlo a un indicatore già esistente in una sottofinestra?

Quando si chiama un indicatore tramite iCustom(), i suoi buffer non vengono visualizzati nella finestra, ma per quanto ne so (nelle vecchie versioni di MT lo era sicuramente), tutti gli oggetti grafici visualizzati dall'indicatore vengono visualizzati nella finestra del grafico.

Per posizionare un indicatore in una finestra di un altro indicatore, trascinatelo con il mouse dalla finestra del Navigatore nella finestra dell'indicatore necessario.

Riguardo al minor consumo di tempo del processore - non ho controllato, non lo so.

 

aiutatemi a fare le condizioni, finire l'idea, quanto è facile mettere un segno sul grafico secondo la condizione?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
  //+------------------------------------------------------------------+
void OnTick()
{
        // скорость тиков
        int nTicksSpeed = TicksSpeed();
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TicksSpeed()
{
        MqlTick oTicks[5];
        ZeroMemory(oTicks);
        
        int nTicksCopied = CopyTicks(_Symbol, oTicks, COPY_TICKS_TRADE, 0, 5);
        
        int nSpeed = 0;

        if(nTicksCopied > 0)
        {
                // скорость роста
                if(oTicks[0].bid > oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid && oTicks[3].bid > oTicks[4].bid)
                                nSpeed = 4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid)
                                nSpeed = 3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid)
                                nSpeed = 2;
                                
                        else if(oTicks[1].bid > 0 && oTicks[0].bid > oTicks[1].bid)
                                nSpeed = 1 ;
                        
                }
        
                // скорость снижения
                if(oTicks[0].bid < oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid && oTicks[3].bid < oTicks[4].bid)
                                nSpeed = -4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid)
                                nSpeed = -3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid)
                                nSpeed = -2; 
                        else if(oTicks[1].bid > 0 && oTicks[0].bid < oTicks[1].bid)
                                nSpeed = -1 ; 
                }
        }
        
        return(nSpeed);
}

//+------------------------------------------------------------------+

if( nTickSpeed==-1)  отмечаем это место на графике g_Label.Text("-1 ")

if( nTickSpeed==-2)  отмечаем это место на графике g_Label.Text("-2 ")

if (nTickSpeed==-3)  отмечаем это место на графике g_Label.Text("-3 ")

if( nTickSpeed==-4)  отмечаем это место на графике g_Label.Text("-4 ")




if( nTickSpeed==1)  отмечаем это место на графике g_Label.Text("1 ")

if( nTickSpeed==2)  отмечаем это место на графике g_Label.Text("2 ")

if( nTickSpeed==3)  отмечаем это место на графике g_Label.Text("3 ")

if( nTickSpeed==4)  отмечаем это место на графике g_Label.Text("4 ")
 

Potresti sostituire i se alla fine con:

   switch(nTickSpeed)
     {
      case -4:
         g_Label.Text("-4");
         break;
      case -3:
         g_Label.Text("-3");
         break;
      case -2:
         g_Label.Text("-2");
         break;
      case -1:
         g_Label.Text("-1");
         break;
      case 1:
         g_Label.Text("1");
         break;
      case 2:
         g_Label.Text("2");
         break;
      case 3:
         g_Label.Text("3");
         break;
      case 4:
         g_Label.Text("4");
         break;
     }