Der große und schreckliche MT4 für immer (oder wie man einen Übergang strategisch plant) - Seite 16

 

das funktioniert gut - (je nach Zweck!?)

#include <Trade\Trade.mqh>
CTrade Trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int total=PositionsTotal();
   int Ordertotal=OrdersTotal();
   while(!IsStopped() && (total <= 1))  // Закончим, когда появится более одной позиции.
      if(total == 1)
         Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.
      else
         if(Ordertotal!=0)
            Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
  }
//+------------------------------------------------------------------+
 
SanAlex:

das funktioniert gut - (je nach Zweck!?)

Mischen Sie sich nicht ein. Sie haben dort einen speziellen DC, der alle möglichen Intrigen entwickelt, um die MT-Wanzen zu fangen.

 
Alexey Viktorov:

Ein besonderer DC, der alle möglichen Intrigen spinnt, um die MT-Wanzen zu fangen.

Die meisten Makler arbeiten nach demselben Schema: Ergebnis.deal == 0.

Zum Beispiel ist Signals der beliebteste Broker für Scalping.

Unter den seriösen Brokern ist es ziemlich schwierig, einen MT5 zu finden, der nach einem anderen Schema arbeitet.

 
SanAlex:

das funktioniert gut - (je nach Zweck!?)


Was genau "funktioniert gut"?
Sie haben einen Fehler in Ihrem Code, auf den bereits oben hingewiesen wurde.
 
fxsaber:

Die meisten Makler arbeiten nach demselben Schema: Ergebnis.deal == 0.

Signals ist zum Beispiel der beliebteste Broker für Scalping.

Unter den bekannten Brokern ist es ziemlich schwierig, einen MT5 zu finden, der nach einem anderen Schema arbeitet.

Ich weiß nicht, welche Art von Scalping so sehr funktioniert, dass man keine Zeit hat, eine Position zu schließen...

Wenn es Ihnen nichts ausmacht, versuchen Sie trotzdem, die Anzahl der Positionen zu überprüfen

    else if(!PositionsTotal() && !OrdersTotal())

Ich denke, die beiden Positionen sind offen und eng. Es kann nicht schaden, zu versuchen, die Typen dieser beiden Positionen zu bekommen. Wenn sie anders ausgerichtet sind, wird das meinen Verdacht bestätigen...

 
Ihor Herasko:

Erledigt:

Ergebnis:

Wenn das Ticket bekannt ist, können Sie den Status der Bestellung abfragen.

Der Handel ist fehlgeschlagen, der Ausführungskurs ist 0.

Struktur des Ergebnisses einer Handelsanfrage (MqlTradeResult)

Als Antwort auf eine Handelsanfrage gibt der Handelsserver Daten zurück, die das Ergebnis der Verarbeitung der Handelsanfrage in Form einer speziellen vordefinierten Struktur MqlTradeResult enthalten.

struct MqlTradeResult
  {
   uint     retcode;          // Код результата операции
   ulong    deal;             // Тикет сделки, если она совершена
   ulong    order;            // Тикет ордера, если он выставлен
   double   volume;           // Объем сделки, подтверждённый брокером
   double   price;            // Цена в сделке, подтверждённая брокером
   double   bid;              // Текущая рыночная цена предложения (цены реквота)
   double   ask;              // Текущая рыночная цена спроса (цены реквота)
   string   comment;          // Комментарий брокера к операции (по умолчанию заполняется расшифровкой кода возврата торгового сервера)
   uint     request_id;       // Идентификатор запроса, устанавливается терминалом при отправке 
   uint     retcode_external; // Код ответа внешней торговой системы
  };

 
Rashid Umarov:

So erhalten Sie den Status dieser Bestellung. Wenn das Ticket bekannt ist.

Der Handel ist fehlgeschlagen, der Ausführungskurs ist 0.

Das ist die Sache: Es ist vorbei. Wenn die Ausführung des Skripts beendet ist, bleiben ein oder zwei Positionen hängen (je nachdem, wie viele Ausdrucke Sie in den Code einfügen).

Code:

#define  PRINT(A) Print(#A + " = " + (string)(A))

#include <Trade\Trade.mqh>

void OnStart()
{
  CTrade Trade;
  
  while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.
    if (PositionsTotal() == 1)
    {
      Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.
      Print("Закрытие, т. к. PositionsTotal() равно 1");
    }
    else if (!OrdersTotal())
    {
      printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
      Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
      PRINT(Trade.ResultRetcodeDescription());
      PRINT(Trade.ResultDeal());
      PRINT(Trade.ResultOrder());
      PRINT(Trade.ResultComment());
      if (OrderSelect(Trade.ResultOrder()))
         PRINT(OrderGetInteger(ORDER_STATE));
      printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
    }
    
  Print("Выход. PostionsTotal: ", PositionsTotal());
}

Ergebnis:

2021.05.05 14:25:14.738 Test (EURUSD,M1)        Перед открытием. PositionsTotal: 0, OrdersTotal: 0
2021.05.05 14:25:14.821 Test (EURUSD,M1)        Trade.ResultRetcodeDescription() = done at 0.00000
2021.05.05 14:25:14.821 Test (EURUSD,M1)        Trade.ResultDeal() = 0
2021.05.05 14:25:14.821 Test (EURUSD,M1)        Trade.ResultOrder() = 2249888681
2021.05.05 14:25:14.821 Test (EURUSD,M1)        Trade.ResultComment() = Request executed
2021.05.05 14:25:14.821 Test (EURUSD,M1)        EnumToString(ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE))) = ORDER_STATE_PLACED
2021.05.05 14:25:14.821 Test (EURUSD,M1)        После открытия. PositionsTotal: 1, OrdersTotal: 1
2021.05.05 14:25:14.899 Test (EURUSD,M1)        Закрытие, т. к. PositionsTotal() равно 1
2021.05.05 14:25:14.899 Test (EURUSD,M1)        Выход. PostionsTotal: 2
 
Alexey Viktorov:

Ich weiß nicht, welche Art von Scalping so hart arbeitet, dass man eine Position nicht rechtzeitig schließen kann...

Dort ist alles im Takt. Das ist ein architektonisches Merkmal von MT5.

Wenn es Ihnen nichts ausmacht, versuchen Sie bitte, die Anzahl der Positionen zu überprüfen

Diese Prüfung ist im Quellcode enthalten.

Ich denke, dass die beiden Positionen offen und eng sind. Es kann nicht schaden, zu versuchen, die Typen dieser beiden Positionen zu bekommen. Wenn sie anders ausgerichtet sind, würde das meinen Verdacht bestätigen...

So etwas wie eine Abschlussposition gibt es nicht.

 
fxsaber:

Ich bin noch nicht dazu gekommen, ihn zu veröffentlichen. Ich werde sie innerhalb von 24 Stunden veröffentlichen.

Es hat nicht funktioniert, ich habe Probleme gefunden.

 
fxsaber:

Hat nicht geklappt, habe Probleme gefunden.

Ich freue mich darauf. Wenn Sie Hilfe benötigen, schreiben Sie uns bitte.