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.
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.
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.
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.
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.
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 Advisorif (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 Advisorif (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"inputint 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).
input group "EA Settings"inputint inpFirst = 1;//primeira instância;voidOnInit() {}
Exemplo1.
#include <fxsaber\Expert.mqh>
voidOnStart()
{
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>
voidOnStart()
{
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.
}
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.
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.
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.
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.
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.
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.
Se eu usar este código
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.
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).
No arquivo tpl, o cabeçalho é criado perfeitamente, mas, por algum motivo, ele não passa o parâmetro
esperado para ser inpFirst=0
Atualizar a biblioteca.
Teste o Expert Advisor.
Exemplo1.
Exemplo2.