[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 753

 
Morzh09:

Bitte teilen Sie uns mit, wo der Haken ist:

1) Ich fülle ein zweidimensionales Array mit dem Zeitpunkt der Bildung des ZigZag-Extremums und dem Extremumwert selbst.

2) Füllen des zweiten Feldes mit Einsen oder Zweien, je nachdem, ob das einem bestimmten Element entsprechende Extremum ein lokales Maximum oder Minimum ist.

3) Ich gebe die Ergebnisse über Alert aus.

aber an einer Stelle, an der 1 oder 2 gedruckt werden sollte, werden immer Nullen gedruckt.

Wo ist der Haken?!?

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+


string TimeSave1[100][2], TimeSave2[100][2];

double A[], B[];

double Number_of_extremum[];

extern string Currency = "EURUSD";


+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//----

int k;

k=0;

double date;

int status;

for(int shift = 0; shift <= Bars-1; shift++)

{

date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);

//----------------------------------------------------

if(date > 0)

{

TimeSave1[k][0]=TimeToStr(Time[shift]);

TimeSave1[k][1]=date;

k++;

}

}

//====================================================

for (int u=1;u<=k;u++)

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}

//====================================================

for (int j=1;j<10;j++)

{

Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);

}

//----

return(0);

}

//+------------------------------------------------------------------+

Und noch eine Klarstellung:

wie man Daten und Zeiten in mql vergleicht (z. B. muss ich feststellen, welcher Scheitelpunkt von ZZ früher entstanden ist - dazu muss ich die Zeit ihrer Entstehung vergleichen...)

datetime ist im Wesentlichen int, es enthält die Anzahl der Sekunden, beginnend mit 1970 und endend mit der Barzeit. Ich prüfe auf mehr/weniger - es funktioniert...
Ich habe mir den Rest nicht angesehen - bin gerade erst gekommen...
 

Freunde, eine Frage:


Mit diesem Problem konfrontiert:

gibt der Indikator einige Informationen über Alert aus.

Aber allmählich sammelt sich im Ausgabefeld von Alert zu viel "Mist" an...

Wenn ich den Indikator erneut starte, ist es dann möglich, alle alten Einträge in Alert zu löschen?


Vielen Dank im Voraus.

P.S.

Bitte kommentieren Sie meinen früheren Beitrag (warum Nullwerte anstelle von 1 und 2 angezeigt werden)

 

Ich habe es nicht im Forum gefunden...

Frage - ist es möglich, den Kommentar zur Bestellung zu ändern? Nun, bei der OrderSend()- Operation setze ich in den Kommentar den Wert "OrderNotModify", und wenn ich weitere Aktionen mit dieser Bestellung durchführe, zum Beispiel das teilweise Schließen, ändere ich OrderComment in "OrderIsModify"... oder nicht?

 
Morzh09:

Können Sie mir sagen, wo der Haken ist?

Array wird von 0 an gefüllt, aber hier wird der 0. Index übersprungen, und wir füllen vom 1. und

for (int u=1;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // выражение при старте всегда [1][1]<=[0][1]

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}
 
Abzasc:

Das Array wird von 0 an gefüllt, aber hier wird der 0te Index übersprungen und vom 1ten an gefüllt, und

Ich verstehe Ihren Kommentar nicht ganz.

1) k ist - zu Beginn - nicht Null! k = die Anzahl der ZigZag-Scheitelpunkte, die wir in einer bestimmten Tiefe der Geschichte entdeckt haben!

2) "so, it always work [1][1]>=[0][1]" - warum funktioniert es immer? wenn das vorherige Element des TimeSave1-Arrays > das nächste Element ist, funktioniert es nicht.

wiederholen Sie bitte, was Sie sagen wollten.

 
Morzh09:

Ich habe Ihren Kommentar nicht ganz verstanden.

1) k ist - zu Beginn - nicht gleich Null! k = die Anzahl der ZigZag-Scheitelpunkte, die wir in einer bestimmten Tiefe der Geschichte entdeckt haben!

2) "so, it always work [1][1]>=[0][1]" - warum funktioniert es immer? wenn das vorherige Element des TimeSave1-Arrays > das nächste Element ist, wird es nicht funktionieren.

Bitte sagen Sie mir noch einmal, was Sie sagen wollen.

Ich verstehe k. Das ist es, was ich nicht verstehe.

for (int u=1;u<=k;u++) // на первом шаге счетчик присваивает u = 1

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете

{

im rechten Teil

 
Michelangelo:

Ist es möglich, den Bestellkommentar zu ändern?

Nur in OrderModify Ticket Preis Stoploss Gewinnmitnahme Ablauf Pfeil_Farbe

Sieht nicht so aus.

 

Also... es sieht so aus, als ob es die Hitze ist... Und es wirkt sich auch auf meinen Compiler aus :)

Sehen Sie, ich muss ein Array durchlaufen, das das Datum der Bildung des Max/Min des ZigZ und den Wert dieses Max/Min aufzeichnet.

Ich muss nämlich verstehen, welcher Scheitelpunkt von ZZ ein Minimum und welcher ein Maximum ist.

Dazu vergleiche ich den nächsthöheren Punkt von ZZ mit dem vorherigen.

Wenn die aufeinanderfolgende Spitze größer ist, handelt es sich um eine Spitze.

Wenn sie kleiner ist, handelt es sich um eine Mulde.

Je nachdem, ob es sich um einen Scheitelpunkt oder eine Mulde handelt, fügen wir 1 bzw. 2 zu einem Element eines anderen Arrays hinzu.

Ich bin neugierig darauf, WO es einen Fehler geben könnte!!!!

Dateien:
 
Ich werde hier mit Bögen gehen - ich habe meinen Taschenrechner trotzdem kaputt gemacht... :)
Ich möchte in der Lage sein, die Fiba-Werte auf der Grundlage von zwei bekannten Werten zu berechnen:
Das Fib-Null-Niveau entspricht 1,2807, das Niveau 23,6 entspricht 1,2838.

Wir müssen die anderen Niveaus 38,2, 50,0, 61,5 und 100,0 und die ihnen entsprechenden Preise finden.

Ich konnte nicht einmal eine Verbindung zwischen 1,2807 und 1,2838 finden, um die Prinzipien der
um alle anderen Werte zu finden.

Bitte, sagt mir, dass jemand ... :)

 
IgorM:
Hat jemand den Indikator, um zu sehen, die Zeit der Bar Eröffnung in einem niedrigen TF, nicht, wie viel Zeit ist interessant, und zu zeichnen, die Marken auf dem Chart, wo die Bar begann und wo es endete
#property indicator_chart_window
#property link      "IgorM"

extern int num    = 10;
extern color line = White;
int init()
{return(0);
}
  
void clear(){
   for(int i=ObjectsTotal()-1; i>=0;i--) {
      string name = ObjectName(i);
      if (StringFind(name,"timeH1_") !=-1) ObjectDelete(name);
    }
}

int deinit(){
clear();
return(0);
}

int start()
{   
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)   return(-1);
   clear();
   for (int i=0;i<=num;i++){ 
      string name = "timeH1_"+TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
      ObjectCreate(name,OBJ_VLINE,0,iTime(NULL,PERIOD_H1,i),0);
      ObjectSet(name,OBJPROP_COLOR,line);
      ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
    }
return(0);
}

Ich denke schon. Der Code ist nicht optimiert, aber er zeichnet, was ich gerne sehen würde.