Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Victor Ilkiv
142
Victor Ilkiv  

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

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

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

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

Алексей Тарабанов
7326
Алексей Тарабанов  
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);
}
Vitalie Postolache
12427
Vitalie Postolache  

     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

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

Victor Ilkiv
142
Victor Ilkiv  

Спасибо.

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

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);

  }

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


Victor Ilkiv
142
Victor Ilkiv  
Проблема все еще актуальна.
Vitalie Postolache
12427
Vitalie Postolache  

скрипт отчего-то не находит обьект, потому и не может им свойство 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
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий