我想要每次程式執行時去計算過去的獲利
我會透過MACD與三分鐘線來計算我的訊號
因此我的程式執行頻率為三分鐘一次
但是由於我是做台指期,同時會作多與作空,當死亡交叉時做空,黃金交叉時做多,每 50 點就會進行停損停利
我想要在我首次獲利時就離場,也就是說,接下來都不會再進場
請問我該如何實現這樣的功能?
 
        
        我想要每次程式執行時去計算過去的獲利
我會透過MACD與三分鐘線來計算我的訊號
因此我的程式執行頻率為三分鐘一次
但是由於我是做台指期,同時會作多與作空,當死亡交叉時做空,黃金交叉時做多,每 50 點就會進行停損停利
我想要在我首次獲利時就離場,也就是說,接下來都不會再進場
請問我該如何實現這樣的功能?
Hello 華哥,
您可以在進場條件中加上 "獲利" 要小於或等於0時才可以進場。
而 "獲利" 可以使用交易函數來計算,像是 FilledRecordPrice, FilledRecordBS 和 FilledRecordCount。
我有看過這些函數
所以沒有內建比較快速的方式可以計算獲利對吧?
因為如果使用上述您說的函數來計算
我似乎就需要透過迴圈來判斷某次交易是做空還是做多
並且她下次交易是做多還是做空
我才知道這次交易是否為獲利或者是損失
並且還要將偶數次結果加總如果為正才是真正的獲利
除此之外,我想再追問一個問題
想要詢問,我是否可以將這些判斷塞進一個 function 裡面?
並且透過呼叫的方式來計算
還有,不曉得是否可以請官方更新一下說明文件
程式的說明文件非常不齊全
例如明明有 else if 的語法,但實際上官方文件根本沒有寫
除此之外,printf 原本預期可以在回測時看到輸出
但實際上似乎只能輸出到檔案再慢慢看?
還有,每一種函數的回傳值在文檔上也沒有很詳細說明他的 type
Hello 華哥,
就小編所知沒有函數可以直接取得獲利的資訊。
您也不一定需要使用迴圈,舉例來說您可以撰寫一個函數:
value1 = filledRecordCount;
if value1 <> 0 and filled = 0 then begin
if filledRecordBS(value1 - 1) = 1 then retval = FilledRecordPrice(value1) - FilledRecordPrice(value1-1)
else if filledRecordBS(value1 - 1) = -1 then retval = FilledRecordPrice(value1-1) - FilledRecordPrice(value1);
end
else retval = 0;
這樣的話此函數就會在出場後庫存為0的狀況下回傳最近一次進出場的價差。
當然這只是個簡單的範例,若您交易策略進出場複雜的話就會需要作相對應的調整。
print在回測的時候一定是輸出到檔案中沒錯,自動交易即時的情況下則會顯示在策略中的執行紀錄中。
函數的回傳值大部分都會是數值或是布林值,函數中的範例可以看到回傳值可以如何使用。
小編會將您的意見反映給相關人員作參考。
我對於我沒有將問題定義清楚感到抱歉
首先您這邊所謂的函數跟我的認知不太一樣
我的定義一個函數的意思,他可能會有輸入或輸出
他可以接收我傳入的值計算出我想要的值
並且我可以透過名稱來呼叫他
但是您這邊所撰寫的程式碼,我這邊的理解是
他只是一段程式碼僅此而已,並不是我這邊需求的"函數"
除此之外,想順便詢問一下 <> 的語法在哪裡有文檔可以參考?
因為我沒有看到這個語法好奇想問一下
除此之外,您這邊所撰寫的程式我有幾個疑問
1. retval 我在使用時,他出現以下錯誤訊息
在「交易」腳本中無法使用「retval」。
2. 依照我的理解,您的程式碼只計算當前與前一次獲利或停損的狀況
但是實際上,這樣的作法並沒有符合我標題中的"累積獲利為正出場"
例如說,前5筆交易全都是停損出場,那麼後面三筆就算是連續停利出場的
也未必可以沖銷前面的虧損,所以與我這邊的需求也不太相同,
但可能是我沒有描述清楚,很抱歉
3. 我有提到說 我想要在我首次獲利時就離場,也就是說,接下來都不會再進場
但是似乎沒有看到類似的邏輯,假如我的程式碼執行頻率為三分鐘,那麼我希望假如累計獲利為正,接下來的所有三分鐘都不要再進場了,也就是說今天都不要在進場了
感謝虎科大許教授的熱心回覆
我的程式是跑期貨當沖沒錯
我也有想過是不是應該寫成迴圈的型式
並且將執行頻率改成一天一次
只要收益為正結束程式就可以完全離場沒錯
不過我想說,可以多看看有沒有其他方式
不過很好奇 retval 無法用於交易腳本,那麼想請教
有什麼函數是可以讓我在回測時進行輸出來 debug 的?
目前我觀察似乎只有 printf 到檔案這條路可以走
Hello 華哥,
小編補充:
1.retval是函數中使用的語法,主要是用來顯示函數腳本執行結果。
除了使用 retval 以外,用函數的名稱也可以回傳函數腳本的執行結果 (可參考內建的average函數)。
2.此函數只會計算最近一次進出場的獲利虧損沒錯。
但您可以在交易腳本中用變數在每次出場後呼叫此函數來作累加,就可以得到累積的獲利 (需注意該範例沒有將手續費納入計算)。
3.同上,可以在進場條件中加上 累加的變數需要小於等於0 當作條件即可。
或是只要累加變數大於0就執行 RaiseRunTimeError 中斷策略執行。
要確認腳本運作是否符合所需,目前都是使用 print 函數來確認沒錯。
感謝 虎科大許教授 的熱心回覆。
9 評論