[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 302

 
OK Jungs, ich danke euch sehr, sehr hilfreich, sorry für die "Mut" ))
 
Parn25:

Helft mir hier, Leute!!!

Ich versuche, einen Expert Advisor auf der Grundlage der Morning-Channel-Strategie zu entwickeln. Die Essenz ist folgende: um 6:01 Uhr bestimmt das EURGBP-Paar den Kanal der Preisbewegung von 0 Uhr bis 6 Uhr. Wir setzen zwei schwebende Aufträge und wenn der ausgelöste schwebende Auftrag durch einen Stopper geschlossen wird, eröffnen wir einen Auftrag in der entgegengesetzten Richtung. Es ist der zweite Teil der Strategie, der nicht funktioniert. D.h. wenn ein Stop ausgelöst wurde, können wir keinen Auftrag in der Gegenrichtung eröffnen.

Sie müssen sofort einen Stopp für den Stopp setzen! Es wird automatisch ausgelöst.

Ich habe das im Müll gefunden, vielleicht ist es nützlich.

void OrderCloseAll(){
   for (int i=0;i<OrdersTotal();i++)
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderType()==OP_BUY)
       OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
      else
      if(OrderType() == OP_SELL)
       OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
}

void OrderDeleteAll(int lots){
     for (int i=0;i<OrdersTotal();i++)
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if (OrderType()>1&&OrderType()<6)
         if(OrderLots()==lots){
          OrderDelete(OrderTicket());
          i=0;
         }
}
 //----------------------------------------------------
// покупка
void OpenBuyLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
    OrderSend(Symbol(), OP_BUYLIMIT, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) + Loss*Point;
   double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLLIMIT, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
 //----------------------------------------------------
// покупка
void OpenBuySTOP(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_BUYSTOP, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellSTOP(double lot, double price){
  double   SL = NormalizeDouble(price,Digits) + Loss*Point;
  double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLSTOP, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
Dateien:
 
Parn25:

Leute, helft mir ein bisschen!!!

Ich versuche, einen EA zu schreiben, der die Morning-Channel-Strategie verwendet. Die Quintessenz ist folgende: Um 6:01 Uhr bestimmen wir beim EURGBP-Paar den Kanal der Preisbewegung von 0 Uhr bis 6 Uhr. Wir setzen zwei schwebende Aufträge und wenn der ausgelöste schwebende Auftrag durch einen Stopper geschlossen wird, eröffnen wir einen Auftrag in der entgegengesetzten Richtung. Es ist der zweite Teil der Strategie, der nicht funktioniert. D.h. wenn ein Stop ausgelöst wurde, können wir keinen Auftrag in der Gegenrichtung eröffnen.
Das Beispiel mit einem schwebenden Auftrag sieht ungefähr wie folgt aus.
Dateien:
 
costy_:
Das Beispiel mit dem Pendel sieht ungefähr so aus.
OK, danke, ich werde es ausprobieren!!!
 

Hallo.

Heute ist Wochenende, also habe ich nur den visuellen Tester in Betrieb :) Ich starte im Strategy Tester das Skript, um Indikatorwerte in eine Datei zu entladen, aber es entlädt sich vom aktuellen realen Datum (28. Oktober 23:55).

Wie übertrage ich den Wert (Zeit) des letzten Balkens des visuellen Testers in das Skript?

int start =iBarShift(NULL,0,Time[2200+EndB-1]);
int end   =iBarShift(NULL,0,Time[EndB]);

Wie kann man im Skript EndB - den Wert des letzten Balkens im Tester - übergeben und berechnen?

P.S. Als letzten Ausweg werde ich den gesamten Skriptcode in den Expert Advisor etc. einfügen.

 

Guten Tag!

Ich lese gerade das Lehrbuch, wenn ich eine Frage zum Studienmaterial stellen darf. Wenn es für diese Fragen ein eigenes Thema gibt, wäre ich für einen Link dankbar.

Ich studiere den ROC-Indikator (der Code ist in der beigefügten Datei).

Wenn ich es richtig verstehe, ist die Logik des Indikators wie folgt:

In der aktuellen Grafik wird die Referenz MA genommen, von der aus die Linie der Geschwindigkeitsänderung V gezeichnet wird,

weiter wird der MA der nächsten (größeren TF) berechnet, aber nicht angezeigt; die nächste Zeile V wird daraus berechnet.

Dasselbe gilt für den nächsten Zeitrahmen.

Frage: Ich verstehe den angegebenen Datensatz nicht

extern int Bars_V =13; // Anzahl der Takte für die Geschwindigkeitsberechnung
In den Erläuterungen zum Indikatorcode steht, dass die Geschwindigkeit als Differenz von 2 Takten berechnet wird.

Und mehr .....

Ich habe diesen Indikatorcode in MT4 geladen, auf H4 endet er nicht auf dem aktuellen Balken, sondern vor ca. 9-10 Tagen, wie die Historie zeigt.

Bei anderen Zeitrahmen ist es in Ordnung. Warum ist das so?

Vielen Dank im Voraus für Ihre Hilfe, mit freundlichen Grüßen Olga

Dateien:
my_roc.mq4  8 kb
 

Guten Tag!

Alle offenen Positionen müssen nach dem angegebenen Zeitintervall geschlossen werden, d.h. die Lebensdauer der offenen Position muss dem gewählten Intervall entsprechen.

Frage. Gibt es andere Lösungen als OrderOpenTime()?

 
Zar:

Hallo.

Heute ist Wochenende, das bedeutet, dass nur der visuelle Tester funktioniert :) Ich starte das Skript im Tester, um Indikatorwerte in eine Datei zu entladen, aber es entlädt sich vom aktuellen realen Datum (28. Oktober 23:55).

Wie übertrage ich den Wert (Zeit) des letzten Balkens des visuellen Testers in das Skript?

Wie kann man im Skript EndB - den Wert des letzten Balkens im Tester - übergeben und berechnen?

P.S. Als letzten Ausweg werde ich den gesamten Skriptcode in den Expert Advisor etc. einfügen.

Das Skript wird die Testerzeit nicht so leicht finden (der Indikator allerdings schon), Sie können sie an den Anfang der test.EA anhängen

int start()
{
GlobalVariableSet( "Time_test", Time[0]) ;
.....................

und im Skript

datetime time_start=GlobalVariableGet( "Time_test");

schnell und zuverlässig ...

 
Operr:

Guten Tag!

Alle offenen Positionen müssen nach dem angegebenen Zeitintervall geschlossen werden, d.h. die Lebensdauer der offenen Position muss dem gewählten Intervall entsprechen.

Frage. Gibt es andere Lösungen als OrderOpenTime()?

Es gibt viele Möglichkeiten, z. B. können wir die offene Zeit in die Datei schreiben, aber es wäre einfacher, durch die offenen Aufträge zu blättern und die verbleibende Zeit zu vergleichen.

Generell gilt: Umformulieren ... "Alle offenen Positionen müssen nach dem angegebenen Zeitintervall geschlossen werden" für jede einzelne Position (so habe ich die Frage verstanden).

 
LOA:

Guten Tag!

Ich lese gerade das Lehrbuch, wenn ich eine Frage zum Studienmaterial stellen darf. Wenn es für diese Fragen ein eigenes Thema gibt, wäre ich für einen Link dankbar.

Ich studiere den ROC-Indikator (der Code ist in der beigefügten Datei).

Wenn ich es richtig verstehe, ist die Logik des Indikators wie folgt:

In der aktuellen Grafik wird die Referenz MA genommen, von der aus die Linie der Geschwindigkeitsänderung V gezeichnet wird,

weiter wird der MA der nächsten (größeren TF) berechnet, aber nicht angezeigt; die nächste Zeile V wird daraus berechnet.

Dasselbe gilt für den nächsten Zeitrahmen.

Frage: Ich verstehe diesen Datensatz nicht

extern int Bars_V =13; // Anzahl der Takte für die Geschwindigkeitsberechnung
In den Erläuterungen zum Indikatorcode heißt es, dass die Geschwindigkeit als Differenz zwischen den Werten von 2 Balken berechnet wird.

Und mehr.....

Ich habe diesen Indikatorcode in MT4 geladen, auf H4 ist er nicht auf dem aktuellen Balken, sondern vor ca. 9-10 Tagen laut der Historie.

Bei anderen Zeitrahmen ist alles in Ordnung. Warum ist das so?

Für Ihre Hilfe bin ich Ihnen im Voraus sehr dankbar.

"larger TF" - nein, der gleiche MA, aber die Daten werden mit einem Offset Sh_1 re Sh_1=Bars_V; // Der Zeitraum der gemessenen Geschwindigkeit (Bars)

"Ähnlich für den nächsten Zeitrahmen" - nein, es gibt einen Wechsel am Anfang (für jeden Zeitrahmen sind die Koeffizienten unterschiedlich K2, K3)

    switch(Period())                 // Расчёт коэффициентов для..
     {                             // .. различных ТФ
      case     1: K2=5;K3=15; break;// Таймфрейм М1
      case     5: K2=3;K3= 6; break;// Таймфрейм М5
      case    15: K2=2;K3= 4; break;// Таймфрейм М15
      case    30: K2=2;K3= 8; break;// Таймфрейм М30
....
Period_MA_2 =K2*Period_MA_1;   // Расчётн.период МА для ближ. ТФ
Period_MA_3 =K3*Period_MA_1;   // Расчётн.период МА для след. ТФ

Die Definition "Berechnete MA-Periode für die nächste TF" ist nicht richtig, Fehler sind immer in den Lehrbüchern vorhanden (besonders die "Geschichten" sind sehr ähnlich)

"Frage: Ich verstehe den folgenden Eintrag nicht

extern int Bars_V =13; // Anzahl der Balken für die Geschwindigkeitsberechnung" Suche weiter über den Code Bars_V ...

   Sh_1=Bars_V;                   // Период измерен скорости (баров)

was ist dann Sh_1, dieser Wert ist ein Offset MA 1 Geschwindigkeitslinie, usw.

// Предназначен для использования в качестве примера в учебнике MQL4.
kein gutes Beispiel, lesen Sie etwas einfacheres aus den Standardindikatoren...