Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 489

 

Hallo. Ich möchte einen EA für MT4 schreiben, eine seiner Aufgaben ist es, Fibo-Linien zu zeichnen, auf M1, in einer Stunde. Das heißt, um 11.00 Uhr sollte er Linien im Intervall von 10.00 bis 10.59 Uhr zeichnen, wobei er sich auf die Höchst- und Tiefstwerte konzentriert. Ich habe verschiedene Methoden ausprobiert und gepostet, was die letzte war. Sie können den Code wahrscheinlich kürzen, um die Ebenen zu zeichnen.Das Problem ist, dass er die Linien nicht in den vorgegebenen Bereich zeichnet.

int timemin=TimeMinute(Time[59]==0);
int timehour=TimeHour(Time[1] && TimeMinute(Time[0]));
int timemin1=ZeitMinute(Zeit[0]==0);
int timehour1=ZeitStunde(Zeit[1] && ZeitMinute(Zeit[59]))

int max=iHighest(Symbol(),1,MODE_HIGH,60,timehour);
int min=iLowest(Symbol(),1,MODE_LOW,60,timehour);

double barup=(iOpen(Symbol(),60,1)>iClose(Symbol(),60,1));
double bardn=(iOpen(Symbol(),60,1)<iClose(Symbol(),60,1));
ObjectDelete("FiboLevels"); //------New level

if (barup)
{
WindowRedraw();
ObjectCreate(0, "FiboLevels",OBJ_FIBO,0,Time[min],Low[min],Time[timehour1],High[max]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrGreen);

}
if (bardn)
{
WindowRedraw();
ObjectCreate(0, "FiboLevels",OBJ_FIBO,0,Time[max],Low[max],Time[timehour1],High[min]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrRed);

}
double f1=ObjectGet("FiboLevels",OBJPROP_PRICE1); //Selektiert den ersten Preis
double f2=ObjectGet("FiboLevels",OBJPROP_PRICE2); //Wählt den zweiten Preis aus und zeichnet
double Diff=f2-f1;
string a11=DoubleToStr(f2-Diff*0.0,Digits);
string a12=DoubleToStr(f2-Diff*0.236,Digits);
string a13=DoubleToStr(f2-Diff*0.382,Digits);
string a14=DoubleToStr(f2-Diff*0.50,Digits);
string a15=DoubleToStr(f2-Diff*0.618,Digits);
string a16=DoubleToStr(f2-Diff*1.0,Digits);

bool a1=ObjectSet("FiboLevels",OBJPROP_FIBOLEVELS,6);
bool a2=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+0,0.0);
bool a3=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+1,0.236);
bool a4=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+2,0.382);
bool a5=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+3,0.50);
bool a6=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+4,0.618);
bool a7=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+5,1.0);

bool a111=ObjectSetFiboDescription("FiboLevels",0, "0.0%");
bool a122=ObjectSetFiboDescription("FiboLevels",1, "23.6%");
bool a133=ObjectSetFiboDescription("FiboLevels",2, "38.2%");
bool a144=ObjectSetFiboDescription("FiboLevels",3, "50.0%");
bool a155=ObjectSetFiboDescription("FiboLevels",4, "61.8%");
bool a166=ObjectSetFiboDescription("FiboLevels",5, "100.0%");

 
Georgy Sled:

Hallo. Ich möchte einen EA für MT4 schreiben, eine seiner Aufgaben ist es, Fibo-Linien zu zeichnen, auf M1, in einer Stunde. Das heißt, um 11.00 Uhr sollte er Linien im Intervall von 10.00 bis 10.59 Uhr zeichnen, wobei er sich auf die Höchst- und Tiefstwerte konzentriert. Ich habe verschiedene Methoden ausprobiert und gepostet, was die letzte war. Sie können den Code wahrscheinlich kürzen, um die Ebenen zu zeichnen.Das Problem ist, dass er keine Linien in einem bestimmten Bereich zeichnet.

double barup=(iOpen(Symbol(),60,1)>iClose(Symbol(),60,1));

double bardn=(iOpen(Symbol(),60,1)<iClose(Symbol(),60,1));
ObjectDelete("FiboLevels"); //------Neues Niveau

wenn (barup)
{
WindowRedraw();
ObjectCreate(0, "FiboLevels",OBJ_FIBO,0,Time[min],Low[min],Time[timehour1],High[max];
ObjectSet("FiboLevels",OBJPROP_COLOR,clrGreen);

}
wenn (bardn)
{
WindowRedraw();
ObjectCreate(0, "FiboLevels",OBJ_FIBO,0,Time[max],Low[max],Time[timehour1],High[min]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrRed);

}

ist das kürzer? bool barup=... WindowRedraw(); wird trotzdem ausgeführt - aus if herausgenommen

   ObjectDelete("FiboLevels"); //------Новый уровень
   WindowRedraw();

   if (iOpen(Symbol(),60,1)>iClose(Symbol(),60,1))
   {
      ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[min],Low[min],Time[timehour1],High[max]);
      ObjectSet("FiboLevels",OBJPROP_COLOR,clrGreen);
   }
   else
   {
      ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[max],Low[max],Time[timehour1],High[min]);
      ObjectSet("FiboLevels",OBJPROP_COLOR,clrRed);
   }

es kann auch kürzer sein ... siehe meine Datei

Dateien:
Proba.mq4  3 kb
 
Artyom Trishkin:

Bitte geben Sie den Code korrekt ein.


Es ist sogar noch deutlicher:


Vielen Dank für die Erklärung, wie man den Code richtig einfügen)))) geholfen) Bitte überprüfen Sie und helfen Sie mir den Code richtig zu schreiben, ich werde sehr dankbar sein! (Heute habe ich einen gekochten Samsung-Fernseher bekommen, den ich zu deinstallieren gelernt habe, aber ich komme mit diesem Code nicht zurecht (((((
 
void fOrderOpen() {...
    if( iTime(Symbol(),PERIOD_M1,0)) {
     if((fMarketOrders(OP_BUY))) { ....{
int irvbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,NULL,12345,0,0); 

Leute, warum werden meine Aufträge bei jedem Tick geöffnet? Können Sie mir sagen, wie ich mich auf die Stange konzentrieren kann?

 
Rustam Bikbulatov:

Leute, warum öffnen sich meine Aufträge mit jedem Tick? Können Sie mir sagen, wie ich mich auf die Stange konzentrieren kann?

Nach den in der ATS beschriebenen Bedingungen gibt er grünes Licht für die Öffnung, also öffnet er.
In diesem Fall gibt es eine Vielzahl von Lösungen. Es kommt ganz darauf an, was für Sie am besten geeignet ist.
Wir können festlegen, dass der nächste Auftrag nur dann eröffnet werden soll, wenn sich der Kurs um N Punkte vom letzten Auftrag entfernt hat. Sie können beantragen, nicht mehr als einen Auftrag auf 1 Bar zu eröffnen. So und so weiter und so fort.
Schreiben Sie die Bedingungen auf, die Sie benötigen, und wenden Sie sie auf Ihre Tests an.

 
Konstantin Nikitin:

Gemäß den in der ATS beschriebenen Bedingungen eröffnet sie den Auftrag.
In diesem Fall gibt es eine Vielzahl von Lösungen. Es kommt ganz darauf an, was für Sie am besten geeignet ist.
Wir können festlegen, dass der nächste Auftrag nur dann eröffnet werden soll, wenn sich der Kurs um N Punkte vom letzten Auftrag entfernt hat. Sie können beantragen, nicht mehr als einen Auftrag auf 1 Bar zu eröffnen. So und so weiter und so fort.
Schreiben Sie die Bedingungen auf, die Sie benötigen, und wenden Sie sie auf Ihre Tests an.

Stattdessenif( iTime(Symbol(),PERIOD_M1,0)){ Was muss ich schreiben, um einen Auftrag auf einem Balken zu eröffnen?

 
Rustam Bikbulatov: Leute, warum öffnen sich meine Aufträge mit jedem Tick? Haben Sie einen Rat, wie man sich auf die Stange konzentrieren kann?

Die Frage wurde schon oft gestellt und dementsprechend oft beantwortet.Über eine Suche, z.B. hier

 
STARIJ:

Die Frage wurde schon oft gestellt und dementsprechend oft beantwortet.Über eine Suche, z.B. hier

Ich danke Ihnen!

 

Guten Tag!


Ich habe einen EA, der bestimmte Berechnungen durchführt. Es werden verschiedene mathematische Operationen, Arrays und Schleifen verwendet. Es speichert das Ergebnis in einer Datei. Es muss alles wieder von vorne beginnen, nachdem es alle Aktionen durchgeführt hat. Es hat alle Berechnungen einmal durchgeführt und hängt sich dann zum zweiten Mal auf, ohne etwas zu tun. Können Sie mitteilen, ob es notwendig ist, Variablen auf Null zu setzen, Arrays zu löschen oder etwas anderes, bevor eine neue Berechnung gestartet wird?

 
Kot:

Guten Tag!


Ich habe einen EA, der bestimmte Berechnungen durchführt. Es werden verschiedene mathematische Operationen, Arrays und Schleifen verwendet. Es speichert das Ergebnis in einer Datei. Es muss alles wieder von vorne beginnen, nachdem es alle Aktionen durchgeführt hat. Es hat alle Berechnungen einmal durchgeführt und hängt sich dann zum zweiten Mal auf, ohne dass eine weitere Aktion erfolgt. Können Sie mitteilen, ob es notwendig ist, Variablen auf Null zu setzen, Arrays zu löschen oder etwas anderes, bevor eine neue Berechnung gestartet wird?

Sie werden auf jeden Fall helfen. Und solche Spezialisten gibt es in diesem Thread nicht.
Grund der Beschwerde: