FORTS SL e TP

 

Hi!

Nunca utilizou SL e TP

Por favor, esclareça.

Stop Loss e Take Profit são definidos em uma posição existente

Ou podemos definir estes parâmetros em uma ordem a ser definida, ou seja, quando a posição ainda não estiver aberta?

Se podemos especificar parâmetros em uma ordem, como devemos calcular SL e TP em uma ordem de mercado(o preço da posição não é fixo)?

 
prostotrader:

Hi!

Nunca utilizou ST e TP

Por favor, esclareça.

Stop Loss e Take Profit são definidos em uma posição existente

Ou podemos definir estes parâmetros em uma ordem a ser definida, ou seja, quando a posição ainda não estiver aberta?

Se podemos especificar parâmetros em uma ordem, como devemos calcular SL e TP em uma ordem de mercado(o preço da posição não é fixo)?


Você pode especificar qualquer parâmetro, os níveis são armazenados no servidor. O mesmo servidor pode se recusar a executar suas paradas.
 
Sergey Chalyshev:

Você pode definir como quiser, os níveis são armazenados no servidor. O mesmo servidor pode se recusar a executar suas paradas.


É por isso que eu não quero receber recusas de servidores.

Isto é, é melhor se colocar em uma posição já existente (para ter certeza)?

 
prostotrader:


É por isso que eu não quero ter rejeições de servidores.

Isto é, é melhor instalar em uma posição existente (para ter certeza)?


As paradas não devem ser feitas, colocar limitadores.
 
prostotrader:


É por isso que eu não quero ter rejeições de servidores.

Isto é, é melhor instalar em uma posição existente (para ter certeza)?

Eu sou analfabeto na execução de estoques, mas mesmo assim. Se ocorrer deslizamento, então os níveis serão exatamente iguais ao tamanho que você definir. Não chequei pessoalmente, mas li que sem SL e TP, a ordem é executada mais rapidamente. Se for realmente assim, então seria melhor esperar até que a posição seja aberta, e depois trabalhar com ela.
 
Sergey Chalyshev:

É melhor não fazer paradas, colocar limites.


É por isso que eu nunca os usei antes.

Mas, agora estou escrevendo uma classe CFORTSOrder e ela deve ter uma função para definir SL e TP

Adicionado

POSIÇÃO_SL


POSIÇÃO_TP

Estes são os níveis mínimos?

 
Vitaly Muzichenko:
Sou analfabeto na execução de estoques, mas ainda assim. Se houver deslizamento, os níveis serão exatamente iguais ao tamanho que você definir. Não chequei pessoalmente, mas li que sem SL e TP, a ordem é executada mais rapidamente. Se for realmente assim, então seria melhor esperar pela abertura da posição, e depois trabalhar com ela.

Obrigado
 
prostotrader:

Obrigado
Se você não se importa, você pode verificar pessoalmente a velocidade de execução com e sem ordens predefinidas, provando ou refutando assim o fato de que"sem SL e TP a ordem é executada mais rapidamente". Acho que será útil para algumas pessoas.
 
Vitaly Muzichenko:
Eu sou analfabeto na execução de câmbio, mas mesmo assim. A ordem como um todo é melhor para colocar em uma posição existente, se houver deslizamento, os níveis serão exatamente do tamanho que você definir. Não chequei pessoalmente, mas li que sem SL e TP, a ordem é executada mais rapidamente. Se for realmente assim, então seria melhor esperar até que a posição seja aberta, e depois trabalhar com ela.


As próprias ordens de parada são acionadas muito rapidamente porque são armazenadas no servidor, e o próprio servidor envia as ordens sob as condições. Isto economiza ping para o servidor, em comparação com se você fosse fechar no mercado.

Mas os limitadores são mais confiáveis e a velocidade é incomparável (latência = 0).

Não medi a velocidade fisicamente, mas posso vê-la a olho nu - o preço não chegou a parar e o negócio foi executado e exibido na história, e então o gráfico começa a mostrar o preço e o negócio.

 
prostotrader:


É por isso que eu nunca o usei antes.

Mas, agora estou escrevendo uma classe CFORTSOrder e ela deve ter uma função para definir SL e TP

Adicionado

POSIÇÃO_SL


POSIÇÃO_TP

Estes são os níveis mínimos?



Por que não escrever uma função sem muletas que são armazenadas no servidor?

Escreva diretamente com os limites. Ou pelo menos TR com limites, e SL como você o obtém.

 
Sergey Chalyshev:


Por que não escrever função sem muletas que são armazenadas no servidor?

Escreva imediatamente com limites. Ou pelo menos TR com limites, e SL como você pode.


E porque provavelmente vou publicar o código de classe.

Não preciso dele, mas os iniciantes podem precisar dele.

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