Трендо-флэтовая стратегия. - страница 12

 
JLY:

И как удалить значки если линии уже нет?

ObjectDelete(0,"имя значка"+name);
если у значка нет имени, то в данном случае
ObjectDelete(0,name);

Расчет времени нужен в барах

сделайте в барах

время у вас известно, т.е в Time[9] был 9 бар

я там только начало написал,

дальше как вам будет угодно 

 
pako:

Расчет времени нужен в барах

сделайте в барах

время у вас известно, т.е в Time[9] был 9 бар

я там только начало написал,

дальше как вам будет угодно 

Спасибо, только там линию создавать не нунжно было (просто задавать параметры), а так все работает. 

В 4-й время в барах через iBarShift считалось. Вот по такой формуле:

datetime time01=time1NEW;datetime time02=time2NEW;
int shift01=iBarShift(0,0,time01);int shift02=iBarShift(0,0,time02);//перевод из скунд в бары
int timeCHANGE=shift01-shift02;//разница между 1-й и 2-й точкой линии
int timeBAR=(shift02-timeCHANGE);//прибавить разницу ко 2-й точке
int timeBARc=Time[timeBAR];//Перевод из баров в секунды

 В пятой этой функции нет, а сфункцией Copy* пока не знаю как...

 
JLY:

Спасибо, только там линию создавать не нунжно было (просто задавать параметры), а так все работает. 

В 4-й время в барах через iBarShift считалось. Вот по такой формуле:

 В пятой этой функции нет, а сфункцией Copy* пока не знаю как...

iBarShift  аналог на 5 

int iBarShift(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
     {
      if(ArraySize(Arr)>2) return(ArraySize(Arr)-1);
      if(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  }
 
В MQL5 изменились константы периодов (были добавлены новые периоды M2, M3, M4, M6, M10, M12, H2, H3, H6, H8, H12), для конвертации периодов MQL4 можно использовать следующую функцию:
ENUM_TIMEFRAMES TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      
      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);      
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);      
      default: return(PERIOD_CURRENT);
     }
  }
 
JLY:

Седелал что рисует по секундам, разрывы в выходных есть, значит нужно все таки считать по барам.  

int  PeriodSeconds(
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика
   );
Возвращает количество секунд в периоде.
 
pako:

Спасибо большое. Баршифт считается.

Осталось только перевести в секунды полученый бар. В 4-й это был Time[bar] 

В 5-й вот так по правилу делаю, но что то не получается:

datetime Time[];
int count=1; 
ArraySetAsSeries(Time,true);
int timeBARsec=CopyTime(_Symbol,_Period,timeBAR,count,Time);//Перевод из баров в секунды
 
JLY:

Спасибо большое. Баршифт считается.

Осталось только перевести в секунды полученый бар. В 4-й это был Time[bar] 

В 5-й вот так по правилу делаю, но что то не получается:

если я правильно понял вопрос

    datetime Time[]; 
    ArraySetAsSeries(Time,true);
    CopyTime(Symbol(),PERIOD_CURRENT,0,100,Time);
    long timeBARsec = Time[2];//Перевод из баров в секунды, в данном случае Time[бар] бар = 2

    Comment("timeBARsec = ",StringToTime(Time[2]));
 
pako:

если я правильно понял вопрос

Да, все работает) Спасибо огромное)

 

Если "конца" нет, то он равен нулю и его не видно. 

Файлы:
TimeEnd.mq5  5 kb
 

1. Сделал часовую точность для индикатора и время в описании значка (включите описание в свойствах графика).

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

3. Если нарисована линия и значка еще нет (не появился бар), то выдает ошибку (во вкладке "Эксперты") и работа с остальными значками прекращается. 

2013.09.22 00:10:36 FlatExecution (EURUSD,D1) array out of range in 'FlatExecution.mq5' (124,30) 

Т.е массив вне диапазона... Ошибку видит получается в этой строке: 

long timeBARsec=Time[timeBAR];

Как сделать чтобы не парализовывалась работа индикатора из за этой ошибки? А еще лучше будет чтобы значок отрисовывался и в будущем, ведь он рисуется по секундам, хотя считается в барах.

4. Алгоритм торговли: Вход по времени значка, стоп по линии входа, выход по значку линии входа.

5. Правило отрисовки линий: От каждого фрактала ко всем последующим, от верхнего по верхним и от нижнего по нижним. Линии которые задевает цена удалять и не рисовать. 


Файлы:
 

 

Проблема с ошибкой решилась.

Значок теперь рисуется на отрытии сигнального бара.

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

Если линии по которым стоп будет убывать дальше 2-й точки, там можно сделать стоп за второй точкой. Впринципе стоп можно двигать и по такой линии, если по другому ее расчитать.

Отрисовка остается та же, по фракталам.

Алгоритм. Значок не всегда означает однозначную покупку или продажу. Все таки, думаю, что на это влияют еще как то новости. Ведь тестирование не проводилось, т.к. нет автоматической отрисовки по фракталам и корректировки этой отрисовки (удаление задетых линий).

Файлы: