怎麼解決print + settotalbar + currentdate 資料出現異常問題?

  •   380 
  • 最後發表   KL1003  2025 二月 21
KL1003 發文於   2024/12/10

Hi, 小幫手,以下是我使用的回測程式以及回測的視窗截圖

我發現這樣回測的結果, print 在前10筆會出現一堆異常,

包含日期錯誤,資料內容錯誤,請問這問題該怎麼解決呢?

我希望print 就只有20240425 就只有一筆,而不是這麼輸出了11筆,然後第11筆才是正確的

 

 

SettotalBar(10);
setbarfreq("D");

input:period(3,"籌碼計算天期");
input:min(3,"至少滿足幾天");

value1 = Getfield("收盤價", "AD");
Value2 = GetField("主力買賣超張數", "D");
Value3 = GetField("法人買賣超張數", "D");
Value4 = Value2 - Value3; //中實戶買賣超張數

if symbol="2330.TW" then ret = 1;

if ret = 1 then print(file("C:\print\信號籌碼.log"),currentdate,symbol,
    "Value2", Value2,
    "Value2[1]", Value2[1],
    "Value2[2]", Value2[2],
    "Value3", value3,
    "Value3[1]", value3[1],
    "Value3[2]", value3[2],
    "Value4", value4,
    "Value4[1]", value4[1],
    "Value4[2]", value4[2]);

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/12/11

你用選股腳本回測,前10筆應該是setTotalBar預設的10筆。回測時的currentdate是回測當天的日期,由於回測的第一天是4/25,因此前10筆的日期都是第一天的日期。

KL1003 發文於   2024/12/11

Hi, 許教授

我知道,但是尷尬的是那10筆會是不正確的資料,我希望print出來的結果是對的

還是說有辦法印出那10筆的日期? 這樣就正確了,

但是第一筆也不正確,因為資料有0的部分,所以我沒頭緒該怎麼改

希望小幫手可以幫忙解決我這問題

感謝

XS小幫手 發文於   2025/02/20

KL1003 您好,

如同許教授提到的,前十筆是將資料讀取區間(totalBar)的運算印出來,currentdate都會列印成回測起始日。

1. 第一行的value有0是正常的,這涉及腳本的運作規則:逐根K棒運算變數。

也就是說,value[n]意思等於要取得「n根k棒前的腳本運算結果」,於是對於腳本執行的第1根K棒而言,就只存在value[0]的計算結果,再之前都會因為沒有運算而空白。

腳本執行的第1根K棒,會起始於回測首日向過去推移settotalBar的位置。

2. 由於資料讀取區間的currentdate,會等同於回測首日(因為假設回測首日先進行資料讀取的運算)

您只需要將print中的currentdate改成date即可,因為date會等同於腳本執行所在k棒的歸屬日期。

3. 若是您不需要將資料讀取區間的計算print出來,可以在print之前加上if date = currentDate的條件`,因為兩者只有在回測的資料讀取區間會不同,其他時候都相同。

KL1003 發文於   2025/02/21

原來如此...

感謝小幫手 幫我解決了一個難題

我之後有時間會試看看再更新結果

謝謝

發表回覆
Close