Примеры: MetaEditor: Опираясь на силу шаблонов - страница 4

 
gince:
Rosh, помогите пожалуйста, следующее вставить в шаблон советника

Сигнал на покупку будет таким:

//+------------------------------------------------------------------+
//| получить торговый сигнал                                         |
//+------------------------------------------------------------------+
// tradeDay - день недели, в который мы торгуем, если равно нулю - торгуем все дни
//
// useReversTradeDay - если равно true, то дни торговли становятся не торговыми днями
//
// everyTick  - если равно true, то функция вычисляет сигнал на каждый тик
//
// period - если everyTick==false, то вычисляется при появлении нового бара с этим периодом
int getTradeSignal(int tradeDay,          // обычно равно 0
                   bool useReversTradeDay,// обычно равно false
                   bool everyTick,        // сигнал вычисляется каждый тик
                    int period            // рабочий период для индикаторов и сигналов
                   )
   {
   int signal=OP_BALANCE;
//----
   if (tradeDay!=0)  // будем учитывать дни недели
      {
      // день, в который мы не торгуем
      if (useReversTradeDay && tradeDay==DayOfWeek()) return(signal);
      
      // торгуем все дни, кроме дня равного tradeDay 
      if (!useReversTradeDay && tradeDay!=DayOfWeek()) return(signal);
 
      }
 
   if (!everyTick) // если торговые сигналы снимаем не каждый тик
      { // и у нас нет нового бара на таймфрейме period минут
      if (!isNewBar(period)) return(signal); // то выходим с пустым сигналом
      }
 
// Наполните функцию yourFunction() своим кодом/алгоритмом
      BlueH_0 	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   1, shift);	// Blue   (H. Vol Band)
	Yellow_0 	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   2, shift);	// Yellow (Market Base)
	BlueL_0    	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   3, shift);	// Blue   (L. Vol Band)
	Green_0 	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   4, shift);	// Green  (RSI Price)
	Red_0 		= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   5, shift);	// Red    (Trade Signal)
	Channel_0	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   6, shift);	//        (Channel)
	
	// Last Closed Candle...
	BlueH_1 	   = iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   1, shift+1);	// Blue   (H. Vol Band)
	Yellow_1 	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   2, shift+1);	// Yellow (Market Base)
	BlueL_1 	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   3, shift+1);	// Blue   (L. Vol Band)
	Green_1    	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   4, shift+1);	// Green  (RSI Price)
	Red_1 		= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   5, shift+1);	// Red    (Trade Signal)
	Channel_1	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   6, shift+1);	//        (Channel)
	
	// Prev Prev Candle...
	BlueH_2 	   = iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   1, shift+2);	// Blue   (H. Vol Band)
	Yellow_2 	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   2, shift+2);	// Yellow (Market Base)
	BlueL_2    	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   3, shift+2);	// Blue   (L. Vol Band)
	Green_2    	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   4, shift+2);	// Green  (RSI Price)
	Red_2 		= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   5, shift+2);	// Red    (Trade Signal)
	Channel_2	= iCustom(Symbol(),workPeriod, "TDI Channel", 13, 0, 34, 2, 0, 7, 0,   6, shift+2);	//        (Channel)
if(Green_1 > Red_1 && Green_2 < Green_1 && Red_1 < Yellow_1 && Yellow_2 < Yellow_1 && Red_2 < Red_1 && Yellow_1 <50 && Channel_1 > 25 )
		signal = OP_BUY;
if(Green_1 < Red_1 && Green_2 > Green_1 && Red_2 > Red_1 && Red_1 > Yellow_1 && Yellow_2 > Yellow_1 && Yellow_1 > 50 && Channel_1 < 25 )
		signal = OP_SELL;

 
 
   if (signal!=OP_BUY && signal!=OP_SELL) signal = OP_BALANCE;
   
//----
   return(signal);   
   }
 

И еще вопрос  Как это пристроить

//------------------------------------------------------
// Treilingo funkcijos - Import Treiling Stop Function
//------------------------------------------------------
#import "TrailingAll_11.ex4"
   void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent,bool trlinloss);
   void TrailingByFractals(int ticket,int tmfrm,int frktl_bars,int indent,bool trlinloss);   
   void TrailingStairs(int ticket,int trldistance,int trlstep);   
   void TrailingUdavka(int ticket,int trl_dist_1,int level_1,int trl_dist_2,int level_2,int trl_dist_3);
   void TrailingByTime(int ticket,int interval,int trlstep,bool trlinloss);   
   void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss);
   void TrailingRatchetB(int ticket,int pf_level_1,int pf_level_2,int pf_level_3,int ls_level_1,int ls_level_2,int ls_level_3,bool trlinloss);  
   void TrailingByPriceChannel(int iTicket,int iBars_n,int iIndent);
   void TrailingByMA(int iTicket,int iTmFrme,int iMAPeriod,int iMAShift,int MAMethod,int iApplPrice,int iShift,int iIndent);
   void TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,bool bTrlinloss); 
   void KillLoss(int iTicket,double dSpeedCoeff);   
#import
//-------------------------------------------
//  Treilingo pasirinkimas - Treiling choice
//-------------------------------------------
extern int Trailing_Shadows         = 0; 
extern int Trailing_Fractals        = 0;
extern int Trailing_Stairs          = 0;
extern int Trailing_Udavka          = 0;
extern int Trailing_Time            = 0;
extern int Trailing_ATR             = 0;
extern int Trailing_RatchetB        = 0;
extern int Trailing_PriceChannel    = 0;
extern int Trailing_MA              = 0;
extern int Trailing_FiftyFifty      = 0;
extern int Trailing_KillLoss        = 0;
//----------------------------------------------
string StopL;
if(StopL != "Yes")
{
if(Trailing_Shadows == 1)  		TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent,bool trlinloss);
if(Trailing_Fractals == 1) 		TrailingByFractals(int ticket,int tmfrm,int frktl_bars,int indent,bool trlinloss);
if(Trailing_Stairs == 1)		TrailingStairs(int ticket,int trldistance,int trlstep); 
if(Trailing_Udavka == 1)		TrailingUdavka(int ticket,int trl_dist_1,int level_1,int trl_dist_2,int level_2,int trl_dist_3);
if(Trailing_Time == 1)			TrailingByTime(int ticket,int interval,int trlstep,bool trlinloss);   
if(Trailing_ATR == 1)			TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss);
if(Trailing_RatchetB == 1)		TrailingRatchetB(int ticket,int pf_level_1,int pf_level_2,int pf_level_3,int ls_level_1,int ls_level_2,int ls_level_3,bool trlinloss);  
if(Trailing_PriceChannel == 1)	TrailingByPriceChannel(int iTicket,int iBars_n,int iIndent);
if(Trailing_MA == 1)			TrailingByMA(int iTicket,int iTmFrme,int iMAPeriod,int iMAShift,int MAMethod,int iApplPrice,int iShift,int iIndent);
if(Trailing_FiftyFifty == 1)	TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,bool bTrlinloss); 
if(Trailing_KillLoss == 1)		KillLoss(int iTicket,double dSpeedCoeff);   
}



 
Rosh:
gince:
Rosh, помогите пожалуйста, следующее вставить в шаблон советника

Сигнал на покупку будет таким:


А на продажу в какое место?
if(OrderType()==OP_BUY)
        {
         if(Red_1 < Yellow_1 && Red_2 > Yellow_2) 
         OrderClose(........................);
         break;
        }

      if(OrderType()==OP_SELL)
        {
          
          if(Red_1 > Yellow_1 && Red_2 < Yellow_2)
          OrderClose(..........................);
          break;
        }
 
gince:
А на продажу в какое место?
Неправильно выразился, это не сигнал на покупку, а сигнал на открытие позиции - BUY или SELL
 
Rosh:
gince:
А на продажу в какое место?
Неправильно выразился, это не сигнал на покупку, а сигнал на открытие позиции - BUY или SELL
Я за вами пошел и тоже неправилно выразилця  Хотел спроситя про закрытие  Правильно ли я сделал
//+------------------------------------------------------------------+
//|  Uzdaro orderius su nurodytu ticket                      - 23 - |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
   {  
//----
   int i,size=OrdersToCloseCounter;
   
   int ticket,type;
   double lots;
   bool res;
   
   int total=OrdersTotal(); 
   
   for (i=0;i<size;i++)
      {
      ticket = ticketsArray[i][0];
      type   = ticketsArray[i][1];
      lots   = lotsArray[i];
      RefreshRates(); // del visa ko atnaujinsime duomenis apie rinkos aplinka
         AcquireTDI_Values();
      // pirkimu uzdarymas
      if (Red_1 < Yellow_1 && Red_2 > Yellow_2)
      { 
         res = OrderClose(ticket,lots,Bid,Slippage,Orange);
         if (!res)
            {
            Print("Nepavyko uzdaryti pirkimo orderio #",ticket,"!  Klaida",GetLastError());
            // tolimesnis klaidos apdirbimas
            }
         }
      //  pardavimo uzdarymas
      if (Red_1 > Yellow_1 && Red_2 < Yellow_2)
         {
         res = OrderClose(ticket,lots,Ask,Slippage,Orange);
         if (!res)
            {
            Print("Nepavyko uzdaryti pardavimo orderio #",ticket,"!  Klaida ",GetLastError());
            //  klaidos apdirbimas
            }
         }
      } 
//----
   return;
   }
//+------------------------------------------------------------------+
//|  Naikina atidetus orderius su nurodytu ticket             - 24 -|
//+------------------------------------------------------------------+
void DeletePendingOrders(int ticketsArray[])
   {  
//----
   int i,size=OrdersToDeleteCounter;
   
   int ticket;
   bool res;
   // atidetu orderiu naikinimo blokas
   for (i=0;i<size;i++)
      {
      ticket = ticketsArray[i];
      res = OrderDelete(ticket);
      if (!res)
         {
         Print("Napavyko panaikinti atideto orderio #",ticket,"!  Klaida ?",GetLastError());
         //  Klaidos apdirbimas
         }
      } 
//----
   return;
   }
 
Rosh:
gince:
А на продажу в какое место?
Неправильно выразился, это не сигнал на покупку, а сигнал на открытие позиции - BUY или SELL
Извиняюсь за перевод вашего шаблона
 

Пока советник неаткрывает позиции на тестере   Что там не так если нетрудно научить новичка и показать ему  Тем более не русского



 
 
gince:
Я за вами пошел и тоже неправилно выразилця Хотел спроситя про закрытие Правильно ли я сделал

Нет, условия для закрытия ордеров нужно вставить в эту функцию:

//+------------------------------------------------------------------+
//|  подготовить массив тикетов для закрытия                         |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], 
				   double & lots[],double arrayTickets[][9])
   {
   int size=ArrayRange(arrayTickets,0);
//----
   if (size==0) return;
 
   int i,type,ticket,closeSize;
   for (i=0;i<size;i++)
      {
      type=arrayTickets[i][1];
      // если тип ордера не рыночный, то пропуcкаем
      if (type>OP_SELL) continue;
 
      if (Revers) // перевернем тип рыночного ордера
         {
         if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
         }
      
      // тут решаем для каждого открытого ордера его судьбу
      //  оставить в рынке или добавить в массив на закрытие
      if (type==OP_BUY)
         {
         //  
         // код разрешающий оставить покупку
         Здесь решаем - оставить ордер BUY или закрыть
         
         // как пример
         if (signal==OP_BUY) continue;
         }
      
      if (type==OP_SELL)
         {
         //  
         // код разрешающий оставить продажу
         Здесь решаем - оставить ордер SELL или закрыть

         
         // как пример
         if (signal==OP_SELL) continue;
         }
 
      closeSize=ArrayRange(ticketsClose,0);
      ArrayResize(ticketsClose,closeSize+1);
      ArrayResize(lots,closeSize+1);
      ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
      ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера
      Print("arrayTickets[i][0]=",arrayTickets[i][0],"   ticketsClose[closeSize][0]=",ticketsClose[closeSize][0]);
      
      // здесь укажем сколько лотов нужно закрыть
      lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
      // можно закрывать частично, тогда нужно переписать строку сверху
      }
//----
   return;   
   }
 
Правильно ли я понял?
// тут решаем для каждого открытого ордера его судьбу
      //  оставить в рынке или добавить в массив на закрытие
      if (type==OP_BUY)
         {
         //  
         // код разрешающий оставить покупку
         Здесь решаем - оставить ордер BUY или закрыть
         
         // как пример
         
          
                // pirkimu uzdarymas - Close Buy
                AcquireTDI_Values();
                if (Red_1 < Yellow_1 && Red_2 > Yellow_2) signal = Close_BUY;
                else
                  {
                  if(signal==OP_BUY) continue;
                   }
           }