Помогите нарисовать вертикальную линию скриптом!

 

Иногда упираюсь лбом в непробиваемую стену на пустом месте.

Ну скажите, что я пишу неправильно?!

 

   

string Name = "OptArea";
if (ObjectFind(Name)==-1) ObjectCreate(Name, OBJ_VLINE, WindowOnDropped(), Time[10], 0);
// ObjectSet(Name, OBJPROP_CORNER, 0 );
ObjectSet(Name, OBJPROP_TIME1, Time[10] );
ObjectSet(Name, OBJPROP_COLOR, Orange );
 
 
Eugene1: Помогите нарисовать вертикальную линию скриптом!

вот набросал скрипт, вроде рисует:

 

int start(){
   DrawLine("qwerty",Time[10],Yellow);
return(0);
}
//+------------------------------------------------------------------+
void DrawLine(string name, datetime tim, color cl=Red){
   if(ObjectFind(name)<0) ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}
 
Eugene1:

Иногда упираюсь лбом в непробиваемую стену на пустом месте.

Ну скажите, что я пишу неправильно?!

Интересно, а "Что Вы делали (что не работает)?" У меня в скрипте этот код работает. Если затеяли "игры" с WindowOnDropped(), то можно чуть усложнить код:

int start()
{
//----
    string Name = "OptArea";
    int li_Window = ObjectFind (Name),
        li_NewWindow = WindowOnDropped();
    if (li_Window == -1) ObjectCreate (Name, OBJ_VLINE, li_NewWindow, 0, 0);
    else if (li_Window != li_NewWindow)
    {
        ObjectDelete (Name);
        ObjectCreate (Name, OBJ_VLINE, li_NewWindow, 0, 0);
    }
    ObjectSet (Name, OBJPROP_TIME1, Time[10]);
    ObjectSet (Name, OBJPROP_COLOR, Orange);
    int err = GetLastError();
    if (err > 0) Print ("Error - ", err);
//----
    return (0);
}
 
TarasBY:

Интересно, а "Что Вы делали (что не работает)?" У меня в скрипте этот код работает. Если затеяли "игры" с WindowOnDropped(), то можно чуть усложнить код:




Спасибо!

Действительно, не в этом коде дело.

В другом месте скрипта подчистка объектов убирала линию.

Ваши рекомендации по WindowOnDropped учту, хорошо пишете! 

Хотя пока не вполне ясно понял концепцию этой функции: Можно при её помощи нарисовать вертикальную линию

только в окне идикатора? 

 
TarasBY:

Интересно, а "Что Вы делали (что не работает)?" У меня в скрипте этот код работает. Если затеяли "игры" с WindowOnDropped(), то можно чуть усложнить код:




А на графике при визуальном тестировании скрипт не работает...
 
Eugene1:
А на графике при визуальном тестировании скрипт не работает...
Скрипт в тестере работать не предназначен! Поэтому со временем работает, как на реале, а не с моделированным - посмотрите на объекты графика (линия создаётся в будущем).
 
TarasBY:
Скрипт в тестере работать не предназначен! Поэтому со временем работает, как на реале, а не с моделированным - посмотрите на объекты графика (линия создаётся в будущем).



Да, действительно, в тестере нумерация баров как в реале.

Как бы сделать чтобы он от номера моделированного для советника бара смещение отсчитывал, если его кинули на тестирование?  

 
Eugene1:

Да, действительно, в тестере нумерация баров как в реале.

Как бы сделать чтобы он от номера моделированного для советника бара смещение отсчитывал, если его кинули на тестирование?  

...за извращениями не ко мне!
 
TarasBY:
...за извращениями не ко мне!

   int tm1 = WindowTimeOnDropped();
   ObjectCreate("asd",OBJ_VLINE,0,0,0);
   ObjectSet("asd",OBJPROP_TIME1,tm1);
   ObjectSet("asd",OBJPROP_COLOR,Red);
   ObjectSet("asd",OBJPROP_WIDTH,2);
 
FAQ:

Формализация задачи стояла несколько иначе: Time[Bar]...

P.S. Сделать можно многое, второй вопрос: "Зачем?"...

 
TarasBY:

Формализация задачи стояла несколько иначе: Time[Bar]...

P.S. Сделать можно многое, второй вопрос: "Зачем?"...


  "Надо!"

  надо думать головой. 

   В советнике
   if(IsVisualMode()){GlobalVariableSet("whd"+WindowHandle(Symbol(),Period()),Close[0]);}
   
   в Скрипте
   int shift = (Period()*60)*3;
   int tm0 = GlobalVariableGet("whd"+WindowHandle(Symbol(),Period()));
   if(tm0>0){
      tm1 = tm0 - shift;
   }else{
      tm1 = Time[0] - shift;
   }
   ObjectCreate("asd",OBJ_VLINE,0,0,0);
   ObjectSet("asd",OBJPROP_TIME1,tm1);
   ObjectSet("asd",OBJPROP_COLOR,Red);
   ObjectSet("asd",OBJPROP_WIDTH,2);