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

 
Vladimir Zubov:

Das weiß ich nicht, denn normalerweise schließe ich den Browser erst, wenn ich das Stadium "bereit zum Prüfen" erreiche. Versuchen Sie, in Ihrer Registerkarte nach "Meine Produkte" zu suchen. Normalerweise ist der Entwurf dort zu finden, wenn nicht, müssen Sie möglicherweise von vorne beginnen. Wenn der Name des Produkts, das Sie veröffentlichen möchten, nicht besetzt ist, wurde der Entwurf wahrscheinlich nicht gespeichert.

Ich danke Ihnen! Ich habe es gefunden!
 
Seien Sie alle gegrüßt, liebe Kolleginnen und Kollegen!
Vor einiger Zeit habe ich eine Frage über die Möglichkeit gestellt, ein Array von Klassenobjekten in einer Datei zu speichern, und ich erhielt eine positive Antwort aus der Community. Endlich hatte ich die Gelegenheit, alles zu überprüfen. Und ja, DAS ist in der Tat die Rettung. Und dann heißt es sogar DAS. Auf jeden Fall geben sowohl FileWriteArray als auch FileReadArray korrekte Werte für die Anzahl der geschriebenen und gelesenen Elemente zurück. Wenn jedoch versucht wird, über eine Klassenmethode auf das erste Element des Arrays zuzugreifen, erzeugt der Tester den Fehler "Ungültiger Zeigerzugriff", gefolgt von einem kritischen OnTick-Fehler, und bricht ab. Beachten Sie jedoch, dass alles funktioniert, wenn Sie nicht mit einem geschriebenen und dann gelesenen Array arbeiten, sondern nur mit etwas, das im Speicher erstellt wird. Was könnte das Problem sein? Wie stellt man ein gespeichertes Objekt-Array wieder her?
 
BlackTomcat:
Seien Sie alle gegrüßt, liebe Kolleginnen und Kollegen!
Vor einiger Zeit habe ich eine Frage über die Möglichkeit gestellt, ein Array von Klassenobjekten in einer Datei zu speichern, und ich erhielt eine positive Antwort aus der Community. Endlich hatte ich die Gelegenheit, alles zu überprüfen. Und ja, DAS ist in der Tat die Rettung. Und dann heißt es sogar DAS. Auf jeden Fall geben sowohl FileWriteArray als auch FileReadArray korrekte Werte für die Anzahl der geschriebenen und gelesenen Elemente zurück. Wenn jedoch versucht wird, über eine Klassenmethode auf das erste Element des Arrays zuzugreifen, erzeugt der Tester den Fehler "Ungültiger Zeigerzugriff", gefolgt von einem kritischen OnTick-Fehler, und bricht ab. Beachten Sie jedoch, dass alles funktioniert, wenn Sie nicht mit einem geschriebenen und dann gelesenen Array arbeiten, sondern nur mit etwas, das im Speicher erstellt wird. Was könnte das Problem sein? Wie kann man ein gespeichertes Array von Objekten korrekt wiederherstellen?
Bitte senden Sie mir den Code!
 
Hallo! Ich kenne MT4 ziemlich gut, aber MT5 ist ein Anfänger. Bitte geben Sie mir einen Tipp, mit welchem Befehl ich einen Auftrag schließen kann! Ich konnte ihn nicht in der Liste der Vorgangsarten hier https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions finden. NurCLOSE_BY und ich muss ihn einfach schließen.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Kharlamov:
Hallo, ich kenne MT4 ziemlich gut, aber MT5 ist ein Neuling. Ich konnte keinen Befehl in der Liste der Operationstypen hier https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions finden. Der einzige Befehl, den ich habe, istCLOSE_BY, ich muss nur den Auftrag schließen.

in mt5 ist es nicht so einfach

schließen bedeutet, einen entgegengesetzten Handel mit demselben Lot zu eröffnen

d.h. die OperationTRADE_ACTION_DEAL

 
Vladislav Andruschenko:

in mt5 ist es nicht so einfach

schließen bedeutet, einen entgegengesetzten Handel mit demselben Lot zu eröffnen

d.h. die OperationTRADE_ACTION_DEAL

Danke für die Antwort, aber ich verstehe nicht ganz... Ich habe einen gegensätzlichen Handel eröffnet und muss dann einenTRADE_ACTION_CLOSE_BY zwischen ihnen durchführen?
 
Alexander Kharlamov:
Danke für die Antwort, aber ich verstehe sie noch nicht ganz. Eröffne ich eine entgegengesetzte Position und dannTRADE_ACTION_CLOSE_BY zwischen den beiden?

Im MT5 gibt es das Konzept einer POSITION. Sie können eine Position schließen. Wenn Sie eine Position vollständig schließen wollen, verwenden Sie die Standardbibliothek. Für ein Netting-Konto ein Beispiel für die Schließung einer Position:

//+------------------------------------------------------------------+
//|                                                 PositionClos.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- подключение стандартной библиотеки
#include <Trade\Trade.mqh>
//--- объект класса CTrade
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- закрытие позицию по текущему символу
   trade.PositionClose(Symbol());
  }
//+------------------------------------------------------------------+
Dateien:
 
Karputov Vladimir:

Im MT5 gibt es das Konzept einer POSITION. Sie können eine Position schließen. Wenn Sie eine Position vollständig schließen wollen, verwenden Sie die Standardbibliothek. Für ein Netting-Konto ein Beispiel für die Schließung einer Position:

Ich glaube, ich fange an, es zu begreifen! ) Die Position ändert sich bei jeder Auftragsausführung für dieses Instrument, richtig. Die Frage lautet nun: "Die Planstellenkennung ist eine eindeutige Nummer, die jeder neu eröffneten Planstelle zugewiesen wird und sich während ihrer gesamten Lebensdauer nicht ändert. Sie entspricht dem Ticket des Auftrags, mit dem die Position eröffnet wurde".

Und wenn spätere Anordnungen die Position verändern, bleibt dann ihre Nummer gleich der ersten Anordnung, die sie geschaffen hat?
 
Alexander Kharlamov:

1. Ich glaube, ich beginne zu verstehen! ) Die Position ändert sich bei jeder Auftragsausführung für dieses Symbol, richtig?
2. DiePositionskennung ist eine eindeutige Nummer, die jeder neu eröffneten Position zugewiesen wird und sich während ihrer gesamten Lebensdauer nicht ändert. Sie entspricht dem Ticket des Auftrags, mit dem die Position eröffnet wurde".

Und wenn spätere Anordnungen die Position verändern, bleibt ihre Nummer dann gleich der ersten Anordnung, die sie geschaffen hat?

1. Ja, das ist richtig. Die Ausführung eines Auftrags erzeugt eine Transaktion. Eine Transaktion kann:

  • eine Position erstellen
  • die Lautstärke einer Position ändern
  • eine Position schließen
2. Was könnte besser sein als die Praxis? :) Öffnen Sie eine Position (manuell) auf einem beliebigen Chart. Das Skript ausführen

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 01.01.1970 
         long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
         PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                     create_time_msc,TimeToString(create_time_msc/1000));
         //--- получим время последнего изменения позиции в секундах с 01.01.1970 
         long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                     position_ID,update_time_sec,TimeToString(update_time_sec));
         //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
         long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                     position_ID,update_time_msc,TimeToString(update_time_msc/1000));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

- Achten Sie auf die Zeile (auf der Registerkarte "Experten" des Terminals):

2016.08.29 14:51:24.435 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Erhöhen Sie die Lautstärke, führen Sie das Skript erneut aus - vergleichen Sie die Zeile erneut

2016.08.29 14:51:32.872 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Wie Sie sehen können, ändert sich die Positionseigenschaft (POSITION_IDENTIFIER) nicht, wenn die Position nicht umgekehrt wird.

Dateien:
 
POSIITION_IDENTIFIER ändert sich , wenn die Position umgedreht wird.
Grund der Beschwerde: