der Compiler selbst ersetzt die Typen im Moment des Aufrufs der Schablonenfunktion, wenn ein solcher Aufruf noch nicht im Code war, dann wird der Compiler eine weitere Funktionskopie erstellen und die Typen selbst setzen - nun, als ob logisch - eine Schablone
Wenn die Frage lautet, wie der Typ in einer solchen Funktion zu definieren ist, verwenden Sie
//--- buffers (массивы под буферы индикатора)//--------------------------------------------------------------------double RSI[]; // буфер под RSI//--------------------------------------------------------------------double MAr1_fast[]; // буфер под быструю МАdouble MAr2_slow[]; // буфер под медленную МАdouble MAr2_slowColor[]; // буфер под цвета медленной МА//--------------------------------------------------------------------double MAr3_slow_glob[]; // буфер под глобальную медленную МАdouble MAr3_slow_globColor[]; // буфер под цвета глобальной медленной МА//--------------------------------------------------------------------
Im Wesentlichen zeichnet der Indikator 4 Linien: die ersten beiden sind einfarbig, die nächsten beiden zweifarbig (sie wechseln die Farbe bei Knicken).
Die Zweifarbigkeit ist auf die Art des Zeichnens von DRAW_COLOR_LINE zurückzuführen.
Frage: die erste Zeile (Puffer 2 und 3 im obigen Code) ist perfekt gezeichnet und der gesamte Code, der für sie in OnInit geschrieben wurde, funktioniert; zweite Zeile erscheint aus irgendeinem Grund, zum Beispiel funktioniert die Zeile nicht:
PlotIndexSetString (4, PLOT_LABEL, "MA (" + IntegerToString(MA_slow_glob_period) + "), SMA");
D.h. anstelle des Textes, den ich im Datenfenster eingestellt habe, wird nur der Name des Indikators anstelle des Puffers angezeigt. Die Linie selbst ist zwar gezogen, aber sie ist, wie es sich gehört, vielfarbig. Ich glaube, der Trick liegt in der Verschiebung der Nummerierung? Ich bin mir zum Beispiel nicht sicher, warum im oberen Teil des Codes, wenn ich die letzte Zeile mit der #property-Direktive deklariere, der Index 4 und nicht 5 sein sollte, da 4 Puffer bereits vorher verwendet wurden. Gibt es überhaupt eine Beziehung zwischen Zeilennummerierung bei der Deklaration mit #property und Puffer Nummerierung bei der Verknüpfung mit Arrays in OnInit?
Bitte geben Sie an, was im obigen Code falsch ist. Vielleicht kann jemand ein Beispiel für einen Indikator finden, bei dem mindestens zwei Linien mit der Zeichenmethode DRAW_COLOR_LINE.... gezeichnet werden
Eine weitere Frage in diesem Zusammenhang: Wie werden die bunten Linienpuffer miteinander verbunden? Ich meine, woher weiß der kompilierte Code, dass, wenn ich einen Wert in einen Farbpuffer eintrage, diese Farbe zum Einfärben einer Linie aus einem anderen Puffer verwendet werden soll?
Nachmittags. Ich stehe vor einer seltsamen Sache , wenn ich einen Indikator in MQL5 schreibe (Indikator in einem separaten Unterfenster, 4 Zeilen).
Die anfänglichen Pufferbeschreibungen lauten wie folgt:
Weiter in OnInit:
Im Wesentlichen zeichnet der Indikator 4 Linien: die ersten beiden sind einfarbig, die nächsten beiden zweifarbig (sie wechseln die Farbe bei Knicken).
Die Zweifarbigkeit ist auf die Art des Zeichnens von DRAW_COLOR_LINE zurückzuführen.
Frage: die erste Zeile (Puffer 2 und 3 im obigen Code) ist perfekt gezeichnet und der gesamte Code, der für sie in OnInit geschrieben wurde, funktioniert; zweite Zeile erscheint aus irgendeinem Grund, zum Beispiel funktioniert die Zeile nicht:
D.h. anstelle des Textes, den ich im Datenfenster eingestellt habe, wird nur der Name des Indikators anstelle des Puffers angezeigt. Die Linie selbst ist zwar gezogen, aber sie ist, wie es sich gehört, vielfarbig. Ich glaube, der Trick liegt in der Verschiebung der Nummerierung? Zum Beispiel bin ich mir nicht sicher, warum im oberen Teil des Codes, wenn ich die letzte Zeile mit der #property-Direktive deklariere, der Index 4 und nicht 5 sein sollte, da 4 Puffer bereits vorher verwendet wurden. Gibt es überhaupt eine Beziehung zwischen Zeilennummerierung bei der Deklaration mit #property und Puffer Nummerierung bei der Verknüpfung mit Arrays in OnInit?
Bitte teilen Sie mir mit, was an dem obigen Code falsch ist. Vielleicht kann jemand ein Beispiel für einen Indikator finden, bei dem mindestens zwei Linien mit der Zeichenmethode DRAW_COLOR_LINE.... gezeichnet werden
Eine weitere Frage in diesem Zusammenhang: Wie werden die bunten Linienpuffer miteinander verbunden? Ich meine, woher weiß der kompilierte Code, dass, wenn ich einen Wert in einen Farbpuffer eintrage, diese Farbe zum Einfärben einer Linie aus einem anderen Puffer verwendet werden soll?
Mappings werden anders nummeriert als Puffer.
PlotIndexSetString (3, PLOT_LABEL, "MA (" + IntegerToString(MA_slow_glob_period) + "), SMA");
Guten Tag. Ich möchte einen EA schreiben, der auf der Messung des Neigungswinkels eines gleitenden Durchschnitts (oder besser einer Reihe von ihnen, nämlich dem Alligator) basiert, so dass der EA bei einem starken Preisimpuls einen Alarm auslösen würde, vorzugsweise mit einer kleinen Verzögerung. Bitte geben Sie Hinweise, wie Sie den Winkel des MA messen oder dem EA mitteilen können, dass der Impuls aufgetreten ist. Vielleicht gibt es bereits bekannte Möglichkeiten, dies zu tun. Oder zum Beispiel ein freier Indikator, der auf der Berechnung von Impulsen basiert?
Ich habe eine Funktion geschrieben, um die Balkenanzahl eines Fraktals aus 3 Balken zu ermitteln. Auf der Online-Karte scheint es richtig zu sein. Aber bei der visuellen Prüfung im Prüfgerät liegt sie. Kann einer der Fachleute einen Blick auf den Code werfen und einige Fehler finden?
Ich wäre Ihnen sehr dankbar.
//+----------------------------------------------------------------------------+//| Описание : Возвращает номер бара трёхбарного фарактала по его номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| nf - номер экстремума ( 0 - последний) |//+----------------------------------------------------------------------------+int BarLocExtr(string sy="0", int tf=0, int ne=0, int mode=MODE_UPPER)
{
if(sy=="" || sy=="0") sy=Symbol();
int nlext=0,k=iBars(sy,tf);
nlext=0;
if(mode==MODE_UPPER)
{
for (int i=2; i<=k; i++)
{
if(High[i]>High[i+1] && High[i]>High[i-1])
{
nlext++;
if(nlext>ne) return(i);
}
}
}
if(mode==MODE_LOWER)
{
for (i=2; i<=k; i++)
{
if(Low[i+1]>Low[i] && Low[i-1]>Low[i])
{
nlext++;
if(nlext>ne)
{
//Print("i=",i," Low[i+1]=",Low[i+1]," Low[i]=",Low[i]," Low[i-1]=",Low[i-1]);return(i);
}
}
}
}
Print("Бар локального экстремума не найден");
return(-1);
}
Скальперские автоматические системы по праву считаются вершиной алгоритмического трейдинга, но при этом они же являются и самыми сложными для написания кода. В этой статье мы покажем, как с помощью встроенных средств отладки и визуального тестирования строить стратегии, основанные на анализе поступающих тиков. Для выработки правил входа и...
Guten Tag. WELCHEN CODE MUSS ICH HINZUFÜGEN, DAMIT DER INDIKATOR IM TESTER NACH EINEM MONAT NICHT MEHR FUNKTIONIERT? D.H. ICH HABE ALLES RICHTIG GESCHRIEBEN! ABER WENN ICH EINEN BACKTEST MACHE, FUNKTIONIERT ES WIEDER. (mgl4)
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
datetime data=D'2020.09.16 20:07'; // Time Blockif(TimeCurrent()>data)
{
Print("Демонстрационный период закончился, покупайте индикатор :)");
Alert("Демонстрационный период закончился, покупайте индикатор :)");
return(INIT_FAILED);
}
if(IsTesting() && TimeCurrent() >= D'2020.09.16 20:07')// для тестировщиков, ограничение работы по времени
{
Comment("Демонстрационный период закончился, покупайте индикатор :) Демонстрационный период закончился, покупайте индикатор :) Демонстрационный период закончился, покупайте индикатор :)");
return(0);
}
Ich wollte eine Bedingung in den Auftragsschließungszyklus amTag der Auftragseröffnung einfügen, damitdie Aufträge, die am Freitag geöffnet wurden, nicht geschlossen werden.
while (OrdersTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if ((OrderMagicNumber()==Magic) && (TimeDayOfWeek(OrderOpenTime())<5))
{
if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if(result!=TRUE) { error=GetLastError();
Print("LastError = ",error, " ",Symbol()); }
else error=0;
}
elsePrint("NoMagic ", OrderMagicNumber()); // for Debug
}
elsePrint( "Error when order select ", GetLastError());
}
Guten Tag. WELCHEN CODE SOLLTE ICH HINZUFÜGEN, DAMIT DER INDIKATOR IM TESTER NACH EINEM MONAT NICHT MEHR FUNKTIONIERT? D.H. ICH HABE ALLES RICHTIG GESCHRIEBEN! ABER WENN ICH EINEN BACKTEST MACHE, FUNKTIONIERT ES WIEDER. (mgl4)
Sie müssen diesen Code nicht in OnInit, sondern in OnTick() schreiben.
Ich wollte eine Bedingung in den Auftragsschließungszyklus am Tag derAuftragseröffnung aufnehmen, damit die am Freitag eröffneten Aufträge nicht geschlossen werden.
Versuchen Sie es auf diese Weise:
for(int is=OrdersTotal()-1; is>=0; is--)
{
if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))
{
if ((OrderMagicNumber()==Magic) && (TimeDayOfWeek(OrderOpenTime())<5))
{
if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if(result!=TRUE) { error=GetLastError();
Print("LastError = ",error, " ",Symbol()); }
else error=0;
}
else Print("NoMagic ", OrderMagicNumber()); // for Debug
}
else Print( "Error when order select ", GetLastError());
}
Wie erkenne ich den Typ des Eingabeparameters?
der Compiler selbst ersetzt die Typen im Moment des Aufrufs der Schablonenfunktion, wenn ein solcher Aufruf noch nicht im Code war, dann wird der Compiler eine weitere Funktionskopie erstellen und die Typen selbst setzen - nun, als ob logisch - eine Schablone
Wenn die Frage lautet, wie der Typ in einer solchen Funktion zu definieren ist, verwenden Sie
typenameUPD: dem obigen Beispiel wurde der Parametertyp Drucker hinzugefügt:
2020.09.16 18:58:21.679 tst (EURUSD,M5) int myfunc<int,int>(int,int)
2020.09.16 18:58:21.680 tst (EURUSD,M5) val1 = 2, typenname = int
2020.09.16 18:58:21.681 tst (EURUSD,M5) val2 = 3, typenname = int
2020.09.16 18:58:21.681 tst (EURUSD,M5) 5
2020.09.16 18:58:21.681 tst (EURUSD,M5) int myfunc<double,double>(double,double)
2020.09.16 18:58:21.681 tst (EURUSD,M5) val1 = 10.0, typenname = double
2020.09.16 18:58:21.681 tst (EURUSD,M5) val2 = 30.0, typenname = double
2020.09.16 18:58:21.681 tst (EURUSD,M5) 40
UPD:__FUNCSIG__ zu diesem Beispiel hinzugefügt
Nachmittags.
Ich stehe vor einer seltsamen Sache , wenn ich einen Indikator in MQL5 schreibe (Indikator in einem separaten Unterfenster, 4 Zeilen).
Die anfänglichen Pufferbeschreibungen lauten wie folgt:
Weiter in OnInit:
Im Wesentlichen zeichnet der Indikator 4 Linien: die ersten beiden sind einfarbig, die nächsten beiden zweifarbig (sie wechseln die Farbe bei Knicken).
Die Zweifarbigkeit ist auf die Art des Zeichnens von DRAW_COLOR_LINE zurückzuführen.
Frage: die erste Zeile (Puffer 2 und 3 im obigen Code) ist perfekt gezeichnet und der gesamte Code, der für sie in OnInit geschrieben wurde, funktioniert;
D.h. anstelle des Textes, den ich im Datenfenster eingestellt habe, wird nur der Name des Indikators anstelle des Puffers angezeigt. Die Linie selbst ist zwar gezogen, aber sie ist, wie es sich gehört, vielfarbig.zweite Zeile erscheint aus irgendeinem Grund, zum Beispiel funktioniert die Zeile nicht:
Ich glaube, der Trick liegt in der Verschiebung der Nummerierung? Ich bin mir zum Beispiel nicht sicher, warum im oberen Teil des Codes, wenn ich die letzte Zeile mit der #property-Direktive deklariere, der Index 4 und nicht 5 sein sollte, da 4 Puffer bereits vorher verwendet wurden. Gibt es überhaupt eine Beziehung zwischen Zeilennummerierung bei der Deklaration mit #property und Puffer Nummerierung bei der Verknüpfung mit Arrays in OnInit?
Bitte geben Sie an, was im obigen Code falsch ist. Vielleicht kann jemand ein Beispiel für einen Indikator finden, bei dem mindestens zwei Linien mit der Zeichenmethode DRAW_COLOR_LINE.... gezeichnet werden
Eine weitere Frage in diesem Zusammenhang: Wie werden die bunten Linienpuffer miteinander verbunden? Ich meine, woher weiß der kompilierte Code, dass, wenn ich einen Wert in einen Farbpuffer eintrage, diese Farbe zum Einfärben einer Linie aus einem anderen Puffer verwendet werden soll?
Nachmittags.
Ich stehe vor einer seltsamen Sache , wenn ich einen Indikator in MQL5 schreibe (Indikator in einem separaten Unterfenster, 4 Zeilen).
Die anfänglichen Pufferbeschreibungen lauten wie folgt:
Weiter in OnInit:
Im Wesentlichen zeichnet der Indikator 4 Linien: die ersten beiden sind einfarbig, die nächsten beiden zweifarbig (sie wechseln die Farbe bei Knicken).
Die Zweifarbigkeit ist auf die Art des Zeichnens von DRAW_COLOR_LINE zurückzuführen.
Frage: die erste Zeile (Puffer 2 und 3 im obigen Code) ist perfekt gezeichnet und der gesamte Code, der für sie in OnInit geschrieben wurde, funktioniert;
D.h. anstelle des Textes, den ich im Datenfenster eingestellt habe, wird nur der Name des Indikators anstelle des Puffers angezeigt. Die Linie selbst ist zwar gezogen, aber sie ist, wie es sich gehört, vielfarbig.zweite Zeile erscheint aus irgendeinem Grund, zum Beispiel funktioniert die Zeile nicht:
Ich glaube, der Trick liegt in der Verschiebung der Nummerierung? Zum Beispiel bin ich mir nicht sicher, warum im oberen Teil des Codes, wenn ich die letzte Zeile mit der #property-Direktive deklariere, der Index 4 und nicht 5 sein sollte, da 4 Puffer bereits vorher verwendet wurden. Gibt es überhaupt eine Beziehung zwischen Zeilennummerierung bei der Deklaration mit #property und Puffer Nummerierung bei der Verknüpfung mit Arrays in OnInit?
Bitte teilen Sie mir mit, was an dem obigen Code falsch ist. Vielleicht kann jemand ein Beispiel für einen Indikator finden, bei dem mindestens zwei Linien mit der Zeichenmethode DRAW_COLOR_LINE.... gezeichnet werden
Eine weitere Frage in diesem Zusammenhang: Wie werden die bunten Linienpuffer miteinander verbunden? Ich meine, woher weiß der kompilierte Code, dass, wenn ich einen Wert in einen Farbpuffer eintrage, diese Farbe zum Einfärben einer Linie aus einem anderen Puffer verwendet werden soll?
Mappings werden anders nummeriert als Puffer.
Das sollte funktionieren.
Guten Tag zusammen!
Ich habe eine Funktion zur Änderung des Stoploss erstellt. Aber wenn es funktioniert, gibt es EURUSD,H1: OrderModify Fehler 130.
Und der Preis ist weit von dem Ort entfernt, an dem der Stoploss gesetzt werden sollte.
Hier ist die Funktion:
void open_bu(string walpa, int op) { bool err; int spred=(int)MarketInfo(walpa,MODE_SPREAD); double point=MarketInfo(walpa,MODE_POINT); int digits=(int)MarketInfo(walpa,MODE_DIGITS); for(int is=OrdersTotal()-1; is>=0; is--) { if(OrderSelect(is, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==walpa) { if(OrderType()==op && NormalizeDouble(OrderStopLoss(),digits) < NormalizeDouble(OrderOpenPrice()+spred*point, digits) ) { err=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()+spred*point, digits), OrderProfit(), 0, clrNONE); if(!err) error(GetLastError()); } if(OrderType()==op && (NormalizeDouble(OrderStopLoss(),digits) > NormalizeDouble(OrderOpenPrice()-spred*point, digits) || OrderStopLoss()==0)) { Print(walpa," ",spred," ",point," ",digits," ",NormalizeDouble(OrderOpenPrice()-spred*point, digits)); err=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()-spred*point, digits), OrderProfit(), 0, clrNONE); if(!err) error(GetLastError()); } } } return; }Ich habe eine Funktion geschrieben, um die Balkenanzahl eines Fraktals aus 3 Balken zu ermitteln. Auf der Online-Karte scheint es richtig zu sein. Aber bei der visuellen Prüfung im Prüfgerät liegt sie. Kann einer der Fachleute einen Blick auf den Code werfen und einige Fehler finden?
Ich wäre Ihnen sehr dankbar.
Guten Tag. WELCHEN CODE MUSS ICH HINZUFÜGEN, DAMIT DER INDIKATOR IM TESTER NACH EINEM MONAT NICHT MEHR FUNKTIONIERT? D.H. ICH HABE ALLES RICHTIG GESCHRIEBEN! ABER WENN ICH EINEN BACKTEST MACHE, FUNKTIONIERT ES WIEDER. (mgl4)
Hallo!
Ich wollte eine Bedingung in den Auftragsschließungszyklus amTag der Auftragseröffnung einfügen, damitdie Aufträge, die am Freitag geöffnet wurden, nicht geschlossen werden.
Guten Tag. WELCHEN CODE SOLLTE ICH HINZUFÜGEN, DAMIT DER INDIKATOR IM TESTER NACH EINEM MONAT NICHT MEHR FUNKTIONIERT? D.H. ICH HABE ALLES RICHTIG GESCHRIEBEN! ABER WENN ICH EINEN BACKTEST MACHE, FUNKTIONIERT ES WIEDER. (mgl4)
Sie müssen diesen Code nicht in OnInit, sondern in OnTick() schreiben.
Hallo!
Ich wollte eine Bedingung in den Auftragsschließungszyklus am Tag derAuftragseröffnung aufnehmen, damit die am Freitag eröffneten Aufträge nicht geschlossen werden.
Versuchen Sie es auf diese Weise:
for(int is=OrdersTotal()-1; is>=0; is--) { if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES)) { if ((OrderMagicNumber()==Magic) && (TimeDayOfWeek(OrderOpenTime())<5)) { if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error, " ",Symbol()); } else error=0; } else Print("NoMagic ", OrderMagicNumber()); // for Debug } else Print( "Error when order select ", GetLastError()); }