FORTS SL和TP

 

你好!

从未使用过SL和TP

请澄清一下。

在现有头寸上设置止损和止盈

或者我们可以在正在设置的订单中设置这些参数,即在尚未开仓时设置?

如果我们可以在订单中指定参数,那么在市场订单中我们应该如何计算SL和TP(仓位价格 不固定)?

 
prostotrader:

你好!

从未使用过ST和TP

请澄清一下。

在现有头寸上设置止损和止盈

或者我们可以在正在设置的订单中设置这些参数,即在尚未开仓时设置?

如果我们可以在订单中指定参数,那么在市场订单中我们应该如何计算SL和TP(仓位价格 不固定)?


你可以指定任何参数,级别存储在服务器上。 同一个服务器可以拒绝执行你的止损
 
Sergey Chalyshev:

你可以随心所欲地设置,级别存储在服务器上。 同一个服务器可能会拒绝执行你的止损


这就是为什么我不希望得到服务器的拒绝。

也就是说,是否最好设置为现有的位置(以确定)?

 
prostotrader:


这就是为什么我不希望得到服务器的拒绝。

也就是说,是否在现有的位置上安装更好(以确定)?


根本就不应该设置止损点,把限制器。
 
prostotrader:


这就是为什么我不希望得到服务器的拒绝。

也就是说,是否在现有的位置上安装更好(以确定)?

我在股票执行方面是个文盲,但尽管如此。如果发生滑移,那么水平将与你设定的大小完全相等。我没有亲自检查,但我读到没有SL和TP,订单执行得更快。 如果真的是这样,那么最好等到开仓后,再进行操作。
 
Sergey Chalyshev:

止损点最好根本不设,放限。


这就是为什么我以前从未使用过它们。

但是,现在我正在写一个CFORTSOrder类,它应该有一个函数来设置SL和TP

添加

姿势_SL


位置_TP

这些是最低水平吗?

 
Vitaly Muzichenko:
我在股票执行方面是个文盲,但仍然是。如果有滑移,那么水平将与你设定的大小完全相同。我没有亲自检查,但我读到没有SL和TP,订单执行得更快。 如果真的是这样,那么最好等待开仓,然后再进行操作。

谢谢
 
prostotrader:

谢谢你
如果你不介意,你可以亲自检查有预设订单和没有预设订单的执行速度,从而证明或反驳"没有SL和TP订单的执行速度更快"的事实。我认为这对一些人来说是有用的。
 
Vitaly Muzichenko:
我是交换执行方面的文盲,但尽管如此。订单作为一个整体,最好放在现有的位置上,如果有滑动,水平将完全匹配的大小,这是你设置。我没有亲自检查,但我读到没有SL和TP,订单执行得更快。 如果真的是这样,那么最好等到开仓后,再进行操作。


止损单本身的触发速度非常快,因为它们被储存在服务器上,服务器本身在条件下发出订单。与你在市场上关闭相比,这可以节省服务器的ping。

但限制器更可靠,而且速度无法比拟(延时=0)。

我没有实际测量过速度,但我可以用眼睛看到它--价格没有达到止损,交易已经执行并显示在历史上,然后图表开始显示价格和交易。

 
prostotrader:


这就是为什么我以前从未使用过它。

但是,现在我正在写一个CFORTSOrder类,它应该有一个函数来设置SL和TP

添加

姿势_SL


位置_TP

这些是最低水平吗?



为什么不写一个没有拐杖的函数,而把它储存在服务器上?

直接写限制。或者至少是有限制的TR,以及在你得到它时的SL。

 
Sergey Chalyshev:


为什么不写没有拐杖的函数呢,这些拐杖都储存在服务器上。

立即写下限制。或者至少是有限制的TR,以及尽可能的SL。


而且因为我可能会公布班级代码。

我不需要它,但初学者可能需要它。

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