refinamento da estratégia do assessor - página 5

 
https://www.mql5.com/ru/code/7108 Aqui também há algum material interessante sobre redes de arrasto
 

3. Seguindo o "passo" padrão.

void TrailingStairs(int ticket,int trldistance,int trlstep)

Este tipo de trilha é uma modificação do padrão. Se não me engano, uma vez que um modelo semelhante foi criado pelaKimIV(mas porque relativo é mais agradável... :) Ele difere do modelo padrão de trailing-loss, pois o trailing stop-loss não é transferido por pontos (por exemplo, trailing stop-loss à distância de 30 pontos a +31, a +32 - por +2, etc.).Por exemplo, a uma distância de 40 pips e a uma distância de 10 pips, quando chegarmos a +40 pips será movido para +10 pips e nada mudará até chegarmos a +50 lucro (40 pips + passo) (ou seja, damos uma certa liberdade ao preço, que é o ponto deste algoritmo), e apenas a +50 pips será movido de +10 para +20 pips, a +60 pips será movido para +30 pips e assim por diante.

Parâmetros:
ticket -
o número de pedido único (escolhido antes de chamar a função comOrderSelect());
trldistance - a distância da taxa atual (pontos) em que "arrasto" (não menos que MarketInfo(Symbol(),MODE_STOPLEVEL));
trlstep - o "passo" da mudança de stop loss (pontos) (não menos que 1).

Setrlstep=1, esta função não será diferente da parada padrão de trilha. A principal "característica" deste algoritmo, mais uma vez, está em fornecer a taxa com alguma "liberdade de movimento" - Stop Loss só é aumentada após o preço ter "vagado por aí". Este algoritmo de rastreamento que encontrei pela primeira vez na descrição das táticas de "Moving Channels" regras já mencionadas por V. Barishpolts.

=================

Este no Expert Advisor é interessante

 
//+------------------------------------------------------------------+
//| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ                                |
//| Функции передаётся тикет позиции, расстояние от курса открытия,  |
//| на котором трейлинг запускается (пунктов) и "шаг", с которым он  |
//| переносится (пунктов)                                            |
//| Пример: при +30 стоп на +10, при +40 - стоп на +20 и т.д.        |
//+------------------------------------------------------------------+
 
void TrailingStairs(int ticket,int trldistance,int trlstep)
   { 
   
   double nextstair; // ближайшее значение курса, при котором будем менять стоплосс
 
   // проверяем переданные значения
   if ((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
      {
      Print("Трейлинг функцией TrailingStairs() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
      } 
   
   // если длинная позиция (OP_BUY)
   if (OrderType()==OP_BUY)
      {
      // расчитываем, при каком значении курса следует скорректировать стоплосс
      // если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
      if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()))
      nextstair = OrderOpenPrice() + trldistance*Point;
         
      // иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
      else
      nextstair = OrderStopLoss() + trldistance*Point;
 
      // если текущий курс (Bid) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
      if (Bid>=nextstair)
         {
         if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) && (OrderOpenPrice() + trlstep*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) 
            {
            if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      }
      
   // если короткая позиция (OP_SELL)
   if (OrderType()==OP_SELL)
      { 
      // расчитываем, при каком значении курса следует скорректировать стоплосс
      // если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
      if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()))
      nextstair = OrderOpenPrice() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
      
      // иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
      else
      nextstair = OrderStopLoss() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
       
      // если текущий курс (Аск) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
      if (Ask<=nextstair)
         {
         if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()) && (OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      }      
   }

Aqui está seu código completo, a ser inserido no lugar de

//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   {
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
             }
          }
        }
    }


este

 

Recomendo começar a modificar uma EA que você gosta, em vez de inseri-la em sua própria EA - o resultado será quase o mesmo, mas haverá menos aborrecimentos.

Além disso, a capacidade de ler e entender o código de outra pessoa virá a calhar.

 
ktest0:

Recomendo começar a modificar uma EA que você gosta, em vez de inseri-la em sua própria EA - o resultado será quase o mesmo, mas haverá menos aborrecimentos.

Além disso, a capacidade de ler e entender o código de outra pessoa virá a calhar.

Enquanto ele quiser ter, não poderá!
 
borilunad:
Enquanto ele quiser ter, não poderá!

))) É aí que todos começam... E depois - quanto mais para dentro da floresta, mais gordos os partidários.
 

Você pode me dizer como escrever um código em um EA?
Qual seria o alto e o baixo por um certo período (por exemplo, 10h45 - 11h15)?

Liguei a EA às 9.00 -> quando às 10.45 ela ligou e começou a monitorar. Quando uma barra fechou (por exemplo, gráfico de 15 minutos) 11.15 ela lê e continua monitorando, por exemplo, identifiquei Alto e Baixo e coloquei ordens não muito longe destas linhas.

Agradeço antecipadamente o seu feedback.

 
Bem, você pode girar o conselheiro....
 

Não consigo descobrir que princípio é usado para conectar a tralling.

Na verdade, deveria apenas funcionar

 
IRIP:

Não consigo descobrir que princípio é usado para conectar a tralling.

Afinal de contas, deveria, de fato, apenas funcionar.


Nada e ninguém vai "apenas trabalhar".

Você precisa entender o que esta trilha em particular busca, em que condições ela arrasta, com que passo, se houver alguma condição adicional.

Se você desmontar o código de arrasto, tudo se torna claro, mas o princípio "plug and play" não leva a bons resultados....