欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 请把这个指标改为金字塔的

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3907人关注过本帖平板打印复制链接

主题:请把这个指标改为金字塔的

帅哥哟,离线,有人找我吗?
站通
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:390 积分:80 威望:0 精华:0 注册:2013/5/28 13:15:02
  发帖心情 Post By:2013/5/31 10:02:49    Post IP:121.17.244.117[只看该作者]

这是mt4源码

//+------------------------------------------------------------------+
//|                                        IND_20130219_hbhshany.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright  "xszjg <xszjg@verscm.com> for xxx <xxx@xxx.com> on 20110815"
#property link       "http://www.verscm.com, http://verscm.taobao.com"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_color3 Aqua
#property indicator_color4 Yellow
#property indicator_width3 3
#property indicator_width4 3
extern int N=10;
extern double M=2;
extern int N2=10;
extern double M2=1.5;
double buffer1[];
double dn[];
double up[];
double tr[];
double dn1[];
double up1[];
double zhu1[];
double zhu2[];
int init()
  {

   IndicatorBuffers(8);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,up1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,dn1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,zhu1);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3,zhu2);
   SetIndexBuffer(4,up);
   SetIndexBuffer(5,dn);
   SetIndexBuffer(6,tr);
   SetIndexBuffer(7,buffer1);
   return(0);
  }
int deinit()
  {
   for(int i=0;i<Bars;i++)
   ObjectDelete("juxing"+Time[i]);
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int tr0,tr1;
   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   int i=0;
   for (i=MathMin(Bars-5,limit);i>=0; i--)
   {
      buffer1[i]=MathMax(MathMax(High[i]-Low[i],MathAbs(Close[i+1]-High[i])),MathAbs(Close[i+1]-Low[i]));
   }
   for (i=MathMin(Bars-5,limit);i>=0; i--)
   {
      double atr2=iMAOnArray(buffer1,0,N2,0,0,i);
      if((Close[i+1]-Low[i]>atr2*M2 && Close[i]<Open[i]) || (High[i]-Close[i+1]>atr2*M2 && Close[i]>Open[i]))
      {
         zhu1[i]=Open[i];
         zhu2[i]=Close[i];
      }
      if(Close[i]>Close[i+1] && Low[i]>High[i+1])
      drawline("juxing"+Time[i],Time[i+1],High[i+1],Time[i-1],Low[i],Yellow);
      if(Close[i]<Close[i+1] && High[i]<Low[i+1])
      drawline("juxing"+Time[i],Time[i+1],Low[i+1],Time[i-1],High[i],Aqua);
   }
   for (i=MathMin(Bars-5,limit);i>=0; i--)
   {
      double atr=iMAOnArray(buffer1,0,N,0,0,i);
      up1[i]=EMPTY_VALUE;dn1[i]=EMPTY_VALUE;
      double median=(High[i]+Low[i])/2.0;
      up[i]=median+atr*M;
      dn[i]=median-atr*M;
     
      if(i==Bars-5)
      {
         up1[i]=up[i];
         dn1[i]=dn[i];
      }
      else
      {
         if(Close[i]>up1[i+1])
         tr[i]=1;
         else
         {
            if(Close[i]<dn1[i+1])
            tr[i]=-1;
            else
            tr[i]=tr[i+1];
         }
         if(tr[i]==EMPTY_VALUE)
         {
            if(up[i]>up1[i+1])
            up1[i]=up1[i+1];
            else
            up1[i]=up[i];
            if(dn[i]<dn1[i+1])
            dn1[i]=dn1[i+1];
            else
            dn1[i]=dn[i];
         }
         else
         {
            if(tr[i]>0)
            {
               if(dn[i]<dn1[i+1])
               dn1[i]=dn1[i+1];
               else
               dn1[i]=dn[i];
            }
            if(tr[i]<0)
            {
               if(up[i]>up1[i+1])
               up1[i]=up1[i+1];
               else
               up1[i]=up[i];
            }
         }
         if(tr[i]>0 && tr[i+1]<0)
         {
         dn1[i]=dn[i];
         dn1[i+1]=up1[i+1];
         }
         if(tr[i]<0 && tr[i+1]>0)
         {
         up1[i]=up[i];
         up1[i+1]=dn1[i+1];
         }
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+
void drawline(string linename,int t1,double price1,int t2,double price2,int lincolor)
{
if (ObjectFind(linename)<0)
   {
      ObjectCreate(linename, OBJ_RECTANGLE, 0, t1, price1,t2,price2);
      ObjectSet(linename, OBJPROP_COLOR, lincolor);
      ObjectSet(linename,OBJPROP_RAY,false);
   }
else
   {
      ObjectSet(linename, OBJPROP_TIME1,t1);
      ObjectSet(linename, OBJPROP_PRICE1,price1);
      ObjectSet(linename, OBJPROP_TIME2,t2);
      ObjectSet(linename, OBJPROP_PRICE2,price2);
   }
   return;
}


 回到顶部