Отдельный скрипт для отдельного таймфрейма

 

Есть набор скриптов, например, для обозначения волн Эллиота вручную.

Нужно чтобы применяемый скрипт (нумерация волн) был виден только на определенном таймфрейме , напр. на H1, а на других - нет.

Как можно реализовать это в коде скрипта?

Буду очень благодарен.

 
ivg:

Есть набор скриптов, например, для обозначения волн Эллиота вручную.

Нужно чтобы применяемый скрипт (нумерация волн) был виден только на определенном таймфрейме , напр. на H1, а на других - нет.

Как можно реализовать это в коде скрипта?

Буду очень благодарен.


// Формирование линии
int fLine(string Name            // Префикс имени
         ,string Text            // Префикс описания
         ,int Number             // Номер
         ,int Bar1,double Price1 // Первая точка
         ,int Bar2,double Price2 // Вторая точка
         ,int Bar3,double Price3 // Вспомогательная точка
         ,color Цвет
         ,int Стиль=STYLE_SOLID  // Сплошная
         ,int Видимость=0        // Только на текущем таймфрейме
         ,bool Луч=false
         ,int Толщина=1
         ,bool Фон=true ){
   int Error;
   datetime Time1=Time[Bar1],
            Time2=Time[Bar2];
   if( Number>0 ) Name=Name+Number;
   if( Bar1<=Bar2
    || Bar2<LastBar
    || Price1<Zero
    || Price2<Zero ){
      Error=MyError;
      if( РежимОтладки ) Print("***   "+Name+" не создан, параметры: "
                    +DoubleToStr(Price1,Digits)+" ("+Bar1+"/"+TimeToStr(Time1)+")..."
                    +DoubleToStr(Price2,Digits)+" ("+Bar2+"/"+TimeToStr(Time2)+")");
      return(Error);
   }
   Error=fObjectDelete(Name);
   if( Error>0 && Error<MyError ){
      return(Error);
   }
   if( ObjectCreate(Name,OBJ_TREND,0,Time1,Price1,Time2,Price2,Time[Bar3],Price3) ){
      if( Text!="" && Number>0 ){
         Text=Text+Number;
         Фон=true;
      }
      if( !ObjectSetText(Name, Text)
       || !ObjectSet(Name, OBJPROP_COLOR, Цвет)
       || !ObjectSet(Name, OBJPROP_STYLE, Стиль)
       || !ObjectSet(Name, OBJPROP_RAY, Луч)
       || !ObjectSet(Name, OBJPROP_TIMEFRAMES, Видимость)
       || !ObjectSet(Name, OBJPROP_WIDTH, Толщина)
       || !ObjectSet(Name, OBJPROP_BACK, Фон) ){
         Error=GetLastError();
         if( !РежимОтладки ) PlaySound("alert.wav");
         Print("***** "+Name+" - ошибка модификации параметров "+Error);
   }  }
   else{
      Error=GetLastError();
      if( !РежимОтладки ) PlaySound("alert.wav");
      Print("***** "+Name+" - объект не создан, ошибка "+Error);
   }
   return(Error);
}
 

     ObjectSet("obj name", OBJPROP_TIMEFRAMES, frame1 | frame2 | ...| frameN );


перечисление ТФ для 3-го параметра  в виде

Константа

Значение

Описание

OBJ_NO_PERIODS, EMPTY

-1

Объект не показывается ни на одном таймфрейме

OBJ_PERIOD_M1

0x0001

Объект рисуется только на 1-минутных графиках

OBJ_PERIOD_M5

0x0002

Объект рисуется только на 5-минутных графиках

OBJ_PERIOD_M15

0x0004

Объект рисуется только на 15-минутных графиках

OBJ_PERIOD_M30

0x0008

Объект рисуется только на 30-минутных графиках

OBJ_PERIOD_H1

0x0010

Объект рисуется только на 1-часовых графиках

OBJ_PERIOD_H4

0x0020

Объект рисуется только на 4-часовых графиках

OBJ_PERIOD_D1

0x0040

Объект рисуется только на дневных графиках

OBJ_PERIOD_W1

0x0080

Объект рисуется только на недельных графиках

OBJ_PERIOD_MN1

0x0100

Объект рисуется только на месячных графиках

OBJ_ALL_PERIODS

0x01ff

Объект рисуется на всех таймфреймах

 

Спасибо.

Но у меня в таком скрипте:

extern string IMPORTANT = "This is the Super Grand Supercycle []";



extern bool a = true;
extern bool b = true;  
extern bool c = true;
extern bool d = true;
extern bool e = true;



extern int size = 9;
extern color colour = MediumBlue;
int      bia_ExtVisible[] = {0x0001,0x0002,0x0004,0x0008,0x0010};




datetime X_TopRight(int fidge)  //хотим узнать нажата ли кнопка отступить поле справа
   {
      //int margin = WindowBarsPerChart() - WindowFirstVisibleBar(); //с отступом всё намного сложнее (муторно), т.к. справа нет суббот и воскресений, и баров тоже нет.
      return (Time[0+fidge +10]);   //+10 - для красоты - чтобы первый элемент вправо не выезжал
   }

double Y_TopRight()  //хотим узнать высоту окна
   {
      double   top=WindowPriceMax();
      double   bottom=WindowPriceMin();
      return (top - 0.025*(top-bottom));    //для красоты
   }

int start()
  {
   MathSrand(TimeLocal());
   string time = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) + " " + DoubleToStr(MathRand(), 0);
   int fidge = 0;                   //fidge и param нужны для того, чтобы сдвигать буквы отн. друг друга.
   int param = 20;
 
 
     
   if(a)
      {
         ObjectCreate("[a]" + time, OBJ_TEXT, 0, X_TopRight(fidge), Y_TopRight());
         ObjectSet("[a]",OBJPROP_TIMEFRAMES,OBJ_PERIOD_H1|OBJ_PERIOD_M30|OBJ_PERIOD_M15|OBJ_PERIOD_M5|OBJ_PERIOD_M1);
  
         ObjectSetText("[a]" + time, "(a)", size, "Times New Roman", colour);
         fidge += param;
      }
   if(b)
      {
         ObjectCreate("[b]" + time, OBJ_TEXT, 0, X_TopRight(fidge), Y_TopRight());
         ObjectSetText("[b]" + time, "(b)", size, "Times New Roman", colour);
         fidge += param;
      }
   if(c)
      {
         ObjectCreate("[c]" + time, OBJ_TEXT, 0, X_TopRight(fidge), Y_TopRight());
         ObjectSetText("[c]" + time, "(c)", size, "Times New Roman", colour);
         fidge += param;
      }     
   if(d)
      {
         ObjectCreate("[d]" + time, OBJ_TEXT, 0, X_TopRight(fidge), Y_TopRight());
         ObjectSetText("[d]" + time, "(d)", size, "Times New Roman", colour);
         fidge += param;
      }
   if(e)
      {
         ObjectCreate("[e]" + time, OBJ_TEXT, 0, X_TopRight(fidge), Y_TopRight());
         ObjectSetText("[e]" + time, "(e)", size, "Times New Roman", colour);
         fidge += param;
      }
 
   return(0);

  }

все-равно не работает - символ (а) отображается на всех таймфремах  :(


 
Проблема все еще актуальна.
 

скрипт отчего-то не находит обьект, потому и не может им свойство OBJPROP_TIMEFRAMES изменить. Ошибка 4202 при попытке выполнить команду

ObjectSet("[a]",OBJPROP_TIMEFRAMES,OBJ_PERIOD_H1|OBJ_PERIOD_M30|OBJ_PERIOD_M15|OBJ_PERIOD_M5|OBJ_PERIOD_M1);

А сами обьекты создает, странно.

Нашёл, невнимательно код смотрел: имя обьекта задаётся при создании как "[a]" + time, а потом уже отчего-то просто "[a]", вот и ошибка о ненайденном обьекте.

ObjectSet("[a]" + time,OBJPROP_TIMEFRAMES,OBJ_PERIOD_H1); //будет показыать (а) только на Н1