Es ist mir gelungen, Ihre Situation zu simulieren. Dieses Verhalten ist das Ergebnis der Verwendung eines anderen Skripts nach KeyFinder 2.0. Ich habe noch nicht herausgefunden, wie man dieses Problem auf Code-Ebene lösen kann. In Bezug auf die Verwendung - wenden Sie KeyFinder 2.0 erneut an und die Schaltfläche wird wieder "funktionieren".
Vielleicht ist es sinnvoller, das Programm als Indikator zu gestalten und den Bildschirm zu löschen, wenn der Indikator aus dem Diagramm entfernt wird?
komposter:
Vielleicht wäre es sinnvoller, das Programm als Indikator zu erstellen und den Bildschirm zu löschen, wenn der Indikator aus dem Diagramm entfernt wird?
Ich arbeite gerade an einem Indikator. Das Skript ist ein "Test für meinen Stift".
Vielleicht wäre es sinnvoller, das Programm als Indikator zu erstellen und den Bildschirm zu löschen, wenn der Indikator aus dem Diagramm entfernt wird?
Rubick:
Es ist mir gelungen, Ihre Situation zu simulieren. Dieses Verhalten ist das Ergebnis der Verwendung eines anderen Skripts nach KeyFinder 2.0. Ich habe noch nicht herausgefunden, wie man dieses Problem auf Code-Ebene lösen kann. In Bezug auf die Verwendung - wenden Sie KeyFinder 2.0 erneut an und die Schaltfläche wird wieder "funktionieren".
Ich habe versucht, die auf dem Bildschirm festsitzende Schaltfläche auf alle möglichen Arten zu umgehen. Am einfachsten ist es, das Währungspaar-Fenster zu löschen und es neu zu erstellen. Die Informationen, die das Skript anzeigt, sind sehr nützlich. Ich verwende zum Beispiel viele Dinge im Handel (Murray-Levels - TirMethod, Handelsmodelle Third Wave und Consolidation) und überall brauche ich einen ähnlichen Indikator (ZigZag, ZipPips,), und das Skript hilft, die Korrektheit der Konstruktion von Zahlen und die Proportionalität von Extrema zu beurteilen. Warten wir also auf den Indikator. Halten Sie uns auf dem Laufenden. Haben Sie eine Seite in einem sozialen Netzwerk? Viel Glück und Erfolg für Sie!
Es ist mir gelungen, Ihre Situation zu simulieren. Dieses Verhalten ist das Ergebnis der Verwendung eines anderen Skripts nach KeyFinder 2.0. Ich habe noch nicht herausgefunden, wie man dieses Problem auf Code-Ebene lösen kann. In Bezug auf die Verwendung - wenden Sie KeyFinder 2.0 erneut an und die Schaltfläche wird wieder "funktionieren".
ernst.yagafarof:
Ich habe versucht, die Schaltfläche, die auf dem Bildschirm "klebt", auf alle möglichen Arten zu bekämpfen. Am einfachsten ist es, das Währungspaar-Fenster zu löschen und es von Grund auf neu zu erstellen. Die vom Skript angezeigten Informationen sind sehr nützlich. Ich verwende zum Beispiel viele Dinge im Handel (Murray-Levels - TirMethod, Handelsmodelle Third Wave und Consolidation) und überall brauche ich einen ähnlichen Indikator (ZigZag, ZipPips,), und das Skript hilft, die Korrektheit der Konstruktion von Zahlen und die Proportionalität der Extrema zu beurteilen. Warten wir also auf den Indikator. Halten Sie uns auf dem Laufenden. Haben Sie eine Seite in einem sozialen Netzwerk? Viel Glück und Erfolg für Sie!
Ich habe mein Profil aktualisiert.
Ich habe versucht, die Schaltfläche, die auf dem Bildschirm "klebt", auf alle möglichen Arten zu bekämpfen. Am einfachsten ist es, das Währungspaar-Fenster zu löschen und es von Grund auf neu zu erstellen. Die vom Skript angezeigten Informationen sind sehr nützlich. Ich verwende zum Beispiel viele Dinge im Handel (Murray-Levels - TirMethod, Handelsmodelle Third Wave und Consolidation) und überall brauche ich einen ähnlichen Indikator (ZigZag, ZipPips,), und das Skript hilft, die Korrektheit der Konstruktion von Zahlen und die Proportionalität der Extrema zu beurteilen. Warten wir also auf den Indikator. Halten Sie uns auf dem Laufenden. Haben Sie eine Seite in einem sozialen Netzwerk? Viel Glück und Erfolg für Sie!
Rubick:
Ich habe gute Nachrichten! Ich habe den Entwurf und das Schreiben der Klasse für den Indikator abgeschlossen, jetzt schreibe ich den Indikator selbst, ich plane, nächste Woche fertig zu werden - höchstens über das laufende Wochenende.
Ich danke Ihnen. Wir freuen uns schon sehr darauf!
Ich habe gute Nachrichten! Ich habe den Entwurf und das Schreiben der Klasse für den Indikator abgeschlossen, jetzt schreibe ich den Indikator selbst, ich plane, nächste Woche fertig zu werden - höchstens über das laufende Wochenende.
Auf was kann ich es anwenden?
Ich habe Ihr Skript in den Indikator eingefügt. Wenn ich das Diagramm wechsle, wird alles neu berechnet.
//+------------------------------------------------------------------+ //|KeyFinder.mq5 | //|Trofimov Pavel | //|trofimovpp@mail.ru | //+------------------------------------------------------------------+ #property copyright "Trofimov Pavel" #property link "trofimovpp@mail.ru" #property version "1.00" #property description "Warnung! Dieser Algorithmus verwendet Zyklen in den Berechnungen!" #property description "Es wird dringend empfohlen, maximal 1000 Takte für die Bearbeitung einzustellen!" #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 //--- Eingabeparameter input int MinDimesion = 5; // Minimale Dimensionalität der Punkte input int MaxBars = 300; // Anzahl der zu verarbeitenden Takte input string LabelName = "KF_Label"; // //+------------------------------------------------------------------+ //| Benutzerdefinierte Initialisierungsfunktion für Indikatoren | //+------------------------------------------------------------------+ int OnInit() { //--- Zuordnung von Indikatorpuffern //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { CleanChart(); Comment(""); } //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iterationsfunktion | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //Überprüfung der Verfügbarkeit der Geschichte für die festgelegte Anzahl von Takten int SMaxBars=Bars(Symbol(),0),iMaxBars=MaxBars; if(SMaxBars<MaxBars) { iMaxBars=SMaxBars; Comment("Der Parameter MaxBars ist zu groß eingestellt".+"\n"+"Für die Berechnungen werden "+IntegerToString(SMaxBars)+" Bars."); }; int clean=CleanChart();//das Diagramm bei der Wiederanwendung löschen MqlRates rates_array[]; string Com=""; int iCod=CopyRates(Symbol(),Period(),0,iMaxBars,rates_array);//Anzahl der Array-Elemente iCod=iCod-1;//Index des größten Elements im Array Com="Arbeitet... Wartet darauf!"; Comment(Com); if(iCod>0) { FindUpKeyPoints(iCod,rates_array);//Finden Sie die wichtigsten Stichpunkte Com=Com+"\n"+"Die wichtigsten Punkte wurden bearbeitet.+"\n"; Comment(Com); FindLowKeyPoints(iCod,rates_array);//Finden Sie untere Schlüsselpunkte Comment("Verarbeitung abgeschlossen".); } else Comment("Mangel an Verarbeitungsleisten!!!"); //--- Rückgabewert von prev_calculated für den nächsten Aufruf return(rates_total); } //+------------------------------------------------------------------+ //|| Suche nach den wichtigsten Eckpunkten| //+------------------------------------------------------------------+ void FindUpKeyPoints(int temp_iCod,MqlRates &temp_rates[]) { int HD=1; for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--)// Taktzyklus von final - MinDimension bis null + MinDimension { HD=getHighDimension(temp_rates,i,temp_iCod);//Ermittlung der Dimensionalität der Punkte if((HD>=MinDimesion) || (HD==-1)) { // Erstellen einer Markierung, wenn sie unter die MinDimension-Bedingungen fällt string Ob_Name=LabelName+IntegerToString(i); if(HD!=-1) { ObjectCreate(0,Ob_Name,OBJ_TEXT,0,temp_rates[i].time,temp_rates[i].high); ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_LOWER); ObjectSetString(0,Ob_Name,OBJPROP_TEXT,0,IntegerToString(HD)); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrRed); } else { //Wenn wir die Dimension nicht bestimmen können, markieren wir sie mit einem Ball. ObjectCreate(0,Ob_Name,OBJ_ARROW,0,temp_rates[i].time,temp_rates[i].high); ObjectSetInteger(0,Ob_Name,OBJPROP_ARROWCODE,0,159); ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_BOTTOM); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrRed); }; }; }; } //+------------------------------------------------------------------+ //|Suche nach unteren Schlüsselpunkten | //+------------------------------------------------------------------+ void FindLowKeyPoints(int temp_iCod,MqlRates &temp_rates[]) { int LD=1;//Initialisierung der Punktabmessungen bool iCreate; for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--) { LD=getLowDimension(temp_rates,i,temp_iCod); if((LD>=MinDimesion) || (LD==-1)) { string Ob_Name=LabelName+IntegerToString(i)+"_1";//Sorgen Sie sich um Balken, bei denen der Tiefst- und der Höchststand Schlüsselpunkte sein können if(LD!=-1) { iCreate=ObjectCreate(0,Ob_Name,OBJ_TEXT,0,temp_rates[i].time,temp_rates[i].low); if(iCreate) { ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_UPPER); ObjectSetString(0,Ob_Name,OBJPROP_TEXT,0,IntegerToString(LD)); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrGreen); } else Comment("Kann kein Objekt erstellen".); } else { iCreate=ObjectCreate(0,Ob_Name,OBJ_ARROW,0,temp_rates[i].time,temp_rates[i].low); if(iCreate) { ObjectSetInteger(0,Ob_Name,OBJPROP_ARROWCODE,0,159); ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_TOP); ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrGreen); } else Comment("Kann kein Objekt erstellen".); }; }; }; } //+------------------------------------------------------------------+ //| Bestimmung der Dimensionalität des oberen Punktes | //+------------------------------------------------------------------+ int getHighDimension(MqlRates &tmpRates[],int tmp_i,int tmp_iCod) { int k=1; while((tmpRates[tmp_i].high>tmpRates[tmp_i+k].high) && (tmpRates[tmp_i].high>tmpRates[tmp_i-k].high) && ((tmp_i+k)<(tmp_iCod)) && ((tmp_i-k)>0)) k++; if(((tmp_i+k)==tmp_iCod) || ((tmp_i-k)==0)) k=-1; return(k); } //+------------------------------------------------------------------+ //| Bestimmung der Dimensionalität des unteren Punktes | //+------------------------------------------------------------------+ int getLowDimension(MqlRates &tmpRates[],int tmp_i,int tmp_iCod) { int k=1; while((tmpRates[tmp_i].low<tmpRates[tmp_i+k].low) && (tmpRates[tmp_i].low<tmpRates[tmp_i-k].low) && ((tmp_i+k)<(tmp_iCod)) && ((tmp_i-k)>0)) k++; if(((tmp_i+k)==tmp_iCod) || ((tmp_i-k)==0)) k=-1; return(k); } //+-------------------------------------------------------------------------------+ //| Löschen des Graphen von Objekten, die durch das Skript erstellt wurden, im Falle einer erneuten Anwendung //+-------------------------------------------------------------------------------+ int CleanChart() { string Label=LabelName; int obj_total=ObjectsTotal(0,0,-1),n=0; for(int obj=obj_total-1; obj>=0; obj--) { string objname=ObjectName(0,obj,0,-1); if(StringFind(objname,Label)>=0) ObjectDelete(0,objname); n++; } return(n); } //+------------------------------------------------------------------+
Dateien:
KeyFinder.mq5
16 kb
Ich habe es ausprobiert und fand es gut ..... ein paar Einstellungen, um es auf dem neuesten Stand zu halten.

Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
KeyFinder 2.0:
Dieses Skript findet DeMark Pivot-Punkte, blendet diese auf dem Chart ein und zeigt deren Dimensionen an.
Autor: Pavel Trofimov