Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 672
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
Ja, das habe ich, aber ich mag die lange Antwortzeit nicht.
Es ist keine lange Zeit, es ist ein Tick... aber im Allgemeinen müssen Sie die Hilfe lesen. Sie können MQL nicht durch "Bauchgefühl" lernen. MQL basiert auf C++, aber es ist an die MT-Plattform gebunden, also können Sie es nicht lernen, ohne die Hilfe zu lesen.
Sie haben Dateibehandlung und Arbeit mit globalen Variablen und Grafiken in Ihrem Code ... Bei jedem Ticken gibt es eine Menge unnötiger Operationen
Wenn Sie eine schnelle Antwort wollen, verwenden Sie OnChartEvent(), es ist nicht in der Tester generiert, aber zuerst beginnen Sie das Studium der MQL4 Hilfe.
Die Operation ist nicht lang, es ist Tick für Tick ... aber im Allgemeinen, beginnen Sie die Hilfe zu lesen, können Sie nicht lernen, MQL durch "Bauchgefühl", MQL basiert auf C + +, aber es ist an die MT-Plattform gebunden, können Sie es nicht tun, ohne die Hilfe zu lesen.
Sie haben Dateibehandlung und Arbeit mit globalen Variablen und Grafiken in Ihrem Code ... Bei jedem Ticken gibt es eine Menge unnötiger Operationen
Wenn Sie eine schnelle Antwort wollen, verwenden Sie OnChartEvent(), es ist nicht in der Tester generiert, aber zuerst beginnen Sie das Studium der MQL4 Hilfe.
Hallo zusammen.
Ich habe einen nützlichen Ind-Fractals-Indikator in der Code-Bibliothek gefunden. Allerdings zeichnet es Fraktale auf jeden Balken, anstatt sie richtig zu berechnen. Ich möchte diesen Indikator zu verwenden, aber es ist "broken" (( Helfen Sie mir, einen Fehler zu finden, habe ich versucht, den Autor zu kontaktieren, aber er reagiert nicht auf Nachrichten. Der Einfachheit halber ist der Code hier dupliziert.
#property copyright "Copyright © 2005, MetaQuotes Software Corp.
#property link "http://www.metaquotes.net"
//----
#property indicator_chart_window
#Eigenschaft indicator_buffers 8
#property indicator_color1 Rot
#Eigenschaft indicator_color2 Rot
#Eigenschaft indicator_color3 Blau
#Eigenschaft indicator_color4 Blau
#Eigenschaft indicator_color5 Kalk
#Eigenschaft indicator_color6 Kalk
#property indicator_color7 Sienna
#property indicator_color8 Sienna
//---- Eingabeparameter
extern bool Comm=true;
//---- Puffer
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
//---- Indikatoren
SetIndexStyle(0,DRAW_ARROW);//Der Linienstil des Indikators
SetIndexArrow(0,217); //gibt den Pfeiltyp vor
SetIndexBuffer(0,ExtMapBuffer1);//bindet denIndikatorpuffer mit einem eindimensionalen dynamischen Array vom Typ Double. Es gibt 2 Versionen der Funktion.
SetIndexEmptyValue(0,0.0);//Setzt den Leerwert für die Indikatorzeile.
SetIndexStyle(1,DRAW_ARROW);
SetIndexPfeil(1,218);
SetIndexPuffer(1,ExtMapPuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(2,DRAW_ARROW);
SetIndexPfeil(2,217);
SetIndexPuffer(2,ExtMapPuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW);
SetIndexPfeil(3,218);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexEmptyValue(3,0.0);
SetIndexStyle(4,DRAW_ARROW);
SetIndexPfeil(4,217);
SetIndexPuffer(4,ExtMapPuffer5);
SetIndexEmptyValue(4,0.0);
SetIndexStyle(5,DRAW_ARROW);
SetIndexPfeil(5,218);
SetIndexPuffer(5,ExtMapPuffer6);
SetIndexEmptyValue(5,0.0);
SetIndexStyle(6,DRAW_ARROW);
SetIndexPfeil(6,217);
SetIndexBuffer(6,ExtMapBuffer7);
SetIndexEmptyValue(6,0.0);
SetIndexStyle(7,DRAW_ARROW);
SetIndexPfeil(7,218);
SetIndexBuffer(7,ExtMapBuffer8);
SetIndexEmptyValue(7,0.0);
return(0); }
//+------------------------------------------------------------------+
//| Funktion zur Deinitialisierung des Custor-Indikators |
//+------------------------------------------------------------------+
int deinit() {return(0); }
//------------------------------------------------------------------
bool Fractal(string F,int Per,int shift) {
if(Zeitraum()>Per) return(-1);
Per=Per/Period()*2+MathCeil(Per/Period()/2);
if(shift<Per)return(-1);
if(shift>Bars-Per)return(-1);
for(int i=1;i<=Per;i++) {
if(shift+i>=Bars || shift-i<0) return(-1);
if(F=="U") {
if(High[shift+i]>High[shift])return(-1);
if(High[shift-i]>=High[shift])return(-1); }
if(F=="L") {
if(Low[shift+i]<Low[shift])return(-1);
if(Low[shift-i]<=Low[shift])return(-1); } }
return(1); }
//------------------------------------------------------------------
int start()
{
int D1=1440,H4=240,H1=60,M15=15,B;
Doppel-P;
int counted_bars=IndicatorCounted();// Anzahl der seit dem letzten Indikatoraufruf unveränderten Balken
B=Balken-gezählt_Balken;
if(gezählte_Balken==0) B--;
if(Zeitraum()==D1)P=150*Punkt;// Zeitraum gibt die aktuelle Diagrammperiode zurück
if(Zeitraum()==H4)P=70*Punkt;
if(Zeitraum()==H1)P=40*Punkt;
if(Period()==30)P=30*Point;
if(Zeitraum()==M15)P=20*Punkt;
if(Zeitraum()==5)P=10*Punkt;
if(Zeitraum()==1)P=5*Punkt;
for(int shift=B;shift>0;shift--)
{
if(Fractal("U",M15,shift)==1) ExtMapBuffer1[shift]=High[shift]+P;
sonst ExtMapBuffer1[shift]=0;
if(Fractal("L",M15,shift)==1) ExtMapBuffer2[shift]=Low[shift]-P;
sonst ExtMapBuffer2[shift]=0;
if(Fractal("U",H1,shift)==1) ExtMapBuffer3[shift]=High[shift]+P;
sonst ExtMapBuffer3[shift]=0;
if(Fractal("L",H1,shift)==1) ExtMapBuffer4[shift]=Low[shift]-P;
sonst ExtMapBuffer4[shift]=0;
if(Fractal("U",H4,shift)==1) ExtMapBuffer5[shift]=High[shift]+P;
sonst ExtMapBuffer5[shift]=0;
if(Fractal("L",H4,shift)==1) ExtMapBuffer6[shift]=Low[shift]-P;
sonst ExtMapBuffer6[shift]=0;
if(Fractal("U",D1,shift)==1) ExtMapBuffer7[shift]=High[shift]+P;
sonst ExtMapBuffer7[shift]=0;
if(Fractal("L",D1,shift)==1) ExtMapBuffer8[shift]=Low[shift]-P;
sonst ExtMapBuffer8[shift]=0;
}
if(Comm) Comment("D1 - braun\n H4 - grün\n H1 - blau\nM15 - rot");
zurück(0);
}
Ich bin hier für diese Art von Code gescholten worden, es ist das erste Mal, dass ich ihn habe :-)
Der Code sollte in ein Formular eingefügt werden, das mit Alt+S geöffnet wird.
Ich bin hier für diese Art von Code gescholten worden, es ist das erste Mal, dass ich ihn habe :-)
Sie müssen den Code in ein Formular einfügen, das sich bei Alt+S öffnet.
Werden Sie gescholten? Nein, in keiner Weise. Schreiben Sie den Code, wie Sie wollen. Aber... wenn Sie eine Antwort auf Ihre Frage wollen, versuchen Sie, denjenigen, den Sie um Hilfe bitten, zu respektieren. So einfach ist das.
Forum für Handel, automatisierte Handelssysteme und Strategietests
Alle Fragen für Neulinge auf MQL4, Hilfe und Diskussion über Algorithmen und Codes
Artyom Trishkin, 2018.10.18 08:07
Sagen wir es mal so: Erstellen Sie eine Indikatorvorlage im Editor, fügen Sie die richtige Anzahl von Eingabevariablen und Zeichenpuffern hinzu, wenn Sie sie erstellen.
Als Nächstes wollen wir analysieren, was bei der konkreten Aufgabe zu tun ist.
Das habe ich beim letzten Mal gemacht, nur den Namen der Variablen und des Arrays geändert.
Wenn Sie iMA verwenden, funktioniert es nur auf Wochen und Tage, wo die Kerze mehr als 100 Punkte enthält, es tut nichts auf niedrigeren Zeitrahmen. Der Grund dafür scheint die Rundung zu sein.
Wenn iMAOnArray verwendet wird, ist das i-ras-Fenster bei allen TFs leer. Das Protokoll enthält keine Fehler.
Wenn iMAOnArray verwendet wird, ist das i-ra-Fenster bei allen TFs leer. Das Protokoll enthält keine Fehler.
Sie verwenden iMAOnArray() mit der Periode 1, d.h. der Wert von iMAOnArray() ist im Wesentlichen der Wert des Arrays tmp1
Wenn Sie sehen wollen, was Sie berechnen, machen Sie die Schleife kürzerfor(i=1; i<10; i++)
und alle Daten, die Sie berechnen wollen, ausdrucken, obwohl es vielleicht einfacher ist, keine komplexe Formel zu berechnen, sondern iMAOnArray() zu verwenden, um iMA und iMAOnArray() zu erstellen - sowohl iMA als auch iMAOnArray() sind dieselbe Berechnung.... Wenn Sie in diesem Forum eine Antwort auf eine technische Frage erhalten, sollten Sie allein lernen, mit den Informationen zu rechnen und umzugehen.
Das letzte Mal, als ich dies tat, änderte ich nur den Namen der Variablen und des Arrays.
Wenn iMA i-r nur an Wochen und Tagen arbeitet, an denen mehr als 100 Punkte in einer Kerze sind, zeichnet es nichts auf niedrigeren TFs. Der Grund dafür scheint die Rundung zu sein.
Wenn iMAOnArray verwendet wird, ist das i-ras-Fenster bei allen TFs leer. Das Protokoll enthält keine Fehler.
Im ersten Zyklus werden die Werte des ersten Puffers berechnet;
Der zweite Zyklus berechnet die MA anhand der im ersten Zyklus berechneten Werte.
Überlegen Sie, was iMAOnArray() bedeutet. MA auf Array schreiben. Wie kann man das übersetzen? Jeder hat einen Google-Übersetzer zur Hand. Setzen-übersetzen-empfangen: MA auf Array.
Das bedeutet, dass es sich um einen gleitenden Durchschnitt handelt, der auf einem vorab berechneten und gefüllten Feld basiert.
Dementsprechend: der erste Zyklus - Vorbereitung des erforderlichen Arrays, und der zweite Zyklus - Konstruktion eines gleitenden Durchschnitts auf der Grundlage des im ersten Zyklus vorbereiteten Arrays.
Und was tun Sie? Sie geben einen Wert in das erste Feld ein (die anderen Werte sind noch nicht vorbereitet) und versuchen, die MA auf diesem Wert aufzubauen.
Ich habe Ihnen eine Vorlage gegeben:
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Alle MQL4 Anfänger Fragen, Hilfe und Diskussion über Algorithmen und Codes
Artyom Trishkin, 2018.10.18 09:39
Indikator:
Sie können alles, was mit Fünfen zu tun hat, wegwerfen und eine Vorlage für Vieren erhalten. Obwohl diese Vorlage plattformübergreifend ist - Sie können sie für beide Terminals verwenden - legen Sie einfach Ihre Puffer und deren Anzahl fest. In dieser Vorlage gibt es zwei Zeichnungen und eine Berechnung, die hier zu sehen sind:
=Außerdemverwenden Sie iMAOnArray() mit der Periode 1, d.h. der Wert von iMAOnArray() wird im Wesentlichen der Wert des Arrays tmp1 sein.
Ich habe versucht, verschiedene Werte zu verwenden, 1 bleibt als letzte Variante dieser Experimente.
Aus irgendeinem Grund schreibt z. B. ip1Buf[4] = 2147483647.0 bei allen TFs die gleiche Zahl in den i-r-Puffer, während die Array-Werte alle unterschiedlich sind tmp1[4] = 0,1300000000000097 usw.
Aber selbst dann sollte eine gerade Linie gezeichnet werden, und auf dem i-r-Diagramm gibt es absolut nichts, die Skala ist von 0 bis 0 markiert.
=Außerdemverwenden Sie iMAOnArray() mit der Periode 1, d.h. der Wert von iMAOnArray() ist im Wesentlichen der Wert des Arrays tmp1
Ich habe versucht, verschiedene Werte zu verwenden, 1 bleibt als letzte Variante dieser Experimente.
Aus irgendeinem Grund wird bei allen TFs die gleiche Zahl in den i-ras-Puffer geschrieben, z. B. ip1Buf[4] = 2147483647.0, obwohl die Array-Werte alle unterschiedlich sind tmp1[4] = 0.1300000000000097 usw.
Aber auch in diesem Fall sollte eine gerade Linie gezeichnet werden, und auf dem i-r-Diagramm gibt es absolut nichts, die Skala ist von 0 bis 0 markiert.
2147483647.0 Fangen Sie an, die Suchmaschine zu benutzen!https://www.mql5.com/ru/forum/224831
Noch einmal, ich habe gerade Artem geschrieben, Sie müssen es selbst lesen, beginnen Sie mit einem einfachen... Zeichnen Sie einen Schlusskurs auf einem Diagramm mit einem Indikator, dann versuchen Sie, es komplizierter zu machen, machen Sie dasselbe in einem Zyklus und im zweiten Zyklus machen Sie eine МА-Berechnung auf der Grundlage des bereits berechneten Puffers, wo der Schlusskurs liegt