Как научиться создавать графические объекты? MQL4. - страница 2

 
barabashkakvn:
Если Вы знаете время и даты своих точек, то Вам нужно вызывать только bool TrendCreate()

Спасибо за совет. Все оказалось проще.

Сделал так:

#property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[41],1.0656,Time[65],1.0494))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return;
     }
   
  }
//+------------------------------------------------------------------+

 P.S. Одного не могу понять, почему в примере выбраны именно такие цифры:

InpDate1=35;        
InpPrice1=60;        
InpDate2=65;        
InpPrice2=40; 

 От них линия тренда куда-то в середину диапазона ставится.

 
Теперь следующую задачу необходимо решить, как продолжить линию вправо и получить значение линии в советнике?
 
forexman77:

...

 От них линия тренда куда-то в середину диапазона ставится.

Так это просто скрипт, главная задание которого - продемонстрировать создания и работу с объектом OBJ_TREND. А цифры взяты для наглядности.
 
forexman77:
Теперь следующую задачу необходимо решить, как продолжить линию вправо и получить значение линии в советнике?

В коде скрипта всё есть:

//+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate(const long            chart_ID=0,        // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
.
.
.
 
barabashkakvn:

В коде скрипта всё есть:

1.При вызове из тестера сделки открываются. Если провожу оптимизацию везде нули. Запускаю любой прогон из оптимизации сделки есть. Как быть?

2.Как сделать так, чтобы если сделка произошла(на каждой сделке) линия сохранялась, а если нет удалялась? 

  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
  ObjectDelete(chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return(0);
     }
    ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
    ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
    ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!=0){ double uroven= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);}
   
}
Print("uroven=",uroven);
if (Time[0] > b && Close[1] < uroven){Opn_B=true;}
 
Сделки нужно контролировать Вам самим. А вот для того, чтобы на каждую сделку была своя линия, нужно каждой линии при создании присваивать уникальное имя. 
 
barabashkakvn:
Сделки нужно контролировать Вам самим. А вот для того, чтобы на каждую сделку была своя линия, нужно каждой линии при создании присваивать уникальное имя. 
Каким образом? Можно пример?
 
forexman77:
Каким образом? Можно пример?
Помогите, у кого есть примеры, пожалуйста.
 

Графические объекты при тестировании

При визуализации тестирования эксперт взаимодействует с реальным графиком. При обычном тестировании без визуализации эксперт работает с "виртуальным" графиком, который не отрисовывается, в этом случае возможны нюансы. При работе тестера в режиме оптимизации работа с графическими объектами не поддерживается.

 

Два дня на изучение, а оказывается нельзя провести оптимизацию. 

Интересно, если сделать индикатор? Смогу ли получить через него значение линии в советнике?

Кто, что скажет. Может кто уже изучал данный вопрос? 

 
forexman77:

...

Интересно, если сделать индикатор? Смогу ли получить через него значение линии в советнике?

...

Если индикатор создает графические объекты и потом получает их параметры, то нет.

Но все равно через использование индикатора легче все решить. В индикаторе выполняются вычисления и их результаты отображаются через индикаторные буферы. 

Еще есть запасной вариант. Вместо линий создавать глобальные переменные с параметрами линии, но тогда функция GetValueByShift() не будет работать, нужно писать ее аналог.