一、委托语句
MC中所有的进场出场都会有一个名称,这可以通过在委托发单语句中指定委托进出场的名称,也可以不指定委托进出场的名称而使用默认的进出场名称,可以通过相应的关键字获取指定名称的进出场的相关信息,为策略使用。根据多头进场、多头平仓、空头进场、空头平仓,可以将委托发单语句分为四类(委托发单语句是根据关键字buy、sell、sellshort、buytocover而分类的,和市价单、条件单没有关系),如下所示:
buy next bar at market; //多头进场
sell next bar at market; //多头平仓
sellshort next bar at market; //空头进场
buytocover next bar at market; //空头平仓
每个委托发单语句都有一个名称,若不特别指定委托名称,则使用默认的委托名称,这个默认的委托名称只和委托语句在信号脚本中的排序顺序有关;当然也可以特别指定一个委托名称,下面以多头进场委托发单语句举例说明,对于多头平仓、空头进场、空头平仓委托发单语句,逻辑原理是一样的,在此不再细说:
if currentbar=50 then
buy("second") next bar at market;
if currentbar=45 then
buy("first") next bar at market;
if currentbar=40 then
buy next bar at market;
if currentbar=55 then
buy("third") next bar at market;
上面总共有4个多头进场委托发单语句,第一个委托语句的名称是”first”,第二个委托语句的名称是”second”,第三个委托语句的名称是”Buy#2”,第四个委托语句的名称是”third”。这里需要特别说明一下,为什么第三个委托语句的名称是”Buy#2”,因为我们没有指定第三个委托语句的名称,所以就使用了默认的名称,那么这个默认的名称有什么规则可言呢?答案是肯定的,委托语句的名称的默认命名规则是按照从信号脚本的位置进行顺序命名的,在信号脚本中排在最上面的是”second”,其实第一个委托语句的默认名称是”Buy”,但是由于第一个委托语句已经特别指定了委托名称,所以这个默认名称被覆盖了;在信号脚本中排在第二位置的是”first”,其实第二个委托语句的默认名称是”Buy#1”,但是由于第二个委托语句已经特别指定了委托名称,所以这个默认名称也被覆盖了;在信号脚本中排在第四个位置的是”third”,其实第四个委托语句的默认名称是”Buy#3”,但是由于第四个委托语句已经特别指定了委托名称,所以这个默认名称也被覆盖了;在信号脚本中排在第三个位置的委托语句没有特别指定委托名称,所以使用了默认了委托名称”Buy#2”;在图表上显示如下:
图1. 多头进场委托名称
总结一下,多头进场委托发单语句按照在信号脚本中的位置从上往下的命名名称是”Buy”、”Buy#1”、”Buy#2”、”Buy#3、”Buy#4”…..,以此类推;多头平仓委托发单语句按照在信号脚本中的位置从上往下的命名名称是”Sell”、”Sell#1”、”Sell#2”、”Sell#3、”Sell#4”…..,以此类推;空头进场委托发单语句按照在信号脚本中的位置从上往下的命名名称是”Short”、”Short#1”、”Short#2”、”Short#3、”Short#4”…..,以此类推;空头平仓委托发单语句按照在信号脚本中的位置从上往下的命名名称是”Cover”、”Cover#1”、”Cover#2”、”Cover#3、” Cover#4”…..,以此类推。
注意事项:
Ø 在同一个信号脚本中,委托语句的名称不同相同,否则会报错,也就是同一类的委托发单语句的名称不能相同,不同类委托发单语句也不能相同。例如,同一个信号脚本中,不能出现如下两个委托发单语句:
buy("first") next bar at market;
buytocover("first") next bar at market;
Ø 在不同的信号脚本中,可以出现相同的委托名称,即使这两个信号是同一个策略中的。
二、总部位限制
在策略属性中的“属性”栏位可以设置当前部位(当前未平仓部位)的进场次数(进场笔数),是否允许相同的进场语句产生,如图2中间被红色圈出来的地方,其实部位限制这个设置处短短的三行字并没有把意思解释清楚,下面主要针对两个地方以例子进行解释:1. 当前未平仓部位的进场次数;2. 是否允许相同的进场语句产生。(在阐述以下内容之前,可能需要先阅读帖子“图表部位、策略部位、经纪商部位”的内容)
Ø 当前未平仓部位的进场次数为3,表示当前未平仓部位最多只能由3笔组成,只有当3笔中有1笔被平仓之后才允许下一笔进场,所以,当前未平仓部位的进场次数为3表示未平仓(当前持仓)的进场次数最多有3笔;默认情况下,“部位限制”这个设置并没有被勾选,那么表示当前未平仓部位的进场次数为1。
Ø 是否允许相同的进场语句产生,表示当前未平仓部位的所有未平仓的进场中,是否允许出现相同的进场名称。当不允许相同的进场语句产生时,那么当前未平仓部位的3笔未平仓的进场中,所有的进场名称都是不同的(也就是由不同的进场委托发单语句产生的);当允许相同的进场语句产生时,那么当前未平仓部位的3笔未平仓的进场中,可以出现相同的进场名称。
图2. 总部位限制
1. 举例小结
部位限制:最多允许3笔与目前仓位同向的进场(即当前未平仓部位的进场次数最多3笔),当委托由不同的进场语句产生(即不允许相同的进场语句产生);代码和图如下所示:
if currentbar=20 or currentbar=38 or currentbar=80 then
buy("first") next bar at market;
if currentbar=29 then
buy("second") next bar at market;
if currentbar=48 then
buy("third") next bar at market;
if currentbar=54 then
buy("fourth") next bar at market;
if currentbar=65 then
sell from entry("first") next bar at market;
图3. 委托由不同的进场语句产生
图3中bar下面标记的是bar的编号(对应代码中的currentbar的值),也代表中可能的进场位置,但是currentbar为38时并没有进场,这是因为不允许相同的进场语句产生,也当前未平仓部位中不允许两个进场及以上的进场名称是”first”,但编号为80的位置可以允许进场名称”first”,这是因为之前的”first”进场被平仓了。Currentbar为54的位置也没有进场,这是因为当前未平仓部位的进场次数最多为3,只有当其中有一笔进场被平仓,才允许下一笔进场,这里是编号为20的位置的进场被平仓了,所以允许下一笔进场(即编号为80的位置的进场)。
部位限制:最多允许3笔与目前仓位同向的进场(即当前未平仓部位的进场次数最多3笔),无论委托是否由同一进场语句产生(即允许相同的进场语句产生);(代码同上)如下图所示:
图4. 无论委托是否由同一进场语句产生
三、单根bar部位限制
这里为了不干扰这部分内容的阐述,我们将策略属性中的部位限制进行一下设置,以使总部位限制暂时不影响单根bar部位限制。部位限制:最多允许10笔与目前仓位同向的进场(即当前未平仓部位的进场次数最多10笔),无论委托是否由同一进场语句产生(即允许相同的进场语句产生)。使用的代码如下:
[IntrabarOrderGeneration=true]
if currentbar=345 then begin
buy("b_first") next bar at market;
buy("b_second") next bar at market;
buy("b_third") next bar at market;
sellshort("s_first") next bar at market;
sellshort("s_second") next bar at market;
end;
关于bar内产生委托有6个设置,但是由于进场和出场表达的逻辑是一样的,所以这里只对进场设置的相关概念进行阐述,出场设置的逻辑和进场设置的逻辑完全一样,在此叙述。
Ø “单一bar内,限制信号里的每个委托命令分别产生一次进场”,由于每笔进场委托成交之后都会在图表上某根bar(为方便叙述,这里假设是编号为30的bar)的正上方或者正下方进行标记,编号为30的bar就是该笔进场委托的成交位置;那么这个设置的意思就是,相同委托名称的进场(包括多头进场和空头进场)不能在同一根bar上成交。如图5所示,进场名称”b_first”、”b_second”、”b_third”、”s_first”、”s_second”在编号为345的bar上各出现一次,也就是相同多头委托进场名称或者空头委托进场名称在同一根bar上不能同时出现,最多出现一次。
图5. 每个委托命令分别产生一次进场
Ø “单一bar内,限制信号总共只产生一次进场”,如图6所示,同一根bar上只允许最多一笔进场成交。
图6. 总共只产生一次进场
Ø “单一bar内,允许本策略任何进场产生7次”,如图7所示,同一根bar上总共最多允许7笔进场成交,当然,这个设置是允许相同进场委托名称在同一根bar上出现的,编号为345的bar上出现了两笔”b_first”多头进场成交和两笔”s_first”空头进场成交的情况。
图7. 任何进场
注意事项:
Ø 因为每个策略由若干个信号组成,而每个信号是否开启bar内模式是相互独立的,当然bar内产生委托的相关设置也是独立的;举例,一个策略信号A和信号B组成,信号A开启bar内模式,信号B可以不开启bar内模式。
Ø 以上叙述只是针对一个信号进行相关叙述。若策略的两个信号都开启bar内模式,那么同一根bar上限制也是相互独立的,举例说明一下这个设置相互独立的意思(为简洁起见,这里假设信号A和信号B中的代码完全一样):当两个信号的bar内产生委托都设置成“单一bar内,限制信号总共只产生一次进场”时,那么编号为345的bar上会出现两笔”b_first”进场成交,这两笔分别来自信号A和信号B,这就是相互独立的意思,其它情况不再一一枚举。
四、优化委托执行
以上我们介绍了总部位限制和单根bar部位限制,接下来介绍的“优化委托执行”这个设置是和前两个部分紧密相联的,但是在介绍之前,我们通过一个例子来阐述“优化委托执行”这个设置的意义,这个设置的效果和它表面的意思类似,就是优化---委托单---的执行效果。
部位限制:使用默认设置,也就是不勾选策略属性中的“部位限制”。也不开启bar内模式,测试代码如下(下面对比勾选“优化委托执行”和不勾选“优化委托执行”两种情况):
[IntrabarOrderGeneration=false]
buy("first") next bar at 61.35 stop;
buy("second") next bar at 61.34 stop;
buy("third") next bar at 61.27 limit;
buy("fourth") next bar at 61.26 limit;
//当前行情的价格在61.34之下,61.27之上,也就是当前行情上方有两笔买入stop单,行情下方有两笔买入lim单
Ø 不勾选优化委托执行,如图8所示,会将4笔条件单全部委托出去,等待触价成交;也许有人会问,不是已经通过总部位限制当前未平仓部位最多进场一笔吗?为什么为委托4笔条件单呢?原因很简单,因为条件单都是等待市场触价成交,提前并不知道哪一笔会成交,所以会将所有的条件单都委托出去(这里假设所有的条件单的委托条件都是true,即类似于if true then buy…..的形式);当委托出去的条件单其中有一笔成交了之后,其余就会被撤单,以此达到部位限制的目的(总部分限制和bar内模式下单根bar的部位限制);但是,有可能出现市场极端行情,导致一次性成交了多笔条件单,例如,图8中,后续行情迅速上涨,导致61.34和61.35两笔条件单几乎同时触价成交,这样当前未平仓部位就会有两笔进场,而不是被限制的1笔进场(总部位限制当前未平仓部位最多1笔进场),为了更好的达到部位限制的目的,可以勾选“优化委托执行”,这也就是这个设置的用途和意义。
图8. 不勾选优化委托执行
Ø 勾选优化委托执行,如图9所示,与图8相比,只委托出去了两笔条件单,价位分别为61.34和61.27两笔条件单,这两笔是距离当前市价最近的两笔条件单,也就是最可能成交的两笔条件单;另一方面,为什么委托的是两笔?这是因为当前行情不知道是向上还是向下,所以会将当前行情上方的条件单中最可能成交的条件单委托出去,会将当前行情下方的条件单中最可能成交的条件单委托出去,通过这种“委托优化”,避免了最后成交的进场笔数不会超过总部位限制。
图9. 勾选优化委托执行
以上只是举例阐述“优化委托执行”这个设置对总部位限制的效果,也只是阐述对于条件单的效果,下面我将举例阐述这个设置对单根bar的部位限制的效果,和对市价单的效果。
1. 案例1
部位限制:最多允许2笔与目前仓位同向的进场(即当前未平仓部位的进场次数最多2笔),当委托由不同的进场语句产生(即不允许相同的进场语句产生);也不开启bar内模式,测试代码如下:
[IntrabarOrderGeneration=false]
buy("first") next bar at 61.36 limit;
buy("second") next bar at 61.35 limit;
buy("third") next bar at 61.34 limit;
//这三笔条件单都在当前市价下方
Ø 不勾选优化委托执行,如图10所示,条件单全部委托出去,策略当前所有的未成交条件单都使用一个OCO组合单(一个OCO单号,见交易追踪器-委托-OCO单号,OCO的意思就是One-Cancles-Other group Orders),OCO组合单的意思就是当其中有一笔条件单成交了之后,会先将其余未成交的条件单撤单,然后判断总部位限制(在bar内模式下,还会判断单根bar的部位限制),若未超过总部位限制(bar内模式下,未超过单根bar的部位限制),则继续委托之前撤销的条件单,若大于等于总部位限制(bar内模式下,大于等于单根bar的部位限制),则不再继续委托之前撤销的条件单。
图10. 案例1(不勾选优化委托执行)
Ø 勾选优化委托执行,如图11所示,只委托最可能成交了两笔条件单,也就是委托距离当前市价最近的两笔条件单(因为总部位限制为2笔)。
图11. 案例1(勾选优化委托执行)
2. 案例2
部位限制:最多允许2笔与目前仓位同向的进场(即当前未平仓部位的进场次数最多2笔),当委托由不同的进场语句产生(即不允许相同的进场语句产生);开启bar内模式,单一bar内,限制信号总共只产生一次进场,测试代码如下:
[IntrabarOrderGeneration=true]
buy("first") next bar at 61.36 limit;
buy("second") next bar at 61.35 limit;
buy("third") next bar at 61.34 limit;
//这三笔条件单的价格都在当前市价的下方
Ø 不勾选优化委托执行,这个的逻辑原理在案例1中已经说明了,可以对照看一下。
Ø 勾选优化委托执行,与图11不同的是,这时只委托了最容易成交的一笔条件单,因为单一bar内,限制信号总共只产生一次进场;假设图12中,最后一根bar的编号为200,图12中的这笔条件单在编号为201的bar内成交了(即委托名称为”first”的条件单),那么会在编号为202的bar开始的时候委托下一笔最容易成交的条件单(委托名称为”second”的条件单);对于其它的情况,就不再过多叙述,知道原理就可以了。
图12. 案例2(勾选优化委托执行)
3. 案例3
之前我们叙述了,条件单在总部位限制和单根bar部位限制的不同情况,下面将举一个例子叙述市价单在bar内模式下和非bar内模式下的不同效果,当然是通过“优化委托执行”这个设置来达到不一样的效果。
因为市价单委托出去就会成交(在非常极端的行情下,没有对手价下,市价单不会成交),所以当同时委托多笔市价单的情况下,回测情况下在总部位限制和单根bar部位限制允许的情况下,会同时委托市价单,但是在实盘中,若不勾选“优化委托执行”,则只会委托第一笔市价单,若勾选“优化委托执行”,则会将市价单合并成一笔市价单委托到交易所,这个合并单在交易追踪器的委托中显示的委托名称是”Net Position”,而在图表上并没有反应出合并的效果。
部位限制:最多允许2笔与目前仓位同向的进场(即当前未平仓部位的进场次数最多2笔),当委托由不同的进场语句产生(即不允许相同的进场语句产生);不开启bar内模式(对于开启bar内模式,市价单的执行逻辑可以参考之前的叙述和案例3的叙述即可),测试代码如下:
[IntrabarOrderGeneration=false]
buy("first") next bar at market;
buy("second") next bar at market;
buy("third") next bar at market;
Ø 不勾选优化委托执行,只成交了一笔,即条件同时满足,总部位限制是2笔,实盘中也只会成交一次成交一笔,如图13所示。
图13.案例3(不勾选优化委托执行)
Ø 勾选优化委托执行,同时委托了两笔市价单,即”first”和”second”两笔市价单,因为总部位限制是2笔。
图14. 案例3(勾选优化委托执行)
优化委托执行效果(勾选优化委托执行,且无加仓)
1.相同方向指令(buy/sell),相同类型的价格条件(limit/stop),勾选优化委托执行后,只委托容易成交的那句语句(即优化委托执行有效); |
2.相同方向指令(buy/sell),不同类型的价格条件(limit/stop),勾选优化委托执行后,仍然会同时委托(即优化委托执行无效); |
3.不同方向指令(buy/sell),不同类型的价格条件(limit/stop),勾选优化委托执行后,只委托容易成交的那句语句(即优化委托执行有效); |
4.不同方向指令(buy/sell),相同类型的价格条件(limit/stop),勾选优化委托执行后,仍然会同时委托(即优化委托执行无效); |
5.市价单不可生成OCO单,是否勾选优化委托执行对市价单无影响 |
© 2011-2023 MultiCharts All Rights Reserved.