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

 

Hier ist der Experte selbst - das unnötige Zeug wurde entfernt - es gab eine Menge Bashing :)

Dateien:
 

Wie schließe ich eine Bestellung ab?

Ich habe ihn so geöffnet:

mrequest.action = TRADE_ACTION_DEAL; // sofortige Ausführung

mrequest.price = NormalizeDouble(Ask,_Digits); // letzter Ask-Preis

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits); // Stop Loss

mRequest.tp = 0; // Gewinnmitnahme

mrequest.symbol = _Symbol; // Symbol

mRequest.volume = Lots; // Anzahl der zu handelnden Lots

mRequest.magic = 1; // Magische Zahl

mrequest.type = ORDER_TYPE_BUY; // Kaufauftrag

mrequest.type_filling = ORDER_FILLING_FOK; // Auftragsart - alles oder nichts

mRequest.deviation=100; // Abweichung vom aktuellen Kurs

OrderSend(mrequest,mresult);

Das Problem ist, dass wir mehr als einen offenen Auftrag haben und einen selektiven Auftrag schließen müssen...

 
Forex_Noob: Wie schließt man eine Bestellung ab?

Die Frage ist, dass nicht nur ein Auftrag offen ist, sondern mehrere, und wir müssen selektiv schließen...

1. Fügen Sie den Code korrekt ein.

2. Wenn mehrere Aufträge in eine Richtung eröffnet werden, ergibt sich eine Gesamtposition.

3. Um eine offene Position zu schließen, sollten Sie gegenläufige Aufträge erteilen, deren Gesamtvolumen dem Volumen der zu schließenden Position entspricht.

4. Wenn es notwendig ist, nur einen Teil einer Position zu schließen, dann ist es notwendig, gegenläufige Aufträge mit entsprechendem Gesamtvolumen auszustellen.

 
Yedelkin:

1. Fügen Sie den Code korrekt ein.

2. Wenn mehrere Aufträge in dieselbe Richtung eröffnet werden, ergibt sich eine Gesamtposition.

3. Um eine offene Position zu schließen, sollten Sie gegenläufige Aufträge erteilen, deren Gesamtvolumen dem Volumen der zu schließenden Position entspricht.

4. Wenn nur ein Teil einer Position geschlossen werden muss, sollten gegenläufige Aufträge mit dem entsprechenden Gesamtvolumen erteilt werden.

OK. Danke. Das einzige Problem ist nun, dass die Positionen nicht immer mit einem Abschlussauftrag geschlossen werden...
 
Forex_Noob:
Okay, danke. Nur jetzt ein weiteres Problem - der Schließungsauftrag schließt die Positionen nicht immer...
Schauen Sie in das Logbuch - dort sind die Ergebnisse festgehalten.
 

Yedelkin,Reshetov,

Hallo,

Was ist die einfachste Methode, um Daten aus einem Indikator für mehrere Paare zu extrahieren?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
Vielen Dank im Voraus.
 
mario065: Was ist die einfachste Methode, um Daten von einem Indikator für mehrere Paare zu erhalten?

Ist es das, was Sie meinen?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

Sie meinen das hier?

Hallo,

Nein, natürlich nicht.

Wenn es mehr als einen Truthahn gibt, musst du für jeden so viele Paare machen, wie er frisst.

Ein Handler zur Verwendung aller Paare.

 
mario065: Wenn es mehrere Indikatoren, für jeden von ihnen ist es notwendig, so viele Male wie die Anzahl der Paare essen zu tun. Ein Handler zur Verwendung aller Paare.

Sie möchten also einen Griff haben, aber der iATR-Indikator arbeitet mit verschiedenen Zeichen?

Aus der Beschreibung des iATR-Indikators können Sie ersehen, dass er nur für ein einziges Symbol konzipiert ist. Um mit 4 Zeichen zu arbeiten, müssen Sie also 4 Kopien des iATR-Indikators ausführen. Das Indikator-Handle wiederum ist notwendig , um auf die Werte der jeweiligen Indikatorkopie zuzugreifen, und wenn Sie 4 Indikatorkopien verwenden, müssen Sie die entsprechenden Handles irgendwo speichern.

Wenn die Frage der Verwendung von nur einem Handle prinzipiell ist, müssen wir deniATR-Indikator so umschreiben, dasser mit mehreren Symbolen gleichzeitig arbeitet, die entsprechende Anzahl von Werte-Arrays hat, usw.Dann wird es möglich sein, einen Griff zu verwenden

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

und verwenden Sie es, um diesen oder jenen Indikatorpuffer von myATR zu adressieren.

 

Sie können es auch wie folgt aufschreiben (schematisch):

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }
Grund der Beschwerde: