[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 188
Wie macht man für (i=1; i<StartBar; i++) StartBar den Balken mit der angegebenen Biegung (extern int b= 2)des älteren Zeitrahmens (extern int = ... ; //W1, MN1)
Wie macht man für (i=1; i<StartBar; i++) StartBar den Balken mit der angegebenen Biegung (extern int b= 2) des älteren Zeitrahmens (extern int = ... ; //W1, MN1)
Berichtigung
Abgleich von zwei Tops eines bestimmten Zeitraums (z. B. eine Woche und ein Monat)
Die Frage lautet wie folgt. Im MQL4-Buch, das unter MQL4.community zufinden ist, heißt es im Kapitel "GlobalVariables" im Abschnitt "Eigenschaften von GV-Variablen": "GV-Variablen können nur den Typ double haben". Im Abschnitt "Funktion GlobalVariableDel()" finden Sie ein Beispiel für den Experten globalvar.mq4 mit dem folgenden Inhalt:
//--------------------------------------------------------------------// globalvar.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------------int Experts; // Колич. экспертовdouble Depo=10000.0, // Заданный депозит
Persent=30, // Заданный процент
Money; // Искомые средстваstring Quantity="GV_Quantity"; // Имя GV-переменной//--------------------------------------------------------------------int init() // Спец. функция init
{
Experts=GlobalVariableGet(Quantity); // Получим тек. знач.
Experts=Experts+1; // Колич. экспертовGlobalVariableSet(Quantity, Experts); // Новое значение
Money=Depo*Persent/100/Experts; // Средства для эксп.Alert("Для эксперта в окне ", Symbol()," выделено ",Money);
return; // Выход из init()
}
//--------------------------------------------------------------------int start() // Спец. функция start
{
int New_Experts= GlobalVariableGet(Quantity);// Новое колич. эксп.if (Experts!=New_Experts) // Если изменилось
{
Experts=New_Experts; // Теперь текущ. такое
Money=Depo*Persent/100/Experts; // Новое знач. средств Alert("Новое значение для эксперта ",Symbol(),": ",Money);
}
/*
...
Здесь долен быть указан основной код эксперта,
в котором используется значение переменной Money
...
*/return; // Выход из start()
}
//--------------------------------------------------------------------int deinit() // Спец. ф-ия deinit
{
if (Experts ==1) // Если эксперт один..GlobalVariableDel(Quantity); //..удаляем GV-переменelse// А иначе..GlobalVariableSet(Quantity, Experts-1); //..уменьшаем на 1Alert("Эксперт выгружен из окна ",Symbol()); // Сообщ. о выгрузкеreturn; // Выход из deinit()
}
//--------------------------------------------------------------------
Frage: Warum sind in diesem Beispiel die GV-Variablen Expert und New_Expert vom Typ int, obwohl diese Variablen, wie bereits erwähnt , vom Typ double sein sollten?
Im ersten Zyklus versuche ich, den Preis der angegebenen Kurve auf der hohen TF zu finden. Ich beginne den zweiten Zyklus auf der niedrigen TF, wo ich nach dem Preis jeder Kurve auf den Balken suche, solange sie auf dem Diagramm ist, und ihn mit dem Preis aus dem ersten Zyklus vergleiche. Wenn ich einen solchen Preis finde, gebe ich die Zeit des Balkens der gegebenen Kurve in diesem TF zurück.
Dasselbe gilt für das Jahr 2000, d. h. für den Beginn des Testzeitraums.
Wo liegt der Fehler? Ich bin ein schwacher Programmierer. Ich möchte ein Testprogramm schreiben. Es fällt mir schwer, damit umzugehen. Ich kann den Programmierer nicht darum bitten, weil es schrittweise geschieht, je nachdem, welche Daten ich erhalten habe.
Ich brauche hier etwas Hilfe. Ich habe auf der vorherigen Seite auch um Hilfe gebeten, um die Funktion NewZZ() zu schreiben.
Ich wäre dankbar, wenn jemand Fehler korrigieren und erklären würde.
datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3)
{
if (sy=="" || sy=="0") sy=Symbol();
double zz1, zz2, p1, p2;
int i, k1=iBars(sy, tf1), ke=0;
int j;
datetime t;
for (i=1; i<k1; i++)
{
zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
if (zz1!=0)
{
ke++;
if (ke>ne)
{p1=zz1;datetime t1=iTime(sy,tf1,i);}
}
}
Print(" p1 " ,p1);
Print(" t1 ", TimeToStr(t1, TIME_DATE|TIME_MINUTES));
for (j=1; j<Bars; j++)
{
zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
if (zz2!=0)
{
p2=zz2;
Print("p2= ",p2);
t=iTime(sy, tf2, j);
if(p1==p2)
{
Print("skaiciavimo pradzia nuo ",TimeToStr(t, TIME_DATE|TIME_MINUTES));
return(t);
}
}
}
return(0);
}
Beim Testen der Strategie funktioniert diese Funktion nach der Eröffnung der ersten Order einwandfrei, d. h. das Trailing läuft und die Order wird geschlossen. Aber nach dem Öffnen der zweiten Ordnung tritt ein Fehler bei der Nullteilung auf, wenn man sich auf die nachgestellte Funktion bezieht. Bitte helfen Sie mir, die Nachlauffunktion für die zweite Ordnung, die dritte Ordnung usw. zu aktivieren.
Ich kann nicht für das gesamte Forum sprechen, aber ich persönlich bin besessen davon, wenn ich eine Quelle ohne Einrückung sehe, dass es sinnlos ist, dem Autor etwas zu erklären.
Und noch eine Frage.
Wie macht man für (i=1; i<StartBar; i++) StartBar den Balken mit der angegebenen Biegung (extern int b= 2)des älteren Zeitrahmens (extern int = ... ; //W1, MN1)
Ermitteln Sie die Taktzeit und rechnen Sie sie auf die Taktnummer der älteren TF um.
Warum schreiben Sie den Code nicht selbst?
Wie macht man für (i=1; i<StartBar; i++) StartBar den Balken mit der angegebenen Biegung (extern int b= 2) des älteren Zeitrahmens (extern int = ... ; //W1, MN1)
Berichtigung
Abgleich von zwei Tops eines bestimmten Zeitraums (z. B. eine Woche und ein Monat)
Ist das der richtige Weg?
Bedingung tf1 >tf2
datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) { if (sy=="" || sy=="0") sy=Symbol(); double zz1, zz2, p1, p2; int i, k1=iBars(sy, tf1), ke=0; int j, k2=iBars(sy, tf2); datetime t; for (i=1; i<k1; i++) { zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i); if (zz1!=0) { ke++; if (ke>ne) {p1=zz1;} } } for (j=1; j<Bars; j++) { zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j); if (zz2!=0) { p2=zz2; t=iTime(sy, tf2, j); if(p1==p2) return(t); } } return(0); }Die Frage lautet wie folgt. Im MQL4-Buch, das unter MQL4.community zufinden ist, heißt es im Kapitel "GlobalVariables" im Abschnitt "Eigenschaften von GV-Variablen": "GV-Variablen können nur den Typ double haben". Im Abschnitt "Funktion GlobalVariableDel()" finden Sie ein Beispiel für den Experten globalvar.mq4 mit dem folgenden Inhalt:
Frage: Warum sind in diesem Beispiel die GV-Variablen Expert und New_Expert vom Typ int, obwohl diese Variablen, wie bereits erwähnt , vom Typ double sein sollten?
Vielen Dank im Voraus für die Antwort
Ist das der richtige Weg?
Bedingung tf1 >tf2
Hier stimmt etwas nicht.
Im ersten Zyklus versuche ich, den Preis der angegebenen Kurve auf der hohen TF zu finden. Ich beginne den zweiten Zyklus auf der niedrigen TF, wo ich nach dem Preis jeder Kurve auf den Balken suche, solange sie auf dem Diagramm ist, und ihn mit dem Preis aus dem ersten Zyklus vergleiche. Wenn ich einen solchen Preis finde, gebe ich die Zeit des Balkens der gegebenen Kurve in diesem TF zurück.
Ich habe es ab 2000.01.01 im Testgerät gestartet.
Was im Protokoll steht
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1688
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2495
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1192
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2315
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1069
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3161
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2351
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4535
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.338
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4249
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.416
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3353
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2658
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3138
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0344
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1537
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0608
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1216
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.079
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2401
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0104
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0917
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.8227
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.9596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: t1 1992.09.01 00:00
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p1 1.4104
Dasselbe gilt für das Jahr 2000, d. h. für den Beginn des Testzeitraums.
Wo liegt der Fehler? Ich bin ein schwacher Programmierer. Ich möchte ein Testprogramm schreiben. Es fällt mir schwer, damit umzugehen. Ich kann den Programmierer nicht darum bitten, weil es schrittweise geschieht, je nachdem, welche Daten ich erhalten habe.
Ich brauche hier etwas Hilfe. Ich habe auf der vorherigen Seite auch um Hilfe gebeten, um die Funktion NewZZ() zu schreiben.
Ich wäre dankbar, wenn jemand Fehler korrigieren und erklären würde.
Hier stimmt etwas nicht.
Helfen Sie den Schwachen.
Guten Tag. Ich habe auf der Website eine Nachlauffunktion gefunden:
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) weiter;
if(Auftragsart()==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop_)
{
{ if(OrderStopLoss()<Bid-Point*TrailingStop_)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop_,OrderTakeProfit(),0,Green);
zurück(0);
}
}
}
if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Punkt*TrailingStop_))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop_)) || (OrderStopLoss()==0)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop_,OrderTakeProfit(),0,Red);
zurück(0);
}
}
}
}
Beim Testen der Strategie funktioniert diese Funktion nach der Eröffnung der ersten Order einwandfrei, d. h. das Trailing läuft und die Order wird geschlossen. Aber nach dem Öffnen der zweiten Ordnung tritt ein Fehler bei der Nullteilung auf, wenn man sich auf die nachgestellte Funktion bezieht. Bitte helfen Sie mir, die Nachlauffunktion für die zweite Ordnung, die dritte Ordnung usw. zu aktivieren.