Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 614

 
newnek:

Ciao, potresti dirmise ho bisogno del parametro Parameter=Ka,int,21 nel segnale della libreria standard?

Selezionato nel processo di ottimizzazione dall'enumerazione del tipo

Ma, quando il segnale scompare dalla selezione quando si genera l'EA, ma si compila normalmente, è difficile trarre conclusioni - cosa c'è di sbagliato ......, aiuto con il codice, non c'era già un'implementazione?

p.s. Devo cambiare int in intTypeogni volta nel finale EA

Specificare l'esatto file del modulo del segnale e la linea di codice...
 
Karputov Vladimir:
Specificare l'esatto file del modulo del segnale e la linea di codice...

Per esempio, ecco una parte del codice superiore SignalRVI.mqh. In questo caso, scompare dalla selezione del segnale quando cambio il tipo int in intType

Se lo scopo è sbagliato, lo metto in un file separato con enumerazione #include <Libraries\myfunc.mqh>.
//+------------------------------------------------------------------+
//|                                                    SignalRVI.mqh |
//|                   Copyright 2009-2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=----------------Signals of oscillator 'Relative Vigor Index'               |
//| Type=SignalAdvanced                                              |
//| Name=Relative Vigor Index                                        |
//| ShortName=RVI                                                    |
//| Class=CSignalRVI                                                 |
//| Page=signal_rvi                                                  |
//| Parameter=PeriodRVI,intType,15,Period of calculation                 |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSignalRVI.                                                |
//| Purpose: Class of generator of trade signals based on            |
//|          the 'Relative Vigor Index' oscillator.                  |
//| Is derived from the CExpertSignal class.                         |
//+------------------------------------------------------------------+
enum intType
  {
   p0 = 15, 
   p1 = 21, 
   p2 = 29 
}
;
class CSignalRVI : public CExpertSignal
  {
protected:
   CiRVI             m_rvi;            // object-oscillator
   //--- adjusted parameters
   intType               m_periodRVI;      // the "period of calculation" parameter of the oscillator
   //--- "weights" of market models (0-100)
   int               m_pattern_0;      // model 0 "the oscillator has required direction"
   int               m_pattern_1;      // model 1 "crossing of main and signal line"

public:
                     CSignalRVI(void);
                    ~CSignalRVI(void);
   //--- methods of setting adjustable parameters
   void              PeriodRVI(intType value)            { m_periodRVI=value;                 }
   //--- methods of adjusting "weights" of market models
   void              Pattern_0(int value)            { m_pattern_0=value;                 }
   void              Pattern_1(int value)            { m_pattern_1=value;                 }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the indicator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);

protected:
   //--- method of initialization of the oscillator
   bool              InitRVI(CIndicators *indicators);
   //--- methods of getting data
   double            Main(int ind)                   { return(m_rvi.Main(ind));           }
   double            DiffMain(int ind)               { return(Main(ind)-Main(ind+1));     }
   double            Signal(int ind)                 { return(m_rvi.Signal(ind));         }
   double            DiffSignal(int ind)             { return(Signal(ind)-Signal(ind+1)); }
   double            DiffMainSignal(int ind)         { return(Main(ind)-Signal(ind));     }
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalRVI::CSignalRVI(void) : m_periodRVI(15),
                               m_pattern_0(60),
                               m_pattern_1(100)
  {
  }
 
newnek:

Ciao, potresti dirmise ho bisogno del parametro Parameter=Ka,int,21 nel segnale della libreria standard?

Selezionato nel processo di ottimizzazione dall'enumerazione del tipo

Ma, quando il segnale scompare dalla selezione quando si genera l'EA, ma si compila normalmente, è difficile trarre conclusioni - cosa c'è di sbagliato ......, aiuto con il codice, non c'era già un'implementazione?

p.s. Devo cambiare int in intType ogni volta nel finale EA

Non devi cambiare nulla - basta generare il tuo Expert Advisor basato sull'indicatore "Relative Vigor Index", poi nel tester della strategia, nella scheda "Impostazioni" seleziona una delle ottimizzazioni, vai alla scheda "Parametri" e imposta l'intervallo e il valore del parametro "Relative Vigor Index(10) Periodo di calcolo":

RVI

Ma poiché volete usare solo tre valori dell'intervallo 15-29, dovete scrivere una condizione di controllo in OnInit():

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Signal_RVI_PeriodRVI!=15 && Signal_RVI_PeriodRVI!=21 && Signal_RVI_PeriodRVI!=29)
      return(INIT_PARAMETERS_INCORRECT);
//--- Initializing expert

Dopo aver eseguito l'ottimizzazione, si può vedere che il tester ha lavorato solo per i parametri 15, 21 e 29:

Ottimizzazione selettiva

 
Karputov Vladimir:

Non devi cambiare nulla - basta generare il tuo Expert Advisor basato sull'indicatore "Relative Vigor Index", poi seleziona una delle ottimizzazioni nello Strategy Tester, vai alla scheda "Parametri" e imposta l'intervallo e i valori per il parametro "Relative Vigor Index(10) Period of calculation":


Ma poiché volete usare solo tre valori dell'intervallo 15-29, dovete scrivere una condizione di controllo in OnInit():

Dopo aver eseguito l'ottimizzazione, si può vedere che il tester ha lavorato solo per i parametri 15, 21 e 29:

Grazie, ho capito la tua idea, molto interessante, ma ci saranno un sacco di passi sprecati (anche se probabilmente nemmeno il tempo perso). Sono riuscito a passare manualmente al tipo enum nell'EA generato. E vorrei automatizzare ancora di più.
 
newnek:
Grazie, ho capito la tua idea, molto interessante, ma ci saranno molti passi sprecati (anche se probabilmente non si perderà neanche tempo). Sono riuscito a passare manualmente al tipo enum nell'EA generato. E vorrei automatizzare ancora di più.
Ci saranno dei passi vuoti, ma non richiedono tempo, perché OnInit() uscirà per il mancato rispetto della condizione e il prossimo passo di ottimizzazione sarà iniziato immediatamente.
 

Buon pomeriggio... Io stesso sono un programmatore C++. Ho deciso di mettermi alla prova in questo campo recentemente... Voglio scrivere un Expert Advisor o un consigliere esperto, la mia strategia è OK, la mia piattaforma è MT4... Allora, sto affrontando questo problema, uso nel mio Expert Advisor MACD.... Lo scriverò a breve...

Per esempio, creo un nuovo modello EA, aggiungo x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); e diciamo che non c'è altro... Compilo, provo, tutto è OK, alla fine del test, visualizza un grafico macd con i parametri indicati, tutto è OK.

La seconda opzione - creo un nuovo modello EA nel OnTick, aggiungo un indicatore di terze parti RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); compilo, provo, tutto è OK, ma!Quando finisco il test o annullo il test nella finestra di migliaia di questi indicatori, capisco che su ogni tick viene creato un nuovo indicatore... Non capisco perché, perché il MAKD standard nasce una volta e basta...

Qualcuno può spiegare il problema... Sto cercando di spiegare il problema con gli altri indicatori non standard...

P.S. questo è il mio primo post... Per favore, non biasimatemi per non aver trovato un modo per nascondere la foto sotto uno spoiler.

Screenshot
 

Non so di cosa si tratti ma ho trovato una soluzione...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- disegna il grafico per tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, un grafico, solo i dati nella variabileRSICur sono aggiornati per tick...Qual è la logica che non capisco, in linea di principio mi basta, ma vorrei capire perché funziona bene solo con le impostazioni di default...

 
Игорь Марин:

Buon pomeriggio... Io stesso sono un programmatore C++. Ho deciso di mettermi alla prova in questo campo recentemente... Voglio scrivere un Expert Advisor o un consigliere esperto, la mia strategia è OK, la mia piattaforma è MT4... Allora, sto affrontando questo problema, uso nel mio Expert Advisor MACD.... Lo scriverò a breve...

Per esempio, creo un nuovo modello EA, aggiungo x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); e diciamo che non c'è altro... Compilo, provo, tutto è OK, alla fine del test, visualizza un grafico macd con i parametri indicati, tutto è OK.

La seconda opzione - creo un nuovo modello EA nel OnTick, aggiungo un indicatore di terze parti RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); compilo, provo, tutto è OK, ma!Quando finisco il test o annullo il test nella finestra di migliaia di questi indicatori, capisco che su ogni tick viene creato un nuovo indicatore... Non capisco perché, perché il MAKD standard nasce una volta e basta...

Qualcuno può spiegare il problema... Sto cercando di utilizzare lo stesso problema con un altro indicatore non standard...

P.S. questo è il mio primo post... Per favore non rimproveratemi per non aver trovato un modo per nascondere la foto sotto lo spoiler.

La foto va bene, non è nascosta.

L'hai scritto tu My_Induk o l'hai trovato da qualche parte? Ho capito che l'indicatore è storto. Se hai il codice sorgente, postalo - vediamo qual è il problema.

 
Игорь Марин:

Non so di cosa si tratti ma ho trovato una soluzione...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- disegna il grafico per tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, un grafico, solo i dati nella variabileRSICur sono aggiornati per tick...Qual è la logica che non capisco, in linea di principio mi basta, ma vorrei capire perché funziona bene solo con le impostazioni di default...

Questo succede quando non avete passato correttamente i parametri dell'indicatore.
 
Alexey Volchanskiy:

La foto va bene, qui non ci si può nascondere.

L'hai scritto tu My_Induk o l'hai trovato da qualche parte? Immagino che l'indicatore sia storto. Se hai il codice sorgente, postalo - vediamo qual è il problema.

Vladislav Andruschenko:
Questo succede quando non avete passato correttamente i parametri dell'indicatore.

Grazie, l'ho capito... Ho frugato tutto il giorno e non sono riuscito a capirlo... Io stesso sono un programmatore, ma succede... Ho fatto un errore di sintassi, ho dovuto passare i parametri del colore tra virgolette quando ho chiamato l'indicatore...

iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0);

ecco cosa ha causato questo malfunzionamento... ) Grazie!!! Sicuramente ci saranno altre domande!!!