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

 
Vladimir Karputov:

Nach der Ausführung eines Handelsauftrags erscheint eine POSITION, nicht ein ORDER!

Es gibt Server, auf denen Sie eine solche Situation reproduzieren können

PositionGetTicket(0) = 73401069 
PositionSelect(_Symbol) = true 
OrderGetTicket(0) = 73401069 
PositionsTotal() = 1
OrdersTotal() = 1, ORDER_STATE_STARTED


D.h. wir haben gleichzeitig den folgenden Auftrag im Terminal

#73401069 2019.06.08 21:42:42 buy 1.00 BO Volatility 100 Index 0.5150 0.0000 0.0000 0.5150 0.00 0.00 0.00 Hello! 0


und die gleiche Position davon

#73401069 2019.06.08 21:42:42 buy 1.00 BO Volatility 100 Index 0.5150 0.0000 0.0000 0.5150 0.00 0.00 0.00 Hello! 0
 
Vladimir Karputov:

Beschreiben Sie also zunächst in Worten, was Sie tun und was Sie erreichen wollen. Verwenden Sie "BUY trade order" und "SELL trade order" anstelle von ORDER. Das Ergebnis ist eine "KAUFEN-Position" oder eine "VERKAUFEN-Position".

OK, vereinfachen wir unsere Diskussion auf Code-Beispiele. Hier ist der in MQL4 geschriebene Code - ich interessiere mich für die Tester-Version, d.h. die Mindestprüfungen usw:

//+------------------------------------------------------------------+
//|                                                        tst__.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int ticket1=-1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ticket1=-1;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(ticket1<0) ticket1=OrderSend(_Symbol,OP_BUY,0.1,Ask,30,NormalizeDouble(Ask-100*_Point,_Digits),NormalizeDouble(Ask+100*_Point,_Digits));

   if(OrderSelect(ticket1,SELECT_BY_TICKET))
     {
      if(OrderCloseTime()>0)
        {
         int cmd=OrderType()==OP_BUY ? OP_SELL : OP_BUY;
         double tp = cmd==OP_BUY ? NormalizeDouble(Ask+100*_Point,_Digits) : NormalizeDouble(Bid-100*_Point,_Digits);
         double sl = cmd==OP_BUY ? NormalizeDouble(Ask-100*_Point,_Digits) : NormalizeDouble(Bid+100*_Point,_Digits);
         ticket1=OrderSend(_Symbol,cmd,0.1,Ask,30,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

Die Essenz von TS: wenn Sie einen Kaufauftrag öffnen, fangen Sie an und merken Sie sich das Ticket des Auftrags (arbeiten Sie auf dem Ticket), dann prüfen Sie, ob der Auftrag geschlossen ist - sehen Sie, welche Art von Auftrag und setzen Sie den entgegengesetzten Auftrag und merken Sie sich das Ticket und so weiter rund

Ich benötige ein ähnliches Beispiel, das in MQL5 mit SB CTrade reproduziert werden kann.

 
Igor Makanu:

OK, lassen Sie uns unsere Diskussion zu Beispielen in den Code zu vereinfachen, hier ist der Code in MQL4 geschrieben - Ich interessiere mich für die Version für Tester, dh ein Minimum von Prüfungen, etc:

Die Essenz von TS: wenn Sie einen Kaufauftrag öffnen, fangen Sie an und merken Sie sich das Ticket des Auftrags (arbeiten Sie auf dem Ticket), dann prüfen Sie, ob der Auftrag geschlossen ist - sehen Sie, welche Art von Auftrag und setzen Sie den entgegengesetzten Auftrag und merken Sie sich das Ticket und so weiter rund

Ich benötige ein ähnliches Beispiel, das in MQL5 mit SB CTrade reproduziert werden kann.

Hier wird der kleine Trommler sagen, was er von Ihnen hält: ))))
 
Alexey Viktorov:
Jetzt wird dir der kleine Trommler sagen, was er von dir hält))))

lassen Sie sie sprechen, aber wir müssen wissen, ob die Ticketnummer offen oder geschlossen ist, wenn sie geschlossen ist, müssen wir wissen, welche Art vonHandelsauftrag die geschlossene Position hatte

(fett gedruckt - es handelt sich ohnehin um einen Auftrag! - weil in der TZ-Kopfbuchhaltung)

 
Igor Makanu:

OK, vereinfachen wir unsere Diskussion auf Code-Beispiele. Ich habe einen Code in MQL4 geschrieben - mich interessiert die Tester-Version, d. h. das Minimum an Prüfungen usw:

Der zweite OrderSend enthält einen Fehler. Und Normalisierung ist unnötig. Im Forum (und nicht nur dort) ist der Code leichter zu lesen, wenn er kürzer ist.
void OnTick()
  {
   static int ticket1 = -1;
   
   if(ticket1<0) ticket1=OrderSend(_Symbol,OP_BUY,0.1,Ask,30,Ask-100*_Point,Ask+100*_Point);

   if(OrderSelect(ticket1,SELECT_BY_TICKET) && OrderCloseTime())
    {
     int cmd=1-OrderType();
     double open = cmd ? Bid : Ask;
     double tp = open - (cmd ? 1 : -1) * 100 * _Point;
     double sl = open + (cmd ? 1 : -1) * 100 * _Point;
     ticket1=OrderSend(_Symbol,cmd,0.1,open,30,sl,tp);
    }
  }

Ich benötige ein ähnliches Beispiel, das in MQL5 mit CTrade SB reproduziert werden kann.

Ich benötige ein ähnliches Beispiel, das in MQL5 mit CTrade SB reproduziert werden kann.

 

Die Grundlagen sind also derPOSITION_IDENTIFIER, aber nicht das Positionsticket. Dies ist gerade wegen des Netzes wichtig:

POSITIONSNUMMER

Die Positionskennung 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.

Die Positionskennung wird in jedem Auftrag (ORDER_POSITION_ID) und jedem Geschäft (DEAL_POSITION_ID) angegeben, mit dem er eröffnet, geändert oder geschlossen wurde. Verwenden Sie diese Eigenschaft, um nach Aufträgen und Geschäften zu suchen, die sich auf die Position beziehen.

Wenn eine Position im Netting-Modus storniert wird (ein einzelnes In/Out-Geschäft), wird die POSITION_IDENTIFIER-Kennung der Position nicht geändert. POSITION_TICKET wird jedoch in das Auftragsticket geändert, das zum Storno geführt hat. Im Absicherungsmodus gibt es keine Positionsumkehr.

lang


Wir müssen also den Positionsbezeichner (POSITION_IDENTIFIER) im Auge behalten.


Nun eine genauere Aufgabe: Beim ersten Durchlauf eröffnen wir eine KAUFPOSITION und speichern sie (ACHTUNG: wir sollten uns die Positions-ID merken, nicht das Ticket). Wenn die Position geschlossen wurde, eröffnen wir eine entgegengesetzte Position: z. B. gab es einmal eine KAUF-Position, dann wurde sie geschlossen, was bedeutet, dass wir sofort eine VERKAUF-Position eröffnen.


Jetzt wird es viel einfacher sein, das Problem zu lösen.

 
Vladimir Karputov:

Jetzt wird es viel einfacher sein, das Problem zu lösen.

Schauen Sie beim Schreiben des Beispiels ein wenig voraus.

 
fxsaber:
Der zweite OrderSend enthält einen Fehler. Ich brauche keine Normalisierung. Im Forum (und nicht nur dort) ist es einfacher, den Code zu lesen, wenn er kürzer ist.

Ja, ich sehe, ich schrieb den Code auf der fliegenden - lief es in den Tester - es funktioniert, kopiert es in das Forum


fxsaber:

Sie müssen sich ein bisschen mehr anstrengen.

Deshalb habe ich im Forum um Hilfe gebeten! - Ich beschloss, die Möglichkeiten von SB CTrade einzuschätzen - ich nahm eine elementare Aufgabe als Beispiel und bisher war das Ergebnis negativ!


Wladimir Karputow:

Jetzt wird es viel einfacher sein, das Problem zu lösen.

Ich kenne Sie als aktives Mitglied des Forums. Könnten Sie meinen bzw. den korrigiertenfxsaber-Code mit CTrade Server unter MQL5 reproduzieren?

 
Igor Makanu:

Ja, ich sehe, ich schrieb den Code auf der fliegenden - lief es in den Tester - es funktioniert, kopiert es in das Forum

Wenn ich einen EA schreibe, beginne ich immer mit einem leeren Blatt (ich empfehle es). Wahrscheinlich beginnen die meisten mit einer Kopfzeile mit On-Funktionen.

 
Igor Makanu:

Deshalb habe ich im Forum um Hilfe gebeten! - Ich beschloss, die Fähigkeiten von CTrade zu bewerten - ich nahm eine elementare Aufgabe als Beispiel und bisher war das Ergebnis negativ!

Es gibt ein noch kürzeres Beispiel.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2018.02.15 11:48

OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0));

Im MT5 ist es schwer, damit umzugehen, wenn nicht im Tester.