Today's the day

向软件大牛炫耀我会焊单片机,向硬件大牛炫耀我会写 Rails,向软硬件大牛炫耀我生物,向软硬件生物大牛炫耀我会折腾期货 -_-bbb

C# 已经成为自动交易的标准了?

交易一直在用的 Multicharts 用的语言是内置的 EasyLanguage。昨天这个软件发布了 .net 的版本,也就是 Multicharts .NET,和前者的区别在于可以使用 C# 作为策略和指标的编写语言了。

稍微查了查,发现几个比较有名的自动交易软件(比如 Ninja Trader、SmartQuanter)都是支持 C# 的,估计 Multicharts 也是被逼的吧 XD。难道 C# 已经成为自动交易的标准了吗?

一开始我以为只是语法仿照 C#,试用了一下发现是原生的 C# 程序(或者说库),编译后直接运行在 .net framwork 上的,这样的就有些优势:

  • 可以直接调用 .net 库,也可以调用第三方库,基本上现在可以在交易程序里面干任何事情了。
  • 可以直接用 Visual Studio 来编辑和 debug 代码。
  • 可以直接调用 GDI 来高效率绘图。

而 EasyLanguage 只可以在程序里发交易单和数值计算而已,也没法获得账户的详细的信息。

也就是说 C# 版本相当于提供了更底层的操作,所以如果你觉得 EasyLanguage 的功能太少,又不想自己去翻 broker 的 API 文档从头写程序的话,那么这个 .net 版本是非常不错的选择。

虽然我目前的策略都很简单,EasyLanguage 完全可以胜任,不过我还是很有兴趣用这个 .net 版本弄个类似 “如果开仓了就在 Twitter 上 @ 我一下”  的功能,肯定非常有趣呐~

 

当然用 C# 做更底层的操作,也是有代价的,那就是代码的复杂度上升了。

比如,突破前 n 日高点买一手,用 EasyLanguage 编写的话就是这样:

input: Price( High ), Length( 20 ) ;

Buy 1 share next bar at Highest( Price, Length ) + 1 point stop;

相信即使是不懂 EasyLanguage 的人,也能大致看懂这个代码是什么意思吧~

但是如果用 C#,看起来就像这样:

using System;
using PowerLanguage.Function;

namespace PowerLanguage.Strategy
{
    public class Channel_Breakout_LE : SignalObject
    {
        private ISeries<Double> m_price;

        private int m_length = 20;

        private HighestFC m_highestfc;

        private IOrderPriced m_Order;

        public Channel_Breakout_LE(object ctx) :
            base(ctx) {}

        private ISeries<Double> price{
            get { return m_price; }
        }

        [Input]
        public int length{
            get { return m_length; }
            set { m_length = value; }
        }

        protected override void Create(){
            m_highestfc = new HighestFC(this);
            m_Order = OrderCreator.Stop(new SOrderParameters(Contracts.Default, "ChBrkLE", EOrderAction.Buy));
        }

        protected override void StartCalc(){
            m_price = Bars.High;
            m_highestfc.pricevalue = price;
            m_highestfc.len = new Lambda<Int32>(delegate { return length; });
        }


        protected override void CalcBar(){
            m_Order.Send((m_highestfc[0]
                               + (1*Bars.Point)));
        }
    }
}

……囧

如果说 EasyLanguage 即使是不懂程序的人也可以看两天就上手的话,那么这个 C# 版本的肯定只能是程序员的菜了。

好歹前两年也写过几个 .net 的程序,翻出书复习一下 C# 先~

期权初感受

 

从去年 10 月份看一本期权书开始,一直持续不断的接触这个东西,越接触越觉得复杂,很多方面和想象中不一样,虽然现在还是没有弄出个所以然,但是还是有些感受,这里就简单记录一下吧。

期权不擅长做什么

期权的定义这里就不再重复了,如果只看定义的话,多数人肯定会认为期权主要的功能就是:

  1. 利用高杠杆获得超额收益。
  2. 提供低成本的资产保护。

不过很囧的是,接触到现在,我感觉期权最不擅长做的事情,就是这两件事。

不管是想获得超额的收益也好、还是想以低成本保护资产也好,都要使用价外期权,而期权都是有到期日的,如果在到期日之间价格没有如预期的发展,期权的时间价值就会慢慢流逝,除非在你入场后价格大幅变化,否则很难实现收益。

如果是市场已经大跌再去买入期权做保护的话,期权又会包含太高的隐含波动,基本上都是不划算的买卖。

所以单纯的买入价外期权,想获得高收益的,和买彩票的感觉差不多;如果是提供资产保护的话,那只能应对黑天鹅行情。

期权擅长做什么

那期权擅长做什么呢,暂时感觉有两个:

  1. 做平。
  2. 做希腊字母。

在接触期货之前,我只做过股票,而内地的股票又是只能做多的,所以即使在熊市,当初也满脑子想着做多(和现在还在做股票的同学状态差不多XD),后果是什么大家也都知道了,而这一切的原因仅仅是不知道做空的方式而已。此外,想必去年做股指期货的同学都会收益不错吧包括我自己,其实只是因为股指期货可以做空而已,赶上了空头的“牛市”而已。

所以,有些时候多一种选择是很重要的,而期权就提供了做多做空之外的第三种选择:做平

从单纯的 Credit Spread 到 Iron Condor、Double Calender,期权的做平方式真是多种多样呐,每种都适合不同的市场状况。在使用这些策略的时候,脑子里不用再考虑市场会到哪里哪里,反而变成市场 不会 到哪里哪里,相比预测市场会到哪个点位,预测市场不会到哪里要轻松得多,再加上使用这些策略的时候时间的流逝反而对你有利,所以在大部分的时候都是比较轻松的交易。

做希腊字母我只接触了一点,比如简单的 Vega play 和 Gamma Scalp,感觉比做平策略更加的价格无关,如果想单纯的做市场情绪的话,也可以通过做希腊字母来实现。

一些误区

卖方恐惧症

即使是上面那些做平的策略,也都包含期权的空头,更不要说去卖裸期权了,很多人都听说过期权的卖方被黑天鹅事件搞得倾家荡产,或者是赚 100 次 1 次就赔回去云云,所以都对期权卖方不那么感冒,实际上还是有一些夸张了。

的确曾经有机构因为卖期权然后遭遇黑天鹅而倒闭,但是这主要的原因还是因为他们可以 无担保的卖出大量 期权,而这对散户来说是不可能的,举个例子:

  • 我在 IB,卖出一张 ES (小标普期货)的下月价外 Put,IB 要求的保证金是 6055$。
  • 而我如果直接多一张 ES 期货,保证金只是 5000$。

而 Put 卖方的最大损失肯定不会超过期货多头,也就是说,在这种保证金要求下,卖 Put 还不如直接多期货的风险大,所以和期货一样,仓位才是决定风险的主要因素。

死撑到期

估计很多人包括我自己在内,在看过那些做平的中性策略收益图后都很失望,比如 “最大收益才 20%,但是最大亏损一定是 100%”,基本上都是小赚大赔的模式,和期货的“限制亏损,放飞盈利”的理念太违背了。

这也是没办法的事情,因为中性策略都是靠高胜率而不是盈亏比,只要最终的期望值是正的就可以了。

不过,这样就会让人认为,使用这些策略,就应该入场之后死撑到到期日那天,其实没有人规定了非得这样做!在到期日之前,随时感觉状况不对都可以出场,虽然死撑到到期日,胜率会高一点。

也就是说,书上的那些期权策略,都只是工具而已,真正的策略是你叠加在这个工具上的进出场策略,自己来调节胜率和盈亏比。

期权的缺点

期权的缺点也是很明显的,目前感觉有下面这几个:

选择太多

唔,这个其实是优点,不过很容易变成缺点。对于期货来说只有多和空,而期权光做平的策略就有那么多,就算定下来策略,到时候还会出现 “用哪个到期日的期权好呢”、“卖哪个 Delta 的期权呢” 类似的问题。要不拿不定用那个策略好,要不拿不定使用哪个价位的期权,完美主义者基本上直接就疯了 -_-。

价差和流动性

其实期权这个东西即使在外盘也不是什么热门的东西,玩的人也不多,所以很多期权的流动性都不是很好,导致买卖价差比较大。现在流动性比较好的大多是股指期权,而商品期货的期权流动性就远不如股指期权了,有时候在商品期权上做个简单的价差都比较困难,使用对应 ETF 的期权也许是个解决办法。

而且就算是股指期权,使用大于两个腿的策略也会受到价差的影响,基本上短期的多腿策略都很难建,只能去做中长期的了。

难以回测

难以回测体现在两个方面,一个是很难搞到期权的历史数据,因为涉及多个价位和到期日,即使是每日收盘价的数据都很多,更不要说日内的报价了。第二个方面就是策略难以描述,或者说难以程序化,比如“在隐涵波动率较高的时候去卖出 40~70 天到期,delta 0.1 左右的 Iron Condor”,里面含糊的部分太多,而且有的时候理想的价位根本没有报价,还有的时候符合条件的组合最终的收益太低(被价差吃掉了)。

所以很难像期货那样,想出一个策略,就可以写个程序在历史数据上跑一下,也就是说即使有策略,不实盘交易也很难知道这个策略到底如何。

 

其实我早就开了一个单独的期权账户,想练习一些中性策略,但是也就是因为上面这些缺点,让我迟迟没有动手,要不就是因为制定出来的策略模糊的成分太多,要不就是因为对策略本身没什么信心,总之就是心里没底啊 ╮(╯▽╰)╭。

展望一下

总之,感觉期权还是非常有价值的工具,虽然比较复杂,但是也许有时候不用搞得那么复杂,和期货策略一样也是越简单越好吧。

接下来除了实践中性策略之外,我还想用期权改善现有的一些期货策略,实际上这个从二月底就开始实践了,不过效果还是比较勉强,现在只能继续观察和记录数据了。

估计会爆掉不少资金来做实验,不过我还是觉得值得的,还好自动单那边比较给力,学费还是有的 :)。

 

全面转做外盘 - 2012 上半年自动单总结

自上次自动单总结又过去了半年时间,这样算下来,已经完整的执行自动交易一年了。从开始的时候觉得神奇,到现在已经习以为常了,反正让它跑着就是,虽然如果自动单有仓位就老去瞄盘面的坏毛病还没改,但是自从晚上开始锻炼和凌晨玩大菠萝之后就改善多了~

内盘的股指期货一直犹豫要不要再开始做,最终还是放弃了,上个月把内盘期货账户最后的一点资金转到外盘去了,所以现在就正式全面的转向外盘了~

其实内盘的股指期货(IF)还是很好做的,放弃无非就是因为几个原因:

  • 内盘的自动化交易软件还有点不靠谱,如果是手动盯盘做,按照去年的经验,基本上等于 “浪费睡觉时间+承受多余的压力+增加执行错误”。
  • IF 的合约规模对我来说有点尴尬,如果小上一半就好了,希望以后能有 mini IF。
  • 保证金、滑点、手续费都没什么优势。

外盘还是使用原来的程序,参数也没有改,只是 3 月份下线了玉米,将小罗素换成更好的波动率期货,然后将小恒指都换到大恒指。

先来看看下线的玉米:

相当囧的曲线,谁能想到去年感觉最稳定的玉米,从今年一开始就回撤呢,最终在 3 月份停单,农产品周期性的交易不活跃是原因之一。

 

然后是小罗素的后代波动期货:

在上半年跑出了漂亮的曲线,收益大部分都是它贡献了,上半年最后一天的交易还将自动单账户净值收在新高,真的是非常走运。

 

然后是老朋友恒指 1 号和 2 号,今年这两个品种都陆续从小恒指换到了大恒指:

1 号:

2 号:

1 号贡献了自动单另一半的收益,2 号虽然很囧但是也算 OK~


 

总结

要说遗憾,那就是依然没有想出什么新的策略,好在现在用的这个看上去适用性还不错,就顺其自然的让它工作下去吧~

每笔交易的平均风险为账户的 3% (恒指 1 号为 3%、2 号为 1%、玉米为 2.5%、波指为 5%),上半年最终收益为 77%,看上去还不错,不过最大回撤也达到了 20%。

要说自动交易做成这样,是属于不错呢还是差强人意呢,我也不知道该如何评价,我只知道我在 2 月底开了个账户手动操作,虽然属于实验性质,但是忙了 4 个月的收益是 -6% ……

所以这东西依然比我自己做要强得多得多。

 

 

最后附上一张图片,这是平常记录的盈亏序列,有兴趣的可以瞄瞄,现在回过头来看觉得非常有趣 ~

红色是止损,绿色是超过止损的收益,黄色是小于止损的收益或是小于额定止损的损失。

 

 

 

 

 

 

 

聊胜于无 - 2011 外盘自动单总结

今年 3 月份才在外盘开户,之后熟悉品种和系统(爆掉不少资金),5 月份正式用软件上线执行。按照定义来说,这就是所谓的“程序交易”吧,但是这个词很容易让人联想起复杂的模型和高频率的交易,而实际上我这个只不过是个超级简单的策略和一天最多两次的交易而已,相对于手动交易区别只在于自动下单而已,所以就暂时称为“自动单”吧~

使用的软件是 MultiCharts,非常不错的一款回测+自动交易软件,国产的交易软件和这个相比不管是功能上还是稳定性上都不是一个层次的。目前国内的期货公司支持 Multicharts 的也越来越多了,只不过国内的期货市场也越来越鸡肋了……

软件放在美帝的 VPS 上执行,如果你想放在自己的电脑上自动下单那还是省省吧,国内这种网络环境基本会让你欲哭无泪,到时候还得去随时盯着网络,自动单的意义也就没了。自动交易只要把网络搞好,就没什么其他技术方面的问题了。

所有的品种实际上都用了一个程序,只不过参数有些不同,所以表现出不同的特性(比如把止损和止盈都改得很小,就变成了剥头皮策略)。所有的系统都是日内。

因为目前还指着这个自动单当做收入来源,所以策略的具体逻辑就不公布了,而且效果也就那样儿(如下),再而且,这个策略很多书上都有

 

继续阅读

股指期货半年总结

很久没有写 blog 了,主要是没有什么特别的事情,这半年依旧是宅男生活,唯一的区别就是白天开始做做期货,当然希望可以赚钱,不过基本还是为了学习。从春节后开始做股指期货的日内,到今天刚好半年,来好好总结一下。

为什么是股指期货?

国内的期货虽然品种很多,农产品、金属、能源都有,但是基本上都是跟着外盘走势走。如果晚上外盘大跌,那么国内期货第二天开盘就低开一步到位,之后基本上整天都在开盘价附近小幅波动,这种情况长线也不好控制风险,日内短线也没得做。

看下来只有股指期货走势比较独立,而且很少出现跳空缺口(虽然最近也经常跳了),波幅也不小(虽然最近波幅在缩),所以就决定做这个了。

为什么要做日内?

唔,其实也明白相对中长线,这种日内短线操作难度比较大,手续费和滑点成本高,心理压力也很大(比想象中大不少),不过本身就是为了练习和学习,二来股指期货的合约规模还是有点大,如果做中长线,那么一次至少得承受 60~100 点(一个点 300 大洋)的风险,实在是无法接受。

现在看来,做下来的成果还是相当不错的,这个成果当然不是说赚钱的成果,而是学习的成果。虽然以后并不一定以做这种日内短线为主,但是个人还是觉得这种方式是个不错的练习手段,甚至觉得每个想玩期货的人开始都应该练习练习日内短线,为什么这么说呢?

首先,如果是中长线的话,可能每个月只有一两次的操作,甚至一年只有几次操作,这样的话过去一年,不管是赚钱还是亏钱,都没法说明当前的方法是有效还是无效,因为操作次数太少了,也看不出什么来。

而日内短线,如果一天只做一次,一个月就可以有近 20 笔交易,这个数量已经有一些统计意义,可以统计出胜率、盈亏比、盈利因子,立刻就可以看看这些数据是不是符合预期。而且也很容易发现当前方法的缺陷在哪里,做改进的话也有充足的依据。

其次,也是因为日内的操作频率比较高,自身的一些缺陷(操作上、心理上)可以迅速的暴露出来,这半年就暴露了一大堆问题,犯了一大堆的错误,有些错误还一而再再而三的犯,但是很快的一些错误就会因为犯得太多被教育得太多,再也不会犯了。

操作总结

系统基本上没有变,只有两次变动,第一次是在 3 月中旬将原本每天的两次操作限制减少为一次,第二次是在五月底加了一个过滤器,进一步减少操作次数,总体来说效果还是可以接受的。

操作数据:

月份 操作次数 胜率 盈亏比 盈亏
2月 16 62.5% 1.30 14.1%
3月 19 47.4% 0.64 -7.8%
4月 19 42.1% 1.44 3.3%
5月 16 43.8% 1.74 2.9%
6月 15 53.3% 2.18 8.5%
7月 12 41.6% 2.10 4.7%

净值曲线:

6 个月只有三月份是亏损,三月份也是最大的教训,因为二月份的开局非常好(现在看来只不过因为那时赶上了好时候),所以心理就预期三月份也跟二月份差不多,但是三月初的几笔连续亏损立刻暴露出了自己的心理问题,开始怀疑当前的方法是不是有效,之后擅自更改了系统,盘中操作也经常违背计划,最后的结果当然不是很好,还有一周没有操作,结果放跑了几笔本可盈利的交易。到月底结束的时候,复盘才发现,如果三月份按照原来的系统严格执行的话,是可以打平的,根本不是系统出了问题,是我自己出了问题。

有了这次教训之后,就开始着重关注执行问题,四月份只有一两笔没有按照计划的操作,到了五月份以后,这种自主操作已经基本绝迹了,效果是显而易见的。

虽然短线操作的胜率预期应该大于 50%,但是从实际结果来看,只要做好止损,把损失限制住,那么胜率什么的并不是很重要。不过有几个月都是靠一两笔大收益来翻盘,让我还是有些担心这种操作的稳定性,假如这种大行情没有来,或者那天搞好有事错过了,岂不整个月的收益就泡汤了?也许这是这半年纠结的行情所决定的,所以还需要继续观察。

此外虽然从盈利的百分比上来看很爽,但是这是因为账户比较小,而且即使不算没有遵守计划操作的三月,盘中也有快 10% 的回撤,收益回撤比还是比较差,这点上还有待改进。

-----------------------------------------

最后的最后,也是在这半年期货中最大的感悟,那就是人类的本性太爱追求确定性了,那些分析、那些预测、那些被止损之后的郁闷,都是对确定性的妄想,一旦开始追求确定性就完了,因为这种东西根本就不存在,存在的只有风险和收益而已。

现实生活中何尝不是如此,我们为了确定性追求稳定的工作,为了确定性踌躇不前,为了确定性而变得和周围人尽量的一样,这并不是什么错误,因为这也是一种幸福。但是如果妄想获得超出常人的收益还想追求确定性的话,那么肯定什么也得不到。

承认不确定,提前做出对策而不是预测,面对和管理风险,是唯一的路吧。

希望我可以逐渐学会这一点。