开拓者期货期权程序化系统交易论坛

标题: 请教AverageD的问题 [打印本页]

作者: kakagoal    时间: 2012-10-15 23:06:06     标题: 请教AverageD的问题

本帖最后由 kakagoal 于 2012-10-15 23:33 编辑

Params
    Numeric length(5);
Vars
      NumericSeries avg;
      NumericSeries line;
      NumericSeries Open1;
Begin
      Open1=OpenD(0);
      avg=AverageD(3,length)-AverageD(4,length);
      line=Open1+avg;
      PlotNumeric("line",line);
      End
    这里的line每日是移动的,不是固定的,原因是当天实时的价格创新高或者新低使得avg的数值有所变动,因为averaeD的计算是把当天的数值也考虑在内的,我想要把line每日固定下来,AverageD(3,length)-AverageD(4,length)不把当天的最高最低价计算在内,而是从前一天开始算,也就是取前5天的每天最高价的平均-前5天的每天最低价的平均。该如何编写?
   请教一下论坛的朋友们,谢谢了!
作者: 小米    时间: 2012-10-16 10:31:25

此公式应用的图表周期是什么的?日线还是其它的周期?

作者: sorakiraa    时间: 2012-10-16 11:58:23

像这样?
avg=AverageFC(HighD(1),5)-AverageFC(LowD(1),5);
作者: kakagoal    时间: 2012-10-16 21:09:36

      应用在小时线和分钟线周期。
    昨晚睡前想到了一个思路,我先定义到开盘第一根K线,再求前一天收盘时刻K线之前length天的AverageD,然后每天第一根K线的值赋值到当天剩余的K线上,代码如下,line是固定下来了,但是这样写的话,计算有些多,载入公式应用明显感觉太慢了。
    Params
    Numeric length(5);
Vars
      NumericSeries avg;
      NumericSeries line;
      NumericSeries Open1;
          NumericSeries value1;
          NumericSeries value2;
Begin
      Open1=OpenD(0);
          value1=AverageD(3,length);
          value2=AverageD(4,length);
          If(Date!=Date[1])
          {
          avg=value1[1]-value2[1];
          }Else
          {
          avg=avg[1];
          }
      
      line=Open1+avg;
      PlotNumeric("line",line);
      End

小米大哥,有没有更好的写法啊? 楼下sorakiraa同学这样写,字面上感觉是对的,但是我载入公式应用在图表上看了,发现不对,他这样写哪里错了?请小米大哥说一下,谢谢啦!

作者: kakagoal    时间: 2012-10-16 21:52:03

sorakiraa 发表于 2012-10-16 11:58
像这样?
avg=AverageFC(HighD(1),5)-AverageFC(LowD(1),5);

字面上感觉是对的,但我载入公式应用看了下,发现不对,每天开盘之后的五根K线的line是变动的,剩余K线的line固定,但是所有的line的数值求的都不对。有意思的是如果把5换成6,那么就是开盘后的6根K线的line是变动的,AverageFC(HighD(1),5)的计算机制不是咱俩想的这个样子的啊。
作者: sorakiraa    时间: 2012-10-17 07:06:43

kakagoal 发表于 2012-10-16 21:52
字面上感觉是对的,但我载入公式应用看了下,发现不对,每天开盘之后的五根K线的line是变动的,剩余K线的 ...

4L应该是对的
Average和AverageFc是之前N个Bar的数据求平均
作者: kakagoal    时间: 2012-10-17 12:38:11

sorakiraa 发表于 2012-10-17 07:06
4L应该是对的
Average和AverageFc是之前N个Bar的数据求平均

4楼就是楼主。。。
Average和AverageFc是之前N个Bar的数据求平均,但是AverageFC(HighD(1),5)这么写就不是了,因为如果只是简单的求之前的5根Bar的平均的话,那么line的值应该固定,但实际上每天开盘后的5根K线line的值是变化的。所以AverageFC(HighD(1),5)的逻辑肯定是另外的一个意思。
作者: 小米    时间: 2012-10-17 13:59:33

kakagoal 发表于 2012-10-16 21:09
应用在小时线和分钟线周期。
    昨晚睡前想到了一个思路,我先定义到开盘第一根K线,再求前一天收盘 ...


我不太清楚自己对你的问题理解 得对不对,先写了段代码,你试试
  1. Params
  2.         Numeric length(5);
  3. vars
  4.     Numeric avg;
  5.         NumericSeries myprice;
  6.         NumericSeries line;
  7.         Numeric open1;
  8. begin
  9.     open1 = OpenD(0);
  10.         avg = AverageD(3,length)- AverageD(4,length);
  11.        
  12.         if(date!=date[-1] && date[-1]!=InvalidNumeric)
  13.         {
  14.                 myprice = avg;
  15.         }
  16.         If(date!=date[1])
  17.         {
  18.                 line = open1+myprice[1];
  19.         }
  20.         Commentary("line=="+Text(line));
  21.         //PlotNumeric("line",line);
  22.    
  23. end
复制代码

作者: kakagoal    时间: 2012-10-17 15:24:05

小米 发表于 2012-10-17 13:59
我不太清楚自己对你的问题理解 得对不对,先写了段代码,你试试

我载入看了,是对的,您是直接定义到前一天最后一根K线求出avg,这个思路更直接,十分感谢!




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2