Библиотеки: Библиотека функций и советники для трейлинга / Юрий Дзюбан - страница 9

 
Дмитрий Сорокин:
Как я понял это фрагменты кода, которые вставляются в советник. А кто может написать советник? Неужели никто тут это вид трала по АТR не доработал до советника?

Трал не дорабатывается до советника. Трал - ставится в советник для сопровождения позиции.

Всё есть на мкл4 - для пятёрки - незначительные изменения возможно... Там всё элементарно. Всё по азбуке, доке и всё.

 
Roman Shiredchenko:

Трал не дорабатывается до советника. Трал - ставится в советник для сопровождения позиции.

Всё есть на мкл4 - для пятёрки - незначительные изменения возможно... Там всё элементарно. Всё по азбуке, доке и всё.

Дорабатывается, если надо. Для ручной торговли, например, имеет смысл советник-тральщик включать, а полноценный советник не всегда нужен.
 
Vitalie Postolache:
Дорабатывается, если надо. Для ручной торговли, например, имеет смысл советник-тральщик включать, а полноценный советник не всегда нужен.

понятно. Как то упустил этот вариант.....
 
Roman Shiredchenko:

понятно. Как то упустил этот вариант.....
Как один из вариантов сделанный Vitalie Postolache (смотри выше)
 
Realist:
Как один из вариантов сделанный Vitalie Postolache (смотри выше)

:-)

Ок.

 

Нужен именно такой советник. Для трала по ATR.

 Чтобы только тралил. 

 

Всем добрый день.

Не подскажете, кто знает, как сделать, чтобы советники топикстартера смотрели за всеми открытыми ордерами, а не только с указанным тикетом?  Насколько понял, они только для сопровождения отдельного ордера.

Библиотека функций и советники для трейлинга / Юрий Дзюбан
Библиотека функций и советники для трейлинга / Юрий Дзюбан
  • голосов: 20
  • 2007.09.13
  • I_D
  • www.mql5.com
Библиотека функций и советники для трейлинга (11 видов). Простое использование сложных алгоритмов.
 

Автор спасибо за проделанную работу, что даже через 10 лет почти данная тема актуальна:)

Помогите пожалуйста, не получается чтоб включался трал. Я пытаюсь сделать так чтоб SL (при покупке)  переносился на Low предыдущего бара. Я так понял мне надо TrailingByShadows.

Вот мой советник. ПОМОГИТЕ пожалуйста я вообще не могу понять что не так((( 



extern int    NumberOfTry      = 5;            // Количество торговых попыток 
bool          UseSound         = True;         // Использовать звуковой сигнал
string        NameFileSound    = "expert.wav"; // Наименование звукового файла

#property copyright "I_D / Юрий Дзюбан"
#property link      "http://www.mymmk.com/ Софт для управления капиталом"
#property library

static datetime sdtPrevtime = 0;
extern int       Lots=1;    //объём торгов    
extern int       Target=15; //тейк профит
int    MagicNumber = 89354658;
string MagicName = "DojiTrader";
int      eDirection = 0; //условие
int      SigP = 0;       //условие
int      OpenTime=1;     

extern   int   iTicket;             // уникальный номер (тикет) открытой позиции
extern   int   iTmfrm;              // период, по барам которого следует тралить (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern   int   iBars_n = 3;         // кол-во баров, по которым следует тралить
extern   int   iIndent = 3;         // отступ от тени бара, на котором размещается стоплосс
extern   bool  bTrlinloss = false;  // следует ли тралить на участке лоссов (между курсом стоплосса и открытия)

/////////////////////////////////////////////////////////////////////////////////////////////
int start()
  {       
   int orders = 0;
   int i = 0;           

   for(i = 0; i < OrdersTotal(); i++ )  
   {      
      OrderSelect(i,SELECT_BY_POS);     
      if( OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
      {

         orders ++; //если нет не 1го открытого ордера то разрешается открытие ордера +1
         break;
      }
   }


///////////////////////////////////////////////////////////////////////////////////////////// 
   for(i = 1; i < OrdersTotal(); i++ )  //количество открытых ордеров на 1 больше
      {
      OrderSelect(i,SELECT_BY_POS);  
      if( OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
      {

         orders ++; 
         break;
      }
   }   
 ///////////////////////////////////////////////////////////////////////////////////////////////  
   if(orders < 1 )
      {
         for(i = 1; i < Bars; i++ )
     {
      //Бычье поглащение
      if ((Open[i]>Close[i]) && (High[i+1]>High[i]) && Low[i+1]>Low[i]) 
         {
            eDirection = 1;
            break;
         }    
     }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
      if(i < 4 && i > 0)
      {      
         
        if(SigP == 0)
         {       
          if(High[i] < Ask)
           {
               SigP = 1;             
           }
         }                       
      }
      else
      {
         SigP = 0;
      }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //Покупка
 double res;              
        if (eDirection==1 && SigP ==1 && iBarShift(NULL,0,OpenTime) != 0)
       {
         res = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Low[i]-3*Point,High[i]+20*Point ,MagicName,MagicNumber,0,Green);
         OpenTime = iTime(NULL,0,0);
       }
/////////////////////////////////// ВЫЗОВ ТРАЛА
     for (i=0;i<OrdersTotal();i++)
         {
         if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
         if (OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
         if ((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
            {
            // !!! ПРИМЕР ВЫЗОВА ФУНКЦИЙ ТРЕЙЛИНГА !!!
            // среди возможных вариантов мы, допустим, выбрали трейлинг по фракталам. Трейлингуем по 
            // 5-барным фракталам на дневках, с отступом от экстремума в 3 п., в зоне лоссов не тралим
            //TrailingByFractals(OrderTicket(),1440,5,3,false);
            // (как видим, достаточно предварительно выбрать ордер OrderSelect() и вызвать функцию, 
            // передав ей тикет позиции и определив необходимые параметры).
            // При желании Вы можете закоментировать данный вид трейлинга и подключить любой другой 
            // или даже "сконструировать" из них более или менее сложную конструкцию.            
            TrailingByShadows(OrderTicket(),iTmfrm,iBars_n,iIndent,bTrlinloss);          
            //TrailingRatchetB(OrderTicket(),10,25,30,10,25,30,false);
            //TrailingStairs(OrderTicket(),50,10);  
            //TrailingByATR(OrderTicket(),1440,5,1,20,1,1,false); 
            // и т.д.       
            }
         }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}                    

  }
  /////////////////////////////// ВСЁ ЧТО НИЖЕ ДЛЯ ТРАЛА
  void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent,bool trlinloss)
   {  
   
   int i; // counter
   double new_extremum;
   
   // проверяем переданные значения
   if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET)))
      {
      Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
      } 
   
   // если длинная позиция (OP_BUY), находим минимум bars_n свечей
   if (OrderType()==OP_BUY)
      {
      for(i=1;i<=bars_n;i++)
         {
         if (i==1) new_extremum = iLow(Symbol(),tmfrm,i);
         else 
         if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
         }         
      
      // если тралим и в зоне убытков
      if (trlinloss==true)
         {
         // если найденное значение "лучше" текущего стоплосса позиции, переносим 
         if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
         if (!OrderModify(ticket,OrderOpenPrice(),new_extremum - indent*Point,OrderTakeProfit(),OrderExpiration()))            
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      else
         {
         // если новый стоплосс не только лучше предыдущего, но и курса открытия позиции
         if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
         if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      }
      
   // если короткая позиция (OP_SELL), находим минимум bars_n свечей
   if (OrderType()==OP_SELL)
      {
      for(i=1;i<=bars_n;i++)
         {
         if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i);
         else 
         if (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
         }         
           
      // если тралим и в зоне убытков
      if (trlinloss==true)
         {
         // если найденное значение "лучше" текущего стоплосса позиции, переносим 
         if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
         if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      else
         {
         // если новый стоплосс не только лучше предыдущего, но и курса открытия позиции
         if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
         if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
         }      
      }      
   }
  


Открытие и установка ордеров - Торговые операции - Учебник по MQL4
  • book.mql4.com
Открытие и установка ордеров - Торговые операции - Учебник по MQL4
 
Добрый день! А как в советник "Удавка" добавить звук перемещения ТS
Причина обращения: