KimIV的有用功能 - 页 96

 
KimIV >> :

你不需要添加任何东西...它已经在排队了。


非常感谢您!

你的主题是互联网上的一个宝藏。 我对我发现的东西爱不释手。

 
KimIV >> :

你不需要添加任何东西...它已经在排队了。


我想问问伊戈尔和每一个经常在这个话题中写作的人。我浏览了分支,没有找到确定趋势角度的函数。 你有没有一个函数可以确定15分钟图上6个或更多烛台的趋势角度?
 

是否有任何功能可以让你扣动(扳机)?

概况

模板

???

 
mazepa писал(а)>>

我想问问伊戈尔和每一个经常在这个话题中写作的人。我看了一下分支,没有找到确定趋势角度的函数。 你是否有一个函数可以确定15分钟的蜡烛在6个或更多蜡烛上的趋势角度?

我们可以不谈角度,而是谈价格的变化率

 

问候!谢谢你的工作,你做得很好。

我正在制作一个指标,但EquationDirect函数有时会错误地计算出交叉点:(

我已经在我的图表上计算出了线条的点,并将它们附在测试指标中,以使其清晰明了。该函数不能正确计算有偏移的交点,即在某些角度,函数中的公式不合适,需要以某种方式纠正,所以当它发生时,将由不同的公式进行计算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);
}
 

屏幕截图

通过Opera添加,在资源管理器中没有添加

 
你如何确定图表上看到的结束时间(从左边)?
 
DECIDE писал(а)>>
我如何确定图表中可见的结束时间(从左)?

TimeCurrent()

 
KimIV писал(а)>>

TimeCurrent()

这似乎是在右边。

 

我已经想明白了。

这不是因为EquationDirect函数的原因,计算是正确的,而是因为终端的一个错误,画线时有偏移。

这就是为什么我必须首先用Time[0]确定交叉点,然后用Time[0]画一条从初始点到交叉点的趋势线,在这种情况下,一切正常。

图表中最右边的时间需要用来定位指标信号开关图标(当图表比例 改变时),也就是说,如果你移动开关图标超过最右边的时间,即尚未达到,图标就会切换(下单的信号切换为开或关,这意味着你可以通过切换信号禁止或允许EA交易)

左手边的时间确定如下:我们得到图表上可见的最外层的条形图

WindowFirstVisibleBar()并获得时间 Time[WindowFirstVisibleBar()] 。