Помогите провести луч через две точки

 

Уважаемые програмисты, помогите пожалуйста ПРОВЕСТИ ЛУЧ ИЗ ТОЧКИ С КООРДИНАТАМИ: r_a - номер бара, fr_1 - цена, ЧЕРЕЗ ТОЧКУ: r_b - номер бара, fr_2 - цена.

Код индикатора:

//+------------------------------------------------------------------+

//| trend lines.mq4 |

//| fomiN andreY aleksandrovicH |

//| |

//+------------------------------------------------------------------+

#property copyright "fomiN andreY aleksandrovicH"

#property link ""

#property indicator_chart_window




//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----


//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

//----

int counted_bars=IndicatorCounted();

int limit;

int i=0, a, r_a, r_b;


//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;


for(i=3; i<Bars; i++)

{

double fr_2=0;

fr_2=iFractals(NULL, 0, MODE_UPPER, i);

if (fr_2>0)

{

r_b=i;

for(a=i+1;a<Bars;a++)

{

double fr_1=0;

fr_1=iFractals(NULL, 0, MODE_UPPER, a);

if (fr_1>0) 

{

r_a=a;

break;

} 

}

break;

}


}

Print ("номер бара ", r_a, " fr_1 = ", fr_1, " номер бара ", r_b, " fr_2 = ", fr_2);

// НУЖНО ПРОВЕСТИ ЛУЧ ИЗ ТОЧКИ С КООРДИНАТАМИ: r_a - номер бара, fr_1 - цена, 

// ЧЕРЕЗ ТОЧКУ: r_b - номер бара, fr_2 - цена.


//----

return(0);

}

//+------------------------------------------------------------------+
Файлы:
 

Вам бы Сюда зайти, там все с примерами...

 
xrust писал (а) >>

Вам бы Сюда зайти, там все с примерами...

Благодарю

 

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

 
это - Функция называется, ну как Print() У Вас в коде, присобачте ее за последней закр скобкой, и вызывайте стеми парамеррами кот Вам нужны
 
xrust писал (а) >>
это - Функция называется, ну как Print() У Вас в коде, присобачте ее за последней закр скобкой, и вызывайте стеми парамеррами кот Вам нужны

Попытался вставить объект следующим образом, ничего не получилость...

ObjectCreate("resistance", OBJ_TREND, 0, r_a, fr_1, r_b, fr_2);
ObjectSet("resistance", OBJPROP_COLOR , Blue);
ObjectSet("resistance", OBJPROP_RAY   , 0);
ObjectSet("resistance", OBJPROP_STYLE , 1);
ObjectSet("resistance", OBJPROP_WIDTH , 1);

Весь код стал выглядеть так:


//+------------------------------------------------------------------+
//|                                                  trend lines.mq4 |
//|                                      fomiN andreY aleksandrovicH |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "fomiN andreY aleksandrovicH"
#property link      ""
#property indicator_chart_window



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   int    counted_bars=IndicatorCounted();
   int    limit;
   int    i=0, a, r_a, r_b;
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
   for(i=3; i<Bars; i++)
   {
       double fr_2=0;
       fr_2=iFractals(NULL, 0, MODE_UPPER, i);
       if (fr_2>0)
       {
             r_b=i;
             for(a=i+1;a<Bars;a++)
             {
                double fr_1=0;
                fr_1=iFractals(NULL, 0, MODE_UPPER, a);
                if (fr_1>0) 
                {
                    r_a=a;
                    break;
                } 
             }
             break;
       }
            
   }
   Print ("номер бара ", r_a, " fr_1 = ", fr_1, " номер бара ", r_b, " fr_2 = ", fr_2);
   // НУЖНО ПРОВЕСТИ ЛУЧ ИЗ ТОЧКИ С КООРДИНАТАМИ: r_a - номер бара, fr_1 - цена, 
   // ЧЕРЕЗ ТОЧКУ: r_b - номер бара, fr_2 - цена.
   
ObjectCreate("resistance", OBJ_TREND, 0, r_a, fr_1, r_b, fr_2);
ObjectSet("resistance", OBJPROP_COLOR , Blue);
ObjectSet("resistance", OBJPROP_RAY   , 0);
ObjectSet("resistance", OBJPROP_STYLE , 1);
ObjectSet("resistance", OBJPROP_WIDTH , 1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
 

Вот индикатор, реализующий решение такой же задачи.

Его полное описание Здесь.



Файлы:
 
Scriptong писал (а) >>

Вот индикатор, реализующий решение такой же задачи.

Его полное описание Здесь.

Ссылка не работает

 
Сорри,  вот здесь
 
Scriptong писал (а) >>
Сорри, вот здесь

Спасибо, я прочитал описание индикатора, но честно признаюсь многого не понял, я не програмист, едва занаю простейшие функции MQL4.

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

Если не сложно укажите на мою ошибку в МОЁМ коде...

Зарнее благодарю за помощь.

 

Вот исправленный код, там показано как вызывать внешнюю функцию

//+------------------------------------------------------------------+
//|                                                  trend lines.mq4 |
//|                                      fomiN andreY aleksandrovicH |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "fomiN andreY aleksandrovicH"
#property link      ""

#property indicator_chart_window






//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   int    counted_bars=IndicatorCounted();
   int    limit;
   int    i=0, a, r_a, r_b;
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
   for(i=3; i<Bars; i++)
   {
       double fr_2=0;
       fr_2=iFractals(NULL, 0, MODE_UPPER, i);
       if (fr_2>0)
       {
             r_b=i;
             for(a=i+1;a<Bars;a++)
             {
                double fr_1=0;
                fr_1=iFractals(NULL, 0, MODE_UPPER, a);
                if (fr_1>0) 
                {
                    r_a=a;
                    break;
                } 
             }
             break;
       }
    SetTLine(Red, "", r_a, fr_1, 0,r_b, True);        
   }
   Print ("номер бара ", r_a, " fr_1 = ", fr_1, " номер бара ", r_b, " fr_2 = ", fr_2);
   
//----
   return(0);
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
Причина обращения: