Ayuda a la codificación - página 195

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

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

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

Eso es lo que te dije : para un 3er color (cuando ambos valores están cayendo en te mismo rango de valores) tienes que modificar el código para añadir una opción para el 3er color

 
mladen:
Aquí hay una versión que utiliza una columna. Si desea un tercer color, tiene que añadir una nueva opción

en un gráfico de 2min renko live, es sólo 2 barras verdes en la parte superior y eso es todo para todos los pares me cansado en, ¿es normal?

 
drunkpips:
en un gráfico renko de 2min, sólo hay 2 barras verdes en la parte superior y eso es todo para todos los pares en los que lo he usado, ¿es normal?

No uso gráficos renko

Está utilizando los indicadores incorporados (iBEarsPower() y iBullsPower()) así que si hay algún problema con él, el problema ya está en los indicadores incorporados

 
mladen:
Eso es lo que te dije : para un 3er color (cuando ambos valores están cayendo en te mismo rango de valores) tienes que modificar el código para añadir una opción para el 3er color

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

 

mladen,

He estudiado y jugado con 'simple mtf' del post #1874.

Nota: Es un MA de un MA, y MTF capaz.

Tengo algunas preguntas:

No importa lo que haga con el código, no puedo entender lo que hace el 'returnBars', si es que hace algo.

1. ¿Qué determina si se requiere el número de barras cambiadas en el marco de tiempo objetivo y por qué?

2. Con respecto a esta línea:

returnBars = TimeFrame == "returnBars"; // comprobar si se pide el número de barras cambiadas

No soy un programador muy instruido. No conozco esta construcción compuesta. Tampoco conozco las reglas para mezclar tipos de variables.

Parece que la variable de cadena Timeframe está obteniendo el valor del booleano returnBars.

Luego está asignando el valor a returnBars - de nuevo. ??

Como returnBars es booleana, asigna '1' si TimeFrame es mayor que 0, si no, asigna '0' ?

3. Pongo el indicador en un TF mayor, y pruebo en vivo (hacia adelante) muchas barras, o en el probador de estrategias. Puedo eliminar la línea que lo utiliza, y no obtengo ningún cambio en las líneas del indicador:

if (returnBars) Comment("returnBars ",returnBars, " Tick ",Volume(0));

// si (returnBars) { ma1[0] = limit+1; return(0); }

La línea de comentarios en pantalla mostrará "returnBars 1".

No sé de dónde saca el valor '1'.

Sin la parte 'if', siempre muestra '0'.

Los mismos resultados si se pone en Init().

Gran Ser

 
Big Be:
mladen,

He estudiado y jugado con 'simple mtf' del post #1874.

Nota: Es un MA de un MA, y MTF capaz.

Tengo algunas preguntas:

No importa lo que haga con el código, no puedo entender lo que hace el 'returnBars', si es que hace algo.

1. ¿Qué determina si se requiere el número de barras cambiadas en el marco de tiempo objetivo y por qué?

2. Con respecto a esta línea:

returnBars = TimeFrame == "returnBars"; // comprobar si se pide el número de barras cambiadas

No soy un programador muy instruido. No conozco esta construcción compuesta. Tampoco conozco las reglas para mezclar tipos de variables.

Parece que la variable de cadena Timeframe está obteniendo el valor del booleano returnBars.

Luego está asignando el valor a returnBars - de nuevo. ??

Como returnBars es booleana, asigna '1' si TimeFrame es mayor que 0, si no, asigna '0' ?

3. Pongo el indicador en un TF mayor, y pruebo en vivo (hacia adelante) muchas barras, o en el probador de estrategias. Puedo eliminar la línea que lo utiliza, y no obtengo ningún cambio en las líneas del indicador:

if (returnBars) Comment("returnBars ",returnBars, " Tick ",Volume(0));

// si (returnBars) { ma1[0] = limit+1; return(0); }

La línea de comentarios en pantalla mostrará "returnBars 1".

No sé de dónde saca el valor '1'.

Sin la parte 'if', siempre muestra '0'.

Los mismos resultados si se pone en Init().

Big Be

Big Be

Imagina esto :

1. Usted está trabajando en un gráfico de 15 minutos y su indicador está mostrando datos de 1 hora. ¿Cuántas barras han cambiado en el último tick en el gráfico de 15 minutos y cuántas en el de 1 hora? El número de barras de retorno lo comprueba. Ese número no tiene que ser un valor asumido (elija un marco de tiempo que no haya visitado desde sus gráficos durante mucho tiempo y vea lo que sucederá cuando Metatrader comience a descargar datos para ese marco de tiempo - debe comprobar cuántas barras nuevas se han descargado o de lo contrario tendrá que saltar hacia atrás y adelante a través de los marcos de tiempo con el fin de tener un estado preciso para las barras pasadas de un indicador de múltiples marcos de tiempo)

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

Usted tiene una asignación allí (el "=") y una comparación lógica allí (el "==") Eso significa que returnBars debe recibir el resultado de la comparación lógica de dos cadenas (TimeFrame y "returnBars")

3. ReturnBars es una variable de tipo booleano. Puede tener dos valores: 0 que equivale a "falso" y 1 que equivale a "verdadero". Por eso se obtiene 1 para returnBars (lo que significa que returnBars se establece en "true")

______________

PD: si fuera por las reglas de C/C++ para booleanos, entonces cualquier valor diferente de 0 se consideraría verdadero, y puedes probar las variables de metatrader de la misma manera (por ejemplo if(someDoubleValue) probaría si someDoubleValue es diferente de 0), pero metatrader asigna 0 y 1 a unas variables de tipo booleano

 

Estimado Mladen

No puedo conseguir el punto de cómo Poalln indicador repinta. Sé que iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) o iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) significa valores futuros, sin embargo al calcular la última barra no hay datos para i-8.

Creo que sería cero. Entonces, ¿cómo Pollan repinta?

Mejor,

 
-IXI-:
Estimado Mladen

No puedo conseguir el punto de cómo Poalln indicador repinta. Sé que iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) o iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) significa valores futuros, sin embargo al calcular la última barra no hay datos para i-8.

Creo que sería cero. Entonces, ¿cómo repinta Pollan?

Lo mejor,

IXI

En una barra actual obtiene valores 0 para esas barras. En una primera barra pasada obtiene 1 valor futuro y 7 ceros. Y así sucesivamente.

A medida que se forman nuevas barras, las barras que estaban recibiendo ceros para los resultados de los valores futuros en realidad están recibiendo resultados futuros reales y luego esos valores se cambian de acuerdo con esos "nuevos" valores futuros

 

¿Cómo puedo hacer que este indicador funcione en los pares JPY?

Hola,

Este indi hace una línea con cada número redondo y una línea de 15 pips a cada lado del número redondo.

Pero no funciona con los pares JPY.

¿Qué hay que cambiar para que 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:
Hola,

Este indi hace una línea con cada número redondo y una línea de 15 pips a cada lado del número redondo.

Pero no funciona con los pares JPY.

¿Qué hay que cambiar para que esto 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 qué no usas algunos de los indicadores como este : https://www.mql5.com/en/forum/180648/page307 como base para tu indicador? Podría ahorrarte algo de tiempo de codificación