大家可以看到,Set系列关键字有辣么多,我们来分类一下,前三个算一类,主要用于限定多笔进场是否合并出场,最后一个关键字setexitonclose单独算一类,当中剩下的这些定义为出场类set关键字。
在平时的使用和客户提问中,我们发现有不少的误解,而Set系列关键字确实是比较难的,那么我们今天就来好好说说这些Set关键字。
我们知道一个策略是由若干个信号脚本组成的,当然也可以将这些分开的信号组成编写成一个信号,但是这两种方式对set关键字的执行是有不同的影响的。
这里涉及两个问题:
当同一个set关键字在同个信号中出现多次时,以哪一个有效还是同时有效;
当同一个set关键字同时出现在不同信号中时,以哪一个有效还是同时有效。
下面举例一个策略是由两个信号脚本组成的,这里以test39和test40两个信号为例,它们组成一个策略。
当同一个出场set关键字在同一个信号中出现很多次时,最后一个有效;
当同一个出场set关键字在不同信号中出现时,在两个信号中的关键字同时有效;
当同一个出场set关键字在两个信号中出现多次时,每个信号中的最后一个关键字有效,这种情况只是前两种情况的合并;
如下所示,进场价是30020,这里通过关键字setprofittarget_pt指令设置了70、80、90跳的止盈出场,而最后只有70跳和90跳的止盈出场指令有效,对应到图表上的价格分别为30090和30110。
当然对于不同的出场set指令,它们是同时有效的,例如,同个信号或不同信号中同时存在setprofitarget和setprofittarget_pt时,那么它们会同时有效。
对于setstopcontract和setstopposition两个关键字,和上面有一点区别:
当这两个关键字在同一个信号中出现多次时,以最后一个关键字有效;
当这两个关键字在两个信号中都出现时,以最后一个执行的信号中的最后一个关键字有效。
如上图所示,信号test39先执行,test40后执行,所以test40信号中的setstopcontract关键字有效,它的作用是使出场类set指令针对每一笔进场分别出场;
这里通过setprofittarget_pt关键字设置了20跳的止盈,也就是说每一笔进场达到20跳的止盈就会平仓出场;这里”test39”和”test40”的进场价分别为3712和3692,所以分别在3732和3712的价格出场,互不干扰。
再来看下面这张图,这两个关键字都在test39这个信号脚本中,所以最后一个有效,即setstopposition关键字有效,它的作用是使出场类set指令针对所有的进场合并出场;
这里通过setprofittarget_pt关键字设置了15跳的止盈,也就是在平均进场价格的基础上15跳时一起出场。
下面我们以IF判断语句为例,来了解一下setstopcontract和setstopposition。
当进场的盈利到达设置的profit金额之后,并且从最大获利回撤percent比例之后,以stop停损单平仓部分或所有仓位;
这里的“平仓部分”是由关键字setstopconract限定的,“平仓所有仓位”是由关键字setstopposition限定的,这里为方便叙述,只考虑一笔进场,这种情况下setstopconract和setstopposition效果是一样的。
这个关键字需要两个步骤,首先盈利到达profit,才可以触发stop停损出场单,这个停损单的价格是通过最大获利回撤percent百分比计算出来的。
举例,”test39”的1手买入进场价格是3780,profit参数设置为160金额,percent参数设置为50,那么当市价到达3796时就会触发停损单,此时停损单的价格是3788,
这个停损单的价格会根据从进场以来的最大获利实时转换成相应的价格,当市价接着下降到3790时,此时停损单的价格是3788,接着市价上升到3882,此时停损单的价格是3791。
关键字setstopcontract的作用是使出场类set指令针对每一笔进场单独出场,而关键字setstopposition的作用是使出场类set指令针对所有进场合并一起出场,
而当既没有在信号中声明setstopcontract,也没有声明setstopposition的情况下,默认是setstopposition的功能有效,即默认是出场类set指令针对所有进场合并一起出场。
这两个关键字也可以与IF判断语句一起使用,它的效果可以两个关键字的功能互相切换,
但是从setstopcontract切换到setstopposition或者从setstopposition切换到setstopcontract都会使setpercenttrailing指令重新触发停损单,
例如下面的代码可以达到两个关键字的相互切换:
if currentbar<=600 then
setstopposition
else setstopcontract;
setpercenttrailing(200,50);
也就是在编号为601的bar之前都是执行setstopposition的功能,而从编号为601的bar之后都是执行setstopcontract的功能,
那么从编号为601的bar收盘之后setpercenttrailing指令的执行需要重新触发停损单。
如果你还是云里雾里,可点击“阅读原文”,观看视频课程讲解。
立
即
体
验
▼
MC14专策版 免费试用:
欢迎前往Multicharts官网,或公众号后台回复【MC14】,下载软件免费试用1个月;
如何开通MC14正式服务:
开通指南:登录MC官网 → 购买内盘年度会员 → 会员中心付款 → 自动开通权限
▼
扫码登录MC账号→购买内盘会员→付款自动开通
www.multicharts.cn