Полезные функции от KimIV - страница 96

 
KimIV >>:

Не нужно ничего добавлять... Уже есть в строке


Большое спасибо !

Ваша ветка клад в интернете.Читаю не нарадуюсь что нашел.

 
KimIV >>:

Не нужно ничего добавлять... Уже есть в строке


Обращаюсь к Игорю и всем кто пишет регулярно в эту ветку. Я просмотрел ветку и не нашел функцию которая определяет угол тренда.Есть ли у вас функция которая будет определять угол тренда на 15 минутке на 6 или более свечах?Если есть выложите пожалуйста.
 

а есть функции, которые позволяют вытаскивать (запускать)

профиль

шаблон

???

 
mazepa писал(а) >>

Обращаюсь к Игорю и всем кто пишет регулярно в эту ветку. Я просмотрел ветку и не нашел функцию которая определяет угол тренда.Есть ли у вас функция которая будет определять угол тренда на 15 минутке на 6 или более свечах?Если есть выложите пожалуйста.

Можно говорить не о угле, а скорости изменения цены

 

Приветсвую! Спасибо за ваш труд, хорошее дело делаете.

Делаю индикатор но функция EquationDirect бывает расчитывает точку пересечения линий не правильно :(

Просчитал точки линии, которые у меня на графике и вставил их в тестовый индикатор для наглядности. Функция расчитывает пересечение не верно со смещением, то есть при каком-то угле формула в функции не подходит и её нужно как-то откорректировать, чтобы когда происходило такое расчёты делались бы по другой формуле ИМХО

#define CPR "DECIDE"
#define mName "Signal"

#property indicator_chart_window

extern int SignalBars=30;              // кол-во баров для сигнала
extern int TrendBars=300;              // кол-во баров для т. линий
extern color CostMaxColor=FireBrick;   // цвет максимальной цены
extern color CostMinColor=SteelBlue;   // цвет минимальной цены
extern color VLineColor=DarkSlateGray; // цвет минимальной цены
extern color TrendColor=Gray;          // цвет трендовых линий
extern color OrderColor=Green;         // цвет сигнала ордера
extern color LabelColor=Navy;          // цвет меток

// Инициализация - функция начальных установок
int init(){
   if(!IsDemo())return(0);
   if(SignalBars<30)SignalBars=30;
}

// ДеИнициализация - функция завершения работы
int deinit(){
   ObjectDelete("UpTrend");
   ObjectDelete("DownTrend");
   ObjectDelete("MaxCost");
   ObjectDelete("MinCost");
   ObjectDelete("SignOrder");
   ObjectDelete("Trend");
   ObjectDelete("Volume");
}

// СТАРТ - основная функция обработки
int start(){
   int bar;
   double val,upb,t1,t2,h1,h2;
   val=173;
   bar=iHighest(NULL,0,MODE_HIGH,100,0);
   t1=Time[0]-273600;
   h1=High[bar];
   t2=t1-518400;
   h2=High[bar]-val*Point;
   SetTLine(TrendColor,"DownTrend",t2,h2,t1,h1,True,STYLE_SOLID,2);
   upb=EquationDirect(t1,h1,t2,h2,Time[0]);
   SetArrow(6,DarkViolet,"UpBorder",Time[0],upb,2);
   SetVLine(VLineColor,"VLine",Time[0],STYLE_SOLID);
}

// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---

// вертикальная временная линия
void SetVLine(color cl,string nm="",datetime t1=0,int st=0,int wd=1){
// Параметры:
// cl - цвет линии
// nm - наименование               ("" - время открытия текущего бара)
// t1 - время                      (0  - время открытия текущего бара)
// st - стиль линии                (0  - простая линия)
// wd - ширина линии               (1  - по умолчанию)

  if(nm=="")nm=DoubleToStr(Time[0],0);
  if(t1<=0)t1=Time[0];
  if(ObjectFind(nm)<0)ObjectCreate(nm,OBJ_VLINE,0,0,0);
  ObjectSet(nm,OBJPROP_TIME1,t1);
  ObjectSet(nm,OBJPROP_COLOR,cl);
  ObjectSet(nm,OBJPROP_STYLE,st);
  ObjectSet(nm,OBJPROP_WIDTH,wd);
}
// установка трендовой линии
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){
// Параметры:
// cl - цвет линии
// nm - наименование               (  ""  - время открытия текущего бара)
// t1 - время открытия бара        (  0   - Time[10]
// p1 - ценовой уровень            (  0   - Low[10])
// t2 - время открытия бара        (  0   - текущий бар)
// p2 - ценовой уровень            (  0   - Bid)
// ry - луч                        (False - по умолчанию)
// st - стиль линии                (  0   - простая линия)
// wd - ширина линии               (  1   - по умолчанию)

  if(nm=="")nm=DoubleToStr(Time[0],0);
  if(t1<=0)t1=Time[10];if(t2<=0)t2=Time[0];
  if(p1<=0)p1=Low[10];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);
}
// вычисление точки пересечения
double EquationDirect(double x1,double y1,double x2,double y2,double x){
// Параметры:
// x1,y1 - координаты первой точки,
// x2,y2 - координаты второй точки,
// x     - значение, для которого вычислить Y

  if(x2==x1)return(y1);
  else
  return(NormalizeDouble((y2-y1)/(x2-x1)*(x-x1)+y1,Digits));
}
// установка значька
void SetArrow(int cd,color cl,string nm="",datetime t1=0,double p1=0,int sz=0){
// Параметры:
// cd - код значка
// cl - цвет значка
// nm - наименование               ("" - время открытия текущего бара)
// t1 - время открытия бара        (0  - текущий бар)
// p1 - ценовой уровень            (0  - Bid)
// sz - размер значка              (0  - по умолчанию)

  if(nm=="")nm=DoubleToStr(Time[0],0);
  if(t1<=0)t1=Time[0];if(p1<=0)p1=Bid;
  if(ObjectFind(nm)<0)ObjectCreate(nm,OBJ_ARROW,0,0,0);
  ObjectSet(nm,OBJPROP_TIME1,t1);
  ObjectSet(nm,OBJPROP_PRICE1,p1);
  ObjectSet(nm,OBJPROP_ARROWCODE,cd);
  ObjectSet(nm,OBJPROP_COLOR,cl);
  ObjectSet(nm,OBJPROP_WIDTH,sz);
}
 

скрин

добавил через оперу, в эксплорее не добавляется

 
как можно определить крайнее время(с лево), которое видно на графике?
 
DECIDE писал(а) >>
как можно определить крайнее время(с лево), которое видно на графике?

TimeCurrent()

 
KimIV писал(а) >>

TimeCurrent()

Это, кажется, справа.

 

уже разобрался

по тому что точка пересечения бывает со смещением это не из-за функции EquationDirect, расчёт ведётся правильно, это из-за какого-то бага в терминале, линия рисуется со смещением

поэтому пришлось сначала определять точку пересечения с Time[0] и затем рисовать трендовую линию от начальной точки до точки пересечения с Time[0], в таком случае всё работает отлично

крайнее правое время на графике мне нужно для позиционирования значька перключателя(при изменении масштаба графика) сигнала индикатора, то есть если перенести значёк переключателя за крайнее правое время, то есть ещё не наступившее значёк переключается(включается или выключается сигнал для выставления ордера, то есть можно переключением сигнала разрешать или запрещать советнику торговать)

а крайнее левое время определяется так: получаем крайний бар который виден на графике

WindowFirstVisibleBar() и получаем по нему время Time[WindowFirstVisibleBar()]