Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1269

 
Kira27:

Всё что можно перепробовал, из того что вы подсказали, крутил вертел, но всё равно в один цвет красит линии в МТ5.   А в МТ4 норм перекрашивает, причём без задержек.

Видимо не всё перепробовал.

Alexey Viktorov:

Очень большая вероятность того, что после переименования объекта он ещё недоступен для обращения к нему. Можно попробовать после переименования поставить ChartRedraw. Если не поможет, то надо как-то иначе строить последовательность.

ps; Ещё вариант: сначала перекрасить с именем sparam и потом переименовать.

Почему-то событие CHARTEVENT_OBJECT_CREATE считается сразу после касания крыской графика, а не после окончания создания объекта. И цены разных концов фибки оказываются одинаковыми. Следовательно надо перекрашивать уже после создания объекта.

И ещё замечание: Вы красите уровни или основную линию фибки?

Вот три варианта:

Первый.

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

Второй.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

Третий.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

как в одном индикаторе организовать алгоритм, чтобы взять точки и передать на другой буфер.

- что бы отрисовать трендовые  линии. (как на картинке)

-----------------------------------------

уже всё перепробовал методом тыка , рисуются но где то в непонятных точках .

-----------------------------------------------------------------------------------------------------

Индикатор прикрепляю - он рабочий - только эти линии, не как не приспособлю.

Может кто направит меня на статьи, про привязки точек трендовой линии.

-- всё что могу сейчас, отрисовать их, не понятно в каких точках.

EURUSDH4

---------------------------------------------------------

что то наверное такое надо прописать - наверное?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



-------------------

скажите я на правильном пути ???

Файлы:
2.mq5  82 kb
 
SanAlex:

Может кто направит меня на статьи, про привязки точек трендовой линии.

-- всё что могу сейчас, отрисовать их, не понятно в каких точках.

---------------------------------------------------------

что то наверное такое надо прописать - наверное?

-------------------

скажите я на правильном пути ???

Трендовые линии строятся на 2 точках, это либо ценовые данные либо данные другого индикатора, пример построения по фракталам, кстати Вам уже знакомый)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

Трендовые линии строятся на 2 точках, это либо ценовые данные либо данные другого индикатора, пример построения по фракталам, кстати Вам уже знакомый)

https://www.mql5.com/ru/code/29210

Я хотел в одном Индикаторе - но не получилось. а вот через этот, который Вы предложили, я и раньше делал.

- и пришлось так и сделать, через два Индикатора 

Вот что получилось 

GBPUSDM30 GOTOV 

---------------------------

Забыл сказать Вам Спасибо! - Спасибо!!!

 
SanAlex:

Я хотел в одном Индикаторе - но не получилось. а вот через этот, который Вы предложили, я и раньше делал.

- и пришлось так и сделать, через два Индикатора 

Вот что получилось 

 

---------------------------

Забыл сказать Вам Спасибо! - Спасибо!!!

Ну так объедините их, в одном индикаторе можно создавать много разных объектов)

 
Alexey Viktorov:

Видимо не всё перепробовал.

Почему-то событие CHARTEVENT_OBJECT_CREATE считается сразу после касания крыской графика, а не после окончания создания объекта. И цены разных концов фибки оказываются одинаковыми. Следовательно надо перекрашивать уже после создания объекта.


Вы как это определили?  Логически?

И ещё замечание: Вы красите уровни или основную линию фибки?


Да в разных некоторых вариантах пробовал именно трендовые линии перекрашивать)))

Вот три варианта:

Первый.

Второй.

Третий.


За варианты преогромнейшее спасибо!!!   Глядишь на ваших примерах и научусь логически мыслить)))

Вы именно кодингом занимаетесь, или ещё и трейдингом?  В смысле как давно в теме трейдинга?  Я 12лет уже)))

 
Kira27:

За варианты преогромнейшее спасибо!!!   Глядишь на ваших примерах и научусь логически мыслить)))

Вы именно кодингом занимаетесь, или ещё и трейдингом?  В смысле как давно в теме трейдинга?  Я 12лет уже)))

Я далеко не всегда такой «добрый». Только во время приступов… Так-что на моих примерах мало чему можно научиться. В трейдинге я почти столько-же.

 
Alexey Viktorov:

Я далеко не всегда такой «добрый». Только во время приступов… Так-что на моих примерах мало чему можно научиться. В трейдинге я почти столько-же.

Ну не знаю, У меня обучение способам и приёмам программирования проходит лучше на примерах. И из ваших примеров я многое подхватываю.   Жаль что у MQL5 нет такого учебника как в MQL4, где в конце учебника пошагово разбирается робот на включаемых файлах.

 
Alexey Viktorov:

В трейдинге я почти столько-же.

Значит познали уже суть рыночных колебаний?   Я, как мне кажется уже познал))))    Мне вот только запрогать её осталось, так как работать по ней я могу определённое время, а потом срываюсь и творю дичь)))   А так любой актив теперь мне понятен)))   S&P мне особенно нравится, техничный и динамичный))

 
VVT:

Ну так объедините их, в одном индикаторе можно создавать много разных объектов)

Я так и хотел - объединить. уже неделю мучаюсь методом тыка, не получается. 

- даже кажется, лучше получается через второй Индикатор - не видно прошлых точек и самих линии, остаются только те точки и уровни, по которым и определяются входы в рынок.  

----------------

вот два индикатора - это одно целое (это мой черновик - я имена и не менял в нём из 4 индикаторов сборка)

Причина обращения: