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

标题: 中国程序化交易的发展需要更多分享和合作。希望大家支持 [打印本页]

作者: 飞鸟    时间: 2013-1-22 15:02:56     标题: 中国程序化交易的发展需要更多分享和合作。希望大家支持

本帖最后由 飞鸟 于 2013-1-22 15:14 编辑

大家好,我刚加入TB这个大家庭几天。目前我在新加坡一家对冲基金工作工作,我们旗下也有一只挺大的量化基金。虽然我对量化,程序化的了解也才一年多,但我可以清楚的看到中国与海外的差距。我忍不住想和大家分享下我的看法:

我深感:我们在做的并不是真正的’量化‘,这是对量化,对算法,对程序化的曲解。我们做的仅仅是’计算机化‘。很多国内的策略我也在测试,但这主要只是为了学习,因为我知道他们中的大部分都不具备实盘的能力。我想简要说要我的感受,希望大家一起讨论并指正。

1. 量化的含义。
量化不是计算机化。把技术指标做成程序放在一起只是量化的初级阶段。一个均线相交,MACD突破,开盘,通道突破还不是成熟的策略。他们或许可以产生不错的利润,但是他们并不是真正的算法交易。真正的算法交易又叫黑箱交易,这是因为它的原理一般较为复杂。真正的量化模型应该是类似这样的模型:1)多因子模型 2)市场机制转换模型 3)delta对冲套利,跨期套利,跨市套利 4)配对交易 5)模式识别 6)机器学习 7)基于计量经济学的模型 (比如利用滤波 + 平滑等隔离噪音和趋势)8)遗传神经分析, 小波分析 9)决策树,等等。

虽然我相信’大道至简‘,比如海龟法则一直驰骋市场很多年,但是我也相信,我们还有很多路要走啊!

2. 开发
开发的平台。当然,TB是一个很好的平台,毋庸置疑。然而,这也只是初级阶段。好的程序化模型一定是直接基于高级语言的:比如C++/C, Python, Java, MATLAB. 比如我们公司的模型,大多基于JAVA和MATLAB搭建,然后基于MATLAB到Bloomberg, Routers的API接口直接下单。只有这样,我们才能编出真正的灵活的模型。

4. 我们需要更多分享, 只有分享才能进步
我们需要更多分享,只有分享才能进步。大家不必把自己的模型藏在衣服里,深怕被别人偷走了。其实,我们大部分的模型还不成熟,我们需要更多的愿意分享的人,把他们的思路说出来,让大家一起思考与提高。程序本身并不重要,关键是那背后的算法和逻辑。与其发出一篇长长的代码,谁也看不懂,不如做三两句对模型的总结。希望大家把这个帖子顶起来!谢谢,让我们共同进步。


作者: 飞鸟    时间: 2013-1-22 15:04:58

等有时间,我会把一些海外的策略分享出来。不过我的了解尚浅,希望大家一起分享自己的成果。共同进步。
作者: bingxue    时间: 2013-1-22 15:48:57

国内的分享精神不够,大家多分享交流。
作者: 天崖    时间: 2013-1-22 15:57:23

强烈支持
作者: 飞鸟    时间: 2013-1-22 16:11:37

bingxue 发表于 2013-1-22 15:48
国内的分享精神不够,大家多分享交流。

是的,大家一起改善氛围呀。
作者: 飞鸟    时间: 2013-1-22 16:12:25

天崖 发表于 2013-1-22 15:57
强烈支持

谢谢~ 模型、思路这种东西是越分享越多的!
作者: tcx    时间: 2013-1-22 17:56:01

希望见到更多的思路
作者: 飞鸟    时间: 2013-1-22 19:32:29

tcx 发表于 2013-1-22 17:56
希望见到更多的思路

一定
初涉TB,还不太熟悉,现在可以分享一点模型设计的想法,以后会分享更多的
作者: tcx    时间: 2013-1-22 20:45:08


作者: 独眠的梦    时间: 2013-1-23 17:53:01

支持你。。。
作者: 红牛    时间: 2013-1-23 18:07:07

强烈支持
作者: 石破总会天惊    时间: 2013-1-25 14:03:29

希望得到火花的碰撞
作者: xu3200    时间: 2013-1-25 15:03:47

不过那个搞法是机构的搞法和牛人的搞法啊。。。不然就是JAVA学习、一个算法分析就能搞一辈子啦。。
个体户不能用太复杂的工具。。
不过支持高手加入TB..
作者: 冬雨    时间: 2013-1-26 09:52:22

想看到实际上的内容啊。
作者: bingxue    时间: 2013-1-27 20:41:15

家纺3362 发表于 2013-1-26 20:49
均线系统最有效,关键是执行,扯淡,没有,真的赚钱的,有几个

不能叫最有效吧,振荡时怎么办?
作者: BLUESGUITAR    时间: 2013-1-27 23:59:29

既然说分享,楼主先分享一个思路如何?
作者: 天崖    时间: 2013-1-28 06:23:55

强烈支持,既然说分享,楼主先分享一个思路如何?
作者: 理信    时间: 2013-1-28 18:57:59

身先士卒
作者: renchaohui    时间: 2013-1-28 19:11:34

Params

Numeric K1(1.22);

Numeric K2(2.21);//突破幅度

Numeric Mday(6);

Numeric Nday(1);//统计的时间,单位,天

Numeric lots(1);

Numeric offset(25);//滑点设置




Vars

Numeric BuyRange(0);

Numeric SellRange(0);

Numeric BuyTrig(0);

Numeric SellTrig(0);

Numeric HH;

Numeric LL;

Numeric HC;

Numeric LC;

Numeric i_offset;
Numeric BuyPosition;
Numeric SellPosition;


Numeric MinPoint;           // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
    Numeric TakeProfitSet(92);  // 止赢设置
    Numeric StopLossSet(16);    // 止损设置
    Numeric MyExitPrice;        // 平仓价格





Begin



  ...
    MinPoint = MinMove*PriceScale;
    MyEntryPrice = AvgEntryPrice;
    If(MarketPosition==1) // 有多仓的情况
    {
        If(High >= MyEntryPrice + TakeProfitSet*MinPoint)   // 止赢条件表达式
        {
            MyExitPrice = MyEntryPrice + TakeProfitSet*MinPoint;
            If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            Sell(0,MyExitPrice);
        }else if(Low <= MyEntryPrice - StopLossSet*MinPoint)// 止损条件表达式
        {
            MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
            If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            Sell(0,MyExitPrice);
        }
    }else if(MarketPosition==-1) // 有空仓的情况
    {
        If(Low <= MyEntryPrice - TakeProfitSet*MinPoint)    // 止赢条件表达式
        {
            MyExitPrice = MyEntryPrice - TakeProfitSet*MinPoint;
            If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            BuyToCover(0,MyExitPrice);
        }else if(High >= MyEntryPrice + StopLossSet*MinPoint)// 止损条件表达式
        {
            MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
            If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            BuyToCover(0,MyExitPrice);
        }
    }
    ...


  



        if ((close==Q_LowerLimit) or (close==Q_UpperLimit))
          
           {
             return;
           }
//当最新价等于涨停或者跌停价时,不往下执行公式。       

  







               
                  
If(CurrentBar > 45*Max(Mday,Nday)&&(date!=date[1]))//使用的是5分钟周期,其它的周期自己做相应修改
//当前公式应用商品在当前Bar的时间乘以100》=9点或者小于14.55分
{

        i_offset = offset*MinMove*PriceScale;//MinMove当前公式应用商品的最小变动量
                                             //PriceScale当前公式应用商品的计数单位。
        HH = Highest(HighD(1),Mday);//Highest求最高值.  HighD求N天前的最高价  Mday统计的时间,单位,天

        HC = Highest(CloseD(1),Mday);

        LL =Lowest(LowD(1),Mday);//Lowest求最低值.  LowD求N天前的最低价

        LC = Lowest(CloseD(1),Mday);



        If((HH - LC) >= (HC - LL))//如果昨天的最高价-昨天的最低收盘价》=昨天的最高价-昨天的最低收盘价

        {

                SellRange = HH - LC;//昨天的最高价-昨天的最低收盘价

        }

        Else//否则执行

        {

                SellRange = HC - LL;//昨天的最高收盘价-昨天的最低价

        }


        HH = Highest(HighD(1),Nday);

        HC = Highest(CloseD(1),Nday);

        LL = Lowest(LowD(1),Nday);

        LC = Lowest(CloseD(1),Nday);



        If((HH - LC) >= (HC - LL))

        {

                BuyRange = HH - LC;//昨天的最高价-昨天的最低收盘价

        }

        Else

        {

                BuyRange = HC - LL;//昨天的最高收盘价-昨天的最低价

        }




        BuyTrig = K1*BuyRange;//突破幅度乘以BuyRange

        SellTrig = K2*SellRange;

        

        BuyPosition = OpenD(0)+BuyTrig;//OpenD求N天前的开盘价 [daysAgo 最近N天,0为当天,1为昨天,依次类推。]

        SellPosition = OpenD(0)-SellTrig;

        
        

                If(MarketPosition == 0)//1 当前位置为持空仓
                               //0 当前位置为持平
                                                           //1 当前位置为持多仓

        {
                  
                If(High>=BuyPosition)//如果当前k线最高价》=当前k线的开盘价

                {

                        buy(lots,Max(Open,BuyPosition)-i_offset);//Max求最大值

                        Return;

                }

               

                If(Low<=SellPosition)

                {

                        SellShort(lots,Min(Open,SellPosition)+i_offset);//Min求最小值, -i_offset滑点

                        Return;//返回

                }

        }
}




End
作者: novaavon    时间: 2013-1-29 04:05:56

我也是在国外开发交易模型的,你提到的那些方法,如配对交易, 模式识别, 机器学习,滤波 + 平滑降噪,遗传算法,神经网络,小波分析等等,我现在都在用。

我和你有同感,国内比国外明显落后,我也想把最先进的东西引入国内,但无奈国内太多人死抱着手动交易不放,懂点量化的也是处于最初级层面, 有些人甚至迷信玄学。

如果想交流,可以在Linkedin上加我。
作者: Tracymao    时间: 2013-1-30 10:11:12

强烈支持~
作者: 漫步华尔街    时间: 2013-2-8 16:53:43

% The Hurst exponent
%--------------------------------------------------------------------------
% The first 20 lines of code are a small test driver.
% You can delete or comment out this part when you are done validating the
% function to your satisfaction.
%
% Bill Davidson, quellen@yahoo.com
% 13 Nov 2005

function []=hurst_exponent()
disp('testing Hurst calculation');

n=100;
data=rand(1,n);
plot(data);

hurst=estimate_hurst_exponent(data);

[s,err]=sprintf('Hurst exponent = %.2f',hurst);disp(s);

%--------------------------------------------------------------------------
% This function does dispersional analysis on a data series, then does a
% Matlab polyfit to a log-log plot to estimate the Hurst exponent of the
% series.
%
% This algorithm is far faster than a full-blown implementation of Hurst's
% algorithm.  I got the idea from a 2000 PhD dissertation by Hendrik J
% Blok, and I make no guarantees whatsoever about the rigor of this approach
% or the accuracy of results.  Use it at your own risk.
%
% Bill Davidson
% 21 Oct 2003

function [hurst] = estimate_hurst_exponent(data0)   % data set

data=data0;         % make a local copy

[M,npoints]=size(data0);

yvals=zeros(1,npoints);
xvals=zeros(1,npoints);
data2=zeros(1,npoints);

index=0;
binsize=1;

while npoints>4
   
    y=std(data);
    index=index+1;
    xvals(index)=binsize;
    yvals(index)=binsize*y;
   
    npoints=fix(npoints/2);
    binsize=binsize*2;
    for ipoints=1:npoints % average adjacent points in pairs
        data2(ipoints)=(data(2*ipoints)+data((2*ipoints)-1))*0.5;
    end
    data=data2(1:npoints);
   
end % while

xvals=xvals(1:index);
yvals=yvals(1:index);

logx=log(xvals);
logy=log(yvals);

p2=polyfit(logx,logy,1);
hurst=p2(1); % Hurst exponent is the slope of the linear fit of log-log plot

return;

作者: 漫步华尔街    时间: 2013-2-8 16:54:10

Hurst指数能编写成TB指标吗?上面是Matlab的源码
作者: tonyb2    时间: 2013-2-19 18:24:03

支持楼主!
作者: hyjok    时间: 2013-2-24 14:16:19

后生可畏!
向飞鸟哥学习
作者: 1分钟k线图    时间: 2013-10-11 11:46:51

你的新浪博客打不开啊
作者: wolaifa    时间: 2013-10-11 20:34:17


作者: leovone    时间: 2013-10-28 11:07:28

楼主人在新加坡?
作者: Amymylove    时间: 2013-10-28 14:52:14

支持楼主,好贴留名马克!
作者: topgun0791    时间: 2015-10-23 14:59:10

支持交流!
我手头有一大堆的TS和MT4源代码,

就是不会编为TB的!

苦啊~~~~~~
作者: ltj941224    时间: 2016-9-13 11:47:26

目前正处于刚入门阶段,迫切需要多学习,加油
作者: longyue188    时间: 2020-9-19 03:22:02

很认同你说的话,基于指标的不叫作量化,只能说是程序化,量化应该是从原始数据到结果都是基于数据、逻辑、统计学构建的一套方法论。




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