Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 614

 
newnek:

Olá, pode dizer-mese preciso do parâmetro Parâmetro=Ka,int,21 no sinal da biblioteca padrão?

Seleccionados no processo de optimização a partir da enumeração do tipo

Mas, quando o sinal desaparece da selecção ao gerar a EA, mas está a compilar normalmente, é difícil tirar conclusões - o que se passa ......, ajuda com o código, não existia já uma implementação?

p.s. Tenho de mudar deint para intTypecada vez na EA final

Especificar ficheiro exacto do módulo de sinal e linha de código...
 
Karputov Vladimir:
Especificar o ficheiro exacto do módulo de sinal e a linha de código...

Por exemplo, aqui está parte do código superior SignalRVI.mqh. Neste caso, desaparece da selecção do sinal quando mudo o tipo int para intType

Se o âmbito estiver errado, coloco-o num ficheiro separado com a enumeração #incluindo <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:

Olá, pode dizer-mese preciso do parâmetro Parâmetro=Ka,int,21 no sinal da biblioteca padrão?

Seleccionados no processo de optimização a partir da enumeração do tipo

Mas, quando o sinal desaparece da selecção ao gerar a EA, mas está a compilar normalmente, é difícil tirar conclusões - o que se passa ......, ajuda com o código, não existia já uma implementação?

p.s. Tenho de mudar de int para intType cada vez na EA final

Não tem de alterar nada - basta gerar o seu Expert Advisor com base no indicador "Índice de Vigor Relativo", depois no testador de estratégias, no separador "Definições" seleccionar uma das optimizações, ir ao separador "Parâmetros" e definir o intervalo e valor para o parâmetro "Índice de Vigor Relativo(10) Período de cálculo":

RVI

Mas uma vez que pretende utilizar apenas três valores do intervalo 15-29, precisa de escrever uma condição de cheque no 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

Depois de executar a optimização, pode-se ver que o testador trabalhou apenas para os parâmetros 15, 21 e 29:

Optimização selectiva

 
Karputov Vladimir:

Não tem de alterar nada - basta gerar o seu Expert Advisor com base no indicador "Índice de Vigor Relativo", depois seleccionar uma das optimizações no Teste de Estratégia, ir para o separador "Parâmetros" e definir o intervalo e valores para o parâmetro "Índice de Vigor Relativo(10) Período de cálculo":


Mas uma vez que pretende utilizar apenas três valores do intervalo 15-29, precisa de escrever uma condição de cheque no OnInit():

Depois de executar a optimização, pode-se ver que o testador trabalhou apenas para os parâmetros 15, 21 e 29:

Obrigado, percebo a vossa ideia, muito interessante, mas haverá muitos passos desperdiçados (embora provavelmente também não haja perda de tempo). Consegui mudar manualmente para o tipo de enumeração na EA gerada. E eu gostaria de automatizá-lo ainda mais.
 
newnek:
Obrigado, percebo a sua ideia, muito interessante, mas haverá muitos passos desperdiçados (embora provavelmente também não perca tempo). Consegui mudar manualmente para o tipo de enumeração na EA gerada. E eu gostaria de automatizá-lo ainda mais.
Haverá etapas vazias, mas não levam tempo, porque o OnInit() será abandonado por não conformidade das condições e a próxima etapa de optimização será iniciada imediatamente.
 

Boa tarde... Um programador de C++ eu próprio. Decidi experimentar-me neste campo recentemente... Quero escrever um Expert Advisor ou um Expert Advisor, a minha estratégia é OK, a minha plataforma é MT4... Por isso, estou a enfrentar este problema, uso no meu Conselheiro Especialista MACD.... Irei escrevê-lo em breve...

Por exemplo, crio um novo modelo EA, adiciono x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); e digamos que não há mais nada... compenso, testo, tudo está OK, no final do teste mostra um gráfico macd com os parâmetros especificados, tudo está OK.

A segunda opção - Crio um novo modelo EA no OnTick, adiciono um indicador de terceiros RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); compilar, testar, tudo está bem, mas!Quando termino o teste ou cancelo o teste na janela de milhares destes indicadores, compreendo que em cada tick é criado um novo indicador ... Não percebo porquê, porque o MAKD padrão nasce uma vez e é só...

Alguém pode por favor explicar o problema... Estou a tentar utilizar o mesmo problema com outro indicador não normalizado.

P.S. este é o meu primeiro post... Por favor não me culpe por não encontrar uma forma de esconder a foto debaixo de um spoiler.

Imagem do ecrã
 

Não sei do que se trata, mas encontrei uma solução...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- desenha gráfico por carrapato

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, um gráfico, apenas os dados na variávelRSICur são actualizados por tick...Qual é a lógica que não compreendo, em princípio é suficiente para mim, mas gostaria de compreender porque é que só funciona bem com configurações por defeito...

 
Игорь Марин:

Boa tarde... Um programador de C++ eu próprio. Decidi experimentar-me neste campo recentemente... Quero escrever um Expert Advisor ou um Expert Advisor, a minha estratégia é OK, a minha plataforma é MT4... Por isso, estou a enfrentar este problema, uso no meu Conselheiro Especialista MACD.... Irei escrevê-lo em breve...

Por exemplo, crio um novo modelo EA, adiciono x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); e digamos que não há mais nada... compenso, testo, tudo está OK, no final do teste, mostra um gráfico macd com os parâmetros especificados, tudo está OK.

A segunda opção - Crio um novo modelo EA no OnTick, adiciono um indicador de terceiros RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); compilar, testar, tudo está bem, mas!Quando termino o teste ou cancelo o teste na janela de milhares destes indicadores, compreendo que em cada tick é criado um novo indicador ... Não percebo porquê, porque o MAKD padrão nasce uma vez e é só...

Alguém pode por favor explicar o problema... Estou a tentar utilizar o mesmo problema com outro indicador não normalizado.

P.S. este é o meu primeiro post... Por favor não me repreenda por não encontrar uma maneira de esconder a foto debaixo do spoiler.

A foto está bem, não está escondida.

Escreveu este My_Induk ou encontrou-o algures? Compreendo que o indicador está torto. Se tiver o código fonte, afixe-o - vamos ver qual é o problema.

 
Игорь Марин:

Não sei do que se trata, mas encontrei uma solução...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- desenha gráfico por carrapato

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, um gráfico, apenas os dados na variávelRSICur são actualizados por tick...Qual é a lógica que não compreendo, em princípio é suficiente para mim, mas gostaria de compreender porque é que só funciona bem com configurações por defeito...

Isto acontece quando não se passou correctamente os parâmetros do indicador.
 
Alexey Volchanskiy:

A fotografia está bem, não há aqui escondida.

Escreveu este My_Induk ou encontrou-o algures? Presumo que o indicador está torto. Se tiver o código fonte, afixe-o - vamos ver qual é o problema.

Vladislav Andruschenko:
Isto acontece quando não se ultrapassaram devidamente os parâmetros do indicador.

Obrigado... descobri... Estive a bisbilhotar o dia todo e não consegui perceber... Eu próprio sou um programador, mas acontece... Cometi um erro de sintaxe, tive de passar os parâmetros de cor entre aspas ao chamar o indicador.

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

que foi o que causou esta avaria... ) Obrigado!!! Certamente haverá mais perguntas!!!