[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 303
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Es gibt viele Möglichkeiten, z.B. die Aufzeichnung der offenen Zeiten in einer Datei, aber es ist einfacher, durch die offenen Aufträge zu blättern und die Laufzeiten zu vergleichen.
..
"Es ist notwendig, alle offenen Positionen nach einem bestimmten Zeitintervall
Da das Skript die Zeit des Testers nicht so leicht findet (aber der Indikator schon), können Sie den Testberater an den Start bringen
schnell und zuverlässig ...
Ich versuche, einen Inikator zu schreiben. Ich verstehe nicht, warum es neu gezeichnet wird. Außerdem wird nur das Rendering herangezogen. Bitte helfen Sie mir. Ich bin neu im Programmieren.
#property indicator_chart_window
#Eigenschaft indicator_buffers 2
#property indicator_color1 Magenta
#Eigenschaft indicator_color2 Rot
//---- Eingabeparameter
extern int N;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- Puffer
double RLB_Buffer[];
double RLB_Buffer_1[];
double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong,first;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1;
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
string kurz_name;
//---- Indikatorzeile
SetIndexStyle(0, DRAW_ARROW);
SetIndexPfeil(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexPfeil(1,159);
SetIndexPuffer(1,RLB_Puffer_1);
zurück(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
Kommentar(i," ",ii);
//----
if(Balken < 3)
zurück(0);
//----------
first_t_bar=iBarShift(NULL,0,some_time,false); //Balken tendieren nach oben
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //letzter Balken, ganz rechts
i=gezählte_Balken-erster_t_Balken+1;
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //Trendstartbalken
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //letzter Balken, ganz rechts
ii=gezählte_Balken-erster_t_Balken_1+1;
// if(IsVisualMode()==TRUE) i=erster_t_balken-gezählte_balken-1; //if(gezählte_balken), dann Trendstartbalken
if(gezählte_Balken == 0)
{
first = false;
i=erster_t_bar+1;
ii=erster_t_bar_1+1;
}
//------------ //gezählte Minusbalken
dirlong = false;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) //wenn der Trend nach oben geht
{
while(i>=0)
{
x++; //Anzahl der Balken ab Trendbeginn
Real_Line_Balanse=Close[i+5]; //Zahl der Summe der Slows aus dem Trend
RLB=Real_Line_Balanse;
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //Zeigt die Linie nur an, wenn der Kurs gestiegen ist
//-------
if(RLB>Close[i]&& x>50) //wenn der Kurs die RLB von oben nach unten überschritten hat
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//dann HIGH ermitteln zwischen
//letzter Balken und Beginn des Trends
some_time_1=Time[bar_high]; //neuer Beginn des Abwärtstrends
x=0; //Nullstellung des Taktzählers ab Trendbeginn
Real_Line_Balanse=0;
}
i--;
}//while
//-------
}//dirlong
//---------------------
//---------------------
if(dirlong == false) //wenn Abwärtstrend
{
while(ii>=0)
{
x1++; //Anzahl der Balken ab Trendbeginn
Real_Line_Balanse_1=Close[ii+10]; //zählt die Anzahl der Balken des Trends
RLB_1=Real_Line_Balanse_1;
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //wenn der Kurs die RLB von oben nach unten überschritten hat
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//dann Bestimmung des LOW zwischen
//letzter Balken und Beginn des Trends
some_time=Time[bar_low]; //neuer Beginn des Trends nach oben
x1=0; //Nullstellung des Taktzählers ab Trendbeginn
Real_Line_Balanse_1=0;
}
ii--;
} //while
//-------
}//dirlong
//---------------------
zurück(0);
}
//+------------------------------------------------------------------+
Das ist Unsinn. Anstelle von
i=gezählte_Balken-erster_t_Balken+1;
Ich habe einen Entwurf erstellt, der die Balken zählt, die er selbst zählt. ALLES begann reibungslos zu laufen. IndicatorCounted(); glitches oder ich kapiere es nicht...
Wie kann man eine Variable über den Status eines abgeschlossenen Auftrags informieren?
Das ist Unsinn. Anstelle von
i=gezählte_Balken-erster_t_Balken+1;
Ich habe ein Konstrukt eingebaut, das die gezählten Balken selbst zählt. ALLES geht gut. IndicatorCounted(); glitches oder ich kapiere es nicht...
Sie verwenden while(i>=0), d.h. wenn eine neue Kerze erscheint, ist i=1 (um sicherzustellen, dass die Daten der vorherigen Kerze einmal zu den aufgezeichneten Daten gezählt werden).
Warum geben Sie some_time=D'1971.01.11 00:00'; verwenden Bars , IndicatorCounted funktioniert nicht für mich (gut, der Fehler ist wahrscheinlich wegen der ersten_t_bar).
Ihr Algorithmus und Sie sollten ihn korrigieren.
"Ich bin neu im Programmieren."Seit 2007).
Wie kann man eine Variable über den Status eines abgeschlossenen Auftrags informieren?
:)
+ ...
Für Vitaluha:
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
Das Problem ist, dass der EA ständig Aufträge neu eröffnet, d.h. es gibt ein Kaufsignal - er öffnet einen Auftrag, schließt ihn dann mit Gewinn, und wenn die Bedingungen noch erhalten sind, öffnet er ihn wieder.
Ich dachte, dies könnte mit dem traditionellen Kauf- und Verkaufszähler gehandhabt werden - wenn ein Kaufauftrag eröffnet wurde, beträgt der Zähler +1 und ein neuer Kauf kann erst eröffnet werden, wenn der Zähler über 0 steigt, und der Zähler wird nach einem Verkauf auf Null gesetzt.