Ajuda na codificação - página 195

 
shtopr:
спасибо за ответ.

проверил h1, m30, m15, m5, m1

по-_прежнему работает только один цвет, красный.

Foi o que eu lhe disse: para uma 3ª cor (quando ambos os valores estão caindo na mesma faixa de valores) você precisa modificar o código para adicionar uma opção para a 3ª cor.

 
mladen:
Aqui está uma versão que usa uma coluna. Se você desejar uma terceira cor, você precisa adicionar uma nova opção

em uma carta ao vivo de 2min renko, são apenas 2 barras verdes no topo e isso é para todos os pares que eu cansei, é normal?

 
drunkpips:
em uma carta ao vivo de 2min renko, são apenas 2 barras verdes no topo e isso é para todos os pares que eu cansei, é normal?

Eu não uso gráficos de renko

Ele está usando os indicadores embutidos (iBEarsPower() e iBullsPower()), portanto, se alguns problemas estão com ele, então o problema já está com os próprios indicadores embutidos

 
mladen:
Foi o que eu lhe disse: para uma 3ª cor (quando ambos os valores estão caindo na mesma faixa de valores) você precisa modificar o código para adicionar uma opção para a 3ª cor

Ок. Спасибо!!

 

mladen,

Estudei e brinquei com 'mtf simples' do correio #1874.

Nota: É um MA de um MA, e MTF capaz.

Eu tenho algumas perguntas:

Não importa o que eu faça com o código, eu não consigo entender o que as 'barras de retorno' fazem, se alguma coisa.

1. O que determina se o número de barras trocadas no período de tempo alvo é necessário e por quê?

2. Em relação a esta linha:

returnBars = TimeFrame == "returnBars"; // verificar se o número de barras trocadas é solicitado

Eu não sou um programador altamente capacitado. Eu não conheço esta construção composta. Também não conheço as regras para misturar os tipos de variáveis.

Parece que a variável string Timeframe está recebendo o valor das barras de retorno booleanas.

Depois está atribuindo o valor a returnBars - novamente. ??

Como returnBars é booleano, atribua '1' se o TimeFrame for maior que 0, ou então atribua '0' ?

3. Eu defino o indicador para um TF superior, e testei ao vivo (para frente) muitas barras, ou no testador de estratégia. Posso eliminar a linha que a usa, e NÃO obter nenhuma mudança nas linhas indicadoras:

if (returnBars) Comentário("returnBars ",returnBars ",Tick ",Volume(0));

// if (returnBars) { ma1[0] = limite+1; return(0); }

A linha de comentário na tela mostrará "returnBars 1".

Eu não sei onde obtém o valor '1'.

Sem a parte "se", ela sempre mostra "0".

Os mesmos resultados se colocado no Init().

Grande Seja

 
Big Be:
mladen,

Estudei e brinquei com 'mtf simples' do correio #1874.

Nota: É um MA de um MA, e MTF capaz.

Eu tenho algumas perguntas:

Não importa o que eu faça com o código, eu não consigo entender o que as 'barras de retorno' fazem, se alguma coisa.

1. O que determina se o número de barras trocadas no período de tempo alvo é necessário e por quê?

2. Em relação a esta linha:

returnBars = TimeFrame == "returnBars"; // verificar se o número de barras trocadas é solicitado

Eu não sou um programador altamente capacitado. Eu não conheço esta construção composta. Também não conheço as regras para misturar os tipos de variáveis.

Parece que a variável string Timeframe está obtendo o valor das barras de retorno booleanas.

Depois está atribuindo o valor a returnBars - novamente. ??

Como returnBars é booleano, atribua '1' se o TimeFrame for maior que 0, ou então atribua '0' ?

3. Eu defino o indicador para um TF superior, e testei ao vivo (para frente) muitas barras, ou no testador de estratégia. Posso eliminar a linha que a usa, e NÃO obter nenhuma mudança nas linhas indicadoras:

if (returnBars) Comentário("returnBars ",returnBars ",Tick ",Volume(0));

// if (returnBars) { ma1[0] = limite+1; return(0); }

A linha de comentário na tela mostrará "returnBars 1".

Eu não sei onde obtém o valor '1'.

Sem a parte "se", ela sempre mostra "0".

Os mesmos resultados se colocado no Init().

Grande Seja

Grande Seja

Imagine isto :

1. Você está trabalhando em um gráfico de 15 minutos e seu indicador está mostrando dados de 1 hora. Quantas barras mudaram no último tick no gráfico de 15 minutos e quantas no gráfico de 1 hora? As barras de retorno estão verificando isso. Esse número não precisa ser nenhum valor assumido (escolha um intervalo de tempo que você não tenha visitado em seus gráficos por muito tempo e veja o que acontecerá quando o metatrader começar a baixar dados para esse intervalo de tempo - você deve verificar quantas barras novas foram baixadas ou então você terá que pular para frente e para trás através dos intervalos de tempo a fim de ter um estado preciso para barras passadas de um indicador de intervalo de tempo múltiplo)

2. De returnBars = TimeFrame == "returnBars";

Você tem uma atribuição ali (o "=") e uma comparação lógica ali (o "==") Isso significa que returnBars deve receber o resultado da comparação lógica de duas cadeias (TimeFrame e "returnBars")

3. As barras de retorno são uma variável do tipo booleano. Pode ter dois valores: 0 que equivale a "falso" e 1 que equivale a "verdadeiro". É por isso que você está recebendo 1 para returnBars (que significa que returnBars é definido como "verdadeiro").

______________

PS: se fosse para regras C/C++ para booleano, então qualquer valor diferente de 0 seria considerado verdadeiro, e você pode testar variáveis metatrader da mesma forma (por exemplo, se(someDoubleValue) testaria se algumDoubleValue é diferente de 0), mas metatrader atribui 0 e 1 a uma variável do tipo booleano

 

Prezado Mladen

Não consigo entender como o indicador Poalln pinta de novo. Eu sei que iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) ou iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) significa valores futuros, entretanto, ao calcular a última barra não há dados para i-8.

Seria zero, penso eu. Então, como a Pollan pinta novamente?

Da melhor maneira,

 
-IXI-:
Prezado Mladen

Não consigo entender como o indicador Poalln pinta de novo. Eu sei que iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) ou iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) significa valores futuros, entretanto, ao calcular a última barra não há dados para i-8.

Seria zero, penso eu. Então, como a Pollan pinta novamente?

O melhor,

IXI

Em uma barra atual, obtém valores 0 para essas barras. Em uma primeira barra passada, recebe 1 valor futuro e 7 zeros. E assim por diante.

Como forma de novas barras, as barras que estavam recebendo zeros para resultados de valores futuros estão realmente recebendo resultados futuros reais e então esses valores são mudados de acordo com esses "novos" valores futuros.

 

Como posso fazer com que este indicador funcione em pares JPY

Hi,

Este índio faz uma linha com cada número redondo e uma linha 15 pips em cada lado do número redondo.

Mas não funciona com pares JPY.

O que precisa ser mudado para que isto funcione?

#property indicator_chart_window

extern color UpperLineColor = Red;

extern color MainLineColor = Red;

extern color LowerLineColor = Red;

extern double HighOffset = 150;

extern double LowOffset = 150;

extern int LineStyle = 2;

extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";

double LineSpaceOld;

double Hoch;

double Tief;

bool FirstRun = true;

double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)

string LineText = "RoundNr ";

string LineText1 = "RoundNr1 ";

string LineText2 = "RoundNr2 ";

int deinit()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

ObjectDelete(LineText+DoubleToStr(i,2));

ObjectDelete(LineText1+DoubleToStr(i,2));

ObjectDelete(LineText2+DoubleToStr(i,2));

}

return(0);

}

int start()

{

if(FirstRun)

{

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

FirstRun = false;

}

else if(LineSpace != LineSpaceOld)

{

deinit();

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

}

DrawLines();

LineSpaceOld = LineSpace;

return(0);

}

void DrawLines()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

string StringNr = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

else // Adjustments

{

ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

else // Adjustments

{

ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

else // Adjustments

{

ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

}

WindowRedraw();

}
 
Georgebaker:
Hi,

Este índio faz uma linha com cada número redondo e uma linha 15 pips em cada lado do número redondo.

Mas não funciona com pares JPY.

O que precisa ser mudado para que isto funcione?

#property indicator_chart_window

extern color UpperLineColor = Red;

extern color MainLineColor = Red;

extern color LowerLineColor = Red;

extern double HighOffset = 150;

extern double LowOffset = 150;

extern int LineStyle = 2;

extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";

double LineSpaceOld;

double Hoch;

double Tief;

bool FirstRun = true;

double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)

string LineText = "RoundNr ";

string LineText1 = "RoundNr1 ";

string LineText2 = "RoundNr2 ";

int deinit()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

ObjectDelete(LineText+DoubleToStr(i,2));

ObjectDelete(LineText1+DoubleToStr(i,2));

ObjectDelete(LineText2+DoubleToStr(i,2));

}

return(0);

}

int start()

{

if(FirstRun)

{

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

FirstRun = false;

}

else if(LineSpace != LineSpaceOld)

{

deinit();

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

}

DrawLines();

LineSpaceOld = LineSpace;

return(0);

}

void DrawLines()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

string StringNr = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

else // Adjustments

{

ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

else // Adjustments

{

ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

else // Adjustments

{

ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

}

WindowRedraw();

}

Georgebaker,

Por que você não usa alguns dos indicadores como este: https: //www.mql5.com/en/forum/180648/page307 como base para seu indicador? Isso pode lhe poupar algum tempo de codificação.

Razão: