2012年9月19日 星期三

函數:最後一次進場價


程式交易小學堂─期貨投機事業的王道
在 MultiCharts 裡,本來我以為 EntryPrice(0) 就代表了最後一個進場的成本價,經過測試後,確定了 EntryPrice( 0 ) 不是最後一次進場價,而是最後進場方向的第一筆價格(可查閱"程式交易語法大全 page 255")。什麼意思?比如,買進於 7100,之後部位都沒有變化直到平倉出場或翻空,EntryPrice( 0 ) 就是 7100 沒有什麼問題,這算是符合大家的預期。但是如果我們的策略是會進行加碼動作的呢?比如,多單起始進場在 7100,還沒加碼前,EntryPrice( 0 )=7100,這OK,而再度買進加碼於7166時,EntryPrice( 0 ) 卻會依然是 7100,而不是 7166。

然而有些時候,我們就是需要知道最後一次的進場價位,特別是加碼後的。既然 MultiCharts 本身用來回報進場價的 EntryPrice( 0 ),不能滿足我,那就只好自己計算創造了。以下就是我做了一個函數用來回報最後一次進場用的。

*******************************
函數名稱:_LastEntryPrice
value1=  currentcontracts;
value2=  value1*avgentryprice;

if value1<>value1[1] then
  _LastEntryPrice= (value2-value2[1])/(value1-value1[1]);
*******************************

做個測試,以下是 4 次買進價碼的動作。進場價位依序是 7760、7750、7752、7750。

從以下的 Print 就可以看出自己製作的函數 _LastEntryPrice 與 EntryPrice 有什麼差異了。

但是,我得坦承這個自己做來抓最後一次進場價的函數實際上並不完美,如果你的加碼動作是會在同一根K棒連續追進加碼的話,那麼這個函數 _LastEntryPrice 所回報的數值就會是錯的了。

如果你採用的 MultiCharts 是比較新的版本,比如 8 版的話,我有在 8 版找到可以抓最後幾次進場的內建函數 PosTradeEntryPrice( N, M )。它有兩個參數,N指的是最近的第幾筆(0是未平倉的),M則是N那一筆的第幾次。直接拿上面的例子沿用比較如下:


做一個同一根K棒內連續加碼的實驗觀察就可以比較出,我這個函數的錯誤所在,如果你能採用新版本的 MultiCharts 的話,直接使用 PosTradeEntryPrice( 0, CurrentEntries-1 ) 就可以得到最後一筆進場價了。

熱門文章