如何建构第一支自己的程序

原文出处:币图志

前言

许多MC 新的使用者还不太会撰写程序,

这边将手把手教大家建构第一支简单的日内程序,

一支交易程序的主轴就是进场逻辑,

进场逻辑又分顺势或是逆势

大家可能会想说,

大盘大概有70%的时间都在盘整没有特别的方向,

所以用逆势的方法可能比较容易赚钱,

但是真的是这样吗?

其实不一定啦!贴着盘势做,就会赚到钱了,

顺势逆势也不是那么重要,就差在你进场的相对位置。

我们今天打算来写出一支日内当冲的程序,

基本的进场逻辑很简单,

当价格往上突破我们设定的压力线,我们就作多;

当价格往下跌破我们设定的支撑线,我们就作空。

重点来了,我们怎么设定压力线跟支撑线呢?

在这边提供一个最简单的想法,

我们设定开盘后一段时间的最高点跟最低点当作一个区间,

往上突破最高点的某个比例就进场做多;

往下跌破最低点的某个比例就进场做空。

现在就开始来撰写我们的程序码吧!

参数与变数设定

首先,我们必须先设定我们的参数,

因为我们要突破区间上下的某个比例,

所以我们把比例当作是一个参数,

也方便让大家可以去最佳化。

再来,因为我们是设定开盘后一段时间的高低点区间,

所以我们开始交易的时间必须限定在那段时间之后,

而且我们总不会一直交易到收盘吧!

input :R(0.002),BeginTime(0930),EndTime(1130);

Input后面是接我们程式里可变动的参数,

千万记得,每句程序码写完都要记得加分号「;」

R是代表区间上下的某个比例,

BeginTime是我们开始交易的时间,

EndTime是我们终止交易的时间。

接着我们必须要有变数来储存我们开盘后一段时间的高低点,

var:TH(0),TL(0),mkp(0),ax(0),ay(0);

TH是用来储存我们当日某段时间里的最高点;

TL是用来储存我们当日某段时间里的最低点。

mkp用来储存我们手边部位状态。

ax用来计算我们作多的次数,

ay用来计算我们作空的次数。

ax跟ay可以用来限制我们当日多空交易次数。

所以部位状况跟作多、作空次数,每天都必须归零,

if date date[1] then begin

mkp=0;

ax=0;

ay=0;

end;

进场方式

程序的核心来了,

首先我们会先设定进场时间范围,

所以我们之前设定进场时间在9点30到11点30。

基本上当冲程式不一定要像留仓程式总是有部位在,

所以我们设定不管多单或是空单进场时,

手边都不要有任何部位。

当K线最高价格往上突破区间高点的某个比例后,价格过高点进场作多;

当K线最低价格往下跌破区间低点的某个比例后,价格过低点进场作空。

if BeginTime TH*(1+R) then buy next bar at highest(high,1)+1 stop;

if MarketPosition = 0 and low 1 and mkp=1 then ax=ax+1;

if mkp[1]-1 and mkp=-1 then ay=ay+1;

我们用mkp去储存部位状况,

当你前一个部位不是多单,而现在进多单,

ax就加1,表示作多一次,空单亦然。

出场方式

最后,有进必有出嘛!

基本上我们设定停损点数为50点,

当然,如果你容忍度比较小,停损可以设小一点,

不过当盘在扫的时候,停损太小很容易被扫出场。

然后,在14点55分时,手中的部位还没出场的话,

就让它通通出场吧!

if marketposition =1 then begin sell next bar at entryprice-50 stop ;

if time>1455 then sell this bar on close;

end;

if marketposition =-1 then begin buytocover next bar at entryprice+50 stop ;

if time>1455 then buytocover this bar on close;

end;

事实上,你把这样的程序套进去作回测,

你会发现绩效并没有很好,

为什么呢?

首先是交易次数太多,所以我认为你必须去限制你的交易次数,

通常我们会限定一天多空各作一次,

最多多空不会各作超过2次,

毕竟你可能不只有一支程序,

可以让其他的程序来互补,

没有必要通通让同一支程序在那边拼命阿!

除了限制进场次数来降低交易次数之外,

我们还可以利用其他的滤网来降低我们的交易次数,

这个以后我们在慢慢来介绍。

当然,你也可以缩短你的交易时间,

这样也可以减少你的交易次数。

但是,大家可能会觉得说,为什么绩效不太好?

大家要知道,每种进场逻辑有它的优点跟缺点,

每种进场逻辑在设定时,想要抓的盘势可能不相同。

而这种固定区间的进场方式,

如果遇到一路到底的盘,当然是赚翻了。

但最怕是上冲下洗的震荡盘了,

尤其是在计算区间的时间里,

指数波动过大,会让你的区间也变得很大,

这样当指数走势转向时,会让你进场变得相对缓慢。

所以大家在写程序的时候,

必须要清楚自己程序的死穴,

你可以经由观察K线图的进出场点,

来发现你程序的问题所在。

因为你知道你程序的死穴在哪?

你才有办法加些信号过滤条件去过滤掉一些你不想要的进场点,

注意: 不是过度的去fit市场而加了太多的东西。

而要提升绩效跟减少drawdown还可以从出场点改进,

毕竟这支范例程序的出场点太单调了,

只有停损跟收盘出场,

你可以加入拉回出场或是一些保护性跟追踪性的出场方式,

以前也有介绍过一些出场方式,

以后有机会我们也会介绍一些不一样的出场方式。

建构出一支基本的程序,其实不难,

我们可以由上面这样的流程,去写出自己的程序,

最难的是如何把你的想法写成程序,

新手因为不熟程式指令语言,

所以常常会不知道如何用程序语言表达出自己的想法,

这部分就必须要多看、多问、多写程序才可以更精进!
程序化交易, MultiCharts



                                                    风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部