affinement de la stratégie du conseiller - page 5

 
https://www.mql5.com/ru/code/7108 Vous trouverez également ici des informations intéressantes sur les chaluts.
 

3. suivi du suivi standard "step".

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

Ce type de suivi est une modification du suivi standard. Si je ne me trompe pas, un modèle similaire a été créé parKimIV(mais parce que relatif est plus agréable... :) Il diffère du trailing standard, en ce que le trailing stop-loss n'est pas transféré par points (par exemple, le trailing stop-loss à la distance de 30 points à +31, à +32 - par +2, etc.)Par exemple, avec un suivi à une distance de 40 pips et une distance stoploss de 10 pips, lorsque nous atteignons +40, le stoploss sera déplacé à +10 pips et rien ne changera jusqu'à ce que nous atteignions +50 de profit (40 pips + étape) (c'est-à-dire que nous donnons une certaine liberté au prix, ce qui est le but de cet algorithme), et seulement à +50, le stoploss sera déplacé de +10 à +20 pips, à +60, le stoploss sera déplacé à +30 pips et ainsi de suite.

Paramètres :
ticket -
le numéro d'ordre unique (choisi avant d'appeler la fonction withOrderSelect()) ;
trldistance - la distance du cours actuel (points) à laquelle nous "chalutons" (pas moins que MarketInfo(Symbol(),MODE_STOPLEVEL)) ;
trlstep - le "pas" de changement du stop loss (points) (pas moins que 1).

Sitrlstep=1, cette fonction ne sera pas différente du trailing stop standard. La principale "caractéristique" de cet algorithme, encore une fois, est de donner au taux une certaine "liberté de mouvement" - le Stop Loss n'est relevé qu'après que le prix se soit "baladé". Cet algorithme de suivi a été rencontré pour la première fois dans la description des règles tactiques "Moving Channels" déjà mentionnées par V. Barishpolts.

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

Celui-ci, dans le conseiller expert, est intéressant

 
//+------------------------------------------------------------------+
//| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ                                |
//| Функции передаётся тикет позиции, расстояние от курса открытия,  |
//| на котором трейлинг запускается (пунктов) и "шаг", с которым он  |
//| переносится (пунктов)                                            |
//| Пример: при +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());
         }
      }      
   }

Voici son code complet, à insérer en lieu et place 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);
               }
             }
          }
        }
    }


ce

 

Je recommande de commencer à modifier un EA que vous aimez, plutôt que de l'insérer dans le vôtre - le résultat sera presque le même, mais il y aura moins de tracas.

En outre, la capacité de lire et de comprendre le code de quelqu'un d'autre sera utile...

 
ktest0:

Je recommande de commencer à modifier un EA que vous aimez, plutôt que de l'insérer dans le vôtre - le résultat sera presque le même, mais il y aura moins de tracas.

En outre, la capacité de lire et de comprendre le code de quelqu'un d'autre sera utile...

Tant qu'il veut avoir, ne pas pouvoir !
 
borilunad:
Tant qu'il veut avoir, ne pas pouvoir !

))) C'est là que tout le monde commence... Et puis - plus on avance dans les bois, plus les partisans sont gros...
 

Pouvez-vous me dire comment écrire un code dans un EA,
Lesquels formeraient le haut et le bas pour une certaine période (par exemple 10.45 - 11.15) ?

J'ai allumé l'EA à 9.00 -> quand il était à 10.45 il s'est allumé et a commencé à surveiller. Quand une barre s'est fermée (par exemple un graphique 15 min) à 11.15 il lit et continue à surveiller, par exemple j'ai identifié le High et le Low et j'ai placé des ordres pas trop loin de ces lignes.

Je vous remercie d'avance pour vos commentaires.

 
Eh bien, vous pouvez faire tourner le conseiller....
 

Je n'arrive pas à comprendre quel est le principe utilisé pour connecter le tralling.

Il devrait, en fait, juste fonctionner

 
IRIP:

Je n'arrive pas à comprendre quel est le principe utilisé pour connecter le tralling.

Après tout, cela devrait tout simplement fonctionner.


Rien ni personne ne pourra "fonctionner".

Vous devez comprendre ce que ce sentier particulier recherche, dans quelles conditions il trafique, avec quelle étape, s'il y a des conditions supplémentaires.

Si vous démontez le code du chalut, tout devient clair, mais le principe du "plug and play" ne conduit pas à de bons résultats.....