Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 832

 
void OnTick()
  {
 TimeCurrent(dt); 
//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }
//--- сначала нужно записать в массивы значения буферов индиктора Fractal
//--- заполнение данными буфера

   ArraySetAsSeries(Signal,true);
   ArraySetAsSeries(Main,true);

   
   if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
   if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;

   double Main_1=Main[1];
   Main_1=NormalizeDouble(Main_1,5);
   Print("Main_1=",DoubleToString(Main_1,5));
    
   double Main_2=Main[2];
   Main_2=NormalizeDouble(Main_2,5);
   
   double Main_3=Main[3];
   Main_3=NormalizeDouble(Main_3,5);
   
   double Signal_1=Signal[1];
   Signal_1=NormalizeDouble(Signal_1,5);
   Print("Signal_1=",DoubleToString(Signal_1,5));
   
   double Signal_2=Signal[2];
   Signal_2=NormalizeDouble(Signal_2,5);
   
   double Signal_3=Signal[3];
   Signal_3=NormalizeDouble(Signal_3,5);
   
   
// Для сохранения значения времени бара мы используем static-переменную Old_Time.
// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }
     
     
// открытие покупок

     if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
     {
      if(IsNewBar!=false)
        {
           
              {
               open_by_market();

              }
        }
     }
  

  // закрытие покупок 
 
   if (Signal_3>80&&Signal_2>80&&Signal_1<80)
   {
   if(PositionsTotal()>0)
        {
         for(int i=0;i<PositionsTotal();i++)
           {
            ulong orders_ticket=PositionGetTicket(i);
            if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
              
              
              {  trade.PositionClose(orders_ticket); }        
            
         }
     }           
   }
 
}
   

Guten Tag, bitte klären Sie, wie man zwei Aufgaben implementiert (am Beispiel von Kaufsignalen).

gegeben: Einstiegspunkt - stochastische Linie kreuzt unter 20

Handelsschluss - Überschreiten der 80er-Marke nach unten durch die langsame Stochastiklinie

d.h. eröffnen Sie nicht mehrere Positionen auf derselben Ebene wie auf dem beigefügten Bild

2. bei der zweiten, nicht bei der ersten Überschreitung des Niveaus 80 von oben nach unten mit einer langsamen stochastischen Linie zu schließen

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Dateien:
121.png  27 kb
 
gastinets:

Guten Tag, bitte klären Sie, wie man zwei Aufgaben implementiert (am Beispiel von Kaufsignalen).

gegeben: Einstiegspunkt - stochastische Linie kreuzt unter 20

Handelsschluss - Überschreiten der 80er-Marke nach unten durch die langsame stochastische Linie

d.h. eröffnen Sie nicht mehrere Positionen auf derselben Ebene wie auf dem beigefügten Bild

2) Die zweite Order würde bei der zweiten, nicht der ersten, Überschreitung des Niveaus 80 nach unten durch die langsame stochastische Linie geschlossen werden

Formulieren Sie es zunächst klar:

  • Bedingung der Positionseröffnung
  • Bedingung schließen

 
Bitte teilen Sie mir mit, wie ich auf die Positionsinformationen in der OnTick-Funktion des konstruierten Expert Advisors zugreifen kann. Zumindest, ob sie offen ist oder nicht. Wo kann ich einen Hinweis auf die Stelle erhalten? Oder muss es auf eine andere Weise geschehen?
 
VHS:
Bitte geben Sie an, wie man in der OnTick-Funktion eines konstruierten Expert Advisors auf Positionsinformationen zugreifen kann. Zumindest, ob sie offen ist oder nicht. Wo kann ich einen Hinweis auf die Stelle erhalten? Oder muss es auf eine andere Weise geschehen?

Der Expert Advisor wurde von wem entwickelt?

Bitte zeigen Sie mir den Code.
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 
Vladimir Karputov:

Wer hat den Experten entworfen?

Zeigen Sie den Code, bitte.
Der Expert Advisor wird von Wizard unter Verwendung einer benutzerdefinierten Signalklasse und einer benutzerdefinierten Handelsklasse entwickelt. Der Code des Expert Advisors selbst ist Standard. ExtExpert.OnTick() wird in OnTick aufgerufen, der Rest des Codes wird mit der Standardbibliothek erstellt. Diese Frage ist eigentlich eine Folgefrage zu der vorhergehenden, auf die niemand geantwortet hat. Ich möchte, dass der von Wizard erstellte Expert Advisor die benutzerdefinierte Signalklasse nur zum Eröffnen von Positionen verwendet und sie nur beim Handel schließt und Signale der Signalklasse ignoriert. Ich habe herausgefunden, wie ich Signale ignorieren kann. Aber wie man in onTick Informationen darüber erhält, ob es eine offene Position gibt, um das Ignorieren zu ermöglichen, verstehe ich nicht.
 
VHS:
***Und ich habe immer nur durch Handel abgeschlossen ***

Das ist nicht klar.

 

VHS:
***а закрывал уже только по трейдингу ***

Wladimir Karputow:

Das ist nicht klar.

"D" und "L" nebeneinander auf der Tastatur. Mein Fehler.

 
Artyom Trishkin:

"D" und "L" nebeneinander auf der Tastatur. Falsch.

Ja, Artyom, ich danke Ihnen vielmals. Offenbar automatische Ersetzung (oder krumme Hände). Und die benutzerdefinierte Klasse und der Abschluss sind nicht trayDing, sondern trayLing.
In der Klasse CExpert geht die Verarbeitungsmethode zuerst in Richtung und prüft auf ein Signal der Signalklasse. Und dann (nur wenn es eine SelectPosition gibt) prüft es Trailing. Dies hat zur Folge, dass eine offene Position manchmal auch dann geschlossen wird, wenn keine Signale von der Trailing-Klasse vorliegen und ein Signal von der Signalklasse empfangen wird.
Die vorherige Variante - Informationen über das Vorhandensein einer offenen Position von der Klasse Trailing Stop zu übernehmen und sie über OnTick an Ignore zu übergeben - hat nicht funktioniert. Ich habe gelernt, wie man sich in OnInit das Trailing-Objekt merkt und es in OnTick überträgt. Sie funktioniert jedoch nur, solange die Stelle offen ist. Nachdem es jedoch geschlossen wurde, beginnt die Verarbeitung nicht mit der Nachverfolgung, und Ignore wird weiterhin ignoriert. Es gibt also nur noch einen letzten Feinschliff: nach dem Schließen der Position diesen Moment in OnTick definieren und den Ignorierwert "0" zurückgeben. Aber wie man effektiv Informationen über das Vorhandensein/Nichtvorhandensein einer Position in OnTick erhält, verstehe ich nicht.
 
VHS:
Ja, Artem, ich danke Ihnen vielmals. Offensichtlich automatische Änderung (oder krumme Hände). Und die benutzerdefinierte Klasse und schließen ist nicht trayDing, es ist trayLing.
In der Klasse CExpert geht die Verarbeitungsmethode zuerst in Richtung und prüft auf ein Signal der Signalklasse. Und dann (nur wenn es eine SelectPosition gibt) prüft es Trailing. Dies hat zur Folge, dass eine offene Position manchmal auch dann geschlossen wird, wenn keine Signale von der Trailing-Klasse vorliegen und ein Signal von der Signalklasse empfangen wird.
Die vorherige Variante - Informationen über das Vorhandensein einer offenen Position von der Klasse Trailing Stop zu übernehmen und sie über OnTick an Ignore zu übergeben - hat nicht funktioniert. Ich habe gelernt, wie man sich in OnInit das Trailing-Objekt merkt und es in OnTick überträgt. Sie funktioniert jedoch nur, solange die Stelle offen ist. Nachdem es jedoch geschlossen wurde, beginnt die Verarbeitung nicht mit der Nachverfolgung, und Ignore wird weiterhin ignoriert. Es gibt also nur noch einen letzten Feinschliff: nach dem Schließen der Position diesen Moment in OnTick definieren und den Ignorierwert "0" zurückgeben. Aber wie man effektiv Informationen über das Vorhandensein/Nichtvorhandensein einer Position in OnTick erhält, verstehe ich nicht.

Ich denke, Sie können es viel einfacher - in der EA die CLOSE Schwelle ist auf 100 gesetzt, und Sie geben ein Gewicht, um das Signal 0,5 - also ein Signal mit einem Gewicht von 0,5 wird NIE über die 100 Schwelle zu bekommen


Grund der Beschwerde: