2011年5月24日 星期二

MultiCharts 策略部位輸出文字檔_outputfile


首先,我想先強調一下,以下介紹的作法僅限於"專業版"的 MultiCharts 有效,因為國內已經有券商開始提供所謂券商版 MultiCharts,那是部分功能被閹割過的版本,無法以下的方式運作。

在寫這一篇之前,我想著我應該是直接修改上一篇介紹「MultiCharts輸出即時部位文字檔」比較好,還是重新寫一篇?幾經考慮,我想我還是重新寫這篇後來我是如何實作在我電腦上的應用好了,因為我覺得這可以作為一個對照的比較。



先讓我解說一下前篇。MC輸出即時部位文字檔的用法最早的來由是從凱衛公司的分享,從而提供了把 MultiCharts 的即時部位狀態往外輸出的可能,但因為凱衛提供的方式,常常造成 MultiCharts 與接手實際下單的下單機爭奪部位文字檔的讀取權而造成文字檔被鎖住而失效,因而凌波微步大加以改善,改用呼叫 DLL 的方式而不用 file delete、file append 的方式去做輸出文字檔的這工作,可以解決兩個程式間互搶文字檔讀取權的問題。

我想,在訊號上開發程式,經過回測的驗證流程後,直接讓這個交易訊號就做下單執行,會是比較直覺式的作法。採用指標的方式,獨立於訊號之外,把訊號的部位輸出文字檔,就是我目前使用的方式。

於是...指標的程式碼(內容結構解說請看上篇):
注意以下程式碼內桃紅色的部份,你會需要先抓到這個 DLL 放在這個指標的路徑位置。
input:TXT_name(string);
vars:MP(0), content("");

DefineDLLFunc:"c:\AutoTrading\outputfile.dll",void,"outputfile",lpstr,lpstr;

//Output MP for OrderMaster_form2
MP= i_MarketPosition * i_CurrentContracts;
content = NumToStr(D,0)+" "+NumToStr(Q_Time,0)+","+NumToStr(MP,0)+","+NumToStr(C,0);

if LastBarOnChart then 
outputfile(TXT_name, content);

plot1(MP,"Position");
plot2(0,"0",darkgray);


講了半天,總是要看看效果的嘛!
0


而輸出的文字檔就會是如下的狀態:



簡單一句話,It works!藉由凱衛分享的方式可以讓部位訊號即時輸出(但直接在訊號裡面改可能造成訊號的錯誤),加上凌波微步大的 DLL 可以讓 MultiCharts 跟下單機不打架。只要把以上的指標,跟策略訊號放在同一張圖裡當做副指標。

結論:我的作法是不必更動交易訊號的程式碼,另外做一個指標(用上述的程式碼),把這個要輸出部位文字檔的指標跟你的交易訊號放在同一張圖當做副指標,就可以得到正確的即時策略部位文字檔 輸出了,且這樣的方式就達到模組化的效果了。

如果你有採購報價資訊源的需要,可以參考我的測試經驗

熱門文章