zealor系统

Discussion in 'Philosophy and Strategy' started by zealor, Nov 1, 2012.

  1. 啥事都不能先入为主啊,我以前也这样想,结果浪费了多年光阴!
     
  2. 说得对。
    但,随机且有效的市场里,咱们算法交易者靠什么去赚钱呢?
     
  3. 看到这个贴子,留言感慨下,预祝楼主能取得长期的成功。我两年前最开始做交易就是写了一个用支持向量机预测第二天股价上升超过5%的股票,并做当天尾盘买,第二天卖掉的买卖。这个系统我写好后经过历史数据交叉验证之后,做了一个极端选择,所有成功率为100%的model全部保存下来,其它的踢出。大概训练了300支股票的模型,每天收盘算出0-3支股票来交易。刚开始交易行情好,我刚入市场,每次都满仓出入,一个月就接近翻倍了。但是之后市场开始了持续走熊,悲剧的是系统仍然会偶尔选出股票来交易,在大熊的日子,即便心里想要2%止损,但是大部分股票一开盘就已经跌了5%,因为我是新手,所以就有点舍不得割肉,竟被一直套了进去。后来不太愿意碰股票,那个系统也就没再深入研究。今天看了这个贴子,很感慨,现在总结我那个模型失败的可能原因:
    1 训练系统或者统计的历史数据的长度一定要够,由于我当时把所有的数据尽量往内存中加载,所以如果用特别多的数据的话就会内存溢出,我大部分股票训练只用了300个交易日的数据(日内明显数据,非K线)。这样有的股票可能就不能包含完整的牛熊,这样的股票的模型本身就存在问题了。
    2 5%这样的阕值以及100%这样的成功率是否必要和合理,现在看肯定是不太合理。
    3 (此条纯个人观点)有些股票是不能加入股票池的,我被套的股票就是一只大盘股,这只股票股性差,我当时没有经验,只是按照code顺序拿了进来并且交易了,事实上我后来统计过,在大跌日子仍然被选出来的股票大多是大盘股,原因据我总结是因为股性差的股票计算出来的数据对于神经网络等模式识别工具可能带来虚假拟合。
     
  4. 。。。。也是高人
     
  5. sunkuo能否请介绍一下怎么使用向量机,就是SVM吧?我曾经看过R里的SVM包
    (有好几个),不过没怎么尝试,不知哪个包最好用。

    我的想法是有两种方法可以用到SVM。第一种就是你做的预测,不过像你说的可能会有
    过度拟合。

    第二种就是用它来筛选信号:假设已经有了一些信号,能挣不多的钱或不怎么挣钱,
    能不能用它来根据这些信号产生的历史交易进一步优化?

    第二种方式也许更适合SVM。不过我对SVM不熟悉,所以一直没有机会尝试。希望
    sunkuo和其他懂行的介绍一下啊。谢谢!

     
  6. 所有策略或算法是以歷史數據為依歸,
    本身是有logic 例如1+1=2,在成熟市場計算結果
    可能有偏差,但一定大於1。方向不會錯。
    可A 股是有中國特色的,結果不一定大於1。
    大小非,和貨幣不能自由對換,86%為散戶,
    還有一些不在乎賺錢的代理人。這些因素都可以
    左右結果。
     
  7. 支持向量机的包各种语言几乎都有,我当时用的是java版的lib-svm.我现在用的比较多,比较熟练的模式识别工具有三种:最大熵模型,支持向量机模型和神经网络。用多了之后感觉必须对模型本身以及要处理的问题都有透彻的理解之后才能放心使用模型来处理问题。原则上所有分类问题都是可以用模式识别工具来操作的。分别就您所说的问题谈点个人看法,以期更多大侠指点:
    1 过度拟合的产生本质是因为在训练规定迭代次数内,原因和结果之间产生了非合理mapping.悲剧在于是否合理模型本身无法给出答案,所以就有了交叉验证之类的筛选模型的办法,但是有一点,被用来做验证的数据仍然可能是不完备的,比如和训练数据同种,加入一直股票有持续三年的牛市,用1年半牛市的训练去验证另一年半的牛市仍然可能导致模型在熊市来临的时候一败涂地。以上三种模型从模型角度最不容易产生过拟合的是支持向量机和最大熵模型.但是正如之前所说,过拟合产生的本质原因在模型之外,在于如何设计特征,如何选择训练数据,如何验证模型。
    2 筛选信号当然是分了问题了,所以模式识别工具都可以使用,如果让我选择,我会用最大熵模型来筛选信号。原因在于 假定一个信号产生的context有A,B,C,D四个。假如我们知道A,B,C,D四个每次都能对result产生直接影响也就罢了,可惜不是,比如可能有30%的盈利信号能被A+C以 70%的成功率筛选出来.这个时候如果用支持向量机,则需要组合A,B,C,D分别产生训练模型来筛选。如果是最大熵我们可以直接全部给定A,B,C,D四个条件.

    最大熵模型有java版本的maxtent,但是由于java版本可能并不好直接应用于交易系统中,我已全部翻译写为了c#版本的maxtent,支持非real以及real data的最大熵模型.有需要的朋友可以加我qq714990807索要。
     
  8. 楼主指的context是指参数? 如果参数超过3个,策略的盈利性就很难预判。筛选信号只能帮助有盈利性的策略可能进一步盈利,但是不能把非盈利的变成盈利的,也在做信号有效性方面的研究,欢迎交流。
     
  9. To sunkuo
    交流个技术问题,如果策略在大盘指数看空,个股看多或者指数看多,个股看空的时候,如何处理?
     
  10. 你把他们都量化了不就行了?包括操作方法(止盈止损仓位等)统统给量化了再统计。
    不过我想这样也不能提高一个模型盈利的数量级,可减少波动和增加心理承受能力,带来的好处是可以多资金投入,不过股票也就非满仓即空仓算了。有个逻辑好多人不懂(包括咱们自己有时候也犯错误),这里和大家交流一下,(仓量*持仓时间)应该是一半一半比较合适,不是吗?有涨有跌嘛。
     
  11. context意指的是上下文,就是一个单子出现的瞬间的各种情况,可以有n多,如成交量,持仓量,价格等等等等。实际上通常应用数据挖掘的假设就是我们不知道什么原因会产生什么结果,所以筛选信号只能帮助有盈利性的策略可能进一步盈利,但是不能把非盈利的变成盈利的这句话我个人不赞同。举个例子加入买点是日线收阳就买,并且长期来看这个成功率可能是45%到55%之间,并且可能是非盈利的。收阳线就买的瞬间还是有很多上下文的,比如是否放量,是否是突破,板块其它股票如何,大盘如何,此股票最近一周表现如何,收阳线是大阳还是小阳,日内成交是否有明显主力参与迹象等等等等。人工很难确定这么多条件和第二天是盈利还会亏损的关系,数据挖掘或者模式识别的作用就来了,比如放量和突破这两个条件有可能使成功率提高到55%-65%,策略长期来看有了更大概率是盈利的。
     
  12. 抱歉,我当时预测只预测个股,没有预测大盘。不过我可以说一下我印象很深的模型表现好的时候,上证股票所有股票只有几十只在涨,涨幅超过4%的只有8只,我的模型成功选出了两只,并且只选了这两只,这样的情况在我第一个月的操作中出现了两次,所以我印象深刻。
     
  13. 分析得太好了,我就是这个意思。看来最大熵和向量机模型都可以使用。问题是怎么定义
    目标函数?假设一个信号在过去一段时间里产生了N个交易,知道所有与交易有关的
    统计数据(每个交易的入场/出场价,交易量根据风险管理有固定算法,每笔盈利,等等)。
    最终目的是排除或减少亏钱的交易,提高总体的平均盈利水平。那么我的问题是怎么
    把这些信息转化成最大熵或向量机能理解的模型来训练呢?

    有关context的选择也是一个问题(也会涉及到保密性:-),还有怎么理解模型的输出(是否
    可靠,有效),等等。对这些我完全是新手。不过我觉得走这个方向比要去找一个非常好的预
    测信号要靠谱,因为太困难了。不如从一些弱的信号入手,找到一些有用的context来对信
    号分类,最终结果是提高筛选后信号的盈利水平。


     
  14. 说得太在理了!其实有很多东西光靠肉眼或经验是不够的(至少不足以有信心到每
    次都敢下单)。 但如果有模型给出一个严格的统计结果,那信心就大大增加了。都不需要
    把盈利结果提高一个数量级(mission impossible!),只要能提高10%,就已经很
    不错了。

     
  15. 又到了收月租的时候了,一个月真快啊。
    本月赚上证指数5.15%。
    基本上补回了上月的失误(上月失误最大的是涨4.32%那天的判断错误)。
     
  16. 自动化交易也不需要3台机器吧?
    三个进程就足够了啊。实在不行,装上vmware也可以啊。难道是为了气势?给自己增加信心和坚决力?
     
  17. 50~60的胜率感觉不高。因为胜率=胜数/(胜数+败数)。不做任何分析,随机猜测就是投硬币的模型了,期望值是50%。
     
  18. 这个通过一定的编程技巧是可以解决的。不是问题。
     
  19. 兄台,策略可否分享一个梗概,我想改写为期货或者外汇的策略,观察效果。不介意,可以mail?
     
  20. 当时我想可以分三个地方放置它们。跑算法的机器要保密,喊单和执行的机器分开后会很灵活,我和我的朋友都可以看到喊单。

    大于60%不可想象。