Hilfe bei der Codierung - Seite 195

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

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

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

Das ist, was ich Ihnen gesagt habe: für eine 3. Farbe (wenn beide Werte in den gleichen Wertebereich fallen) müssen Sie den Code ändern, um eine Option für die 3.

 
mladen:
Hier ist eine Version, die eine Spalte verwendet. Wenn Sie eine dritte Farbe wünschen, müssen Sie eine neue Option hinzufügen

auf einem 2min renko Live-Chart, seine nur 2 grüne Balken an der Spitze und das ist es für alle Paare ich müde es auf, ist es normal?

 
drunkpips:
Auf einem 2-Minuten-Renko-Live-Chart werden nur 2 grüne Balken oben angezeigt, und das war's für alle Paare, auf die ich es angesetzt habe, ist das normal?

Ich verwende keine Renko-Charts.

Es verwendet die eingebauten Indikatoren (iBEarsPower() und iBullsPower()). Wenn es also Probleme damit gibt, dann liegt das Problem bereits bei den eingebauten Indikatoren selbst

 
mladen:
Das ist, was ich Ihnen gesagt habe: für eine 3. Farbe (wenn beide Werte in den gleichen Wertebereich fallen) müssen Sie den Code ändern, um eine Option für die 3.

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

 

mladen,

Ich habe mich mit 'simple mtf' aus Beitrag #1874 beschäftigt und damit herumgespielt.

Hinweis: Es ist ein MA eines MA, und MTF-fähig.

Ich habe einige Fragen:

Egal, was ich mit dem Code mache, ich kann nicht verstehen, was die "returnBars" tut, wenn überhaupt.

1. Was bestimmt, ob die Anzahl der geänderten Balken im Zielzeitrahmen erforderlich ist und warum?

2. Bezüglich dieser Zeile:

returnBars = TimeFrame == "returnBars"; // prüfen, ob die Anzahl der geänderten Balken abgefragt wird

Ich bin kein hochgebildeter Programmierer. Ich kenne diese zusammengesetzte Konstruktion nicht. Ich kenne auch die Regeln zum Mischen von Variablentypen nicht.

Es sieht so aus, als ob die String-Variable Timeframe den Wert der booleschen Variable returnBars erhält.

Dann ordnet sie den Wert returnBars zu - wieder. ??

Da returnBars ein boolescher Wert ist, wird '1' zugewiesen, wenn TimeFrame größer als 0 ist, andernfalls wird '0' zugewiesen?

3. Ich setze den Indikator auf einen höheren TF, und teste live (vorwärts) viele Balken, oder im Strategy-Tester. Ich kann die Zeile, die den Indikator verwendet, eliminieren und erhalte KEINE Änderung der Indikatorzeilen:

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

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

In der Kommentarzeile auf dem Bildschirm wird "returnBars 1" angezeigt.

Ich weiß nicht, woher der Wert "1" kommt.

Ohne den 'if'-Teil wird immer '0' angezeigt.

Gleiche Ergebnisse, wenn man sie in Init() einfügt.

Groß sein

 
Big Be:
mladen,

Ich habe studiert und spielte um mit "einfache mtf" aus Beitrag # 1874.

Hinweis: Es ist ein MA eines MA, und MTF-fähig.

Ich habe einige Fragen:

Egal, was ich mit dem Code mache, ich kann nicht verstehen, was die "returnBars" tut, wenn überhaupt.

1. Was bestimmt, ob die Anzahl der geänderten Balken im Zielzeitrahmen erforderlich ist und warum?

2. Bezüglich dieser Zeile:

returnBars = TimeFrame == "returnBars"; // prüfen, ob die Anzahl der geänderten Balken abgefragt wird

Ich bin kein hochgebildeter Programmierer. Ich kenne diese zusammengesetzte Konstruktion nicht. Ich kenne auch die Regeln zum Mischen von Variablentypen nicht.

Es sieht so aus, als ob die String-Variable Timeframe den Wert der booleschen Variable returnBars erhält.

Dann ordnet sie den Wert returnBars zu - wieder. ??

Da returnBars ein boolescher Wert ist, wird '1' zugewiesen, wenn TimeFrame größer als 0 ist, andernfalls wird '0' zugewiesen?

3. Ich setze den Indikator auf einen höheren TF, und teste live (vorwärts) viele Balken, oder im Strategie-Tester. Ich kann die Zeile, die den Indikator verwendet, eliminieren und erhalte KEINE Änderung der Indikatorzeilen:

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

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

In der Kommentarzeile auf dem Bildschirm wird "returnBars 1" angezeigt.

Ich weiß nicht, woher der Wert "1" kommt.

Ohne den 'if'-Teil wird immer '0' angezeigt.

Gleiche Ergebnisse, wenn man sie in Init() einfügt.

Großes Be

Groß sein

Stellen Sie sich folgendes vor:

1. Sie arbeiten mit einem 15-Minuten-Chart und Ihr Indikator zeigt 1-Stunden-Daten an. Wie viele Balken haben sich seit dem letzten Tick im 15-Minuten-Chart verändert und wie viele im 1-Stunden-Chart? Return bars prüft dies. Diese Zahl muss kein angenommener Wert sein (wählen Sie einen Zeitrahmen, den Sie schon lange nicht mehr besucht haben, und schauen Sie, was passiert, wenn Metatrader beginnt, Daten für diesen Zeitrahmen herunterzuladen - Sie müssen prüfen, wie viele neue Balken heruntergeladen wurden, sonst müssen Sie zwischen den Zeitrahmen hin- und herspringen, um einen genauen Stand der vergangenen Balken eines Indikators mit mehreren Zeitrahmen zu erhalten).

2. Von returnBars = TimeFrame == "returnBars";

Sie haben hier eine Zuweisung (das "=") und einen logischen Vergleich (das "=="). Das bedeutet, dass returnBars das Ergebnis des logischen Vergleichs von zwei Strings (TimeFrame und "returnBars") erhalten soll

3. ReturnBars ist eine Variable vom Typ Boolean. Sie kann zwei Werte annehmen: 0, was "false" entspricht, und 1, was "true" entspricht. Deshalb erhalten Sie 1 für returnBars (d.h. returnBars ist auf "true" gesetzt)

______________

PS: wenn es nach den C/C++ Regeln für Boolesche Werte ginge, dann würde jeder Wert, der anders als 0 ist, als wahr angesehen werden, und Sie können Metatrader-Variablen auf die gleiche Weise testen (zum Beispiel if(someDoubleValue) würde testen, ob someDoubleValue anders als 0 ist), aber Metatrader weist Variablen vom Typ Boolesche Werte 0 und 1 zu

 

Lieber Mladen

ich kann nicht verstehen, wie der Poalln-Indikator neu gezeichnet wird. Ich weiß, dass iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) oder iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) zukünftige Werte bedeuten, aber bei der Berechnung der letzten Bar gibt es keine Daten für i-8.

Ich denke, es wäre Null. Also, wie Pollan repaints?

Am besten,

 
-IXI-:
Lieber Mladen

Ich kann den Punkt nicht bekommen, wie Poalln Indikator repaints. Ich weiß, iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) oder iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) bedeutet zukünftige Werte, aber bei der Berechnung der letzten Bar gibt es keine Daten für i-8.

Ich denke, es wäre Null. Wie färbt Pollan also um?

das Beste,

IXI

Bei einem aktuellen Balken erhält er die Werte 0 für diese Balken. Bei einem ersten vergangenen Balken erhält er 1 Zukunftswert und 7 Nullen. Und so weiter.

Wenn sich neue Balken bilden, erhalten die Balken, die zuvor Nullen als Ergebnisse für zukünftige Werte erhielten, tatsächlich zukünftige Ergebnisse, und dann werden diese Werte entsprechend dieser "neuen" zukünftigen Werte geändert

 

Wie kann ich diesen Indikator für JPY-Paare zum Laufen bringen?

Hallo,

Dieser Indikator macht eine Linie mit jeder runden Zahl und eine Linie 15 Pips auf jeder Seite der runden Zahl.

Aber es funktioniert nicht mit JPY-Paaren.

Was muss geändert werden, damit es funktioniert?

#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:
Hallo!

Dieses Indi macht eine Linie mit jeder runden Zahl und eine Linie 15 Pips auf jeder Seite der runden Zahl.

Aber es funktioniert nicht mit JPY-Paaren.

Was muss geändert werden, damit es funktioniert?

#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,

Warum verwenden Sie nicht einige der Indikatoren wie diesen: https: //www.mql5.com/en/forum/180648/page307 als Grundlage für Ihren Indikator? Das könnte Ihnen etwas Zeit bei der Programmierung sparen.

Grund der Beschwerde: