点数图突破交易策略

来自tradeStar帮助系统
跳转到: 导航, 搜索

智能交易攻略(8)-点数图突破交易策略

作者:仁心慧能

   //-------智能交易公式--------------
   //例8_1 点数图突破交易策略
   {策略:
   1.价格升破点数图最近几列的最高点时平空开多
   2.价格跌破点数图最近几列的最低点时平多开空
   ***点数图的算法和画法请问度娘***
   }
   input:
     格值(30),转向格(5),突破列数(3),偏移量(1);
   const: 最大列数(10); //突破列数应小于此数
   array: 极点值[最大列数](0); //上涨列为最高格值,下跌列为最低格值
   variable: 转向价(0),涨跌方向(0),
     突破买价(99999),突破卖价(0);//初始化
     
   if BarPos <= 1 then begin
     转向价 := Round(Close);
     涨跌方向 := 0;  //初始化为无方向
     突破买价 := High + 偏移量;
     突破卖价 := Low - 偏移量;
   end
   
   else begin
     if 涨跌方向 = 0 then begin   //尚未确定方向
       if High >= 转向价 + 格值 * 转向格 then begin
         极点值[0] := 转向价 + 格值 * 转向格;
         涨跌方向 := 1;  //上涨
       end
       else if Low <= 转向价 - 格值 * 转向格 then begin
         极点值[0] := 转向价 - 格值 * 转向格;
         涨跌方向 := -1;  //下跌
       end;
     end
   
     else if 涨跌方向 = 1 then begin  //当前列为上涨
       if High >= 极点值[0] + 格值 then begin //增加向上的X格子
         while High >= 极点值[0] + 格值 do begin
           极点值[0] := 极点值[0] + 格值;
           转向价 := 极点值[0] - 格值 * 转向格;  //抬高转向价
         end;
       end
       else if Low <= 转向价 then begin  //上涨转为下跌
         for n = 0 to 最大列数-1 do begin  //数组移位
           极点值[最大列数-n] := 极点值[最大列数-n-1];
         end;
      //以下使点数图新增下跌列
         极点值[0] := 转向价;
         涨跌方向 := -1;  //转为下跌
         转向价 := 极点值[0] + 格值 * 转向格;
         while Low <= 极点值[0] - 格值 do begin
           极点值[0] := 极点值[0] - 格值;
           转向价 := 极点值[0] + 格值 * 转向格;
         end;
       end;
     end  //当前列为上涨
   
     else begin //当前列为下跌
       if Low <= 极点值[0] - 格值 then begin //增加向下的O格子
         while Low <= 极点值[0] - 格值 do begin
           极点值[0] := 极点值[0] - 格值;
           转向价 := 极点值[0] + 格值 * 转向格;
         end;
       end
       else if High >= 转向价 then begin  //下跌转为上涨
         for n = 0 to 最大列数-1 do begin
           极点值[最大列数-n] := 极点值[最大列数-n-1];
         end;
         极点值[0] := 转向价;
         涨跌方向 := 1;
         转向价 := 极点值[0] - 格值 * 转向格;
         while High >= 极点值[0] + 格值 do begin
           极点值[0] := 极点值[0] + 格值;
           转向价 := 极点值[0] - 格值 * 转向格;
         end;
       end;
     end; //当前列为下跌   //根据最近若干列的极点值计算突破价位
     value1:= 0;
     value2:= 99999;
     for n = 1 to 突破列数 do begin
       if 极点值[n] > value1 then value1 := 极点值[n];
       if 极点值[n] < value2 then value2 := 极点值[n];
     end;
     突破买价 := value1 + 偏移量;
     突破卖价 := value2 - 偏移量;
   end;  
      
   Buy(' ', DEFAULT, 突破买价, -1, OT_STOP);
   SellShort(' ', DEFAULT, 突破卖价, -1, OT_STOP);  
      
   买线: 突破买价, Precision0;   
   卖线: 突破卖价, Precision0;
   盈利因子: -GrossProfit/GrossLoss, Precision2, LineThick0;
   盈亏比: -(GrossProfit/NumWinTrades)/(GrossLoss/NumLosTrades), Precision2, LineThick0;
   胜率%: PercentProfit, Precision2, LineThick0;
   净利: NetProfit, Precision2,LineThick0;
   当前连亏次数: NumConsecLosers, Precision0, LineThick0;
   {注解:
   1.用variable定义变量可增加可读性,在本例其实可以省略
   2.Precision指定输出数值的小数位数
   3.盈亏比=平均盈利/平均亏损,GrossLoss返回值为负数
   }

如图所示:

Dstp1.gif

点数图算法的代码比较复杂,如果每个涉及到点数图的公式都包含那么多代码会比较难看,

我们是否可以把它做成公共代码供其它公式调用呢?用传统的调用指标公式的方法不太好使,

而且一次调用只能返回一个结果,本例的点数图就需要返回“突破买价”和“突破卖价”两个结果,

用户能否自编函数,并且让这个函数能同时返回多个结果呢?


敬请关注本攻略!

个人工具
名字空间

变换
操作
导航
工具箱