MC不斷發單,導致多空部位對鎖,很快提示保證金不足
作者:MC 來源:cxh99.com 發布時間:2014年04月17日
- 咨詢內容:
在實盤交易中,發現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多單平倉的代碼。 以上代碼,改成 : - if arketposition=0 and close>close[1] then buy next bar at market;
- if marketposition=1 and close<close[1] then sell next bar at market;
- if marketposition=0 and close<close[1] then sellshort next bar at market;
- if marketposition=-1 and close>close[1] then buytocover next bar at market;
復制代碼 在代碼中作類似上面的處理后, 就不會出現鎖單的情況了。
- MC技術部:
這個問題目前還存在嗎?在mc8.5中還需要這樣寫嗎?