mql4编程:巧用订单“魔术编号”进行选择性平仓
1在采用mql4语言编写的自动交易程序中,“发出订单”函数ordersend()的参数中有一个“int magic”参数,习惯上我们直译为“魔术编号”或“魔术编码”,它和“订单号”不一样,不是由系统自动生成的,而是用户可以采取一定的规则,自定义的数字编码。2在日常外汇交易中,我们平仓的类型无非就是“全部平仓”和“选择性平仓”;全部平仓就是“不再持仓”,即不再持有任何仓单,这样的空仓实现起来很简单,在这里就不赘述了;选择性平仓又分为两种:一种是对某一货币对的平仓,这可以通过判断货币对的值做到;另一种是达到盈亏条件的平仓,在这种情况下,如果持有的仓单数量多、货币对种类比较杂,在判断时就比较麻烦了……,这时,如果能巧用“发出订单”函数ordersend()的“int magic”参数(魔术编号),会意想不到地简化操作……3为了举例,我这里用一种简单的”魔术编码“的编码规则:1、编码长度为7位,即每个码都是”*******“的形式;2、编码前3位代表货币对,各不相同,分别为:100 usdchf;200 usdcad;300 eurusd……,(因为是举例,我这里只编3种,大家可以总结更好的方法……o~o);3、编码后4位代表开仓的序号,按开仓时间的先后,从0开始递增;4在电脑上打开mql4语言编辑器(metaeditor 4);点击工作区左上方的“文件”,选择“新建”,然后建立一个“magicdemo"的例程序;5首先,我们在主函数 ontick()中输入下列语句,买入”usdchf“3笔: int c; static int b=1000000; if(b<1000003) { c=ordersend("usdchf",op_buy,0.01,ask,0,0,0,"magicdemo",b,0,yellow); if(c>0) b++; }然后点击上方的”编译运行“键;可以看到,程序为我们买入了3笔”usdchf“订单;6这时,我们可以知道,魔术编号为“1000003”的订单是我们最后成交的,所以,我们可以通过它,对最后一笔订单进行平仓,为此我们在主函数 ontick()中继续输入下列语句: int a; for(a=0;a<orderstotal();a++) { if(orderselect(a,select_by_pos)==true) { if(ordermagicnumber()=b) { orderclose(orderticket(),orderlots(),bid,0,white); } } }然后点击上方的”编译运行“键;可以看到,程序已经把刚才的最后一笔持仓平掉了; 怎么样,这比用什么“遍历”、“比较成交时间”要方便多了吧……^o^…… end 20210311