设为首页收藏本站

 找回密码
 注册
楼主: 追涨杀跌
打印 上一主题 下一主题

跨周期数据转换函数以及跨周期技术指标调用的实现 [复制链接]

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
31#
发表于 2011-7-13 11:03:17 |显示全部楼层
回复 61# 读书山林

代码没有问题,谢谢读书山林的热心帮助!!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
32#
发表于 2011-7-13 22:30:26 |显示全部楼层
回复 65# 读书山林

我觉得是不可能写一个数据源为Price,然后任何序列数据替换进去都可以的MtSMA,否则就不是跨周期的SMA函数。这里面的原因就在于,mtClose和普通Close的区别。所以处理上是有区别的

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
33#
发表于 2011-7-14 15:59:25 |显示全部楼层
本帖最后由 追涨杀跌 于 2011-7-14 16:00 编辑

回复 69# 读书山林

这种就要用循环的方式,可以参考 mtSummation的实现部分。
Params
        NumericSeries Price(1);
        NumericSeries BarCnt(0);
        Numeric Length(10);
Vars
        NumericSeries SumValue(0);
        Numeric i;
        Numeric j(0);
Begin
        SumValue = 0;
        For i = 1 to Length
        {
                If (Price[j] <> InvalidNumeric)
                {
                        SumValue = SumValue + Price[j];
                        j = j + BarCnt[j];
                }
                else Break;
        }

        Return SumValue;
End

最关键的一句就是:j = j + BarCnt[j]

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
34#
发表于 2011-7-14 16:02:01 |显示全部楼层
老大,能否把RSI和SAR的跨周期完成,谢谢!
cxwh 发表于 2011-7-14 09:16


RSI已经完成,请查看前面的帖子。SAR的麻烦点,再等几天吧。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
35#
发表于 2011-7-18 18:30:40 |显示全部楼层
本帖最后由 追涨杀跌 于 2011-7-18 18:57 编辑

回复 73# 读书山林

我看了一下,觉得还是写得有点问题,我试着改了一下,你测一下看是不是正确?
  1. //------------------------------------------------------------------------
  2. // 简称: MtRef
  3. // 名称: 跨周期求回溯周期
  4. // 类别: 用户函数
  5. // 类型: 用户函数
  6. // 输出: 数值型
  7. //------------------------------------------------------------------------


  8. Params

  9.         NumericSeries mtBarCnt(0);        // MtBar函数返回的mtBarCnt值
  10.         Numeric Length(10);              // 目标周期下的回溯周期
  11. Vars
  12.         Numeric i;
  13.         Numeric j(0); // 与目标周期下的回溯周期 等值的小周期回溯周期值
  14. Begin

  15.         For i = 1 to Length
  16.         {
  17.                 If (mtBarCnt[j] <> InvalidNumeric)
  18.                 {

  19.                         j = j + mtBarCnt[j];
  20.                 }
  21.                 else Break;
  22.         }
  23.         Return j;
  24. End
复制代码

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
36#
发表于 2011-9-2 10:08:56 |显示全部楼层
回复 93# 致富

文华我用得很少,所以理解这段代码的逻辑可能会有偏差,我试着用TB改写成了一个交易系统,您看看是否和原指标的意思一样。
  1. Params
  2.         Numeric N(5);
  3. Vars
  4.         Numeric Todayopen;
  5.         Numeric H1;
  6.         Numeric L1;
  7.         NumericSeries HH1;
  8.         NumericSeries LL1;
  9.         NumericSeries BuyOrSell(0);
  10. Begin
  11.         TodayOpen = Round(OpenD(1),0);
  12.         if (Barstatus == 2)
  13.         {
  14.                 PlotString("todayopen",text(todayopen),High+1,Yellow);
  15.                 Unplot("todayopen",1);
  16.         }
  17.         H1 = HighestFC(Close,N);
  18.         L1 = LowestFC(Close,N);
  19.         //PlotNumeric("H1",H1,0,white);
  20.         //PlotNumeric("L1",L1,0,darkgray);
  21.         HH1 = IIF(close == L1, H1, HH1[1]);
  22.         LL1 = IIF(Close == H1, L1, LL1[1]);
  23.         PlotNumeric("HH1",HH1,0,Yellow);
  24.         PlotNumeric("LL1",LL1,0,blue);
  25.         BuyOrSell = IIF(Close > HH1, 1, iif(close < LL1, -1, 0));
  26.         if (marketposition <> 1 and BuyorSell[1] == 1)
  27.         {
  28.                 Buy(1,Open);
  29.         }
  30.         if (marketPosition <> -1 and BuyorSell[1] == -1)
  31.         {
  32.                 SellShort(1,Open);
  33.         }
  34. End
复制代码

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
37#
发表于 2011-9-19 11:46:59 |显示全部楼层
本帖最后由 追涨杀跌 于 2011-9-19 11:48 编辑

回复 103# xkzr

参照以前的帖子,应该不难写出这个公式。我没有使用参数,直接写了一下,供你参考
Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
        Numeric Lots(1);
Vars
        Numeric M15_MACDValue;
        Numeric M15_AvgMACD;
        NumericSeries M15_MACDDiff;
        Numeric M15_PreBar;

        Numeric M5_MACDValue;
        Numeric M5_AvgMACD;
        NumericSeries M5_MACDDiff;
        Numeric M5_PreBar;
       
Begin
        M15_PreBar = MtMACD(15,1,FastLength,SlowLength,MACDLength,M15_MACDValue,M15_AvgMACD);
        M15_MACDDiff = M15_MACDValue - M15_AvgMACD;
        PlotNumeric("M15_MACD",M15_MACDValue);
        PlotNumeric("M15_MACDAvg",M15_AvgMACD);
        If (M15_MACDDiff >= 0)       
                PlotNumeric("M15_MACDDiff",M15_MACDDiff,0,Red);
        Else
                PlotNumeric("M15_MACDDiff",M15_MACDDiff,0,Green);
        PlotNumeric("零线",0);

        M5_PreBar = MtMACD(5,1,FastLength,SlowLength,MACDLength,M5_MACDValue,M5_AvgMACD);
        M5_MACDDiff = M5_MACDValue - M5_AvgMACD;
        PlotNumeric("M5_MACD",M5_MACDValue);
        PlotNumeric("M5_MACDAvg",M5_AvgMACD);
        If (M5_MACDDiff >= 0)       
                PlotNumeric("M5_MACDDiff",M5_MACDDiff,0,Red);
        Else
                PlotNumeric("M5_MACDDiff",M5_MACDDiff,0,Green);
        PlotNumeric("零线",0);

        If (M15_MacdDiff[M15_PreBar]<0 and M15_MacdDiff>0 and M5_MacdDiff[M5_PreBar]<0 and M5_MacdDiff>0)
        {
                Buy(Lots,Open);
        }
        If (M15_MacdDiff[M15_PreBar]>0 and M15_MacdDiff<0 and M5_MacdDiff[M5_PreBar]>0 and M5_MacdDiff<0)
        {
                SellShort(Lots,Open);
        }
End

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-4 07:01

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部