Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1351

 
MakarFX:

mql4 тоже можно вот

Мне кажется, это не то. Советник создает графический объект в виде трендовой линии:

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

Но после перезапуска терминала имеются параметры только первой точки. Параметры предыдущей появятся только после формирования новой точки. Кажется начинаю понимать - нужно найти не только последнюю точку вычисленную индикатором, но и предыдущую. Как пропустить последнюю (первую) и вычислить следующую? Первую точку нахожу так:

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

Мне кажется, это не то. Советник создает графический объект в виде трендовой линии:

Но после перезапуска терминала имеются параметры только первой точки. Параметры предыдущей появятся только после формирования новой точки. Кажется начинаю понимать - нужно найти не только последнюю точку вычисленную индикатором, но и предыдущую. Как пропустить последнюю (первую) и вычислить следующую? Первую точку нахожу так:

Поставить счётчик

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

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

 
Vitaly Muzichenko:

Поставить счётчик

А вообще, сделать массив и его заполнять, после этого брать с массива нужную точку.

Спасибо. Мне кажется приведенный вами счетчик то что нужно и, главное, просто.

Пока сайт обновлялся, попробовал предложенный вами вариант. Все работает. Огромное спасибо. Так просто, а я начал лезть в дебри. Плюс, приводимые выше, функции определения цены и времени упростились.

 
MakarFX:

Я выделил то, что было не так

желтым выделил не нужное, можно удалить

функция выделенная зеленым, должна быть за пределами OnStart(),

там где нужно определить новый бар используй выделенное коричневым

Спасибо!)

 

Добрый всем деньJ Помогите пожалуйста найти рабочий код функции трейлинг стопа по параболику. И подскажите пожалуйста как эту функцию прикрутить в советник таким образом, чтобы тралить она начинала когда цена пройдёт в плюс заданное количество пунктов? Заранее благодарю, и прошу не проходить мимо знающих и опытных людей- Грааль же мне как-то надо дописать;-)

 
DanilaMactep:

Добрый всем деньJ Помогите пожалуйста найти рабочий код функции трейлинг стопа по параболику. И подскажите пожалуйста как эту функцию прикрутить в советник таким образом, чтобы тралить она начинала когда цена пройдёт в плюс заданное количество пунктов? Заранее благодарю, и прошу не проходить мимо знающих и опытных людей- Грааль же мне как-то надо дописать;-)

примерно так

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

Подскажите, как обновить month day с учетом нового day of year.


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

Так вот, я думал, что start_time будет с учетом измененного day of year. Но там старая дата...

Хмм... наверное, проще секунды отнять..

 
leonerd:
   

думать сейчас не смогу, дам пример, может Вам мысли придут

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

идея https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

примерно так

Макар, большое спасибо за код- прикрутил это дело немного переделав передачу в айкастом не жёстко фиксированных значений, а внешних переменных. Уточни пожалуйста, в коде    int    Tral = 50; это расстояние на котором будем держаться трал или это расстояние прибыли в пунктах после которого включится трал?

 
DanilaMactep:

Макар, большое спасибо за код- прикрутил это дело немного переделав передачу в айкастом не жёстко фиксированных значений, а внешних переменных. Уточни пожалуйста, в коде    int    Tral = 50; это расстояние на котором будем держаться трал или это расстояние прибыли в пунктах после которого включится трал?

это расстояние прибыли в пунктах после которого включится трал

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