Хелп! Как начать считать бары от первого сигнала индюка?? - страница 2

 
pako:

Сигнал пересечения мувингов , это и есть бар

от него и считайте 

r  Как считать?)) в том то и вопрос
 
v-1-1-1:

Кто подскажет, как всё же считать бары?  

 ...

Один бар, два бара, три бара и тд.
 

Примерно так на MQL4:

extern int PeriodB=21;//внешние
extern int PeriodS=7;//переменные периодов скользящих



static datetime t;
double maB1=iMA(NULL,0,PeriodB,0,MODE_EMA,PRICE_CLOSE,1);//значение большой скользящей на первом баре
double maS1=iMA(NULL,0,PeriodS,0,MODE_EMA,PRICE_CLOSE,1);//значение малой скользящей на первом баре   
double maB2=iMA(NULL,0,PeriodB,0,MODE_EMA,PRICE_CLOSE,2);//значение большой скользящей на втором баре
double maS2=iMA(NULL,0,PeriodS,0,MODE_EMA,PRICE_CLOSE,2);//значение малой скользящей на втором баре  
if (maS1 > maB1 && maS2 < maB2 && t==0)t=Time[0];//произошло пересечение записываем его время
if (maS1 < maB1 && maS2 > maB2)t=0;//произошло обратное пересечение сбрасываем время на ноль
int bar=iBarShift(NULL,0,t);//индекс бара на котором произошло пересечение и есть сколько баров прошло после пересечения 
if (bar == 1)//прошел один бар
{

}
if (bar == 5)//прошло пять баров 
{

}

 Для тестера пойдет, но для реала надежней записывать время пересечения в файл. Можно и циклом проверять первое пересечение, но это будет долго для тестера.

 
v-1-1-1:
r  Как считать?)) в том то и вопрос
Dmitry Fedoseev:
Можно не считать бары, а смотреть там на 5-ом баре есть ли пересечение.
Вы же как-то проверяете есть пересечение или нет? Поменяйте циферки, чтобы проверялся не последний бар а 5й
 
v-1-1-1:
r  Как считать?)) в том то и вопрос

Вот код советника из урока Кирилла (Programmer), изучай, там всё понятно.

//+------------------------------------------------------------------+
//|                                                  My_First_EA.mq4 |
//|                                                           Kirill |
//|                                          StockProgrammer@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Kirill"
#property link      "StockProgrammer@mail.ru"

//---- input parameters
extern double    TakeProfit=350.0;
extern double    Lots=0.1;
extern double    TrailingStop=35.0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }

int Crossed (double line1 , double line2)
{
   static int last_direction = 0;
   static int current_dirction = 0;

   if(line1>line2)current_dirction = 1; //up
   if(line1<line2)current_dirction = 2; //down

   if(current_dirction != last_direction) //changed
   {
      last_direction = current_dirction;
      return (last_direction);
   }

   else
   {
      return (0);
   }

}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
{
//----
   int cnt, ticket, total;
   double shortEma, longEma;

   if(Bars<100)
   {
      Print("bars less than 100");
      return(0);
   }

   if(TakeProfit<10)
   {
      Print("TakeProfit less than 10");
      return(0); // check TakeProfit
   }

   shortEma = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
   longEma = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

   int isCrossed = Crossed (shortEma,longEma);

   total = OrdersTotal();
   if(total < 1)
   {
      if(isCrossed == 1)
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green);
         if(ticket>0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY order opened : ",OrderOpenPrice());
         }
         else Print("Error opening BUY order : ",GetLastError());
            return(0);
      }

      if(isCrossed == 2)
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,
         Bid-TakeProfit*Point,"My EA",12345,0,Red);
         if(ticket>0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("SELL order opened : ",OrderOpenPrice());
         }
         else Print("Error opening SELL order : ",GetLastError());
            return(0);

      }
   
   return(0);
   }

   for(cnt=0;cnt<total;cnt++)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUY) // long position is opened
         {
         // should it be closed?
            if(isCrossed == 2)
            {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);   // close position
               return(0); // exit
            }
         
         // check for trailing stop
            if(TrailingStop>0)
            {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
               {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                  }
               }
            }
         }
      
         else // go to short position
         {
         // should it be closed?
            if(isCrossed == 1)
            {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);   // close position
               return(0); // exit
            }
         
         // check for trailing stop
            if(TrailingStop>0)
            {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
               {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                  }
               }
            }
         }
      }
   }
   
   return(0);
}

//+------------------------------------------------------------------+
Курс MQL4
  • 2009.09.09
  • Kirill
  • www.speculant.com
Всем привет! Меня зовут Кирилл. Я главный специалист по MQL4 на нашем форуме. В этой ветке я буду выкладывать курс по программированию на языке MQL4. Курс совмещает в себе глубокую теоретическую основу и практические занятия. Новичкам он будет полезен при формировании фундаментальной базы знаний как по MQL4, так и по основным концепциям...
 
forexman77:

Примерно так на MQL4:

 Для тестера пойдет, но для реала надежней записывать время пересечения в файл. Можно и циклом проверять первое пересечение, но это будет долго для тестера.

Спасибо огромное, то что нужно) 
 
Alexey Viktorov:

Вот код советника из урока Кирилла (Programmer), изучай, там всё понятно.

Спасибо
Причина обращения: