Diskussion zum Artikel "Schrittweiser Leitfaden für Anfänger zum Schreiben eines Expert Advisors in MQL5" - Seite 12

 

Bitte verzeihen Sie mir, ich habe damals nicht verstanden, wie diese Schaltfläche zu benutzen ist, aber jetzt weiß ich es, glaube ich.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
[Gelöscht]  
Grenjohn:

Bitte verzeihen Sie mir, ich habe damals nicht verstanden, wie man diese Schaltfläche benutzt, jetzt glaube ich, dass ich es weiß.

Es geht nur um die Bedingung:

if( OrdersTotal() == 0 )

Es fehlt eine Überprüfung, ob das von Ihnen angegebene Datum date1 eingetreten ist. Jetzt sollten Sie sofort mit dem ersten Tick eine Order eröffnen, wenn es keine offenen Orders gibt! D.h. Sie müssen das Gleiche tun wie hier,

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

aber den korrekten Tag, die Stunde, die Minute, die Sekunde (ein paar Sekunden) angeben.

Ja, und noch eine Sache. Die Preise sl und tp sollten normalisiert werden, sonst kann es zu Fehlern kommen.

 

Irgendetwas hat aufgehört, sich dem Diagramm anzuschließen und bitte sagen Sie mir, was es bedeutet, sl und tp Preise zu normalisieren?

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

Bitte verzeihen Sie mir, ich habe nicht verstanden, wie man diese Schaltfläche verwendet, jetzt glaube ich, dass ich es verstanden habe.

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - keine Position
   case 0:
   {
     // Wenn Datum1 kommt, eine Position eröffnen
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 war eine Position
   case 1:
   {
     // Schließen Sie die Position, wenn die Zeit von date2 eintrifft.
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

Wenn Datum1 auftritt , öffnen wir eine Position, wenn Datum2 auftritt, schließen wir sie, danach tun wir nichts mehr bis zum Neustart.

[Gelöscht]  
Grenjohn:

Irgendetwas hat aufgehört, sich dem Chart anzuschließen und bitte sagen Sie mir, was es bedeutet, sl und tp Preise zu normalisieren?

https://www.mql5.com/de/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Ich danke euch allen sehr für eure Hilfe und für eure Geduld, aber bis jetzt funktioniert es leider nicht!!!?

Ich versuche, einen Expert Advisor hinzuzufügen, aber er wird nicht hinzugefügt!?!!?

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - keine Position
   case 0:
   {
     // Wenn Datum1 kommt, eine Position eröffnen
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 war eine Position
   case 1:
   {
     // Schließen Sie die Position, wenn die Zeit von date2 eintrifft.
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}


 
Grenjohn:

Ich danke Ihnen allen sehr für Ihre Hilfe und Ihre Geduld, aber bis jetzt funktioniert es leider nicht!!!?

Ich versuche, einen Expert Advisor hinzuzufügen, aber er wird nicht hinzugefügt!?!?


Das bedeutet, dass Sie keinen Expert Advisor, sondern einen Indikator erstellt haben.

Erstellen Sie einen neuen EA über den Assistenten und ersetzen Sie nur den Code der OnStart-Funktion und alle globalen Variablen/externen Parameter.

[Gelöscht]  
komposter:

Das bedeutet, dass Sie keinen Expert Advisor, sondern einen Indikator erstellt haben.

Erstellen Sie einen neuen EA über den Assistenten und ersetzen Sie nur den Code der OnStart-Funktion und alle globalen Variablen/externen Parameter.

Höchstwahrscheinlich hat er einen Expert Advisor erstellt, aber mit der Funktion OnStart(), die nur für Skripte gedacht ist.
[Gelöscht]  
Grenjohn:

Ich danke Ihnen allen sehr für Ihre Hilfe und Ihre Geduld, aber bis jetzt funktioniert es leider nicht!!!?

Ich versuche, einen Expert Advisor hinzuzufügen, aber er wird nicht hinzugefügt!?!?


Erstellen Sie einen neuen Expert Advisor in MQL4, kopieren Sie dort den bestehenden Code und ersetzen Sie die Zeile

void OnStart()

durch

void OnTick()

Dies ist für den Fall, dass Sie einen Expert Advisor erstellen möchten. Wenn Sie ein Skript erstellen möchten, erstellen Sie ein neues Skript und kopieren Sie den vorhandenen Code dort vollständig und ohne Änderungen (obwohl ein Skript im Falle des zeitbasierten Handels keinen Sinn macht).

 
Aus dem Artikel:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

Wo ist der Code, der diese Beschreibung erfüllt? Ich verstehe etwas nicht, oder es gibt so etwas nicht im Code.