FL03

2018-02-16

显示星星指标,代码大概是计算过去9根K线的基准价格,幅度,判定上涨或下跌。


#property description "小圆点"
#property link        "http://ea.kitgain.com/"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red

extern int NumBars = 499;
extern int EnableAlerts = 1;
extern int SignalID = 0;
double up[];
double down[];
double spread;
int 已报警 = 0;

int init() 
{
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexBuffer(0, up);
   SetIndexArrow(0, 159);
   SetIndexEmptyValue(0, 0.0);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexBuffer(1, down);
   SetIndexArrow(1, 159);
   SetIndexEmptyValue(1, 0.0);
   spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
   SetIndexDrawBegin(0, 0);
   return (0);
}

int deinit() {return (0);}

int start() 
{
   double v[100];
   int 九 = 9;
   double 系数 = 9.0;
   double 倍 = 1.1;
   int 回算柱数 = 0;
   int i = 0;
   bool 涨 = TRUE;
   double 基准价 = 0;
   double Range = 0;
   double 大 = 0;
   int k = 0;
   double sum = 0;
   int j = 0;
   double 权 = 0;
   double Ld_96 = 0;
   int 符号已显示 = 0;
   int g = 0;
   double atr = 0;
   double 箭头间距 = 5;
   double Ld_136 = 0;
   double Ld_144 = 0;
   if (Bars < NumBars) 回算柱数 = Bars;
   else 回算柱数 = NumBars;
   if (Close[回算柱数 - 2] > Close[回算柱数 - 1]) 涨 = TRUE;
   else 涨 = FALSE;
   基准价 = Close[回算柱数 - 2];
   for (i = 回算柱数 - 3; i >= 0; i--) 
   {
      大 = spread + High[i] - Low[i];
      if (MathAbs(spread + High[i] - (Close[i + 1])) > 大) 
         大 = MathAbs(spread + High[i] - (Close[i + 1]));
      if (MathAbs(Low[i] - (Close[i + 1])) > 大) 
         大 = MathAbs(Low[i] - (Close[i + 1]));
      //----------------------------------------------
      if (i == 回算柱数 - 3) //应该是不会执行
         for (j = 0; i <= 九 - 1; j++) //如果是新打开MT4,最近九柱赋予初值
            v[j] = 大;
      //----------------------------------------------
      v[k] = 大;//v[0]
      sum = 0;
      权 = 九;//9
      g = k;//0
      for (j = 0; j <= 九 - 1; j++) //九次
      {
         sum += v[g] * 权;//v[0]*9+v[8]*8+v[7]*7...v[1]*1
         权 -= 1.0;//9 8..1
         g--;//0 8 7..1
         if (g == -1) g = 九 - 1;//8
      }
      sum = 2.0 * sum / (系数 * (系数 + 1.0));//  * 2/9*10
      //v[0]*18/90+v[8]*16/90+v[7]*14/90..v[1]2/90
      //18+16..2等差数列的和为90
      k++;
      if (k == 九) k = 0;
      Range = 倍 * sum;
      if (涨 && Low[i] < 基准价 - Range) 
      {
         涨 = FALSE;
         基准价 = spread + High[i];
      }
      if (!涨 && spread + High[i] > 基准价 + Range) 
      {
         涨 = TRUE;
         基准价 = Low[i];
      }
      if (涨 && Low[i] > 基准价) 基准价 = Low[i];
      if (!涨 && spread + High[i] < 基准价) 基准价 = spread + High[i];
      atr = iATR(NULL, 0, 10, i);
      Ld_136 = 0;
      Ld_144 = 0;
      if (涨) 
      {
         if (符号已显示 != 1) Ld_96 = Low[i] - atr * 箭头间距 / 5.6;
         if (符号已显示 == 1) Ld_96 = -1.0;
         if (Ld_96 > 0.0) 
         {
            Ld_136 = Ld_96;
            Ld_144 = 0;
         } 
         else 
         {
            Ld_136 = 0;
            Ld_144 = 0;
         }
         up[i] = Ld_136;
         符号已显示 = 1;
      } 
      else 
      {
         if (符号已显示 != 2) Ld_96 = spread + High[i] + atr * 箭头间距 / 5.6;
         if (符号已显示 == 2) Ld_96 = -1.0;
         if (Ld_96 > 0.0) 
         {
            Ld_136 = 0;
            Ld_144 = Ld_96;
         } 
         else 
         {
            Ld_136 = 0;
            Ld_144 = 0;
         }
         down[i] = Ld_144;
         符号已显示 = 2;
      }
   }
   if (EnableAlerts == 1) 
   {
      if (Ld_136 > 0.0 && 已报警 != 1) 
      {
         已报警 = 1;
         Alert(Symbol(), " ", Period(), " Alert!! ", "BUY SIGNAL");
      }
      if (Ld_144 > 0.0 && 已报警 != 2) 
      {
         已报警 = 2;
         Alert(Symbol(), " ", Period(), " Alert!! ", "SELL SIGNAL");
      }
   }
   return (0);
}


特点是:

  • 权重系数从20%(18/90)等差递减到2/90,之和就是90,不错。
  • 最近一柱是20%,但倒数第二柱不是16/90,而是2/90;而倒数第八柱是16/90,这符合之前的研究,最近一柱并不是跟上一柱呈现正相关性,反而呈现负相关性。
  • 一个延伸判断准则是,如果红蓝点靠的太近,一般不会是大波段的起点。


本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)