Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 614

 
yan720:
Obrigado por responder. Se você não se importa, por favor, envie-me a EA de que você está falando (ou uma parte dela, que é com o canal) - seria interessante ver outra implementação.

Não consigo dar sentido a algo que fiz há alguns anos. Não está funcionando por alguma razão, embora eu me lembre que costumava trabalhar e comerciar. Deixe-me primeiro ordenar o código, consertá-lo e depois afixá-lo. Talvez amanhã. Eu só não quero me envergonhar se houver alguns erros infantis.

 
yan720:

A idéia geral, é claro, é esta. E como você determina a largura do canal (alcance no seu caso)? Faço-o através do tamanho da vela média, mais que está tudo ligado ao comprimento do canal, porque a presença do canal não é verificada em um número rígido de barras, mas, por exemplo, em um comprimento de 10 a 30 barras.

O que me interessa é a questão de selecionar a largura a partir do comprimento.

Você pode fazer vários parâmetros externos para a largura do canal em um único indicador. E fazer cálculos separados para cada parâmetro.

 

Por comprimento, o mesmo é verdade.

 
Example2:
Olá. O Expert Advisor deve fechar todas as ordens quando a condição chegar, mas primeiro fecha a ordem, depois tenta fechá-la novamente (o servidor nos dá um erro dizendo "ticket inválido") e só depois vai mais longe. Aqui está um código de amostra e a própria EA.

Em sua função CloseOrders(), se a ordem for fechada, o ciclo while(cnt<==5 ) enviará mais uma vez o código para fechar a ordem, e um erro ocorrerá, é claro, e então sairá através de if(). pausa;

                    int cnt=0;
                    while(cnt<=5){
                      Result[0]=OrderClose(OrderTicket(),OrderLots(),MarketInfo("USDCAD",MODE_BID),slip,Blue);
                      if(!Result[0]){
                        Answer=ERRORS(GetLastError());
                        if (Answer==1)continue; cnt++;
                        if (Answer==2)break;
                      }
                    }

Na função ProtectionClose(), você já adicionou linhas com a saída correta enquanto sai.

 if(Result[0])break;
 }continue;
Tente cavar aqui.
 
pu6ka:

Em sua função CloseOrders(), se a ordem for fechada, o ciclo while(cnt<==5) enviará mais uma vez o código para fechar a ordem, e um erro ocorrerá, é claro, e então sairá através de if(). pausa;

Na função ProtectionClose(), você já adicionou linhas com a saída correta

Tente fazer algumas escavações aqui.


Mas no caso que descrevi, é a função ProtectionClose() que fecha o pedido. Vou corrigir esse erro.
 
Example2:

No entanto, é a função ProtectionClose() que fecha os pedidos no caso que descrevi. Vou corrigir esse erro.

Eu não escavei fundo no código, não pude executá-lo no testador, não há indicador.

Mas, por exemplo, suas funções OpenUsdbuy(); OpenSellusd() são consecutivas.

OpenSellusd() abre GBPUSD, EURUSD, AUDUSD, NZDUSD, etc. Você será o primeiro a fechá-los na ordem inversa de NZDUSD, AUDUSD, etc.

Apenas três pares na função ProtectionClose() têm uma saída de tempo em duas variantes: USDCAD, USDCHF e USDJPY.

Em outras moedas, você pode sair enquanto() somente por um erro se(!Resultado[...]).

 
FOReignEXchange:

É possível fazer vários parâmetros externos para a largura do canal em um único indicador. E fazer cálculos separados para cada parâmetro.

A questão é que não quero definir à força a largura do canal - o Conselheiro/indicador Especialista deve detectar a presença do canal independentemente do par de moedas e/ou da volatilidade atual. Assim, eu defino apenas o comprimento mínimo e máximo do canal a partir de parâmetros externos, e isto somente no processo de depuração do algoritmo - depois estes parâmetros serão costurados no mesmo. Nesta fase, há algumas reclamações. Embora eu possa captar os canais em geral (a foto foi tirada do código de trabalho), eu gostaria de ver outras soluções para esta questão.

 
pu6ka:

Eu não escavei fundo no código, não pude executá-lo no testador, não há indicador.

Mas, por exemplo, suas funções OpenUsdbuy(); OpenSellusd() são consecutivas.

OpenSellusd() abre GBPUSD, EURUSD, AUDUSD, NZDUSD, etc. Você será o primeiro a fechá-los na ordem inversa de NZDUSD, AUDUSD, etc.

Apenas três pares na função ProtectionClose() têm uma saída de tempo em duas variantes: USDCAD, USDCHF e USDJPY.

Em outras moedas você pode sair enquanto() somente por um erro se(!Resultado[...])


Obrigado pela dica, esqueci de deixar o laço neste caso, deve funcionar agora. Se você quiser, posso colar o indicador como agradecimento.
 
yan720:

A idéia geral, é claro, é esta. E como você determina a largura do canal (alcance no seu caso)? Faço-o através do tamanho de uma vela média, mais que está tudo ligado ao comprimento do canal, porque a presença do canal não é verificada em um número rígido de barras, mas, por exemplo, em um comprimento de 10 a 30 barras.

O que me interessa é a questão de escolher a largura a partir do comprimento.

Este comprimento de 10 barras é a figura fundamental. Quero dizer, não menos de 10... e se for mais longo, é o destino. Leve-o para o exterior para poder experimentar. O alcance pode ser um tamanho médio da vela, não é importante, mas é melhor colocá-la fora também. Talvez você queira definir as faixas máxima e mínima, então você terá que definir duas variáveis Max_ e Min_. Depois, em cada barra você verificará o tamanho médio de uma vela nestas 10 barras e, se lhe convier, desenhe tendências acima e abaixo das 10 barras. E na próxima barra, você já pode verificar 11 barras e se a condição não for violada, ObjectSet(...); apenas OBJPROP_PRICE1 muda para a primeira coordenada , e OBJPROP_PRICE2 e OBJPROP_TIME2 fazem omesmo em cada barra. Ou, você não pode recalcular nada e considerar o canal já formado e esperar pela quebra deste canal. Isto é do seu agrado.

Bem, no meu caso, sugeri uma opção mais leve da lanterna para atribuir também a altura do canal e o número mínimo de barras.


yan720:

A questão é que não quero definir à força a largura do canal - o Conselheiro/indicador Especialista deve detectar a presença do canal independentemente do par de moedas e/ou da volatilidade atual. Assim, eu defino o comprimento mínimo e máximo do canal a partir de parâmetros externos, e isto somente no processo de depuração do algoritmo - depois estes parâmetros serão costurados no mesmo. Nesta fase, há algumas reclamações. Embora eu possa captar os canais em geral (a foto foi tirada do código de trabalho), eu gostaria de ver outras soluções para esta questão.

Bem, primeiro, os parâmetros não farão qualquer diferença se estiverem no externo ou nos embutidos. E segundo, se você não definir a largura do canal, com o que você irá compará-lo quando calcular as 10 barras especificadas? Como você quer determinar se é ou não um canal? E em terceiro lugar, imho, o tamanho médio das velas não funcionará adequadamente. Se todas as 10 barras estiverem em alta, mas o tamanho médio da barra não for maior do que o cheque. É ou não um canal? Pode ser um canal, mas é apenas inclinado e nós estamos analisando um canal horizontal de acordo com seu desenho.
 
yan720:

A questão é que não quero definir à força a largura do canal - o Conselheiro/indicador Especialista tem que determinar a presença do canal, independentemente do par de moedas e/ou da volatilidade atual. Assim, eu defino apenas o comprimento mínimo e máximo do canal a partir de parâmetros externos, e isto somente no processo de depuração do algoritmo - depois estes parâmetros serão costurados no mesmo. Nesta fase, há algumas reclamações. Embora, no geral, os canais sejam capturados (a imagem era apenas do código de trabalho), eu gostaria de ver outras soluções para esta questão.

Bem, há uma idéia de pegar 2 fractais superiores consecutivos ou 2 iHighest que consistem de, digamos, 5-10 candelabros. Apanhamos este caso dentro de uma certa faixa de comprimento. Se os valores destes picos estiverem próximos um do outro, entre estes dois picos vamos encontrar o iLowest.

Da mesma forma, primeiro procure por dois picos inferiores, e depois pelo pico superior entre eles.

Então, dançaremos a partir daqueles picos encontrados. Em primeiro lugar, nós traçamos níveis por eles. Depois ensinamos o código a pensar mais.

Esta opção eliminará o parâmetro externo como a largura_do_canal.

Seja qual for a sua visão, acho que precisamos de pelo menos alguns parâmetros para o comprimento.