affinamento della strategia del consulente - pagina 5

 
https://www.mql5.com/ru/code/7108 Qui c'è anche del materiale interessante sulle reti a strascico
 

3. il trailing del "passo" standard.

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

Questo tipo di trailing è una modifica di quello standard. Se non mi sbaglio, una volta modello simile è stato creato daKimIV(ma perché relativo è più bello ... :) Si differenzia dal trailing standard, in quanto trailing stop-loss non è trasferito da punti (per esempio, trailing stop-loss a distanza di 30 punti a +31, a +32 - da +2, ecc).Per esempio, tracciando ad una distanza di 40 pips e la distanza stoploss di 10 pips, quando raggiungiamo +40 stoploss sarà spostato a +10 pips e nulla cambierà fino a raggiungere +50 profitto (40 pips + step) (cioè diamo una certa libertà al prezzo, che è il punto di questo algoritmo), e solo a +50 stoploss sarà spostato da +10 a +20 pips, a +60 stoploss sarà spostato a +30 pips e così via.

Parametri:
ticket -
il numero d'ordine unico (scelto prima di chiamare la funzione withOrderSelect());
trldistance - la distanza dal tasso corrente (punti) a cui "trawl" (non meno di MarketInfo(Symbol(),MODE_STOPLEVEL));
trlstep - il "passo" di modifica dello stop loss (punti) (non meno di 1).

Setrlstep=1, questa funzione non differisce dal trailing stop standard. La principale "caratteristica" di questo algoritmo, ancora una volta, consiste nel fornire al tasso una certa "libertà di movimento" - lo Stop Loss viene alzato solo dopo che il prezzo ha "vagato". Questo algoritmo di trailing l'ho incontrato per la prima volta nella descrizione delle regole tattiche "Moving Channels" già menzionate da V. Barishpolts.

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

Questo in 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());
         }
      }      
   }

Ecco il suo codice completo, da inserire al posto di

//+------------------------------------------------------------------+
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);
               }
             }
          }
        }
    }


questo

 

Ti consiglio di iniziare a modificare un EA che ti piace, piuttosto che inserirlo nel tuo - il risultato sarà quasi lo stesso, ma ci saranno meno problemi.

Inoltre, la capacità di leggere e capire il codice di qualcun altro tornerà utile...

 
ktest0:

Ti consiglio di iniziare a modificare un EA che ti piace, piuttosto che inserirlo nel tuo - il risultato sarà quasi lo stesso, ma ci saranno meno problemi.

Inoltre, la capacità di leggere e capire il codice di qualcun altro tornerà utile...

Finché vuole avere, non essere in grado di!
 
borilunad:
Finché vuole avere, non essere in grado di!

))) È da lì che iniziano tutti... E poi - più ci si addentra nel bosco, più i partigiani sono grassi...
 

Potete per favore dirmi come scrivere un codice in un EA,
Quale sarebbe il massimo e il minimo per un certo periodo (ad esempio 10.45 - 11.15)?

Ho acceso l'EA alle 9.00 -> alle 10.45 si è acceso e ha iniziato il monitoraggio. Quando una barra si è chiusa (es. grafico 15 min) 11.15 legge e continua il monitoraggio, per esempio ho identificato High e Low e messo ordini non troppo lontani da queste linee.

Vi ringrazio in anticipo per il vostro feedback.

 
Beh, si può far girare il consigliere....
 

Non riesco a capire quale principio viene utilizzato per collegare il trinciamento.

Dovrebbe, infatti, funzionare solo

 
IRIP:

Non riesco a capire quale principio viene utilizzato per collegare il trinciamento.

Dopo tutto, dovrebbe, in effetti, funzionare e basta.


Niente e nessuno "funzionerà".

Bisogna capire cosa cerca questa particolare traccia, in quali condizioni pesca, con quale passo, se ci sono condizioni aggiuntive.

Se si smonta il codice a strascico, tutto diventa chiaro, ma il principio "plug and play" non porta a buoni risultati....