Bibliotecas: Expert - página 10

 

O que não é intuitivo é que as matrizes de parâmetros e nomes retornam tamanhos diferentes, porque não há parâmetro nulo em nomes, que representa o nome do Expert Advisor.

Além disso, eu gostaria de saber os tipos reais de parâmetros, pois agora "string" é retornado em todos os lugares. Não sei como fornecer isso - a maneira direta: analisar o conteúdo da cadeia de caracteres e sua redutibilidade a um número de ponto flutuante ou inteiro, mas se o parâmetro armazenar "0", seu tipo não poderá ser identificado.

 
Stanislav Korotky:

O que não é intuitivo é que as matrizes de parâmetro e nome retornam tamanhos diferentes porque os nomes não têm um parâmetro nulo que represente o nome do Expert Advisor.

Sim, isso não é muito legal. Talvez devêssemos ter criado um elemento nulo falso para Names[].

Além disso, gostaria de saber quais são os tipos reais de parâmetros; no momento, "string" é retornado em todos os lugares. Não sei como fornecer isso - a maneira é analisar o conteúdo da cadeia de caracteres e sua redutibilidade a um número de ponto flutuante ou inteiro, mas se o parâmetro armazenar "0", seu tipo não poderá ser identificado.

Considerei isso desnecessário na biblioteca, porque ainda existem ENUMs personalizados. Além disso, não vi uma tarefa em que isso pudesse ser necessário.

Eu estava criando meu próprio otimizador automático. Ele não foi útil nesse caso.

 
fxsaber:

Sim, não é muito legal. Talvez você devesse ter criado um elemento nulo falso para Names[].

Considerei isso desnecessário na biblioteca, porque também há ENUMs personalizados. Além disso, não vi uma tarefa em que isso pudesse ser necessário.

Eu estava criando meu próprio otimizador automático. Ele não era útil nesse caso.

As funções ParameterGetRange/ParameterSetRange são definidas apenas para os tipos long e double, portanto, o loop de parâmetros requer a análise e a alteração das configurações apenas para números.

 
Stanislav Korotky:

As funções ParameterGetRange/ParameterSetRange são definidas apenas para os tipos long e double, respectivamente; o loop nos parâmetros requer a análise e a alteração das configurações apenas para números.

Os tipos inteiros são bool, enums.

 
fxsaber:

Os tipos inteiros são bool e enums.

Isso é normal. Não é normal que agora tudo seja representado por cadeias de caracteres e que seja impossível separar as cadeias de caracteres reais.

 
Stanislav Korotky:

Isso é normal. Não é normal que tudo agora seja representado por cadeias de caracteres e que você não possa filtrar as cadeias de caracteres reais.

Os parâmetros a serem otimizados são números antecipados. Portanto, definitivamente não há strings entre eles. Portanto, você pode usá-lo como um filtro.

 

Olá, não consigo descobrir como abrir um expert com negociação autorizada

Esse código abre normalmente com as entradas que eu passo.

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
// O primeiro parâmetro de entrada do Expert Advisor
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// Em um novo gráfico, execute o Expert Advisor
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

Se eu usar este código

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
   Params[0].string_value += "\nexpertmode=5";
// O primeiro parâmetro de entrada do Expert Advisor
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// Em um novo gráfico, execute o Expert Advisor
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

ele abre com a negociação permitida, mas não passa parâmetros.

A tarefa é abrir o mesmo Expert Advisor em um novo gráfico.

input group "EA Settings"
input int inpFirst = 1;//primeira instância;

Para que apenas o primeiro Expert Advisor possa abrir novos gráficos, passo 0 para novos gráficos, mas infelizmente na segunda variante (quando a negociação é permitida) nenhum parâmetro é passado (ou é passado incorretamente).

inpFirst = 0;
 

No arquivo tpl, o cabeçalho é criado perfeitamente, mas, por algum motivo, ele não passa o parâmetro

<expert>
name=PullbackEA_v2
path=Experts\Shared Projects\luipaulo89\experts\PullbackEA_v2.ex5
expertmode=5
<inputs>
inpFirst=1

esperado para ser inpFirst=0

   Params[1].type = TYPE_INT;
   Params[1].integer_value = 0;
 
Aleksei Beliakov:

Atualizar a biblioteca.

Teste o Expert Advisor.

input group "EA Settings"
input int inpFirst = 1;//primeira instância;

void OnInit() {}


Exemplo1.

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // Caminho para ser um conselheiro
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";

  // grupo de entrada "Configurações de EA"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;

  // entrada int inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;

  EXPERT::Run(ChartOpen(_Symbol, PERIOD_CURRENT), Params); // Não será possível executar corretamente o Expert Advisor em seu próprio gráfico
}


Exemplo2.

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // Caminho para ser um conselheiro
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";
  
  // grupo de entrada "Configurações de EA"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;
  EXPERT::AddInputName(Params[1], " "); // Probl.

  // entrada int inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;
  EXPERT::AddInputName(Params[2], "inpFirst");

  EXPERT::Run(0, Params); // Será capaz de executar corretamente o Expert Advisor em seu próprio gráfico.
}
 
Obrigado, vocês são os melhores, como sempre!!!