Verificar - o que eu fiz de errado? - página 6

 
Nikolai Semko #:

Sim, Natalia - isso foi apenas um memorando "Quando lhe pagam por uma linha de código".

Esse é o tipo de humor que os programadores têm.


Você não precisa de uma função em seu caso.

Você só precisa formar as variáveis Volume1 ... Volume10 primeiro forma uma matriz Volume[10]
e depois usa índice n para se referir a seu volume de itens[n].
Não se preocupe - quase todos os programadores passaram por isso.
O principal é que você realmente gosta de programação. Eu posso senti-lo.
Portanto, você irá longe.

Diga-me como escrevê-lo bem. Não quero duplicar matrizes de código.
O Expert Advisor utiliza 2 indicadores.
e as condições para abertura de pedidos são agora parecidas com estas:

if (Indicator1 > 0 && Indicator2 > 0)
{
OrderSend
}


Mas eu gostaria de adicionar um filtro nas configurações
Usar ou não usar 1 ou 2 indicadores
Somente eu não sei como implementá-lo mais corretamente.
Seria algo parecido com isto:

if (Indicator1 && Indicator1 > 0)
{
if (Indicator2 && Indicator2 > 0) || (Indicator2 == false)
{
///
}
}



if (Indicator2 && Indicator2 > 0)
{
if (Indicator1 && Indicator1 > 0) || (Indicator1 == false)
{
///
}
}
para que eu possa desativar 1 indicador ou o segundo indicador nos ajustes.
Não consigo descobrir como fazer isso sem copiar um monte de código.....
 
Natalya Smirnova #:

Por favor, aconselhe como escrevê-lo com cuidado. Para não duplicar as matrizes de código.
O Expert Advisor utiliza 2 indicadores.
e as condições para abertura de pedidos são agora parecidas com estas:


Mas gostaria de adicionar o filtro
Usar ou não usar 1 ou 2 indicadores
Somente não sei como implementá-lo mais corretamente.
Ficaria assim:

Que eu poderia desligar 1 indicador ou o outro nos ajustes.
Não consigo descobrir como fazer isso sem copiar um monte de código.....

Escrevi um pouco sobre isso aqui: https://www.mql5.com/ru/forum/6343/page1384#comment_26447195

 
JRandomTrader #:

Escrevi um pouco sobre o assunto aqui: https://www.mql5.com/ru/forum/6343/page1384#comment_26447195

Obrigado, estou indo para fazer algumas pesquisas.
 

Natalya Smirnova #:

para que eu possa desativar 1 indicador ou o segundo indicador nos ajustes.
Não consigo descobrir como fazer isso sem copiar um monte de código.....


input bool indicator_1 = true;
input bool indicator_2 = true;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool F_1()
    {
     if(!indicator_1)
          return true;
// выполнение условий

//---
     return false;
    }
bool F_2()
    {
     if(!indicator_2)
          return true;
// выполнение условий

//---
     return false;
    }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart(void)
    {
     if(F_1 && F2) /* работаем */ ;
    }

Escreva a condição do indicador na função e se não deve ser verificada, então a condição é cumprida. Devolver VERDADEIRO.

 
Natalya Smirnova #:

Por favor, aconselhe como escrevê-lo com cuidado. Para não duplicar as matrizes de código.
O Expert Advisor utiliza 2 indicadores.
e as condições para abertura de pedidos são agora parecidas com estas:


Mas gostaria de adicionar o filtro
Usar ou não usar 1 ou 2 indicadores
Somente não sei como implementá-lo mais corretamente.
Ficaria assim:

Que eu poderia desativar 1 indicador ou o segundo indicador nos ajustes.
Não consigo descobrir como fazer isso sem copiar um monte de código.....

Ainda assim, a variável para a condição de uso e a variável para o valor de saída do indicador devem ser variáveis diferentes.
E se as variáveis para a condição de uso forem ind_1 e ind_2, então, por exemplo, você poderia fazer isso:

ind_1 = !(ind_1 && !(Indicator1>0));
ind_2 = !(ind_2 && !(Indicator2>0));
if (ind_1 && ind_2) { OrderSend... };
Só no caso de: Ponto de exclamação significa inversão do valor de bool
 
Nikolai Semko #:

Ainda assim, a variável para a condição de uso e a variável para o valor de saída do indicador devem ser variáveis diferentes.
E se as variáveis para condição de uso forem ind_1 e ind_2, então, por exemplo, podemos fazer isso:

ind_1 = !(ind_1 && !(Indicator1>0));

a abundância de parênteses e inversões na expressão lógica sugere que se poderia simplificar...

PS/ arquitetonicamente, é uma escória em geral. Se as leituras dos indicadores podem ser agrupadas sem nenhum fator comercial (independentemente de onde você abriu o quê), então é um indicador e não tem nada a ver com a lógica comercial do robô. Ela tem que ser entregue e estar disponível para análise.

 
Maxim Kuznetsov #:

A abundância de parênteses e inversões na expressão lógica sugere que pode ser simplificada...

Talvez.
Quais são as opções de lógica ab
0 0 = 1
0 1 = 1
1 0 = 0
1 1 = 1
Exceto !(a && !b)
Qualquer um pode encontrar uma lógica mais curta...

 
Maxim Kuznetsov #:

PS/ Architecturally, é uma escória. Se as leituras dos indicadores podem ser agrupadas sem nenhum fator comercial (independentemente de onde você abriu o quê), então é um indicador e não tem lugar na lógica comercial de um robô. Ela tem que ser entregue e estar disponível para análise.

Eu não o entendi.
Apenas respondendo a uma pergunta. Não mais.
 
Nikolai Semko #:
Talvez.
Quais são as opções de lógica ab
0 0 = 1
0 1 = 1
1 0 = 0
1 1 = 1
Exceto !(a && !b)
Qualquer um pode encontrar uma lógica mais curta...

!a ||| b

:)

 
PapaYozh #:

!a ||| b

:)

Certo.
Obrigado :))
Engraçado. Tentei anexar XOR e esqueci-me do OR.

Portanto, uma versão mais curta:
ind_1 = !ind_1 || Indicator1>0;
ind_2 = !ind_2 || Indicator2>0;
if (ind_1 && ind_2) { OrderSend... };
ou versão de uma linha com ind_1 e ind_2 original preservado

if ((!ind_1 || Indicator1>0) && (!ind_2 || Indicator2>0)) { OrderSend... };


Razão: