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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 请各位版主看下这个代码

   

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


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

主题:请各位版主看下这个代码

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


加好友 发短信
等级:论坛游民 帖子:168 积分:210 威望:0 精华:0 注册:2013/2/20 21:47:04
请各位版主看下这个代码  发帖心情 Post By:2013/3/15 17:48:13    Post IP:114.97.111.215[只看该作者]


DATAPERIODNUMBER:=DATATYPE;
vn:=DATACOUNT;
vh:=HIGH;
vl:=LOW;
variable: vallding[]=0,valldi[]=0;
   
//找出所有顶分型和底分型 
dingcount:=0;
dicount:=0;
for i=3 to vn do
begin
 ktype:=0; //判断是独立K还是分型 初始0
 
 if vh[i-1]>vh[i-2] && vh[i-1]>vh[i] && (vl[i-1]>=vl[i-2] || vl[i-1]>=vl[i]) then
  ktype:=1; 
 if vl[i-1]<vl[i-2] && vl[i-1]<vl[i] && (vh[i-1]<=vh[i-2] || vh[i-1]<=vh[i]) then
  ktype:=2;
 if vh[i-1]>vh[i-2] && vh[i-1]>vl[i] && vl[i-1]<vh[i-2] && vh[i-1]<vh[i] then
  ktype:=3;
 else
  ktype:=4;
 
 
 if ktype=1 then                           //标准顶和含有包含关系的顶
  begin
   
   if vl[i-1]>vl[i-2] && vl[i-1]>vl[i] then  //标准顶
    begin
     vallding[dingcount]:=i-1;
     dingcount:=dingcount+1;
    end;
   else
    begin
     temp_bh:=i-1;
     new_kh:=vh[temp_bh];
     new_kl:=vl[temp_bh];
     
     while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
      begin
       new_kh:=max(vh[temp_bh-1],vh[temp_bh]);
       new_kl:=max(vl[temp_bh-1],vl[temp_bh]);
       temp_bh:=temp_bh-1;
      end;
     
     temp_bh:=i-1;
     while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
      begin
       new_kh:=max(vh[temp_bh+1],vh[temp_bh]);
       new_kl:=max(vl[temp_bh+1],vl[temp_bh]);
       temp_bh=temp_bh+1;
      end;
     vallding[dingcount]:=temp_bh;
     dingcount:=dingcount+1;
    end;
  end;
   
 else if ktype=2 then
  
   begin
  
    if vh[i-1]<vh[i-2] and vh[i-1]<vh[i] then //标准底
     begin
      valldi[dicount]:=i-1;
      dicount:=dicount+1;
     end;
    else
     begin
      temp_bh:=i-1;
      new_kh:=vh[temp_bh];
      new_kl:=vl[temp_bh];
      
      while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
       begin
        new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
        new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
        temp_bh:=temp_bh-1;
       end;
       
      temp_bh=i-1;
      while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
       begin
        new_kh:=min(vh[temp_bh+1],vh[temp_bh]);
        new_kl:=min(vl[temp_bh+1],vl[temp_bh]);
        temp_bh:=temp_bh+1;
       end;
      valldi[dicount]:=temp_bh;
      dicount:=dicount+1;
     end;
   end;
  
   else if ktype=3 THEN
    begin
     dingordi:=0; //初始0 顶1 底2
     temp_bh:=i-1;
     new_kh:=vh[temp_bh];
     new_kl:=vl[temp_bh];
     
     while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
      temp_bh:=temp_bh-1;
     
     if vh[temp_bh-1]<vh[temp_bh] && vl[temp_bh-1]<vl[temp_bh-1] then
      dingordi:=1;
     else
      dingordi:=2;
      
     if dingordi=1 then  //判断是顶还是底
      begin
       temp_bh:=i-1;
       new_kh:=vh[temp_bh];
       new_kl:=vl[temp_bh];
      
       while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
        begin
         new_kh:=max(vh[temp_bh-1],vh[temp_bh]);
         new_kl:=max(vl[temp_bh-1],vl[temp_bh]);
         temp_bh:=temp_bh-1;
        end;
      
       temp_bh:=i-1;
       while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
        begin
         new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
         new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
         temp_bh:=temp_bh+1;
        end ;
      
       vallding[dingcount]:=temp_bh;
       dingcount:=dingcount+1;
      
      end ;
     else
      begin
       temp_bh:=i-1;
       new_kh:=vh[temp_bh];
       new_kl:=vl[temp_bh];
      
       while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
        begin
         new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
         new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
         temp_bh:=temp_bh-1;
        end;
      
       temp_bh=i-1;
       while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
        begin
         new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
         new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
         temp_bh:=temp_bh+1;
        end; 
      
       valldi[dicount]:=temp_bh;
       dicount:=dicount+1;
      end ;
   
    end;
end;   

 

 

for i=1 to ubound(vallding) do
 drawicon(barpos=vallding[i],high,1);
 
 

 这只做了第一步 想DATACOUNT求得加载K线数后 循环一遍 找出我想要的分型来

 

整个实际是个大循环  里面又写了一些代码

 

运行在序列模式下    一运行 金字塔就崩溃退出


 回到顶部