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

 

Hallo zusammen,

Ich versuche, einen sehr einfachen EA zu erstellen, der zwei Schlusskurse vergleicht und darauf basierend entweder eine Kauf- oder eine Verkaufsorder eröffnet.

Beim ersten Auftrag geht alles gut, aber sobald die Bedingung von Verkauf auf Kauf umschaltet, werden mehrere Aufträge auf einmal erteilt.

m_trade ist ein Ctrade-Objekt.

// Current position information

bool Buy_openend = false;
bool Sell_openend = false;

double currentVolume = 0;

if(PositionSelect(_Symbol) == true)
  {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      Buy_openend = true;
     }
      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
     {
      Sell_openend = true;
      }   
        currentVolume = PositionGetDouble(POSITION_VOLUME);   
  } 

// Check for trade conditions

bool SellCondition = close <= closeprev && bar[1].time == startTime;
bool BuyCondition = close >= closeprev && bar[1].time == startTime;


// Entering trade

if(SellCondition)
  {
   if(Sell_openend)
   {
   Print("We already have a sell open");
   return;
   }
   m_trade.Sell(TradeVolume+currentVolume,_Symbol,m_symbol.Ask(),NULL,NULL,NULL);
  }
if(BuyCondition)
  {
   if(Buy_openend)
     {
      Print("We already have a buy open");
   return;
     }
     m_trade.Buy(TradeVolume+currentVolume,_Symbol,m_symbol.Bid(),NULL,NULL,NULL);
  }
 
Divania111 Ctrade-Objekt.

Sie haben vergessen, dass die 'startTime'-Zeit zurückgesetzt werden muss.

 
Vladimir Karputov #:

Sie haben vergessen, dass die "startTime"-Zeit zurückgesetzt werden muss.

Danke Vladimir, ich werde versuchen, das Problem aufgrund deines Hinweises zu beheben.

Dennoch bin ich immer noch erstaunt. Denn in der if-Anweisung für die Eingabe eines Geschäfts prüfen wir, ob bereits eine Order desselben Typs vorliegt. Wenn dies der Fall ist, dann sollte die Order nicht platziert werden. Ich dachte also, dass mit dieser Anweisung nur 1 Auftragstyp gleichzeitig eingegeben werden kann.

Ist dieser Gedanke falsch?

 
Divania111 # :

Danke Vladimir, ich werde versuchen, das Problem mit Hilfe deines Hinweises zu lösen.

Dennoch bin ich immer noch erstaunt. Denn in der if-Anweisung für die Eingabe eines Trades wird geprüft, ob bereits eine Order desselben Typs platziert wurde. Wenn dies der Fall ist, dann sollte die Order nicht platziert werden. Ich dachte also, dass mit dieser Anweisung nur 1 Auftragstyp gleichzeitig eingegeben werden kann.

Ist dieser Gedanke falsch?

Sie kontrollieren die ORDERS in keiner Weise, Sie überprüfen die Anzahl und den Typ der POSITION im Code. Außerdem arbeiten Sie falsch mit POSITIONEN (Fehler bei der Verwendung von 'PositionSelect(_Symbol)', wenn Ihr Kontotyp eine Absicherung ist). Ihr Algorithmus weist schwerwiegende Designfehler auf.

Was Sie tun sollten:

1. Arbeiten Sie AUSSCHLIESSLICH zu dem Zeitpunkt, zu dem ein neuer Balken entsteht. Wenn es keinen neuen Balken gibt - machen Sie nichts, machen Sie keine unnötigen Bewegungen.

2. Dieser Punkt wird offengelegt, nachdem Punkt 1 abgeschlossen ist.

 
Hallo. Können Sie mir sagen, ob der Kommentar in void OnTick() den EA verlangsamt. Das Einfügen in int OnInit() funktioniert viel schneller.
 
Marco Nicholas der Kommentar in void OnTick() den EA verlangsamt. Das Einfügen in int OnInit() funktioniert viel schneller.

Ja, im MT5 verlangsamt es den Betrieb erheblich.

In OnInit funktioniert es nur einmal während der Initialisierung und danach nicht mehr.

 
Marco Nicholas der Kommentar in void OnTick() den EA ausbremst. Setzen Sie es in int OnInit() funktioniert viel schneller.

Meinen Sie die Funktion Comment()?

Wenn ja, dann ist das offensichtlich. Bei OnInit() wird der Kommentar nur einmal aktualisiert, während er bei OnTick() bei jedem Tick aktualisiert werden könnte.

Die Lösung ist, den Kommentar nur bei Bedarf zu aktualisieren. Wenn er statisch ist, dann wird er nur bei OnInit() aktualisiert und bei OnDeinit() gelöscht, aber wenn er dynamisch ist, dann wird der Kommentar bei OnTick() nur aktualisiert, wenn er geändert werden muss.

EDIT: Dieser Beitrag wurde ursprünglich im englischen Forum verfasst.

 
Hallo Lehrer, wenn ich die clientseitige Funktion SocketConnect() verwende , kann ich keine Verbindung mit dem Server herstellen, auch wenn ich die Parameter gemäß den Benutzeranweisungen korrekt ausgefüllt habe, aber der Server ist normalerweise nach dem Test verfügbar.
 

Guten Tag an alle.

Ich habe eine Frage

wie man eine Abfrage an Sqlite erstellt, um eine Zeile aus einem Ticket auszuwählen.

Die Struktur der Datenbank ist wie folgt:

Symbol-Text

Fahrkarte - Text

pirce- real

s_l - real

t_p - real

die gesamte Ticketzeichenkette muss in die Struktur aufgenommen werden

 
Hallo, können Sie Comment() in switch() anstelle des gleichen Print verwenden.
Grund der Beschwerde: