您现在的位置:程序化交易>> 期货公式>> (MC)multicharts>> MC知识>>正文内容

MC不断发单,导致多空部位对锁,很快提示保证金不足 [MC]

  • 咨询内容:    在实盘交易中,发现1个问题,需要引起高度注意。 把我使用的经验说出来,和大家分享。  

        代码A: if close>close[1] then buy next bar at market;   //  当前收盘价大于前根收盘价,下根bar开盘时买进;  

        代码B: if close<close[1] then  sellshort next bar at market;   // 当前收盘价小于前根收盘价,下根bar开盘时卖空;


        假设原来空仓,close>close[1], 执行代码A后, 会买进1手,持有1手多单。 买进1手后, 出现 close<close[1],执行代码B, 本来的预期是:MC把多单平掉,并反手卖空1手。  但实际交易中的情况是, MC并没有把之前的1手多单平掉,而是直接卖空2手,这样导致一共持有3口部位:1手多单,2手空单。 多空部位同时持有,导致锁单,以及额外占用保证金。  

         多空对锁,持有3口部位后, 下次再出现  close>close[1],执行代码A时, MC又会直接买进2手,而不会把之前的2手空单平掉。 这样就累积了5口部位: 3手多单,2手空单。

         运行了一段时间后, 很快就提示,保证金不足,无法开仓了。

          后来经过咨询、了解,才明白,MC是一款国外的软件,在美国等国家,没有锁单的机制。 假设之前有1手多单, 满足sellshort的条件后,MC会送出2手空单, 国外的期货经纪商会自动把多单平掉,并反手开空。 而在国内,由于允许锁单,就会导致多空部位不断累积,很快出现保证金不足的提示。

        为了避免这种情况,有个很简单的解决办法, 在 buy指令之后,不要直接用sellshort, 中间一定要加上 sell多单平仓的代码。  以上代码,改成 :
    1.     if arketposition=0 and close>close[1]   then buy next bar at market;   

    2.     if  marketposition=1 and close<close[1] then sell next bar at market;

    3.     if marketposition=0 and close<close[1] then sellshort next bar at market;

    4.     if marketposition=-1 and close>close[1] then buytocover next bar at market;   
    复制代码    在代码中作类似上面的处理后, 就不会出现锁单的情况了。   

     

  • MC技术部: 这个问题目前还存在吗?在mc8.5中还需要这样写吗?

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容