分享

程序化交易

 蜡笔小签 2016-06-04

一、

1. 开仓或平仓信号闪烁

历史回测很好,实盘时开平仓信号时有时无。

这是很多新手刚写的程序实盘时的常见问题。一般都是因为调用了未来函数.

比如收盘价(Close)。当根K线的行情还没有走完时,收盘价是个未来值,如果调用就会发生信号闪烁状况。程序里一定不能调用收盘价做判断指标,也尽量少用最高价或最低价(当前的HL是单向的)。当根K线能确定的只有开盘价。所以一般写代码时,都是用的上一根K线的数据。

例:CountIf(h[1]-Max(c[1],o[1])>c[1]*0.001 and c[1]<o[1]*1.001,3)==0;

前三根K线没有出现实体较小的长上影。(可以自行收集开仓的过滤器1,2,3,4

 

2. 偷价

历史回测时,利润率和盈亏比高的自己都被吓死。实盘时发现很多看起来赚钱的单子实际都是亏损的。

这种情况就是在开盘价和收盘价上做文章。比如开多单时用的是最低价,平多单时用的是最高价。这是卖策略的人经常玩的把戏。呵呵。

自用策略时,请参照以下代码:

开多:Buy(0,max(o,h[1]));

平多:Sell(0,min(o,l[1]));

开空:SellShort(0,min(o,l[1]));

平空:BuyToCover(0,max(o,h[1]));

这样写后,程序就不会有偷价行为,且自带滑点。前一根阳线不是光头阳线或光脚阴线时,就算没有加滑点也能保证成交。

做好这两点后,相信很多刚写策略的人再回头看看自己之前写的,肯定是惨不忍睹了吧。

 

3. 过渡优化、拟合

很多专门卖的策略,回测结果非常好看:胜率、盈亏比都很高。

这种情况就是专门针对历史行情进行拟合。比如策略在某一个大涨行情里实际没有开出单,但写策略的人根据大涨前的行情专门写一段代码让他补出单来,并添加时间限制,只在这一特定时间开出这么个多单来。

很多策略好看但不能用,有很大原因就是添加了太多的拟合代码,在历史回测中避免了大亏,抓住了大赚行情。

 

4. 过滤条件太多

策略为了避免亏损,认为添加了很多过滤条件,从而使策略在回测时的结果看起来很好。     实际这些过滤条件对未来实盘的行情一点作用都没有,该亏损还是照亏不误。其实这也是一种拟合。

我个人并不反对拟合。写策略本身就是一个不断拟合的过程,但如果刻意拟合就只是欺骗了自己。拟合是要寻找规律,从杂乱无章的行情中找到合适的算法。让这种算法去抓住大部分类似的赚钱行情,过滤掉大部分类似的亏损行情。没有核心算法的拟合就是刻意拟合,对自己或对别人的欺骗。

比如添加了一个过滤算法,历史回测时;过滤了10单满足条件的单子。这10单中,有7单以上是亏损的,赚钱的三单也赚的不多。策略总体盈亏比和胜率都有提高。那么这个过滤算法就是有效的,或者说这个拟合有效。

 

5. 回测数据不可靠

商品的主力合约和非主力合约的差别是很大的。

非主力合约成交稀少,价格波动变化小,行情简单易控,不需要太复杂的算法就可以把这些行情全部抓牢。比如波动指标和趋势指标在非主力合约上的信号非常明确。

主力合约成交量大,价格波动大,行情变幻莫测。常规的波动指标和趋势指标会乱走,很难通过简单的代码去实现盈利。

另外商品的指数跟主力合约的差异也是很大的,除了股指指数跟股指主力有高相关性,商品指数跟商品大多是不相关的,这里涉及到跨期套利的影响。很多时候近月在涨,而远月在跌,这种指数怎么能可靠。

所以那些商品回测几年的策略,打死我也不相信的。国内的商品主力合约一般有效期顶多4个月。如果自己写策略,请参照主力合约。非主力合约的测试结果请无视。


小结:

一般而言:

胜率低的策略实盘时胜率只会更低。

简单的策略只会让亏损变得简单。

没有核心算法的策略都不能说是成功的策略。

没有大量有效数据作为测试依据的策略都是不可靠的。


二、

程序化能克服交易者最明显的两个心理缺陷:贪婪和恐惧。该止盈的时候贪婪,该持有的时候恐惧。另外能够强制止损,避免小的损失变成不可挽回的灾难。但程序化经常会比较死板,没有手工灵活。

好的策略不一定能带来收益。大多数交易者不能坦然接受程序化带来的连续亏损,也会因为策略的一时表现不佳而产生怀疑。往往在好的的策略开始发挥作用时放弃。

 

准备程序化的朋友请仔细研究下《海龟交易法则》里面的认知偏差:

http://tieba.baidu.com/p/4229824350

 

三、关于适合程序化的品种。

1. 跳空较多的品种尽量不做隔夜

跳空主要是因为行情受外盘,夜盘影响大,如铜、白银、油脂、化工。跳空难以控制,一次反向跳空损失可能吃掉很长时间的利润。另外就是这些品种在国内盘时很少有行情,基本价格不怎么动,横在那里,一到下一个开盘直接跳空把行情走完。(橡胶、镍的主力盘在国内,基本不受国外盘的影响)

商品的日内波动远远小于之前的股指,日内策略很难赚钱。

2. 价格波动很窄、趋势不明显的品种不适用趋势策略

PTA、白糖,很长时间内横在一个较窄的价格区间。无论什么趋势策略,都难把握。

趋势回归类( 震荡)策略很难成功,很少见到有成功的震荡策略。扣掉手续费和滑点后,很那从商品的那一点宽的震荡幅度中赚到钱,一个不下心碰到趋势行情,几个月白玩。

3. 行情走势不规则的品种难做程序化

开盘几分钟把一天行情走完,或者总是盘中急剧涨跌,整天的成交量总是集中在某一特定时间。这些品种要么是套保机构参与太多,要么是成交量太少,非主流品种。

 

四、编写策略的一般问题

代码写完后,程序只会根据其判断标准和代码给出的值,进行开平仓操作。如果不加以限制,程序则会在震荡中反复开仓、反复止损,在趋势行情的末端继续追涨杀跌。

一般比较好的策略思想,写成代码后,在没有任何辅助判断和过滤条件的情况下,胜率都很低(30%以下)。比如,均线重叠后突破,刚写出来胜率只有25%左右。我已上的两套策略刚写出来胜率也只有31%

 

五、如何对策略进行优化:

1. 趋势策略对震荡的过滤

过滤震荡是趋势策略最难克服的问题。趋势策略会反复在箱体震荡的上沿开多,然后止损;继续在箱体下沿开空,再止损,再反复。胜率就是在震荡时被降低的,连续的亏损也是在震荡里产生的。

过滤震荡可以先对震荡的特征进行分析,如近期真实波幅值的变化,趋势行情里真实波幅值较大,而震荡时却较小。还有是否创新高或新低,震荡时一般在箱体内,前高和前低是很强的阻力和支撑。

 

2. 增加趋势辅助判断

商品一个月的波动一般不会太大,一般会在一个价格区间反复上下;单边上涨或下跌的品种是有的,如果没有良好的现货基础,单纯从技术上很难分析出将会有大的趋势。对短期趋势策略而言,如果近期涨跌幅过大,很难会有延续的行情。在短期趋势的末期,继续追涨或杀跌,空间不大,且容易连续小亏。这时,可以增加一个涨跌幅判断来限制开仓,比如近期涨跌幅度超过多少就不开仓。

另外就是程序会经常在明显的上涨行情中开空,或在明显的下跌行情中开多。这里可以引入均线变化值来辅助判断。比如,中期均线持续向上或持续向下时,不开反向单子。

 

3. 对程序给出开仓点的价格进行后市预判

比如开多前面有出现长上影,或者中阴线,那么这明显不是一个很好的开多点位。

        

4. 无解的问题:诱多、诱空、洗盘

诱多和诱空:技术形态跟正常上涨下跌没有区别,可以通过止损控制。

洗盘:止损幅度小了,容易被洗;止损幅度大,会造成普通亏损亏得跟多。

策略只能从盈亏比和胜率中找到一个合适的平衡点进行控制。

这里只是提供一些思路,具体的需要各人根据自己的代码情况进行编写。

 

策略使用时的一些问题

1. 一劳永逸???

市场永远是变化莫测的。策略如果一成不变,则总会跟不上市场的节奏。如果想着程序化就能一劳永逸、躺着赚钱,那么世上就不会有那么多穷人。程序化只是种工具,不是金饭碗;门槛很低,但很有高度。策略一时表现良好,不代表永远有效。策略不能跟随市场改变,终究会失效。

2. 耐心和信心

没有人知道市场将会是趋势延续还是均值回归,也没有只赚不亏的交易系统。保持平和的心态,看淡盈亏。

严格遵守自己制定的交易规则,保持信心,耐心坚持。

3. 贪婪

当盈利逐渐增加时很容易出现这个问题。由于缺乏耐心和对市场应有的尊重,我们会违反平仓和资金管理的原则,结果就是市场把盈利变成亏损。改变这种个性缺陷取决于平和心态的锻炼,如果我们在盈利时的心态和亏损时一样,我们在遇到大盈利的时候就不会违反纪律。

4. 恐惧和完美交易综合征

害怕亏损,或者担心损失已有的盈利,结果就是不能执行交易信号。不要在建仓之前考虑这笔交易的结果到底是盈利还是亏损,没有人可以告诉你未来会发生什么事情。在交易面前,保持平和心态。

5. 贵在坚持

计划无法执行,计划就毫无意义。建立一个系统并对系统的局限性有深入地了解,这不是件容易的事情。如果失败了,那就吸取教训,再试一次。只要坚持下去,你就会离目标越来越近,或许还能发现另外一个跟更重要的目标。结果也许不像你期望的那样好,但只要坚持不懈,最后的结果也许比你期望的还要好。如果不去尝试,你永远也不会知道结果如何。

 

程序化是人性的程序化

通过程序来执行因人性的弱点而不能执行的交易:止损、追单、过早止盈;也可以通过程序来处理一些来不及反应的突发状况:盘中拉直线、大幅跳水。程序化后,可以避免因没有耐心而造成的盲目交易。

 

程序化不是万能钥匙

市场是不存在规律的,呈尖峰分布。盈利是一种概率事件。通过程序化,不可能从无规律的市场中找到规律,但可以通过程序来提高盈利的概率。把交易当做一种概率游戏,样本足够的情况下,可以通过程序筛选出一些盈利较高的交易。

完全无干预的情况下,程序不能提高其内在的盈利概率。在特定的市场背景下,加入一些人为干预(如多空方向选择),可以适当的提高程序的盈利概率。

从无效的样本或过少的样本中寻找概率,无异于水中捞月。

盈利呈尖峰分布,也就是极少的盈利占据大多数利润。

所以亏损和不怎么盈利的交易占大多数,做好止损控制是自动化最重要的内容。

 

 

海龟交易法则的核心思想:

1. 掌握优势:找到一个期望值为正的交易策略,长期来看它能创造正的回报。

2. 管理风险:控制风险,守住阵地,否则即使你有一个期望值为正的系统,你也等不到它创造成果的那一天。

3. 坚定不移:唯有坚定不移地执行你的策略,你才能真正获得系统的正期望值。

4. 简单明了:抓住每一个趋势。你的大部分利润可能就来自两三次成功的交易,所以不要错误任何趋势,否则你全年的努力都可能化为泡影。这很简单,也很容易理解,只是不容易做到。

 

论坛里有高手吗?

高手一定是有的,可能就混迹在水军中,但很少发言,或者发言也是很多很多的废话,从不涉及关于操作的任何一个方面。您也很难找到他,因为他是高手,他用两万块一样可以起家,并且承担的风险之小您是无法想象的。高手不会为您代客理财,因为会泄露他辛苦研究出的操作手法。大家寻找高手或代课理财之前,请尽量使用反向思维考虑一下,因为这个世界上的所有行业都一样,只有逆大众而动才可以成功。

跟一个老师真的有用吗?

首先抛出这样一个问题,试问,这个老师为什么要带您操作或者教您呢?有这些老师自己做单,难道赚的钱不会很多吗?难道这位老师不可以借很多钱自己做期货?用不着带学生吧。先不要告诉我老实说自己操作有风险之类,其实说句中肯的话,做期货,风险接近100%。世界上最强悍的操盘手也只能在40%的行情中获利,也就是说,做错的次数将大于做对的次数20%。你们想想,你们的老师是不是在追求操作方向然后告诉你自己命中率有多高,在什么位置加仓,又或者说些关于心态之类的指导。实际上,您们跟老师长期赚到过一分钱吗(当然,一天两天爆赚很正常,这每个人都遇见过,所以才有人对期货给予希望),可能有人说赚过,那赚过多少?10%?又或者20%这么少的利润,其实您的资金用来做实业哪怕放高利贷,收益率也会远远大于做期货。不要告诉我索罗斯每年的收益不过30%左右,您要知道,他手中是几十亿美金,对于他来说,资金安全比盈利更重要。

 

常规指标的一些误区

说到指标,很多人就想到MACDKDJBOLLSAR等等。程序化能够用到这些指标吗?

就个人经验来看,辅助可以,用作核心策略就不够。你能想到的,别人都能想到。想想大家都用一个通用指标赚钱,那么谁亏了钱?想在期货市场赚钱,就必须另辟蹊径,走与别人不同的路。

这些通用指标写到程序化里的第一个问题就是先要去掉未来函数,也就是不调用当根K线收盘价。常规指标一个很大的误导就是未来函数,看着很美好,都是摸不着的,指标值会随着行情波动变化,不是确定值。第二个问题就是模糊值,比如MACD的柱子,手工交易时肉眼可以用来判断背离,但程序化就必须规定这个柱子的值是多少,以及递减或递增多少才算背离。稍稍能用的就是布林线了。

说简单一点,程序化调用的必须是确定的值,不能有未来函数和模糊值。常规指标如果做到这两点,也就一点都没用了。本来,常规指标就是分析师们用来忽悠新手的。很多时候,分析师专家们的一句话,会让您走上许多弯路。常规指标,只是美丽的肥皂泡。

 

程序化的核心

一个期望值为正的策略,并坚持下去。

策略不是一个简单的词,要做到期望值为正,先要有好的开仓思路,再就是匹配的平仓套路,最后就是意外情况的处理。任何一点做不好,都很难做到正收益。我能告诉大家的只有后两步,第一步需要自己去摸索总结。如果手工交易都不能赚钱,程序化也帮不了什么。只是会让亏损变得漫长一些,钝刀子割肉,会更痛苦一些。没有通用的策略,因为大家都赚钱是不可能的,你只能摸索出自己的路,赚别人不一样的钱才有可能成功。

 

程序化的一些拟合状况

1. 人为增减代码让程序开出一些没有开出的盈利的单子,不开一些大幅亏损的单子。骗谁呢?我不卖策略,所以不自欺欺人。

2. 太多辅助限制条件,结果跟状况1类似。这会让写策略的人掉进不断增加代码的坑里,代码越写越长,效果越来越差,终究崩溃。主要问题在于核心开仓思路不对。

一个期望值为正的策略,最最核心的就是开仓思路。一个好的开仓思路,根本无需太多辅助条件。顺着写平仓,再补些防止意外状况的条件就完成了。

3. 时间限制。开盘收盘不做事很正常的,因为这一时间段的行情不太稳定,成功率低。但如果很多其它时间段也加以限制,就是不对了,万一后面的大行情产生在这一时间段呢?

4. 开仓限制。连续亏损后,很多策略就会在当天后后面的一段时间不开仓。程序化不能错过任何一段行情,因为程序化整体的利润就来自那么几笔大的利润(盈利呈尖峰分布),错过任何一笔,几个月的程序化可能就等于白做。

程序化胜率不高很正常,如果非常低,就要反思了。

 

 

手工干预的坏习惯:

有一次手工干预,就会有第二次。总是手工干预,就是对策略没有信心。这种策略还是推倒重来的好。

人生要不断总结。做不好或做不了的事及早止损,做人生的赢家。

期货是低门槛高要求的行业。手工交易都做不好,程序化也帮不不上什么。趁早退出赢回人生才是正确的。

分享几本好书《赌场式交易策略》,《华尔街的幽灵》,《海龟交易法则》

投机十年,见过无数激进的,但没见过活到现在的。止损控制不好,程序化也是慢性自杀。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多