[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 647

 
Mathers:

certo.
 
Boa tarde membros do fórum. Encontrei um código interessante para construir uma linha de tendência. E decidi jogar um pouco com ele - que desenharia a linha de tendência não em pontos, mas em porcentagem, mas por alguma razão - depois que minha torre de conclusão parar de desenhar o histórico - apenas as três últimas barras (ou melhor, se você executar a torre, a linha de tendência que ela desenha desde o início normal, mas uma vez que você clica para atualizar a torre -OK propriedades restaura o histórico). O que eu fiz de errado?
Eu desenhei o código abaixo. Alguém pode me dizer qual é o problema - o fragmento que eu coloquei em negrito?
O problema é que o indicador traça o histórico imediatamente para trás e não o reinicia após alterar os parâmetros.
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 1
#indicador de propriedade_color1 LimeGreen

AUD duplo;

perAvr=5,Delta=1;
duplo idx[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,Idx);

//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização do indicador do cliente |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
for(int i=limit; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta) ;

//if (Curency =="AUDUSD")
Idx[i] = AUD;



}

//----

//----
retorno(0);
}
//+------------------------------------------------------------------+
 
Lonely_man:
Boa tarde, membros do fórum. Encontrei um código interessante para construir uma linha de tendência. Decidi brincar um pouco com ele.

Por alguma razão me lembrei de uma anedota: em uma família de um programador, um filho se aproxima de seu pai e pergunta porque o sol nasce no leste e se põe no oeste.

Papai, sem tirar os olhos do computador, será que ele realmente se levanta no leste? -Sim. - E se instala no oeste? - Sim. Então, o quê, todos os dias? - Sim. Bem, não toque em nada se estiver funcionando.

 
Roger:

Por alguma razão me lembrei de uma anedota: em uma família de um programador, um filho se aproxima de seu pai e pergunta porque o sol nasce no leste e se põe no oeste.

Papai, sem tirar os olhos do computador, será que ele realmente se levanta no leste? -Sim. - E se instala no oeste? - Sim. Então, o quê, todos os dias? - Sim. Bem, não é preciso tocar em nada se estiver funcionando.

:))
 
Lonely_man:
Olá usuários do fórum, eu encontrei um código interessante para desenhar a linha de tendência.

Você sabe o que é engraçado - você mudou o código de acordo com seus princípios e quer que uma brigada de estudiosos encontre as falhas

e você apenas tenta produzir as informações que você quer obter no comentário? é possível que tudo funcione, mas você obtém os dados que não são exibidos ao preço atual, mas em algum lugar no final do gráfico - eu acho que são os ventos separados.

SZS boa sorte

 
IgorM:

Você sabe o que é engraçado - você mudou o código de acordo com seus princípios e quer uma brigada de estudiosos para encontrar falhas

e você apenas tenta produzir as informações que você quer obter no comentário? é possível que tudo funcione, mas você obtém os dados que não são exibidos ao preço atual, mas em algum lugar no final do gráfico - eu acho que são os ventos separados.

SZS boa sorte

Eu sei sobre o separador - eu sei, está em uma janela separada, não é sobre isso. Não consigo ver o que acontecerá com este código - aparentemente este método de cálculo não funcionará para porcentagens((.

Imediatamente, por alguma razão eu me lembro de uma piada - o filho de um programador vem até seu pai e pergunta por que o sol nasce no leste e se põe no oeste?

Papai, sem tirar os olhos do computador, será que ele realmente se levanta no leste? -Sim. - E se instala no oeste? - Sim. Então, o quê, todos os dias? - Sim. Bem, não é preciso tocar em nada se estiver funcionando.

))) Só não tenho certeza do que quero fazer. Dica: eu preciso disso para a negociação de moedas cruzadas - seus pips para a variação do dólar de GBP ou JPY não dão informações completas, qual deles caiu no preço em relação ao outro, mas sua variação percentual em relação ao dólar mostra tudo claramente - como uma ferramenta adicional é muito útil.
 
Mathers:
Obrigado. Acho que a única diferença é que a EA é lançada cada vez que um novo tick chega, enquanto o script tem que ser lançado em loop infinito para mantê-lo funcionando?


Não necessariamente. Tudo depende da finalidade do roteiro. Se o objetivo do roteiro é uma corrida única (que é a grande maioria), não há necessidade de se inventar loops infinitos. A necessidade de calcular a quantia de dinheiro a ser aplicada ao mercado ao abrir uma posição com um lote pré-definido pode servir como um exemplo de um roteiro único. Como o preço do lote mínimo é diferente para diferentes instrumentos, é mais fácil abrir o instrumento necessário, aplicar o roteiro a ele, entrar o lote pretendido na janela de parâmetros e ver quanto dinheiro será bloqueado se o comércio for aberto.

Este é apenas um exemplo. O propósito dos roteiros pode ser diferente.

 
Lonely_man:

Estou ciente da separação - eu sei, está em uma janela separada, não se trata disso. Não vejo como este código vai funcionar - aparentemente este método de cálculo de porcentagem não vai funcionar((.

Imediatamente, por alguma razão eu me lembro de uma anedota: um filho de uma família de um programador vem até seu pai e pergunta por que o sol nasce no leste e se põe no oeste?

Papai, sem tirar os olhos do computador, será que ele realmente se levanta no leste? -Sim. - E se instala no oeste? - Sim. Então, o quê, todos os dias? - Sim. Bem, não é preciso tocar em nada se estiver funcionando.

))) A dica: eu preciso dela para o comércio de moedas cruzadas - pips para o dólar por GBP ou JPY não dão informações completas qual deles caiu no preço contra o outro, mas sua mudança percentual em relação ao dólar mostra tudo claramente - como um indicador adicional é uma coisa muito útil.

É um indicador bastante simples. Não vejo como as porcentagens são melhores do que os pips, mas o que quer que seja.

Você cometeu alguns erros, no entanto :)

1.

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

Para calcular corretamente a porcentagem você deve adicionar parênteses.

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

2.


O problema é que o indicador traça o histórico para trás imediatamente e não o reinicia após alterar os parâmetros.

O mais interessante é que ele despertou o interesse esportivo e ficou meia hora sentado no seu indicador.

Por que a história não foi calculada?
A resposta é que você acrescentou uma operação de divisão.

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

O fato de que a função iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE ,i+Delta) retorna 0 logo no início da história não foi levada em conta. E você foi "expulso" com o erro 4013 (ERR_ZERO_DIVIDE) ao tentar dividir por 0, verifique o registro.

Você pode adicionar mais um cheque no FOR loop.

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

E tudo vai ficar bem. Abaixo está minha variante.

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){ 
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+


 

#Indicador de propriedade_color1 Branco

É possível alterar este parâmetro programmaticamente no módulo start(),

ou seja, é possível mudar a cor do buffer à medida que o programa avança?



 
valenok2003:

#Indicador de propriedade_color1 Branco

É possível alterar este parâmetro programmaticamente no módulo start(),

ou seja, é possível mudar a cor do buffer à medida que o programa avança?




Acho que não. E por que deveria ser?