MultiCharts程式篇:EntryPrice和EntriesToday使用在加碼上的問題與解決方式
1-傳回指定部位第一筆進場的價格
EntryPrice永遠是第一筆
一開始看到"傳回指定部位第一筆進場的價格"還不太懂是什麼意思,一直用TradeStation的想法來思考,直到用了加碼時才發現怪怪的,用下圖為例,以TradeStation來說2013/04/12的11:30有6口單,進場價依序為(1)7825 (2)7821 ....,則 EntryPrice(0) = 7821,EntryPrice(1) = 7825以此類推,但MultiCharts裡卻不是這樣,EntryPrice(0) = 7825,EntryPrice(1) (編號3) = 7762。
大家可以參考國外MultiCharts網站,有個關鍵字叫:
PosTradeEntryPrice(PosAgo,TradeNumber)
PosAgo:0是未平倉,1是上一次平倉,以此類推
TradeNumber:交易次數,就是這次交易的第幾次交易
舉例來說,PosTradeEntryPrice(0,0)就是目前部位的第一口進場價,PosTradeEntryPrice(0,1)就是目前部位的第二口單進場價,以此類推,以下圖為例:
程式碼:
print("date = " , date, " time = ", time, " PosTradeEntryName(0,0)= ", PosTradeEntryName(0,0), " (0,1)= ", PosTradeEntryName(0,1), " (0,2)= ", PosTradeEntryName(0,2), " (0,3)= ", PosTradeEntryName(0,3), " (0,4)= ", PosTradeEntryName(0,4), " (0,5)= ", PosTradeEntryName(0,5) );
print("date = " , date, " time = ", time, " PosTradeEntryPrice(0,0)= ", PosTradeEntryPrice(0,0), " (0,1) = ", PosTradeEntryPrice(0,1), " (0,2) = ", PosTradeEntryPrice(0,2), " (0,3) = ", PosTradeEntryPrice(0,3), " (0,4) = ", PosTradeEntryPrice(0,4), " (0,5) = ", PosTradeEntryPrice(0,5) );
輸出值:
date = 1130412.00 time = 1130.00 PosTradeEntryName(0,0)= SampleX_1 (0,1)= SampleX_2 (0,2)= SampleX_3 (0,3)= SampleX_1 (0,4)= SampleX_2 (0,5)= SampleX_3
date = 1130412.00 time = 1130.00 PosTradeEntryPrice(0,0)= 7825.00 (0,1) = 7821.00 (0,2) = 7816.00 (0,3) = 7824.00 (0,4) = 7814.00 (0,5) = 7802.00
1.程式是用EntryDate(n)計算交易次數:只要加碼交易次數就會算錯 (如上所述)
1.只下一口單不要加碼交易次數才會正確
2.自己寫程式控制交易次數
我研究了一下,原來所謂的"第一筆"代表每次空手(部位為零)後再持有部位時的第一筆進場價,以上圖為例,在2013/04/12 11:30,當下部位有6口,所以第一筆成本價為 EntryPrice(0) = 7825沒問題,至於上一次符合每次空手(部位為零)後再持有部位時的第一筆進場價在哪,就在編號3訊號出現時,所以在2013/04/12 11:30的 EntryPrice(1) 就是7762,如下圖。
所以相關關鍵字如:EntryDate,EntryTime,EntryPrice,EntryName,ExitDate,ExitTime,ExitPrice,ExitName,使用上的觀念都是如此。
這個問題的解決方式如下:
1.只下一口單不要加碼才會正確
2.自己寫程式控制
3.使用PosTradeEntryPrice(PosAgo,TradeNumber) 取代 EntryPrice
PosTradeEntryPrice(PosAgo,TradeNumber)
PosAgo:0是未平倉,1是上一次平倉,以此類推
TradeNumber:交易次數,就是這次交易的第幾次交易
舉例來說,PosTradeEntryPrice(0,0)就是目前部位的第一口進場價,PosTradeEntryPrice(0,1)就是目前部位的第二口單進場價,以此類推,以下圖為例:
print("date = " , date, " time = ", time, " PosTradeEntryName(0,0)= ", PosTradeEntryName(0,0), " (0,1)= ", PosTradeEntryName(0,1), " (0,2)= ", PosTradeEntryName(0,2), " (0,3)= ", PosTradeEntryName(0,3), " (0,4)= ", PosTradeEntryName(0,4), " (0,5)= ", PosTradeEntryName(0,5) );
print("date = " , date, " time = ", time, " PosTradeEntryPrice(0,0)= ", PosTradeEntryPrice(0,0), " (0,1) = ", PosTradeEntryPrice(0,1), " (0,2) = ", PosTradeEntryPrice(0,2), " (0,3) = ", PosTradeEntryPrice(0,3), " (0,4) = ", PosTradeEntryPrice(0,4), " (0,5) = ", PosTradeEntryPrice(0,5) );
date = 1130412.00 time = 1130.00 PosTradeEntryName(0,0)= SampleX_1 (0,1)= SampleX_2 (0,2)= SampleX_3 (0,3)= SampleX_1 (0,4)= SampleX_2 (0,5)= SampleX_3
date = 1130412.00 time = 1130.00 PosTradeEntryPrice(0,0)= 7825.00 (0,1) = 7821.00 (0,2) = 7816.00 (0,3) = 7824.00 (0,4) = 7814.00 (0,5) = 7802.00
- EntriesToday永遠是第一筆
這個Function的功用是取得當天的交易次數,但經過測試後顯然跟我們所認知的不太一樣,直接去看程式碼會發現兩個問題:
2.迴圈只跑10次:1天的交易次數最多計到10次
這個問題的解決方式如下:
2.自己寫程式控制交易次數
此版本為MultiChart 7.4.20.400。
0 意見:
張貼留言