Есть набор скриптов, например, для обозначения волн Эллиота вручную.
Нужно чтобы применяемый скрипт (нумерация волн) был виден только на определенном таймфрейме , напр. на 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
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть набор скриптов, например, для обозначения волн Эллиота вручную.
Нужно чтобы применяемый скрипт (нумерация волн) был виден только на определенном таймфрейме , напр. на H1, а на других - нет.
Как можно реализовать это в коде скрипта?
Буду очень благодарен.