系统交易论坛 - 开拓者期货自动交易平台 » 系统交易 » 请教nopain等各位高手,自动筛选主力合约的设想


2008-8-11 16:57 hedgehog
请教nopain等各位高手,自动筛选主力合约的设想

现在已知在叠加商品的时候可以访问Data0-Data49个数据源的Bar数据,那么有没有办法来实现叠加这些品种的成交量或者持仓量呢?如果可以这样的话,是不是就可以自动筛选出不同时期的主力合约了?


在nopain的鼎力支持下,顺利实现
唉,感慨啊,大学应该多修一个计算机学位就好了……

下面是效果图,准备还要继续加入一些修饰,以方便找出何时换的月,方便测试时的数据截取工作:)

完整指标如下:
[code]
Vars
    Numeric Major(0);
    Numeric CON0;
    Numeric CON1;
    Numeric CON2;
    Numeric CON3;
    Numeric CON4;
    Numeric CON5;
    Numeric CON6;
    Numeric CON7;
    Numeric CON8;
    Numeric CON9;
    Numeric CON10;
    Numeric MyOpen;
    Numeric MyHigh;
    Numeric MyLow;
    Numeric MyClose;
Begin
    CON0=AverageFC(DATA0.OPENINT(),5);
    CON1=AVERAGEFC(DATA1.OPENINT(),5);
    CON2=AVERAGEFC(DATA2.OPENINT(),5);
    CON3=AVERAGEFC(DATA3.OPENINT(),5);
    CON4=AVERAGEFC(DATA4.OPENINT(),5);
    CON5=AVERAGEFC(DATA5.OPENINT(),5);
    CON6=AVERAGEFC(DATA6.OPENINT(),5);
    CON7=AVERAGEFC(DATA7.OPENINT(),5);
    CON8=AVERAGEFC(DATA8.OPENINT(),5);
    CON9=AVERAGEFC(DATA9.OPENINT(),5);
    CON10=AVERAGEFC(DATA10.OPENINT(),5);

    If(Con0 > Major)
    {
        Major = Con0;
        MyOpen = Data0.Open;
        MyHigh = Data0.High;
        MyLow = Data0.Low;
        MyClose = Data0.Close;
    }

    If(Con1 > Major)
    {
        Major = Con1;
        MyOpen = Data1.Open;
        MyHigh = Data1.High;
        MyLow = Data1.Low;
        MyClose = Data1.Close;
    }

    If(Con2 > Major)
    {
        Major = Con2;
        MyOpen = Data2.Open;
        MyHigh = Data2.High;
        MyLow = Data2.Low;
        MyClose = Data2.Close;
    }

    If(Con3 > Major)
    {
        Major = Con3;
        MyOpen = Data3.Open;
        MyHigh = Data3.High;
        MyLow = Data3.Low;
        MyClose = Data3.Close;
    }

    If(Con4 > Major)
    {
        Major = Con4;
        MyOpen = Data4.Open;
        MyHigh = Data4.High;
        MyLow = Data4.Low;
        MyClose = Data4.Close;
    }

    If(Con5 > Major)
    {
        Major = Con5;
        MyOpen = Data5.Open;
        MyHigh = Data5.High;
        MyLow = Data5.Low;
        MyClose = Data5.Close;
    }

    If(Con6 > Major)
    {
        Major = Con6;
        MyOpen = Data6.Open;
        MyHigh = Data6.High;
        MyLow = Data6.Low;
        MyClose = Data6.Close;
    }

    If(Con7 > Major)
    {
        Major = Con7;
        MyOpen = Data7.Open;
        MyHigh = Data7.High;
        MyLow = Data7.Low;
        MyClose = Data7.Close;
    }

    If(Con8 > Major)
    {
        Major = Con8;
        MyOpen = Data8.Open;
        MyHigh = Data8.High;
        MyLow = Data8.Low;
        MyClose = Data8.Close;
    }

    If(Con9 > Major)
    {
        Major = Con9;
        MyOpen = Data9.Open;
        MyHigh = Data9.High;
        MyLow = Data9.Low;
        MyClose = Data9.Close;
    }

    If(Con10 > Major)
    {
        Major = Con10;
        MyOpen = Data10.Open;
        MyHigh = Data10.High;
        MyLow = Data10.Low;
        MyClose = Data10.Close;
    }

    PlotNumeric("High",MyHigh);
    PlotNumeric("Open",MyOpen);
    PlotNumeric("Low",MyLow);
    PlotNumeric("Close",MyClose);
End
[/code]

[[i] 本帖最后由 hedgehog 于 2008-8-22 15:10 编辑 [/i]]

2008-8-13 15:06 TradeStar
如果一定要这样用的话,可以用持仓量和成交量来解决如果更细致点可以再计算一下最后交易时间什么的。。。

2008-8-13 16:26 nopain
当然可以这么做,但是筛选主力合约需要这么复杂的操作么?

2008-8-14 10:40 skyline
最简单就是TB公司手工给主力合约做个标记,然后用户只要读取即可

2008-8-14 20:13 zhx163
不错      :lol

2008-8-20 15:48 hedgehog
[quote]原帖由 [i]nopain[/i] 于 2008-8-13 16:26 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=16127&ptid=2740][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
当然可以这么做,但是筛选主力合约需要这么复杂的操作么? [/quote]

那么请问,怎么样来通过TB找出历史阶段的主力合约?

2008-8-20 15:55 nopain
仔细看了您的需求,看来用一个指标来实现是可行的。
指标比较各个合约的成交量和持仓量,选取当时的主力合约的高开低收等数据输出。

2008-8-21 17:03 hedgehog
[quote]原帖由 [i]nopain[/i] 于 2008-8-20 15:55 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=16449&ptid=2740][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
仔细看了您的需求,看来用一个指标来实现是可行的。
指标比较各个合约的成交量和持仓量,选取当时的主力合约的高开低收等数据输出。 [/quote]

试了一下,没有头绪,请问nopain具体该如何写?
我的初步设想是比较持仓量的5天平均,最大的那个作为主力合约
下面是准备用在RU上的面的指标:但是没有编译通过:(
[code]
Vars
        Numeric        MAJOR(0);
        Numeric         N(0);
        NumericSeries CON0;
        NumericSeries CON1;
        NumericSeries CON2;
        NumericSeries CON3;
        NumericSeries CON4;
        NumericSeries CON5;
        NumericSeries CON6;
        NumericSeries CON7;
        NumericSeries CON8;
        NumericSeries CON9;
        NumericSeries CON10;
BEGIN
         CON0=AverageFC(DATA0.OPENINT(),5);
         CON1=AVERAGEFC(DATA1.OPENINT(),5);
         CON2=AVERAGEFC(DATA2.OPENINT(),5);
         CON3=AVERAGEFC(DATA3.OPENINT(),5);
         CON4=AVERAGEFC(DATA4.OPENINT(),5);
         CON5=AVERAGEFC(DATA5.OPENINT(),5);
         CON6=AVERAGEFC(DATA6.OPENINT(),5);
         CON7=AVERAGEFC(DATA7.OPENINT(),5);
         CON8=AVERAGEFC(DATA8.OPENINT(),5);
         CON9=AVERAGEFC(DATA9.OPENINT(),5);
         CON10=AVERAGEFC(DATA10.OPENINT(),5);
        FOR N=0 TO 10 -1;
        MAJOR=MAX("CON"+"N","CON"+"N+1");
        RETURN;
       
IF (MAJOR==CON0)
{
        PLOTNUMERIC("High",DATA0.High());
        PlotNumeric("Open",DATA0.Open());
        PlotNumeric("Low",DATA0.Low());
        PlotNumeric("Close",DATA0.Close());
}ELSE IF (MAJOR==CON1)
{        PLOTNUMERIC("High",DATA1.High());
        PlotNumeric("Open",DATA1.Open());
        PlotNumeric("Low",DATA1.Low());
        PlotNumeric("Close",DATA1.Close());
}
ELSE IF (MAJOR==CON2)
{        PLOTNUMERIC("High",DATA2.High());
        PlotNumeric("Open",DATA2.Open());
        PlotNumeric("Low",DATA2.Low());
        PlotNumeric("Close",DATA2.Close());
}
ELSE IF (MAJOR==CON3)
{        PLOTNUMERIC("High",DATA3.High());
        PlotNumeric("Open",DATA3.Open());
        PlotNumeric("Low",DATA3.Low());
        PlotNumeric("Close",DATA3.Close());
}
ELSE IF (MAJOR==CON4)
{        PLOTNUMERIC("High",DATA4.High());
        PlotNumeric("Open",DATA4.Open());
        PlotNumeric("Low",DATA4.Low());
        PlotNumeric("Close",DATA4.Close());
}
ELSE IF (MAJOR==CON5)
{        PLOTNUMERIC("High",DATA5.High());
        PlotNumeric("Open",DATA5.Open());
        PlotNumeric("Low",DATA5.Low());
        PlotNumeric("Close",DATA5.Close());
}
ELSE IF (MAJOR==CON6)
{        PLOTNUMERIC("High",DATA6.High());
        PlotNumeric("Open",DATA6.Open());
        PlotNumeric("Low",DATA6.Low());
        PlotNumeric("Close",DATA6.Close());
}
ELSE IF (MAJOR==CON7)
{        PLOTNUMERIC("High",DATA7.High());
        PlotNumeric("Open",DATA7.Open());
        PlotNumeric("Low",DATA7.Low());
        PlotNumeric("Close",DATA7.Close());
}
ELSE IF (MAJOR==CON8)
{        PLOTNUMERIC("High",DATA8.High());
        PlotNumeric("Open",DATA8.Open());
        PlotNumeric("Low",DATA8.Low());
        PlotNumeric("Close",DATA8.Close());
}
ELSE IF (MAJOR==CON9)
{        PLOTNUMERIC("High",DATA9.High());
        PlotNumeric("Open",DATA9.Open());
        PlotNumeric("Low",DATA9.Low());
        PlotNumeric("Close",DATA9.Close());
}
ELSE IF (MAJOR==CON10)
{        PLOTNUMERIC("High",DATA10.High());
        PlotNumeric("Open",DATA10.Open());
        PlotNumeric("Low",DATA10.Low());
        PlotNumeric("Close",DATA10.Close());       
}
END
[/code]
主要是这里不大清楚怎么处理……
[code]
        FOR N=0 TO 10 -1;
        MAJOR=MAX("CON"+"N","CON"+"N+1");
        RETURN;
[/code]

2008-8-21 17:37 nopain
循环语句用得不对,输出也有问题

2008-8-21 17:38 nopain
修改了一下,大致代码如下
[code]
Vars
    Numeric Major(0);
    NumericSeries CON0;
    NumericSeries CON1;
    NumericSeries CON2;
    NumericSeries CON3;
    NumericSeries CON4;
    NumericSeries CON5;
    NumericSeries CON6;
    NumericSeries CON7;
    NumericSeries CON8;
    NumericSeries CON9;
    NumericSeries CON10;
    Numeric MyOpen;
    Numeric MyHigh;
    Numeric MyLow;
    Numeric MyClose;
Begin
    CON0=AverageFC(DATA0.OPENINT(),5);
    CON1=AVERAGEFC(DATA1.OPENINT(),5);
    CON2=AVERAGEFC(DATA2.OPENINT(),5);
    CON3=AVERAGEFC(DATA3.OPENINT(),5);
    CON4=AVERAGEFC(DATA4.OPENINT(),5);
    CON5=AVERAGEFC(DATA5.OPENINT(),5);
    CON6=AVERAGEFC(DATA6.OPENINT(),5);
    CON7=AVERAGEFC(DATA7.OPENINT(),5);
    CON8=AVERAGEFC(DATA8.OPENINT(),5);
    CON9=AVERAGEFC(DATA9.OPENINT(),5);
    CON10=AVERAGEFC(DATA10.OPENINT(),5);

    If(Con0 > Major)
    {
        Major = Con0;
        MyOpen = Data0.Open;
        MyHigh = Data0.High;
        MyLow = Data0.Low;
        MyClose = Data0.Close;
    }

    If(Con1 > Major)
    {
        Major = Con1;
        MyOpen = Data1.Open;
        MyHigh = Data1.High;
        MyLow = Data1.Low;
        MyClose = Data1.Close;
    }

    // 以下类似
    ....

    PlotNumeric("High",MyHigh);
    PlotNumeric("Open",MyOpen);
    PlotNumeric("Low",MyLow);
    PlotNumeric("Close",MyClose);
End
[/code]

2008-8-27 16:17 devcon
楼主的电脑配置是怎样的?
如果我的TB里一个超级图表上叠加这么多品种,肯定死机...P4 1.8G,1G的内存,是不是差了点?

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.