FORTI SL e TP

 

Ciao!

Mai usato SL e TP

Si prega di chiarire.

Stop Loss e Take Profit sono impostati su una posizione esistente

Oppure possiamo impostare questi parametri in un ordine in corso, cioè quando la posizione non è ancora aperta?

Se possiamo specificare i parametri in un ordine, come dovremmo calcolare SL e TP in un ordine a mercato(il prezzo della posizione non è fisso)?

 
prostotrader:

Ciao!

Mai usato ST e TP

Si prega di chiarire.

Stop Loss e Take Profit sono impostati su una posizione esistente

Oppure possiamo impostare questi parametri in un ordine in corso, cioè quando la posizione non è ancora aperta?

Se possiamo specificare i parametri in un ordine, come dovremmo calcolare SL e TP in un ordine a mercato(il prezzo della posizione non è fisso)?


È possibile specificare qualsiasi parametro, i livelli sono memorizzati sul server. Lo stesso server può rifiutarsi di eseguire i vostri stop.
 
Sergey Chalyshev:

Si può impostare come si vuole, i livelli sono memorizzati sul server. Lo stesso server può rifiutarsi di eseguire i vostri stop.


Ecco perché non voglio ricevere i rifiuti del server.

Cioè è meglio impostare su una posizione esistente (per essere sicuri)?

 
prostotrader:


Ecco perché non voglio ricevere rifiuti dal server.

Cioè è meglio installare su una posizione esistente (per essere sicuri)?


Gli stop non dovrebbero essere impostati affatto, mettere dei limitatori.
 
prostotrader:


Ecco perché non voglio ricevere rifiuti dal server.

Cioè è meglio installare su una posizione esistente (per essere sicuri)?

Sono analfabeta nell'esecuzione delle azioni, ma nondimeno. Se si verifica uno slittamento, allora i livelli saranno esattamente uguali alla dimensione che hai impostato. Non ho controllato personalmente, ma ho letto che senza SL e TP, l'ordine viene eseguito più velocemente. Se è davvero così, allora sarebbe meglio aspettare che la posizione sia aperta, e poi lavorare con essa.
 
Sergey Chalyshev:

È meglio che gli stop non siano impostati affatto, mettete dei limiti.


Ecco perché non li ho mai usati prima.

Ma, ora sto scrivendo una classe CFORTSOrder e dovrebbe avere una funzione per impostare SL e TP

Aggiunto

POSIZIONE_SL


POSIZIONE_TP

Sono questi i livelli minimi?

 
Vitaly Muzichenko:
Sono analfabeta nell'esecuzione delle azioni, ma comunque. Se c'è uno slittamento, i livelli saranno esattamente uguali alla dimensione che avete impostato. Non ho controllato personalmente, ma ho letto che senza SL e TP, l'ordine viene eseguito più velocemente. Se è davvero così, allora sarebbe meglio aspettare l'apertura della posizione, e poi lavorare con essa.

Grazie
 
prostotrader:

Grazie
Se non ti dispiace, puoi controllare personalmente la velocità di esecuzione con e senza ordini preimpostati, provando o smentendo così il fatto"senza SL e TP l'ordine viene eseguito più velocemente". Penso che sarà utile per alcune persone.
 
Vitaly Muzichenko:
Sono analfabeta nell'esecuzione degli scambi, ma tuttavia. L'ordine nel suo complesso è meglio posizionare su una posizione esistente, se c'è slittamento, i livelli corrisponderanno esattamente alla dimensione, che hai impostato. Non ho controllato personalmente, ma ho letto che senza SL e TP, l'ordine viene eseguito più velocemente. Se è davvero così, allora sarebbe meglio aspettare che la posizione sia aperta, e poi lavorare con essa.


Gli stessi ordini di stop vengono attivati molto rapidamente perché sono memorizzati sul server, e il server stesso invia gli ordini in base alle condizioni. Questo risparmia il ping al server, rispetto al caso in cui si chiudesse al mercato.

Ma i limitatori sono più affidabili e la velocità è incomparabile (latenza = 0).

Non ho misurato fisicamente la velocità, ma posso vederla a occhio - il prezzo non ha raggiunto lo stop e l'affare è stato eseguito e visualizzato nella storia, e poi il grafico inizia a mostrare il prezzo e l'affare.

 
prostotrader:


Ecco perché non l'ho mai usato prima.

Ma, ora sto scrivendo una classe CFORTSOrder e dovrebbe avere una funzione per impostare SL e TP

Aggiunto

POSIZIONE_SL


POSIZIONE_TP

Sono questi i livelli minimi?



Perché non scrivere una funzione senza stampelle che sono memorizzate sul server?

Scrivere direttamente con i limiti. O almeno TR con dei limiti, e SL come si ottiene.

 
Sergey Chalyshev:


Perché non scrivere la funzione senza stampelle che sono memorizzate sul server?

Scrivere subito con dei limiti. O almeno TR con dei limiti, e SL come si può.


E perché probabilmente pubblicherò il codice della classe.

Io non ne ho bisogno, ma i principianti potrebbero averne bisogno.

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 не установлен.");
  }
}