Oi, o problema provavelmente não é a travessia zero, mas a travessia de um buffer para outro. Em uma barra o sinal termina e na barra seguinte o sinal já está em outro buffer, que cor você gostaria de ver entre as duas barras adjacentes? Não está claro.
Se você quiser fazer um terceiro tampão com uma linha amarela e colocá-lo sob estes dois, seria lindo!
Oi, o problema provavelmente não é a travessia zero, mas a travessia de um buffer para outro. Em uma barra o sinal termina e na barra seguinte o sinal já está em outro buffer, que cor você gostaria de ver entre as duas barras adjacentes? Não está claro.
Se você quiser, faça um terceiro tampão com uma linha amarela e coloque-o sob estes dois, será lindo!
Alexey, obrigado pela ajuda.
Eu não preciso de três cores, duas é suficiente. Eu gostaria que os espaços vazios fossem desenhados com uma linha da cor anterior. Não entendo o que você quer dizer com "Em uma barra o sinal acabou, e na barra seguinte o sinal está em um buffer diferente". Em cada barra, há um valor em um dos amortecedores, então ele também deve ser exibido no gráfico, ou está faltando algo?
Bem visto, o tempo é discreto no gráfico, a unidade mínima é 1 barra. Ou seja, não há tempo parcial entre barras, por assim dizer. Se você substituir a renderização por um gráfico de barras, você tem duas barras - duas barras de cores diferentes. Mas não há nada entre eles. E a linha é traçada de tal forma (tal propriedade é feita) que conecta valores do mesmo tampão, mas não valores diferentes. É por isso que existem buracos.
Se você o quer pela beleza, então você pode tentar dar os valores finais sobrepostos em ambos os amortecedores. Você sinaliza para o novo buffer, mas ainda sinaliza para a barra antiga.
Mas se você então levar o sinal de tal indicador para o Expert Advisor, ele será impreciso.
Ou um histograma é uma boa opção sem nenhum incômodo extra. Voto a favor do gráfico de barras.
Eu não preciso de três cores, duas é suficiente. Eu gostaria que os espaços vazios fossem desenhados com uma linha da cor anterior. Não entendo o que você quer dizer com "Em um bar o sinal termina, e no bar seguinte o sinal já está em outro buffer". Em cada barra, há um valor em um dos amortecedores, isso significa que ele deve ser exibido no gráfico, ou está faltando algo?
deixar um buffer sem condições e sobrepor o segundo com condições sobre o primeiro
#property strict#property indicator_separate_window#property indicator_buffers2#property indicator_color1clrGreen#property indicator_color2clrRed//---- input parametersexternint FastEMA=12;
externint SlowEMA=26;
externint Signal=9;
//---- buffersdouble DiffBuffer_up[];
double DiffBuffer_dn[];
//double MainBuffer[];
double SignalBuffer[];
ENUM_TIMEFRAMES TimeFrame;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
int draw_begin=MathMax(FastEMA,SlowEMA);
string short_name="MACD Stephen";
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,DiffBuffer_up);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,DiffBuffer_dn);
short_name=StringConcatenate(short_name," ("+(string)FastEMA+","+(string)SlowEMA+","+(string)Signal+")");
IndicatorShortName(short_name);
SetIndexDrawBegin(0,draw_begin);
SetIndexDrawBegin(1,draw_begin);
SetIndexLabel(0,"Up");
SetIndexLabel(1,"Down");
IndicatorDigits(6);
SetLevelValue(0,0);
TimeFrame=GetTF();
return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int limit, iChart, iTF, delta=0;
datetime TimeArray[];
//if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());int counted_bars=IndicatorCounted();
//---- check for possible errorsif(counted_bars<0) return(-1);
//---- the last counted bar will be recountedif(counted_bars>0) counted_bars--;
limit=Bars-counted_bars+delta;
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
ArraySetAsSeries(MainBuffer,true);
ArraySetAsSeries(SignalBuffer,true);
ArrayResize(MainBuffer, 100000);
ArrayResize(SignalBuffer,100000);
iTF=0;
for(iChart=0; iChart<limit; iChart++)
{
while(Time[iChart]<TimeArray[iTF]) iTF++;
MainBuffer[iChart]=EMPTY_VALUE;
SignalBuffer[iChart]=EMPTY_VALUE;
MainBuffer[iChart] =iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,iTF);
SignalBuffer[iChart]=iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,iTF);
double diff=MainBuffer[iChart]-SignalBuffer[iChart];
DiffBuffer_up[iChart]=diff;
if (diff>0) //{
DiffBuffer_dn[iChart]=diff;
//DiffBuffer_dn[iChart]=EMPTY_VALUE;//}//else {//DiffBuffer_up[iChart]=EMPTY_VALUE;//}
}
return(0);
}
Bem visto, o tempo é discreto no gráfico, a unidade mínima é 1 barra. Ou seja, não há tempo parcial entre barras, por assim dizer. Se você substituir a renderização por um gráfico de barras, você tem duas barras - duas barras de cores diferentes. Mas não há nada entre eles. E a linha é traçada de tal forma (tal propriedade é feita) que conecta valores do mesmo tampão, mas não valores diferentes. É por isso que existem buracos.
Se você o quer pela beleza, então você pode tentar dar os valores finais sobrepostos em ambos os amortecedores. Você sinaliza para o novo buffer, mas ainda sinaliza para a barra antiga.
Mas se você então levar o sinal de tal indicador para o Expert Advisor, ele será impreciso.
Ou um histograma é uma boa opção sem nenhum incômodo extra. Voto a favor do gráfico de barras.
Muito obrigado, Alexey.
Agora até minha cabeça está toda arrumada. Eu mesmo poderia ter feito isso, mas não tão curto e elegante como o conselho subseqüente de Yuri.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Oi, o problema provavelmente não é a travessia zero, mas a travessia de um buffer para outro. Em uma barra o sinal termina e na barra seguinte o sinal já está em outro buffer, que cor você gostaria de ver entre as duas barras adjacentes? Não está claro.
Se você quiser fazer um terceiro tampão com uma linha amarela e colocá-lo sob estes dois, seria lindo!
Oi, o problema provavelmente não é a travessia zero, mas a travessia de um buffer para outro. Em uma barra o sinal termina e na barra seguinte o sinal já está em outro buffer, que cor você gostaria de ver entre as duas barras adjacentes? Não está claro.
Se você quiser, faça um terceiro tampão com uma linha amarela e coloque-o sob estes dois, será lindo!
Alexey, obrigado pela ajuda.
Eu não preciso de três cores, duas é suficiente. Eu gostaria que os espaços vazios fossem desenhados com uma linha da cor anterior. Não entendo o que você quer dizer com "Em uma barra o sinal acabou, e na barra seguinte o sinal está em um buffer diferente". Em cada barra, há um valor em um dos amortecedores, então ele também deve ser exibido no gráfico, ou está faltando algo?
Bem visto, o tempo é discreto no gráfico, a unidade mínima é 1 barra. Ou seja, não há tempo parcial entre barras, por assim dizer. Se você substituir a renderização por um gráfico de barras, você tem duas barras - duas barras de cores diferentes. Mas não há nada entre eles. E a linha é traçada de tal forma (tal propriedade é feita) que conecta valores do mesmo tampão, mas não valores diferentes. É por isso que existem buracos.
Se você o quer pela beleza, então você pode tentar dar os valores finais sobrepostos em ambos os amortecedores. Você sinaliza para o novo buffer, mas ainda sinaliza para a barra antiga.
Mas se você então levar o sinal de tal indicador para o Expert Advisor, ele será impreciso.
Ou um histograma é uma boa opção sem nenhum incômodo extra. Voto a favor do gráfico de barras.
Alexei, obrigado por sua ajuda.
Eu não preciso de três cores, duas é suficiente. Eu gostaria que os espaços vazios fossem desenhados com uma linha da cor anterior. Não entendo o que você quer dizer com "Em um bar o sinal termina, e no bar seguinte o sinal já está em outro buffer". Em cada barra, há um valor em um dos amortecedores, isso significa que ele deve ser exibido no gráfico, ou está faltando algo?
deixar um buffer sem condições e sobrepor o segundo com condições sobre o primeiro
Bem visto, o tempo é discreto no gráfico, a unidade mínima é 1 barra. Ou seja, não há tempo parcial entre barras, por assim dizer. Se você substituir a renderização por um gráfico de barras, você tem duas barras - duas barras de cores diferentes. Mas não há nada entre eles. E a linha é traçada de tal forma (tal propriedade é feita) que conecta valores do mesmo tampão, mas não valores diferentes. É por isso que existem buracos.
Se você o quer pela beleza, então você pode tentar dar os valores finais sobrepostos em ambos os amortecedores. Você sinaliza para o novo buffer, mas ainda sinaliza para a barra antiga.
Mas se você então levar o sinal de tal indicador para o Expert Advisor, ele será impreciso.
Ou um histograma é uma boa opção sem nenhum incômodo extra. Voto a favor do gráfico de barras.
Muito obrigado, Alexey.
Agora até minha cabeça está toda arrumada. Eu mesmo poderia ter feito isso, mas não tão curto e elegante como o conselho subseqüente de Yuri.
deixar um tampão incondicional, e sobrepor o segundo com condições no primeiro
Tire o chapéu para você, Yuri.
Uma solução tão elegante e concisa que eu não poderia ter imaginado.
Tire o chapéu para você, Yuri.
Eu não poderia ter imaginado uma solução tão elegante e concisa.
não foi idéia minha, aqui no fórum, assim como você descobriu
que existem muitas soluções na base de código, e não apenas que
Obrigado pelo agradecimento!
Por que minhas perguntas continuam sendo ignoradas?
depende das perguntas...