Data

從燭台生成報價數據

  • November 7, 2012

是否有軟體(或 Python / R / … 腳本)從燭台數據生成(偽)報價數據。

我有從每月時間範圍 (MN) 到分鐘時間範圍 (M1) 的燭台數據(CSV 格式),但時間範圍可能不同。文件名是:

  • SYMBOL1.csv對於 M1 時間範圍(1 分鐘)
  • SYMBOL5.csv對於 M5 時間範圍(5 分鐘)
  • SYMBOL15.csv對於 M15 時間範圍(15 分鐘)
  • SYMBOL30.csv對於 M30 時間範圍(30 分鐘)
  • SYMBOL60.csvH1 時間範圍(1 小時)
  • SYMBOL240.csvH4 時間範圍(4 小時)
  • SYMBOL1440.csv對於 D1 時間範圍(1 天)
  • SYMBOL10080.csvW1 時間範圍(1 週)
  • SYMBOL43200.csv對於 MN 時間範圍(1 個月)

我想為每個 csv 文件提供軟體或腳本。我想給出開始日期時間和結束日期時間,軟體將輸出一個帶有刻度數據的 csv 文件。

報價數據將從最長的時間範圍生成到最短的時間範圍(如果存在數據)。例如,如果數據在請求的時間間隔記憶體在,軟體將從 M1 燭台時間幀輸出分時數據。如果 M1 時間範圍內沒有數據,軟體將嘗試查找 M5 時間範圍內的數據以生成分時。

我知道生成的刻度將使用插值生成(所以它們不會是精確的)

這些想法在 Metatrader 策略測試器http://www.metatrader5.com/en/terminal/help/tester/tester_using/tick_generation中實現

$ head _FRA401.csv 
2010.11.16,08:01,3818.0,3820.0,3817.5,3820.0,41
2010.11.16,08:02,3820.0,3823.0,3801.0,3823.0,38
2010.11.16,08:03,3823.0,3825.0,3823.0,3823.5,28

$ tail _FRA401.csv 
2012.11.01,18:32,3477.0,3477.0,3474.0,3474.5,37
2012.11.01,18:33,3474.5,3476.0,3474.5,3475.5,25
2012.11.01,18:34,3475.5,3476.0,3471.5,3472.5,62

$ head _FRA4043200.csv 
2010.11.01,00:00,3818.0,3906.0,3589.5,3620.0,168480
2010.12.01,00:00,3629.0,3940.5,3618.5,3853.5,227760
2011.01.01,00:00,3848.0,4081.5,3605.5,4019.5,266725

$ tail _FRA4043200.csv 
2012.02.01,00:00,3310.5,3490.5,3305.5,3456.5,514738
2012.03.01,00:00,3441.0,3593.0,3343.0,3420.5,353738
2012.04.01,00:00,3428.0,3475.5,2974.5,3128.5,247351

我們之前做過 (*),但這很簡單:一記開盤,一記高點,一記低點,一記點收盤。對於刻度時間戳,開盤時間是 08:01:00,收盤時間是 08:01:59.999,高點是 08:01:20,低點是 08:01:40。(或者如果這給出了奇怪的結果,open 是 08:01:00.001,close 是 08:02:00.000;這取決於你的系統如何製作柱。)

如果您也希望交易量匹配,則在開盤和收盤的平均值處創建 N-4 個刻度,並在一分鐘內均勻地間隔開刻度。如果需要,您可以插入一條從打開到關閉的直線;您還可以將所有 N-4 個刻度設置為高,等等。所有選擇都是虛構的,所以您選擇哪個並不重要。我喜歡修正平均值,因為任何看到它的人都會立即知道它是人工數據。

*:這是在一個系統中,我們只能修補中斷並用滴答數據回填歷史數據;然後,該系統將製作日內柱線。即我們不能直接修補日內柱線。


如果您希望它看起來像真實的分時,因為您的交易算法僅設計為根據分時工作,那麼您從開盤到收盤的直線插值開始,然後對其進行抖動。然後過濾以確保沒有超過高和低,然後選擇兩個刻度作為高和低並更改它們的值。

另一個特定於 R 的變體是放入打開/關閉刻度,並對所有其他刻度使用 NA。然後隨機選擇 2 個刻度為高低。然後使用 R 的 na.approx 或 na.spline 函式。然後抖動。然後再次過濾高低。

如果這樣做,我強烈建議您製作多個數據集,每個數據集都有不同的隨機種子,並對每個數據集執行回測。如果不同的數據集得到不同的結果,那麼您的算法對您引入的隨機雜訊很敏感。(即你的結果毫無意義,你需要去購買真實的報價數據!)

引用自:https://quant.stackexchange.com/questions/4459