[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 176

 
hoz:


:) Por que não implementar isto como uma nova função de barra? É preciso recalcular uma vez por dia, ou seja, a partir das 0 horas. Portanto, fazemos isso de forma simples. No início, é claro:

Na minha opinião, este é o caminho certo, embora seja primitivo!
Vinin, seu homônimo, me disse que ele deveria mudar por si só, mas nunca mudou, apenas com a compilação. Obrigado pela idéia de usar o controle de barras! Coloque uma variante em uma tabela, sua variante na outra. Verei o que funciona amanhã.
 
hoz:


Também não é, é E. Há um sinal &&.

OU. Porque a condição AND não é cumprida quando pelo menos um dos operandos é falso (primeiro OU segundo) - em lógica booleana isto é chamado de"Lei De Morgan".

Eu entendo. Mas a questão é esta:

Oíndice variável em geral por código tem valor Bar - IndicatorCounted().

Ou seja, é 1 na barra atual e 2 na nova barra.

Ele entra na função IsUpFractal() com o valor 1 ou 1 se a barra ainda não for nova, certo?

Portanto, a variável i terá um valor fixo, já que o índice de parâmetros de entrada também é fixo. Portanto, o laço sempre se quebrará após a primeira iteração. Qual é então o objetivo do laço?

Em cada etapa do ciclo, a variável i é decrescida por 1 (i--), de modo que i executa todos os valores de index+g_center-1 a zero. Além disso, observe que quando o indicador inicia, IndicatorCounted() dá 0, ou seja, o índice será executado em todas as barras, então é atribuído a i índice+g_center-1 a cada vez e, em seguida, vai para baixo até atingir 0 barra OU até que cnt seja igual a g_center, ou seja, até que a condição de loop não seja satisfeita (bem, ou até que o retorno, localizado no próprio corpo do loop, seja chamado).
 
alsu:

OU. Porque a condição AND não é cumprida quando pelo menos um dos operandos é falso (primeiro OU segundo) - na lógica de Buda isto é chamado de"Lei De Morgan".

Uau. Que bagunça. Quantas vezes já usei estes operadores... e aqui é como"Estou olhando para um novo portão". Eu li a lei, ela está escrita de uma maneira estranha. Ela descreve uma situação de negação. Presumo que esta técnica só se aplica a situações de negação? Quero dizer, se qualquer uma das variáveis booleanas não for igual aTrue.

Percebi, ao longo do caminho, que não o consegui. O resultado final é que a diferença aqui é a seguinte. É um indicador, e é por isso que não estou acostumado a pensar desta maneira. Isto significa que na primeira chamada do indicador, as barras não são calculadas e o índice será igual ao número de barras no gráfico ou ao valor de algum limite variávelReCalcBar, se as condições de cálculo das barras forem limitadas.

De fato, a variável g_center = 2 baseada no código.limitReCalcBar = 5000 também com base em variáveis externas.

No primeiro início do indicador na função:

//+-------------------------------------------------------------------------------------+
//| Определение наличия верхнего фрактала на указанном баре                             |
//+-------------------------------------------------------------------------------------+
bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

é passado o valor de 5000 de acordo.

i = índice + g_center - 1 = 5000 + 2 - 1 = 5001

Vamos dar uma olhada no loop:

for (; i >= 0 && cnt < g_center; i--)

Precisamos calcular 5000 barras. Após as duas primeiras barras, ou seja, 0 e 1, a condiçãocnt < g_center é falsa. Como podemos então calcular todas as 5000 barras? Este é o ponto que eu quero dominar. Parece ser elementar para um profissional, mas eu não entendo. É claro que, se tomarmos o && operador como um OR, tudo se encaixará. Mas isso de alguma forma contradiz o que já usei em Expert Advisors e já conheci.

Bem, quando tudo é calculado, tudo será simples. 0 e 1 serão passados a cada tick pelo índice, as condições serão cumpridas em loop e não há dificuldades, como eu vejo.

 

Caros programadores! Você pode me dizer se é possível escrever um roteiro que monitore as posições abertas e quando uma posição atinge um certo nível de perda, ela fecha parte da posição. O limite de perda deve ser fixado na moeda do depósito ou em pontos. Assim, se o preço for contra nós, reduzimos a perda e se o preço se voltar para o lucro, em vez da perda podemos obter algum lucro ou até mesmo uma perda menor, dependendo do conjunto TP. O roteiro tem que funcionar o tempo todo no modo EA, é um assistente de qualquer sistema comercial ou Expert Advisor.

 
destan:

Caros programadores! Você pode me dizer se é possível escrever um roteiro que monitore as posições abertas e quando uma posição atinge um certo nível de perda, ela fecha parte da posição. O limite de perda deve ser fixado na moeda do depósito ou em pontos. Assim, se o preço for contra nós, reduzimos a perda e se o preço se voltar para o lucro, em vez da perda podemos obter algum lucro ou até mesmo uma perda menor, dependendo do conjunto TP. O roteiro deve sempre funcionar no modo EA, é um assistente de qualquer sistema comercial ou Expert Advisor.

Talvez. Há alguma ajuda aqui.

 
valeryk:

Talvez. Há ajuda aqui.


Há uma coisa chamada stop loss!!!
 

Olá, tenho uma pergunta. Existem várias janelas iguais no terminal, cada uma delas tem o mesmo Expert Advisor, mas com configurações diferentes. Você pode me dizer se existe uma função ou um algoritmo pronto na MQL4 que pode detectar de qual janela uma ordem de mercado é aberta?

 
badbadboy:

Olá, tenho uma pergunta. Existem várias janelas idênticas no terminal, cada uma delas tem o mesmo Expert Advisor, mas com configurações diferentes. Você pode me dizer se existe uma função ou um algoritmo pronto na MQL4 que lhe permite determinar qual janela uma ordem de mercado está aberta?

Faz mais sentido fazer cópias do EA, nomeando-as de forma diferente e você verá no registro tudo, qual lança e, portanto, em qual janela você a encontrará!
 
borilunad:
Faz mais sentido fazer cópias da EA, nomeando-as de forma diferente, e você verá no diário de bordo qual cópia e em qual janela você poderá descobri-la!

Vou descobrir, mas como informar o Expert Advisor sobre isso?
 
borilunad:
Faz mais sentido fazer cópias do EA, nomeando-as de forma diferente, e você verá no registro tudo, qual lança e, conseqüentemente, em qual janela você já sabe!

Preciso disso para que o consultor especializado possa começar a fazer cálculos por conta própria.