FORTS SL et TP

 

Salut !

Jamais utilisé SL et TP

Veuillez clarifier.

Le Stop Loss et le Take Profit sont fixés sur une position existante.

Ou peut-on définir ces paramètres lors de l'établissement d'un ordre, c'est-à-dire lorsque la position n'est pas encore ouverte ?

Si nous pouvons spécifier des paramètres dans un ordre, comment devons-nous calculer le SL et le TP dans un ordre au marché (leprix de la position n'est pas fixé) ?

 
prostotrader:

Salut !

Jamais utilisé ST et TP

Veuillez clarifier.

Le Stop Loss et le Take Profit sont fixés sur une position existante.

Ou peut-on définir ces paramètres lors de l'établissement d'un ordre, c'est-à-dire lorsque la position n'est pas encore ouverte ?

Si nous pouvons spécifier des paramètres dans un ordre, comment devons-nous calculer le SL et le TP dans un ordre au marché (leprix de la position n'est pas fixé) ?


Vous pouvez spécifier n'importe quel paramètre, les niveaux sont stockés sur le serveur. Le même serveur peut refuser d'exécuter vos arrêts.
 
Sergey Chalyshev:

Vous pouvez régler comme vous le souhaitez, les niveaux sont stockés sur le serveur. Le même serveur peut refuser d'exécuter vos arrêts.


C'est pourquoi je ne veux pas avoir de refus du serveur.

En d'autres termes, est-il préférable de définir une position existante (pour être sûr) ?

 
prostotrader:


C'est pourquoi je ne veux pas être rejeté par le serveur.

Est-il préférable d'installer sur une position existante (pour être sûr) ?


Il ne faut pas mettre de butées, mais des limiteurs.
 
prostotrader:


C'est pourquoi je ne veux pas être rejeté par le serveur.

Est-il préférable d'installer sur une position existante (pour être sûr) ?

Je suis analphabète dans l'exécution des actions, mais néanmoins. Si un glissement se produit, les niveaux seront exactement égaux à la taille que vous avez définie. Je ne l'ai pas vérifié personnellement, mais j'ai lu que sans SL et TP, l'ordre est exécuté plus rapidement. Si c'est vraiment le cas, alors il serait préférable d'attendre que la position soit ouverte, puis de travailler avec elle.
 
Sergey Chalyshev:

Il vaut mieux ne pas mettre de butées du tout, mettre des limites.


C'est pourquoi je ne les ai jamais utilisés auparavant.

Mais, maintenant, j'écris une classe CFORTSOrder et elle devrait avoir une fonction pour fixer le SL et le TP.

Ajouté

POSITION_SL


POSITION_TP

S'agit-il des niveaux minimums ?

 
Vitaly Muzichenko:
Je suis analphabète en matière d'exécution boursière, mais quand même. S'il y a un glissement, les niveaux seront exactement égaux à la taille que vous avez définie. Je ne l'ai pas vérifié personnellement, mais j'ai lu que sans SL et TP, l'ordre est exécuté plus rapidement. Si c'est vraiment le cas, alors il serait préférable d'attendre l'ouverture de la position, puis de travailler avec elle.

Merci
 
prostotrader:

Merci.
Si cela ne vous dérange pas, vous pouvez personnellement vérifier la vitesse d'exécution avec et sans ordres prédéfinis, prouvant ainsi ou réfutant le fait"sans SL et TP l'ordre est exécuté plus rapidement". Je pense que cela sera utile pour certaines personnes.
 
Vitaly Muzichenko:
Je suis analphabète dans l'exécution des échanges, mais néanmoins. Il est préférable de placer l'ordre dans son ensemble sur une position existante. En cas de dérapage, les niveaux seront exactement de la taille que vous avez fixée. Je ne l'ai pas vérifié personnellement, mais j'ai lu que sans SL et TP, l'ordre est exécuté plus rapidement. Si c'est vraiment le cas, alors il serait préférable d'attendre que la position soit ouverte, puis de travailler avec elle.


Les ordres stop eux-mêmes sont déclenchés très rapidement car ils sont stockés sur le serveur, et le serveur lui-même envoie les ordres dans les conditions prévues. Cela permet d'éviter d'envoyer des messages au serveur, contrairement à ce qui se passerait si vous fermiez au marché.

Mais les limiteurs sont plus fiables et la vitesse est incomparable (latence = 0).

Je n'ai pas mesuré la vitesse physiquement, mais je peux la voir à l'œil - le prix n'a pas atteint le stop et la transaction a été exécutée et affichée dans l'historique, puis le graphique commence à afficher le prix et la transaction.

 
prostotrader:


C'est pourquoi je ne l'ai jamais utilisé auparavant.

Mais, maintenant, j'écris une classe CFORTSOrder et elle devrait avoir une fonction pour fixer le SL et le TP.

Ajouté

POSITION_SL


POSITION_TP

S'agit-il des niveaux minimums ?



Pourquoi ne pas écrire une fonction sans béquilles qui sont stockées sur le serveur ?

Écrivez directement avec les limites. Ou au moins TR avec des limites, et SL comme vous l'obtenez.

 
Sergey Chalyshev:


Pourquoi ne pas écrire la fonction sans les béquilles qui sont stockées sur le serveur ?

Écrivez immédiatement avec des limites. Ou au moins TR avec des limites, et SL comme tu peux.


Et parce que je vais probablement publier le code de la classe.

Je n'en ai pas besoin, mais les débutants pourraient en avoir besoin.

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