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

 
Ctmcn:

Você pode me dizer o que significa o erro na compilação da EA?

\Fim_do_programa' - parêntese_esquerda desequilibrada


Parênteses desequilibrados à esquerda.
 
Roll:

Parêntesis esquerdo desequilibrado.

Oops... Encontrei-a. OBRIGADO.
 

Aqui está uma pergunta.

Os pedidos são abertos como BUY/SELL STOP. Alguns se tornam ordens de mercado, outros são eliminados.

Para as últimas ordens N-mercado (abertas e fechadas) precisamos saber se elas foram de Compra ou de Venda.

Meu primeiro pensamento é procurar todas as ordens da OrdersHistoryTotal() e OrdersTotal(), ordená-las por

e depois ordená-los por OP_BUY e OP_SELL. Mas isto é longo e retardará o processador de forma selvagem.

- Talvez haja alguma outra variante mais simples?

Obrigado!

 

Boa tarde.

Alguém pode ajudar?

Escrevi meu primeiro indicador simples, ele deve calcular a volatilidade média para os últimos 2,3,4 e 5 dias.

O indicador tem seis amortecedores,

SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,VolatBuffer0);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,VolatBuffer1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,VolatBuffer2);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3,VolatBuffer3);
   SetIndexStyle(4,DRAW_HISTOGRAM);
   SetIndexBuffer(4,VolatBuffer4);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,VolatBuffer5);

Em sua janela no gráfico normalmente desenha apenas cinco linhas verticais de volatilidade para 0 dia, 1 dia, média para 2 dias, 3 dias e 4 dias.

A volatilidade média de acordo com a soma dos 5 dias anteriores é traçada como uma linha quebrada para 50 velas diárias - ou seja, quantas velas são especificadas.

O conteúdo dos buffers é calculado da seguinte forma: média de 5 dias - no ciclo (para traçar uma linha por 50 dias), outros dados médios - fora do ciclo.

while(i>=0)
   {
    
   int day0= (High[i] - Low[i])/Point;
   int day1= (High[i+1] - Low[i+1])/Point;
   int day2= (High[i+2] - Low[i+2])/Point;
   int day3= (High[i+3] - Low[i+3])/Point;
   int day4= (High[i+4] - Low[i+4])/Point;
   int day5= (High[i+5] - Low[i+5])/Point;

        int D5_av = (day1+ day2+ day3+ day4+ day5) / 5;
       VolatBuffer5[i]=D5_av;
      i--;
        }
        day0= (High[0] - Low[0])/Point;
   day1= (High[1] - Low[1])/Point;
   day2= (High[2] - Low[2])/Point;
   day3= (High[3] - Low[3])/Point;
   day4= (High[4] - Low[4])/Point;
        
        int D4_av = (day1+ day2+ day3+ day4)/4;
        int D3_av = (day1+ day2+ day3)/3;
        int D2_av = (day1+ day2)/2;
        int D1_av = day1/1;
        int D0_av = day0/1;
        
        VolatBuffer0[0]=D0_av;
      VolatBuffer1[1]=D1_av;
      VolatBuffer2[2]=D2_av;
      VolatBuffer3[3]=D3_av;
      VolatBuffer4[4]=D4_av;
Comment("Волатильность. За 5 дн.= "+VolatBuffer5[5]+" За 4 дн.= "+VolatBuffer4[4]+" За 3 дн.= "+VolatBuffer3[3]+" За 2 дн.= "+VolatBuffer2[2]+" Вчера= "+VolatBuffer1[1]+" Сегодня= "+VolatBuffer0[0]);

A linha Coment no indicador, na qual o conteúdo dos amortecedores é inserido, dá um absurdo na tela:

Média para 5 dias - nenhuma volatilidade maior que 194 pips para esses dias e resultados corretos para outros dias.

Coment = " Volatilidade. Por 5 dias = 219.000000 Por 4 dias = 171.0000000 Por 3 dias = 189.00000 Por 2 dias = 187.00000 Ontem = 194.00000 Hoje = 5".

O "Hoje" de dia zero aumenta claramente com a volatilidade do dia atual

Ao chamar estes amortecedores para o Consultor Especialista

int Volat0= iCustom(Symbol(), 1440, "Volat_Average_Gist",0,0);
      int Volat1= iCustom(Symbol(), 1440, "Volat_Average_Gist",1,0);
      int Volat2= iCustom(Symbol(), 1440, "Volat_Average_Gist",2,0);
      int Volat3= iCustom(Symbol(), 1440, "Volat_Average_Gist",3,0);
      int Volat4= iCustom(Symbol(), 1440, "Volat_Average_Gist",4,0);
      int Volat5= iCustom(Symbol(), 1440, "Volat_Average_Gist",5,0);

A linha de impressão do testador produz outro absurdo - não correto, diferente da linha do Comentário, mas semelhante à verdade, o resultado médio de 5 dias e a volatilidade correta do "Dia Zero" de hoje.

O restante dá um número absurdo fixo.

A impressão do testador mostra a Volatilidade em 5 dias=181 Em 4 dias= 2147483647 Em 3 dias= 2147483647 Em 2 dias= 2147483647 Ontem= 2147483647 Hoje= 5

Durante vários dias não consigo entender por que são chamados ao Expert Advisor dados diferentes daqueles contidos nos cinco buffers indicadores, exceto pelo buffer "Dia Zero"?

 

Tente substituir

VolatBuffer1[1]=D1_av;

para

VolatBuffer1[0]=D1_av;

e todos os outros amortecedores também.

 
Roger:

Tente substituir

VolatBuffer1[1]=D1_av;

para

VolatBuffer1[0]=D1_av;

e todos os outros amortecedores também.

Obrigado!

Funcionou. O Expert Advisor começou a receber dados normais.

Além disso, há um efeito interessante - na linha "Comentário" do indicador

apenas 219 por 5 dias permanecerão como estiveram.

Ao mesmo tempo, o Expert Advisor recebe 181 ao invés de 219, como deveria ser.

Coment'' mostra Volatilidade Mais de 5 dias= 219.000000 Mais de 4 dias= 2147483647 Mais de 3 dias= 2147483647 Mais de 2 dias= 2147483647 Ontem= 2147483647 Hoje= 5

 
Roger:

Tente substituir

VolatBuffer1[1]=D1_av;

para

VolatBuffer1[0]=D1_av;

e todos os outros amortecedores também.

Encontrei mais um efeito. Todas as linhas verticais na janela indicadora são desenhadas umas em cima das outras

O maior valor cobre todos os outros. Não é essencial para o Consultor Especialista.

 
Vekker:

Boa tarde.

Alguém pode ajudar?

Escrevi meu primeiro indicador simples - deve contar a volatilidade média dos últimos 2, 3, 4 e 5 dias.

Você pode simplificar consideravelmente as coisas usando o ATR:

iATR(NULL, PERIOD_D1, Number_Of_Days, 1)
 
Roll:
Dois roteiros:

A questão não é mais como escrever o código, mas no nível de uma idéia - é possível evitar vários loops,

o que coloca muita carga sobre o processador. Por exemplo, houve uma idéia para rastrear o número de ordens STOP abertas - se diminuiu em uma, mas a ordem não foi apagada => abrir uma ordem de mercado =>

seu tempo aberto e tipo devem ser colocados em uma matriz. Algo parecido com isto.

Qualquer idéia é bem-vinda.

Obrigado!

 
chief2000:

Você pode simplificar consideravelmente as coisas usando o ATR:



Obrigado! Vou tentar