Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1730

 
anrei2002 #:

As flechas irrelevantes desapareceram imediatamente!!!

Não espero que você entenda, tive um cliente com um problema semelhante, não consegui explicar-lhe durante um ano, havia um indicador diferente, mas também com uma olhada. Ele parece ser um cara esperto, mas aparentemente sua sede de lucro realmente desligou sua lógica e pensamento... Ele acabou percebendo tudo quando esvaziou muito dinheiro. Não sei o que fazer... Se você o reiniciar, o indicador deixará de funcionar. Se o reiniciar, só restam as setas certas, mas na história... Eu vi muitos destes indicadores

 
MakarFX #:
Mostre o que você já fez.
#Descrição da propriedade "Oscilador estocástico".
#propriedade rigorosa

#janela_indicadora de propriedade_separarate_window
#indicador de propriedade_mínimo 0
#indicador de propriedade_máximo 100
#property indicator_buffers 2
#indicador de propriedade_color1 LightSeaGreen
#indicador de propriedade_color2 Vermelho
#indicador de propriedade_nível1 20.0
#indicador de propriedade_nível2 80.0
#indicador de propriedade_nível de cor clrSilver
#indicador de propriedade estilo STYLE_DOT
//--- parâmetros de entrada
input int InpKPeriod=5; // input K Period
input int Período InpDP=3; // input D Período
input int InpSlowing=3; // Abrandamento

cadeia de entrada PARA_Ref = "$USDX";
//input string PARA_Ref = "ETHUSD";


//--- amortecedores
duplo ExtMainBuffer[];
duplo ExtSignalBuffer[];
duplo ExtHighesBuffer[];
duplo ExtLowesBuffer[];

duplo cl[];
duplo oi[];
duplo lo[];



//---
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int OnInit(nulo)
{
nome_curto_de_filtro;
//--- Dois amortecedores adicionais são usados para a contagem.
IndicatorBuffers(4);
SetIndexBuffer(2, ExtHighesBuffer);
SetIndexBuffer(3, ExtLowesBuffer);
//--- linhas indicadoras
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtSignalBuffer);
//--- nome para DataWindow e subwindow do indicador
short_name="Stochastic_Mult_1("+IntegerToString(InpKPeriod)+", "+IntegerToString(InpDPeriod)+", "+IntegerToString(InpSlowing)+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1, "Sinal");
//---
draw_begin1=InpKPeriod+InpSlowing;
draw_begin2=draw_begin1+InpDP período;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//--- Inicialização feita
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Oscilador estocástico |
//+------------------------------------------------------------------+
int OnCalculate(const int taxas_total,
const int prev_calculado,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int i,k,pos,n;

//--- verificar a contagem de barras
if(rates_total<==InpKPeriod+InpDPeriod+InpSlowing)
retorno(0);
//--- contando de 0 a tarifas_total
ArraySetAsSeries(ExtMainBuffer,false);
ArraySetAsSeries(ExtSignalBuffer,false);
ArraySetAsSeries(ExtHighesBuffer,false);
ArraySetAsSeries(ExtLowesBuffer,false);
ArraySetAsSeries(baixo, falso);
ArraySetAsSeries(alto, falso);
ArraySetAsSeries(fechar, falso);

//---
pos=InpKPeriod-1;
if(pos+1<prev_calculated)
pos=prev_calculado-2;
senão
{
for(i=0; i<pos; i++)
{
ExtLowesBuffer[i]=0,0;
ExtHighesBuffer[i]=0,0;
}
}
//--- calcular HighesBuffer[] e ExtHighesBuffer[]
for(i=pos; i<rates_total && !IsStopped(); i++)
{
duplo dmin=1000000.0;
duplo dmax=1000000.0;
for(k=i-InpKPeriod+1; k<=i; k++)
{
n = i-k;
if(dmin>iLow(PARA,0,n)* iLow(PARA_Ref,0,n)) // original: if(dmin>low[k])
dmin=iLow(PARA,0,n)* iLow(PARA_Ref,0,n); // original: dmin=low[k];
if(dmax<iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n)) // original: if(dmax<high[k])
dmax=iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n); // original: dmax=high[k];

}
ExtLowesBuffer[i]=dmin;
ExtHighesBuffer[i]=dmax;
}
//--- Linha %K
pos=InpKPeriod-1+InpSlowing-1;
if(pos+1<prev_calculated)
pos=prev_calculado-2;
senão
{
for(i=0; i<pos; i++)
ExtMainBuffer[i]=0,0;
}
//--- ciclo principal
for(i=pos; i<rates_total && !IsStopped(); i++)
{
soma dupla - 0,0;
soma dupla-alta=0,0;
for(k=(i-InpSlowing+1); k<=i; k++)
{
n = i-k;
sumlow +=((iClose(PARA,0,n) * iClose(PARA_Ref,0,n))-ExtLowesBuffer[k]); // original: sumlow +=(close[k]-ExtLowesBuffer[k]);
sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]));
}
if(sumhigh==0,0)
ExtMainBuffer[i]=100.0;
senão
ExtMainBuffer[i]=sumlow/sumhigh*100.0;
}
//--- sinal
pos=InpDP período-1;
if(pos+1<prev_calculated)
pos=prev_calculado-2;
senão
{
for(i=0; i<pos; i++)
ExtSignalBuffer[i]=0,0;
}
for(i=pos; i<rates_total && !IsStopped(); i++)
{
soma dupla=0,0;
for(k=0; k<Período do PIB; k++)
sum+=ExtMainBuffer[i-k];
ExtSignalBuffer[i]=sum/InpDP período;
}
//--- OnCalculate done. Retornar novo pré_calculado.
retorno(taxas_total);
}
//+------------------------------------------------------------------+
 
Ela pode ser fixada sem perder a lógica, mas desenhará a seta na 8ª barra, ou mesmo na 9ª barra (mas sem redesenhar e sem sinais à esquerda). Você vai precisar assim, ou seja, a nova e mais recente seta estará na 9ª barra. E o atraso de abertura também será de 9 barras.
 
Nikolay Ivanov #:

Não espero que você entenda, eu tinha um cliente com um problema semelhante, não consegui explicar-lhe durante um ano, havia um indicador diferente, mas também com um dispositivo de espreitar. Ele parece ser um cara esperto, mas aparentemente sua sede de lucro realmente desligou sua lógica e pensamento... Ele acabou percebendo tudo quando esvaziou muito dinheiro. Não sei o que fazer... Se você o reiniciar, o indicador deixará de funcionar. Se o reiniciar, só restam as setas certas, mas na história... Eu vi muitos desses indicadores.

Não sou um programador, mas ainda não entendo porque a flecha não pode ser corrigida com o aparecimento de uma nova vela.

O mundo está cheio de indicadores com o re-cruzamento e funciona bem para todos eles! A seta se move junto com o crossover do conjunto e não há oscilação.

Todos eles têm o mesmo código...

Arquivos anexados:
02.png  15 kb
 
asdkika1 #:

Escreva melhor o que você quer fazer...ponto por ponto

 
anrei2002 #:

Não sou um programador, mas ainda não entendo porque a flecha não pode ser corrigida com o aparecimento de uma nova vela?

O mundo está cheio de indicadores com o re-cruzamento e funciona bem para todos eles! A seta se move junto com o crossover do conjunto e não há oscilação.

Todos eles têm o mesmo código.

O redirecionamento normal é quando a barra de sinal (onde está a seta) está envolvida no cálculo do sinal e pode ter o índice 0... Ou seja, a barra atual... É redesenhado a cada tique e, respectivamente, o sinal também pode ser redesenhado...

Mas além da 0ª barra, você usa -1 -2 -3 -4 -5 -6 -7... De onde virá a 8ª barra menos? É má forma de usar até a 0ª barra... e barras com índices de menos é simplesmente inaceitável...

Escrevi acima como consertá-lo... Funcionará bem se você esperar o sinal à direita de 8 barras, então tudo bem, não acha que a seta estará sempre 9 barras atrasada, você quer isso?

 
MakarFX #:

Escreva melhor o que você quer fazer...ponto por ponto

Cálculo do estocástico a partir da multiplicação de dois pares.
Apenas pegou o indicador Stochastic padrão e mudou
dados de entrada (linhas marcadas).
Eu nunca usei OnCalculate - aparentemente é aqui que o cão é enterrado.
Não funciona - não consigo entender o porquê.
Eu esperava não ter que
Espero não ter que redesenhá-lo eu mesmo.
 
Nikolay Ivanov #:

A ultrapassagem normal é quando a própria barra de sinal (onde está a seta) está envolvida no cálculo para o sinal aparecer e pode ter um índice de 0... Essa é a barra atual... É redesenhado a cada tique e, conseqüentemente, o sinal também pode ser redesenhado...

Mas além da 0ª barra, você usa -1 -2 -3 -4 -5 -6 -7... De onde virá a 8ª barra menos? É má forma de usar até a 0ª barra... e barras com índices de menos é simplesmente inaceitável...

Escrevi acima como consertá-lo... Funcionará corretamente se você esperar pelo sinal à direita de 8 barras, então tudo estará bem, não acha que a seta estará sempre 9 barras atrasada, você precisa dela?

Aqui está um exemplo de outro indicador desse tipo!

Ele tem além das setas no gráfico, há círculos na intersecção das linhas no porão.

E os círculos, ao contrário das setas, estão estritamente atrás da interseção das linhas! Não há círculos extras.

Por que não há flechas?

Arquivos anexados:
03.png  98 kb
EATA__Alert.mq4  20 kb
 
anrei2002 #:

Aqui está um exemplo de outro desses indicadores!

Além das setas no gráfico, tem círculos na intersecção das linhas no porão.

E os círculos, ao contrário das setas, estão estritamente atrás da intersecção das linhas! Não há círculos extras.

Por que há algo errado com as setas?

executar este indicador no testador e observar as linhas e os círculos na visualização em velocidade acelerada. Se não faz sentido mesmo depois disso, não sei como explicar de outra forma simplesmente...

 
asdkika1 #:
Cálculo estocástico a partir da multiplicação de dois pares.
Apenas pegou o indicador Stochastic padrão e mudou
dados de entrada (linhas marcadas).
Eu nunca usei OnCalculate - acho que é aqui que reside o problema.
Não funciona - não consigo entender o porquê.
Eu esperava não ter que
Eu esperava não ter que refazê-lo eu mesmo. Deveria ser muito simples.

Multiplicar o quê? Aberto? Fechar? Stoch?

Razão: