FORTS SL und TP

 

Hallo!

SL und TP nie benutzt

Bitte klären Sie das.

Stop Loss und Take Profit werden für eine bestehende Position gesetzt

Oder können wir diese Parameter in einem Auftrag festlegen, der gerade festgelegt wird, d.h. wenn die Position noch nicht geöffnet ist?

Wenn wir Parameter in einer Order angeben können, wie sollten wir dann SL und TP in einer Marktorder berechnen(der Positionspreis ist nicht festgelegt)?

 
prostotrader:

Hallo!

ST und TP nie benutzt

Bitte klären Sie das.

Stop Loss und Take Profit werden für eine bestehende Position gesetzt

Oder können wir diese Parameter in einem Auftrag festlegen, der gerade festgelegt wird, d.h. wenn die Position noch nicht geöffnet ist?

Wenn wir Parameter in einer Order angeben können, wie sollten wir dann SL und TP in einer Marktorder berechnen(der Positionspreis ist nicht festgelegt)?


Sie können beliebige Parameter angeben, die Werte werden auf dem Server gespeichert. Derselbe Server kann sich weigern, Ihre Stopps auszuführen.
 
Sergey Chalyshev:

Sie können nach Belieben einstellen, die Stufen werden auf dem Server gespeichert. Derselbe Server kann sich weigern, Ihre Stopps auszuführen.


Deshalb möchte ich keine Ablehnungen von Servern erhalten.

D.h. ist es besser, auf eine bestehende Position zu setzen (um sicher zu sein)?

 
prostotrader:


Deshalb möchte ich keine Server-Ablehnungen erhalten.

D.h. ist es besser, an einer bestehenden Stelle zu installieren (um sicher zu sein)?


Stopps sollten überhaupt nicht gesetzt werden, setzen Sie Begrenzer.
 
prostotrader:


Deshalb möchte ich keine Server-Ablehnungen erhalten.

D.h. ist es besser, an einer bestehenden Stelle zu installieren (um sicher zu sein)?

Ich bin ein Analphabet, was die Ausführung von Aktien angeht, aber trotzdem. Wenn es zu einem Schlupf kommt, entsprechen die Stufen genau der von Ihnen eingestellten Größe. Ich habe es nicht persönlich überprüft, aber ich habe gelesen, dass die Order ohne SL und TP schneller ausgeführt wird. Wenn das wirklich so ist, dann wäre es besser zu warten, bis die Position eröffnet ist, und dann mit ihr zu arbeiten.
 
Sergey Chalyshev:

Es ist besser, überhaupt keine Stopps zu setzen, sondern Grenzen zu setzen.


Deshalb habe ich sie auch noch nie benutzt.

Aber, jetzt schreibe ich eine CFORTSOrder Klasse und die sollte eine Funktion haben, um SL und TP zu setzen

Hinzugefügt

POSITION_SL


POSITION_TP

Sind dies die Mindestanforderungen?

 
Vitaly Muzichenko:
Ich bin zwar ein Analphabet, was die Ausführung von Aktien angeht, aber immerhin. Wenn es einen Schlupf gibt, entsprechen die Stufen genau der von Ihnen eingestellten Größe. Ich habe es nicht persönlich überprüft, aber ich habe gelesen, dass die Order ohne SL und TP schneller ausgeführt wird. Wenn das wirklich so ist, dann wäre es besser, die Eröffnung der Position abzuwarten und dann mit ihr zu arbeiten.

Danke
 
prostotrader:

Dankeschön
Wenn es Ihnen nichts ausmacht, können Sie persönlich die Ausführungsgeschwindigkeit mit und ohne voreingestellte Aufträge überprüfen und so die Tatsache"ohne SL und TP wird der Auftrag schneller ausgeführt" beweisen oder widerlegen. Ich denke, es wird für einige Leute nützlich sein.
 
Vitaly Muzichenko:
Ich bin zwar ein Analphabet in Sachen Austausch, aber trotzdem. Der Auftrag als Ganzes ist besser auf einer bestehenden Position zu platzieren, wenn es Slippage gibt, werden die Ebenen genau die Größe, die Sie eingestellt haben. Ich habe es nicht persönlich überprüft, aber ich habe gelesen, dass die Order ohne SL und TP schneller ausgeführt wird. Wenn das wirklich so ist, dann wäre es besser zu warten, bis die Position eröffnet ist, und dann mit ihr zu arbeiten.


Die Stop-Aufträge selbst werden sehr schnell ausgelöst, da sie auf dem Server gespeichert sind und der Server selbst die Aufträge unter den Bedingungen ausführt. Dies spart den Ping zum Server, im Vergleich zu einer Schließung am Markt.

Aber Begrenzer sind zuverlässiger und die Geschwindigkeit ist unvergleichlich (Latenz = 0).

Ich habe die Geschwindigkeit nicht physisch gemessen, aber ich kann sie mit dem Auge sehen - der Preis hat den Stopp nicht erreicht und das Geschäft wurde ausgeführt und in der Historie angezeigt, und dann beginnt das Diagramm, Preis und Geschäft anzuzeigen.

 
prostotrader:


Deshalb habe ich es noch nie benutzt.

Aber, jetzt schreibe ich eine CFORTSOrder Klasse und die sollte eine Funktion haben, um SL und TP zu setzen

Hinzugefügt

POSITION_SL


POSITION_TP

Sind dies die Mindestanforderungen?



Warum nicht eine Funktion ohne Krücken schreiben, die auf dem Server gespeichert sind?

Schreiben Sie direkt mit den Grenzen. Oder zumindest TR mit Einschränkungen und SL, wenn Sie es bekommen.

 
Sergey Chalyshev:


Warum nicht eine Funktion ohne Krücken schreiben, die auf dem Server gespeichert ist?

Schreiben Sie sofort mit Einschränkungen. Oder zumindest TR mit Einschränkungen und SL, wie Sie können.


Und weil ich wahrscheinlich den Klassencode veröffentlichen werde.

Ich brauche es nicht, aber Anfänger könnten es brauchen.

void CFORTSOrder::SetSlTp(const string a_symbol, const double a_sl=0, const double a_tp=0)
{
  if(PositionSelect(a_symbol))
  {
    ulong pos_ticket = ulong(PositionGetInteger(POSITION_TICKET));
    ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
    double sl_level = PositionGetDouble(POSITION_SL);
    double tp_level = PositionGetDouble(POSITION_TP);
    MqlTradeRequest request = {0};
    MqlTradeResult  result  = {0};
    mem_magic = magic_storage + 1;
    if(magic_storage >= (magic_number + 65530)) mem_magic = magic_number;
    request.symbol = a_symbol;
    request.action = TRADE_ACTION_SLTP;
    request.comment = "Установка SL/TP";
    request.magic = mem_magic;
    request.position = pos_ticket;
    switch(pos_type)
    {
      case POSITION_TYPE_BUY:
        if (a_sl == 0)
        {
          request.sl = sl_level;
        }
        else
        if(a_sl <= sl_level)
        {
          request.sl = a_sl;
        }
        else request.sl = sl_level;
        if (a_tp == 0)
        {
          request.tp = tp_level;
        }
        else
        if(a_tp >= tp_level)
        {
          request.tp = a_tp;
        }
        else request.tp = tp_level;
      break;
      case POSITION_TYPE_SELL:
        if (a_sl == 0)
        {
          request.sl = sl_level;
        }
        else
        if(a_sl >= sl_level)
        {
          request.sl = a_sl;
        }
        else request.sl = sl_level;
        if (a_tp == 0)
        {
          request.tp = tp_level;
        }
        else
        if(a_tp <= tp_level)
        {
          request.tp = a_tp;
        }
        else request.tp = tp_level;
      break;
    }
    if(OrderSend(request, result))
    {
      if(result.retcode == TRADE_RETCODE_DONE)
      {
        magic_storage = mem_magic;
        Print(__FUNCTION__, ": SL и/или TP установлен.");
      }
    }
    else Print(__FUNCTION__, ": SL и/или TP не установлен.");
  }
}