Funciones útiles de KimIV - página 96

 
KimIV >> :

No necesitas añadir nada... Ya está en la línea.


¡Muchas gracias!

Tu hilo es un tesoro en internet, no me canso de ver lo que he encontrado.

 
KimIV >> :

No necesitas añadir nada... Ya está en la línea.


Me gustaría preguntar a Igor y a todos los que escriben regularmente en este hilo. He navegado por la rama y no he encontrado la función que determina el ángulo de la tendencia. ¿Tienen una función que determine el ángulo de la tendencia en una vela de 15 minutos a 6 o más velas?
 

¿hay alguna función que le permita apretar (el gatillo)

perfil

plantilla

???

 
mazepa писал(а) >>

Me gustaría preguntar a Igor y a todos los que escriben regularmente en este hilo. Busqué en la rama y no encontré la función que determina el ángulo de la tendencia. ¿Tienen una función que determine el ángulo de la tendencia en una vela de 15 minutos a 6 o más velas?

Podemos hablar no del ángulo, sino de la tasa de variación del precio

 

¡Saludos! Gracias por vuestro trabajo, estáis haciendo un buen trabajo.

Estoy haciendo un indicador pero la función EquationDirect a veces calcula mal el punto de cruce :(

He calculado los puntos de las líneas en mi gráfico y los he adjuntado en un indicador de prueba para mayor claridad. La función no calcula correctamente la intersección con un desplazamiento, es decir, en algún ángulo la fórmula de la función no es la adecuada y hay que corregirla de alguna manera, así que cuando ocurra los cálculos se harán con una fórmula diferente IMHO

#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);
}
 

captura de pantalla

añadido a través de opera, no añadido en explorer

 
¿cómo se puede determinar el tiempo final (desde la izquierda) que se ve en el gráfico?
 
DECIDE писал(а) >>
¿Cómo puedo determinar la hora de finalización (de la izquierda) que es visible en el gráfico?

HoraCorriente()

 
KimIV писал(а) >>

HoraCorriente()

Esto parece estar a la derecha.

 

Ya me lo he imaginado.

no es por la función EquationDirect, el cálculo es correcto, es por un error del terminal, la línea se dibuja con un desplazamiento

por eso tuve que determinar primero el punto de cruce con Time[0] y luego trazar una línea de tendencia desde el punto inicial hasta el punto de cruce con Time[0], en este caso todo funciona bien

el tiempo más a la derecha en el gráfico es necesario para posicionar el icono del interruptor de la señal del indicador (cuando se cambia la escala del gráfico), es decir, si se mueve el icono del interruptor más allá del tiempo más a la derecha, es decir, que aún no se ha alcanzado, el icono cambia (la señal para colocar una orden se activa o desactiva, significa que se puede prohibir o permitir que el EA opere cambiando la señal)

El tiempo de la izquierda se determina de la siguiente manera: obtenemos la barra más externa visible en el gráfico

WindowFirstVisibleBar() y obtener el tiempo Time[WindowFirstVisibleBar()]