Por que não colocar os parâmetros de entrada na estrutura?

 

Refiro-me à abordagem EA-in-class. Há um problema em passar parâmetros de entrada para um EA cuja classe está em um arquivo .mqh separado. Eu utilizo dois métodos

  1. Os parâmetros de entrada são copiados para os campos da classe EA por uma ou mais funções de inicialização. Esta é a abordagem mais universal, mas no caso de um grande número de variáveis, é a que consome mais tempo.
  2. A classe é definida após as variáveis de entrada, de modo que elas são visíveis a partir da EA. A desvantagem - menos flexibilidade ao utilizar várias instâncias da classe. Mais - quantidade mínima de escrita.

input double LotSize = 0.1;
// другие input переменные...

#include <MyLib\MyClassEA.mqh>
CMyClassEA MyEA;

E se fizermos uma extensão MQL e colocarmos variáveis de entrada na estrutura? Não é compatível com C++ e C de qualquer forma, por causa de imitação de ponteiros. Então, por que não ir mais longe?

struct InputVars
{
    input double Lot   = 0.1;
    input int    Magik = 100;
} ivars;

Então você poderia passar a variável ivars para a classe do algoritmo, copiar, etc.

Levar a idéia em um nível de brainstorming ))

 

Há muito tempo tenho que lidar com a necessidade de trabalhar com muitos parâmetros de configuração. Sempre que possível, eu resolvo este problema criando uma caixa de diálogo especial através de uma DLL na qual os parâmetros são tabulados. Após a inicialização, esta janela é escondida e então o programa é executado como de costume.

Se ao menos fosse algo assim na MQL, para que não tivesse que olhar através de uma enorme lista de parâmetros. A própria idéia de como implementá-la é interessante. Apenas a sintaxe deve ser ligeiramente diferente:

input struct VolumeParams                              // Здесь название вкладки
{
    // Содержимое вкладки
    double Lot1 = 0.01;
    double Lot2 = 0.02;
    double LotRatio = 1.5;
};
 
Ihor Herasko:

Há muito tempo tenho que lidar com a necessidade de trabalhar com muitos parâmetros de configuração. Sempre que possível, eu resolvo este problema criando uma caixa de diálogo especial através de uma DLL na qual os parâmetros são tabulados. Após a inicialização, esta janela é escondida e então o programa é executado como de costume.

Se ao menos fosse algo assim na MQL, para que não tivesse que olhar através de uma enorme lista de parâmetros. A própria idéia de como implementá-la é interessante. Apenas a sintaxe deve ser ligeiramente diferente:


Certo, é mais curto ) e com dll não vai funcionar no Mercado, infelizmente.

e a utilização da caixa de diálogo não lhe permitirá otimizar os parâmetros no testador

 

é melhor assim, então:

struct VolumeParams                              
{
    double lot;         //название параметра
    double LotRatio;    //название параметра
    int tp;             //название параметра
    int sl;             //название параметра
    int orders;         //название параметра
};
VolumeParams ParamBuf[5];

input ParamBuf[0];         // Здесь название вкладки
input ParamBuf[1];         // Здесь название вкладки
input ParamBuf[2];         // Здесь название вкладки
input ParamBuf[3];         // Здесь название вкладки
input ParamBuf[4];         // Здесь название вкладки
 

Imho, grande idéia, consistente com o conceito de OOP. Até agora, vejo 2 opções:

1) EstiloFrameInputs.

parameters

[out] Conjunto de cordas com descrição dos nomes e valores dos parâmetros

parâmetros_contagem

[O número de elementos na matriz deparâmetros[].

2) No estiloMqlParams.

 

Eu sempre utilizo a primeira abordagem.

Quando um Expert Advisor é colocado em uma negociação (seja em uma demonstração ou em uma conta real) - os parâmetros são fixos - e apenas um parâmetro - o percentual de risco - é passado para a classe do Expert Advisor. Todos os outros parâmetros estão escritos na mesma estrutura e são definidos dentro do Expert Advisor - seja no construtor ou em uma função especial.

 
Alexey Volchanskiy:

Refiro-me à abordagem "Expert Advisor in a class" (Conselheiro Especialista em uma classe). Há um problema em passar os parâmetros de entrada para o Expert Advisor cuja classe está localizada em um arquivo .mqh separado.

Não senti o problema. Para prescrever um modelo no construtor da classe e pronto.

 
fxsaber:

Não senti o problema. Você tem que prescrever um modelo no construtor da classe e é isso.


bem, você ainda não falou com os clientes)

...aqui o cliente quer 10 entradas, e cada passo tem seu próprio tp/slot/lot/trall/sinal para entrada

e que tudo isso seja otimizado no testador)

 
Taras Slobodyanik:

bem, você ainda não falou com os clientes)

...então o cliente quer 10 entradas, e cada passo tem seu próprio tp/slot/lot/trall/sinal para entrada

e que tudo isso seja otimizado no testador)

Então, como isso se relaciona com o tema do ramo?

 
fxsaber:

Então, como isso se relaciona com o tópico do fio?


A própria discussão de fato desviou-se um pouco do título do fio. Agora é mais sobre a segunda parte do posto da TC:

Alexey Volchanskiy

E se fizermos uma extensão da linguagem MQL e colocarmos variáveis de entrada na estrutura? De qualquer forma, não é compatível com C++ e C, por causa da imitação do ponteiro. Então, por que não ir mais longe?

Então você poderia passar a variável ivars para a classe de algoritmo, cópia, etc.

 
fxsaber:

Então, como isso se relaciona com o tópico do fio?


Assim, para escrever toda esta pilha de parâmetros, seria suficiente definir a estrutura e colocá-la nos parâmetros de entrada.