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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 公式改编为金字塔格式

   

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


  共有5258人关注过本帖树形打印复制链接

主题:公式改编为金字塔格式

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


加好友 发短信
等级:新手上路 帖子:28 积分:200 威望:0 精华:0 注册:2011/10/9 17:39:08
公式改编为金字塔格式  发帖心情 Post By:2011/12/13 12:43:35    Post IP:123.147.251.116[只看该作者]

以下是MT4公式,请帮忙改编为金字塔格式(超过16240字符,请看一二楼)

 

 

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 White
#property indicator_color2 Red
#property indicator_color3 White

double Bi[],Highxiu[],Lowxiu[];

 int i=0,j=0;//j为上一拐点以后的包含合并次数
 int mark=0,xiangbao=0;//mark 为分笔方向变量,xiangbao 为K线包含关系方向变量
 int Suo,Bisuo;//Suo为上一拐点的索引,Bisuo为上一线段端点的索引
 int Shift,last;
 double HighMid,LowMid;//HighMid为上溯第一个高点暂存,LowMid为上溯第一个低点暂存

int init()
  {
   SetIndexBuffer(0,Bi);
   SetIndexBuffer(1,Highxiu);
   SetIndexBuffer(2,Lowxiu);

  
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexStyle(1,DRAW_NONE);
   SetIndexStyle(2,DRAW_NONE);

  
   SetIndexEmptyValue(0,0.0);
   IndicatorDigits(Digits);
   SetIndexLabel(0,"笔");
   return(0);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 
  int counted_bars=IndicatorCounted();
  int Limit=Bars-counted_bars; 
    if(counted_bars==0 )     
     {
      ArrayInitialize(Bi,0.0);
  
     }

  for(Shift=Limit;Shift>=0;Shift--)
     {
       Highxiu[Shift]=High[Shift];
       Lowxiu[Shift]=Low[Shift];
       switch(xiangbao)
        {
       case 0:
          if(Highxiu[Shift]>Highxiu[Shift+1] && Lowxiu[Shift]>Lowxiu[Shift+1])
           {
            xiangbao=1;
           }
          if(Highxiu[Shift]<Highxiu[Shift+1] && Lowxiu[Shift]<Lowxiu[Shift+1])
           {
            xiangbao=-1;
           }
          break;
      case 1:

          if(Highxiu[Shift]<Highxiu[Shift+1] && Lowxiu[Shift]>=Lowxiu[Shift+1])
            {
             Highxiu[Shift]=Highxiu[Shift+1];
            }
          if(Highxiu[Shift]<Highxiu[Shift+1] && Lowxiu[Shift]<Lowxiu[Shift+1])
            {
              xiangbao=-1;
            }
          break;
      case -1:

          if(Highxiu[Shift]<=Highxiu[Shift+1] && Lowxiu[Shift]>Lowxiu[Shift+1])
            {
             Lowxiu[Shift]=Lowxiu[Shift+1];
            }
          if(Highxiu[Shift]>Highxiu[Shift+1] && Lowxiu[Shift]>Lowxiu[Shift+1])
            {
              xiangbao=1;
            }
          break;
       default: return;
       }
     }

  for(Shift=Limit;Shift>=0;Shift--)
     {
      switch(mark)
        {
       case 0:
              j=0;
          int x=iHighest(NULL,0,MODE_HIGH,counted_bars,Shift);
          int y=iLowest(NULL,0,MODE_LOW,counted_bars,Shift);
          if(x-y>=4)  //如果高点在前且比低点超前4根K线
           {

            for(i=x-1;i>=y;i--)
              {
               if((High[i]!=Highxiu[i])|| (Low[i]!=Lowxiu[i])) j++;//累计合并包含K线的次数
              }
            if(x-y-j>=4)  //如果高点在前且合并包含K线后比低点超前4根K线
              {
               Bi[x]=High[x];        //登记第一个顶的价格并传递给指标
               HighMid=High[x];       //记录第一个顶的价格
               Suo=x;                 //记录第一个顶的索引
               mark=-1;               //向上的笔结束,向下的一笔确认出现,把分笔的目标改为寻找底 

              }
           }
          if(y-x>4)   //如果低点在前且比高点超前4根K线
           {

            for(i=y-1;i>=x;i--)
              {
               if((High[i]!=Highxiu[i])|| (Low[i]!=Lowxiu[i])) j++;//累计合并包含K线的次数
              }
            if(y-x-j>=4)               //如果低点在前且合并K线后比高点超前4根K线
             {
               Bi[y]=Low[y];          //登记第一个底的价格并传递给指标
               LowMid=Low[y];         //记录第一个底的价格
               Suo=y;                 //记录第一个底的索引
               mark=1;                //向下的笔结束,向上的笔确认出现,把分笔的目标改为寻找顶
             }
            }
        break;
       case 1:
          j=0;
          x=iHighest(NULL,0,MODE_HIGH,Suo-Shift,Shift);  //计算上一个底以来最高价所在K线的索引
          y=iLowest(NULL,0,MODE_LOW,x-Shift,Shift);      //计算上一个高点以来最低价所在K线的索引

           if(x-y>=4)
            {
             for(i=x-1;i>=y;i--)
              {
               if((High[i]!=Highxiu[i])|| (Low[i]!=Lowxiu[i])) j++;//累计合并包含K线的次数
              }
             if(x-y-j>=4 && High[y]<Low[x])
              {
               Bi[x]=High[x];       //登记新一个顶的价格并传递给指标
               HighMid=High[x];     //记录新一个顶的价格
               Suo=x;               //记录新一个顶的索引
               mark=-1;             //向上的笔结束,向下的一笔确认出现,把分笔的目标改为寻找底
               last=y;
              }
            }
          

[此贴子已经被作者于2011-12-13 12:46:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
海绵
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:28 积分:200 威望:0 精华:0 注册:2011/10/9 17:39:08
  发帖心情 Post By:2011/12/13 12:43:48    Post IP:123.147.251.116[只看该作者]

 if(x-y>=3 && Low[y]<LowMid)  //至少第4根K线后过底
            {
             Bi[x]=High[x];       //登记新一个顶的价格并传递给指标
             HighMid=High[x];     //记录新一个顶的价格
             Suo=x;               //记录新一个顶的索引
             mark=-1;             //向上的笔结束,向下的一笔确认出现,把分笔的目标改为寻找底
             last=y;
            }
           if(Shift==0 && mark==1)
             {
              Bi[x]=High[x];
              if(last!=x)
                {
                  Bi[last]=0;
                  last=x;
                }
             }
        break;
       case -1:
          j=0;
          y=iLowest(NULL,0,MODE_LOW,Suo-Shift,Shift);      //计算上一个顶以来最低价所在K线的索引
          x=iHighest(NULL,0,MODE_HIGH,y-Shift,Shift);  //计算上一个低点以来最高价所在K线的索引

          if(y-x>=4)
            {
             for(i=y-1;i>=x;i--)
              {
               if((High[i]!=Highxiu[i])|| (Low[i]!=Lowxiu[i])) j++;//累计合并包含K线的次数
              }
             if(y-x-j>=4 && High[y]<Low[x])
              {
               Bi[y]=Low[y];      //登记新一个底的价格并传递给指标
               LowMid=Low[y];     //记录新一个底的价格
               Suo=y;               //记录新一个底的索引
               mark=1;             //向下的笔结束,向上的一笔确认出现,把分笔的目标改为寻找顶
               last=x;
              }
            }
          if(y-x>=3 && High[x]>HighMid)  //至少第4根K线后过顶
           {
             Bi[y]=Low[y];      //登记新一个底的价格并传递给指标
             LowMid=Low[y];     //记录新一个底的价格
             Suo=y;               //记录新一个底的索引
             mark=1;             //向下的笔结束,向上的一笔确认出现,把分笔的目标改为寻找顶
             last=x;
           }
           if(Shift==0 && mark==-1)
             {
              Bi[y]=Low[y];
              if(last!=y)
                {
                  Bi[last]=0;
                  last=y;
                }
             }
        break;   
      default: return;
        }
     }

//----
   return(0);
  }
//+------------------------------------------------------------------+

  

 

 

{以上1、2楼为一个完整的公式源码}

[此贴子已经被作者于2011-12-13 12:45:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
董小球
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 大哥
等级:超级版主 帖子:2837 积分:13237 威望:0 精华:2 注册:2010/7/14 17:31:54
  发帖心情 Post By:2011/12/13 13:03:47    Post IP:58.246.57.26[只看该作者]

神啊 楼主你这么长的代码 恐怕很难让人免费给你写出来啊

如果你会一些金字塔代码,来询问某个功能模块怎么实现  这样比较好

 



金字塔—专业程序化交易量化投资平台

客户服务部

-----------------------------------------------------------

欢迎您参加我公司的技术培训,具体培训需求请发邮件到

service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
海绵
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:28 积分:200 威望:0 精华:0 注册:2011/10/9 17:39:08
  发帖心情 Post By:2011/12/13 14:18:09    Post IP:123.147.251.116[只看该作者]

其实我电脑盲,会一点点我就会自力更生了

 回到顶部
帅哥哟,离线,有人找我吗?
阿火
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 原leevolvo
等级:版主 帖子:2160 积分:10563 威望:0 精华:11 注册:2010/11/3 11:21:19
  发帖心情 Post By:2011/12/13 14:31:38    Post IP:120.42.45.130[只看该作者]

一点点都不会。那说出你的代码思路总可以吧

你的代码看不懂,亲


 回到顶部