: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

如何建构第一支自己的策略

如何建构第一支自己的策略

前言
许多MC 新的使用者还不太会撰写程序,
这边将手把手教大家建构第一支简单的日内策略,
一支交易策略的主轴就是进场逻辑,进场逻辑又分顺势或是逆势,大家可能会想说,
大盘大概有70%的时间都在横盘,没有特别的方向,所以用逆势的方法可能比较容易赚钱,
但是真的是这样吗?其实不一定啦!贴着盘势做,就会赚到钱了,

顺势逆势也不是那么重要,就差在你进场的相对位置。
我们今天打算来写出一支日内交易的策略,基本的进场逻辑很简单,
当价格往上突破我们设定的压力线,我们就作多;
当价格往下跌破我们设定的支撑线,我们就作空。

重点来了,我们怎么设定压力线跟支撑线呢?在这边提供一个最简单的想法,
我们设定开盘后一段时间的最高点跟最低点当作一个区间,

往上突破最高点的某个比例就进场做多;
往下跌破最低点的某个比例就进场做空。
现在就开始来撰写我们策略的程序码吧!

参数与变数设定
首先,我们必须先设定我们的参数,因为我们要突破区间上下的某个比例,
所以我们把比例当作是一个参数,也方便让大家可以去最佳化。

再来,因为我们是设定开盘后一段时间的高低点区间,所以我们开始交易的时间必须限定在那段时间之后,而且我们总不会一直交易到收盘吧!

  1. input :R(0.002),BeginTime(0930),EndTime(1130);
复制代码



Input后面是接我们程序里可变动的参数,
千万记得,每句程序码写完都要记得加分号「;」
R是代表区间上下的某个比例,
BeginTime是我们开始交易的时间,
EndTime是我们终止交易的时间。
接着我们必须要有变数来储存我们开盘后一段时间的高低点,


  1. var:TH(0),TL(0),mkp(0),ax(0),ay(0);
复制代码



TH是用来储存我们当日某段时间里的最高点;
TL是用来储存我们当日某段时间里的最低点。
mkp用来储存我们手边部位状态。
ax用来计算我们作多的次数,
ay用来计算我们作空的次数。
ax跟ay可以用来限制我们当日多空交易次数。
所以部位状况跟作多、作空次数,每天都必须归零,


  1. if date <> date[1] then begin
  2. mkp=0;
  3. ax=0;
  4. ay=0;
  5. end;
复制代码



进场方式
程序的核心来了,
首先我们会先设定进场时间范围,
所以我们之前设定进场时间在9点30到11点30。
基本上日内策略不一定要像留仓策略总是有部位在,
所以我们设定不管多单或是空单进场时,
手边都不要有任何部位。
当K线最高价格往上突破区间高点的某个比例后,价格过高点进场作多;
当K线最低价格往下跌破区间低点的某个比例后,价格过低点进场作空。


  1. if BeginTime < Time and Time < EndTime then begin
  2. if MarketPosition = 0 and high > TH*(1+R) then buy next bar at highest(high,1)+1 stop;
  3. if MarketPosition = 0 and low < TL*(1-R) then sell next bar at lowest(low,1)-1 stop;
  4. end;
复制代码



不过我们总不会无限制的进场吧!
所以可能会去限制我们的进场次数,
所以你可以这样去记录你的进场次数,


  1. mkp=marketposition;
  2. if mkp[1]<>1 and mkp=1 then ax=ax+1;
  3. if mkp[1]<>-1 and mkp=-1 then ay=ay+1;
复制代码



我们用mkp去储存部位状况,
当你前一个部位不是多单,而现在进多单,
ax就加1,表示作多一次,空单亦然。

出场方式
最后,有进必有出嘛!
基本上我们设定停损点数为50点,
当然,如果你容忍度比较小,停损可以设小一点,
不过当盘在扫的时候,停损太小很容易被扫出场。
然后,在14点55分时,手中的部位还没出场的话,
就让它通通出场吧!


  1. if marketposition =1 then begin sell next bar at entryprice-50 stop ;
  2. if time>1455 then sell this bar on close;
  3. end;

  4. if marketposition =-1 then begin buytocover next bar at entryprice+50 stop ;
  5. if time>1455 then buytocover this bar on close;
  6. end;
复制代码



事实上,你把这样的策略套进去作回测,你会发现绩效并没有很好,为什么呢?
首先是交易次数太多,所以我认为你必须去限制你的交易次数,
通常我们会限定一天多空各作一次,最多多空不会各作超过2次,

毕竟你可能不只有一支策略,可以让其他的策略来互补,没有必要通通让同一支策略在那边拼命阿!
除了限制进场次数来降低交易次数之外,我们还可以利用其他的滤网来降低我们的交易次数,这个以后我们在慢慢来介绍。

当然,你也可以缩短你的交易时间,这样也可以减少你的交易次数。
但是,大家可能会觉得说,为什么绩效不太好?
大家要知道,每种进场逻辑有它的优点跟缺点,每种进场逻辑在设定时,想要抓的盘势可能不相同。
而这种固定区间的进场方式,如果遇到一路到底的盘,当然是赚翻了。但最怕是上冲下洗的震荡盘了,
尤其是在计算区间的时间里,指数波动过大,会让你的区间也变得很大,

这样当指数走势转向时,会让你进场变得相对缓慢。
所以大家在写程序的时候,必须要清楚自己程序的死穴,
你可以经由观察K线图的进出场点,来发现你程序的问题所在。

因为你知道你程序的死穴在哪?你才有办法加些信号过滤条件去过滤掉一些你不想要的进场点,
注意: 不是过度的去fit市场而加了太多的东西。而要提升绩效跟减少drawdown还可以从出场点改进,
毕竟这支范例程序的出场点太单调了,只有停损跟收盘出场,

你可以加入拉回出场或是一些保护性跟追踪性的出场方式,以前也有介绍过一些出场方式,以后有机会我们也会介绍一些不一样的出场方式。

建构出一支基本的策略,其实不难,我们可以由上面这样的流程,去写出自己的策略,最难的是如何把你的想法写成程序,新手因为不熟程序指令语言,所以常常会不知道如何用程序语言表达出自己的想法,这部分就必须要多看、多问、多写程序才可以更精进!

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表