percenttrailing止盈语句,如何按at market方式下单 [MC]
-
MC用户求助:
percenttrailing止盈语句代码如下:
[IntrabarOrderGeneration=true];
input:target(10),Percent(30);//,BS(NumericSimple);
vars:intrabarpersist mp(0),intrabarpersist flagB(0),intrabarpersist flagS(0), intrabarpersist valueh(0),intrabarpersist valuel(999999);
once cleardebug;
mp=marketposition;
if mp<>mp[1] then
begin
valueh=0;
valuel=999999;
flagb=0;
flags=0;
end;
if mp>0 and valueh<=h then
valueh=h;
if mp<0 and valuel>=l then
valuel=l;
if (mp>0 and valueh-entryprice>target) then
flagB=1;
if mp<0 and entryprice-valuel>target then
flags=1;
if mp=1 and flagB=1 then
sell("L_trailing") next bar at valueh-Percent*(valueh-entryprice)/100 stop;
if mp=-1 and flagS=1 then
buytocover("S_trailing") next bar at valuel+percent*(entryprice-valuel)/100 stop;
我在实际使用时遇到了一个情况:市场价格变动太快,导致止盈指令发出后没有成交。
我的诉求是用at market的方式下单,请问老师应该如何改动上述语句才能达到目的,谢谢!(来自旧论坛客户,spacehk)
-
MC回复讨论一:
您的策略有两个小问题需要讨论一下:
一、您开启的是bar内交易,所以止盈的速度已经很快了,因为从flagB(或者flags)被赋值为1到执行止盈语句是在同一笔tick内,但是会在下一笔tick发出止盈委托单,会有哪么一点延迟;然而,正如您所说,您交易的商品合约的行情波动很大,所以两笔tick之间的时间延迟也很小。您可以使用MC关键字setpercenttrailing(profit,percent),进行实时的止盈;该指令和您的止盈思想是一致的,从指定的最大获利拉回特定的百分比后,平仓部分或者所有合约,profit参考是该指令在被触发之前必须达到的获利;它会在当笔tick内就会即时触发,它的实时性可以避免一定的延迟。
二、您的策略使用的是stop单类型,因为内盘只有大连商品交易所支持stop单,我不太清楚您交易的商品合约是否支持stop单类型;如果不支持stop单,那么您需要使用本地洗价转市价或者限价,这样会有一定的网络延迟;如果该交易所也不支持市场单,而本地洗转限价在市场波动很大的情况下有可能成交不了,您可以选择本地洗转涨跌停限价,这样发到交易所会立即成交;但是,由于外盘交易所多数没有涨跌停限价,不可选此项,那么您可以在MCtrader设置中选择”假回报“+”追价“,MCtrader设置详细看链接http://forums.icetech.com.cn/forum.php?mod=viewthread&tid=471&highlight=mctrader -
MC回复讨论二:
@evenrich
非bar内模式,非精细资料历史回测没有问题!
但是这段代码在非bar内模式下有一个小问题:因为非bar内模式下,策略的计算是每根bar收盘时进行的,并且判断委托单执行条件是否满足,而这段代码中是需要判断多头开仓以来的最高价与进场价之差是否大于目标价格(以多头为例),然后再委托追踪止损单,但是对“多头开仓以来的最高价与进场价之差是否大于目标价格”不会太及时,因为这个条件可能在bar的形成过程中就满足了,导致判断延迟。
-
MC回复讨论三:
当然可以的,帖子”MC回测逻辑及条件单(包括set关键字)的执行逻辑“中有详细介绍哦
-
MC回复讨论四:
当然可以的,帖子”MC回测逻辑及条件单(包括set关键字)的执行逻辑“中有详细介绍哦
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 511411198 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容