量化百科

黄金期货贵金属量化回测-历史数据获取方式推荐

由bqw3t74w创建,最终由bqw3t74w 被浏览 9 用户

量化回测中关键的两个点:量化的技术指标以及量化数据的回测,回测涉及到历史数据的获取,例如不同周期K线数据获取;指标包括包括但不限于移动平均线(MA)、相对强弱指标(RSI)、布林带(Bollinger Bands)、MACD指标等;本次给大家推荐历史数据的获取方式和相关指标的示例:

一、获取历史K线数据示例:

import time

import requests	# pip3 install requests
import json

# Extra headers
test_headers = {
    'Content-Type' : 'application/json'
}

'''
github:https://github.com/CTradeExchange/free-forex-market-data
申请免费token:https://alltick.co/register
官网:https://alltick.co


将如下JSON进行url的encode,复制到http的查询字符串的query字段里
{"trace" : "python_http_test1","data" : {"code" : "USDJPY","kline_type" : 1,"kline_timestamp_end" : 0,"query_kline_num" : 2,"adjust_type": 0}}
{"trace" : "python_http_test2","data" : {"symbol_list": [{"code": "USDJPY"},{"code": "GOLD"}]}}
{"trace" : "python_http_test3","data" : {"symbol_list": [{"code": "USDJPY"},{"code": "GOLD"}]}}
'''
test_url1 = 'https://quote.aatest.online/quote-b-api/kline?token=3662a972-1a5d-4bb1-88b4-66ca0c402a03-1688712831841&query=%7B%22trace%22%20%3A%20%22python_http_test1%22%2C%22data%22%20%3A%20%7B%22code%22%20%3A%20%22USDJPY%22%2C%22kline_type%22%20%3A%201%2C%22kline_timestamp_end%22%20%3A%200%2C%22query_kline_num%22%20%3A%202%2C%22adjust_type%22%3A%200%7D%7D'
test_url2 = 'https://quote.aatest.online/quote-b-api/trade-tick?token=3662a972-1a5d-4bb1-88b4-66ca0c402a03-1688712831841&query=%7B%22trace%22%20%3A%20%22python_http_test2%22%2C%22data%22%20%3A%20%7B%22symbol_list%22%3A%20%5B%7B%22code%22%3A%20%22USDJPY%22%7D%2C%7B%22code%22%3A%20%22GOLD%22%7D%5D%7D%7D'
test_url3 = 'https://quote.aatest.online/quote-b-api/depth-tick?token=3662a972-1a5d-4bb1-88b4-66ca0c402a03-1688712831841&query=%7B%22trace%22%20%3A%20%22python_http_test3%22%2C%22data%22%20%3A%20%7B%22symbol_list%22%3A%20%5B%7B%22code%22%3A%20%22USDJPY%22%7D%2C%7B%22code%22%3A%20%22GOLD%22%7D%5D%7D%7D'

resp1 = requests.get(url=test_url1, headers=test_headers)
time.sleep(1)
resp2 = requests.get(url=test_url2, headers=test_headers)
time.sleep(1)
resp3 = requests.get(url=test_url3, headers=test_headers)

# Decoded text returned by the request
text1 = resp1.text
print(text1)

text2 = resp2.text
print(text2)

text3 = resp3.text
print(text3)


code	请查看code列表,选择你要查询的code
kline_type	k线类型,1分钟K,2为5分钟K,3为15分钟K,4为30分钟K,5为小时K,6为2小时K,7为4小时K,8为日K,9为周K,10为月K
query_kline_num	查询多少根K线,最多1000根

\

二、技术指标实现的示例:

  1. 移动平均线(MA):移动平均线是平均收盘价在一定时间段内的移动平均值。
import pandas as pd

# 计算20日的简单移动平均线(SMA)

data['SMA20'] = data['close'].rolling(window=20).mean()
  1. 相对强弱指标(RSI):相对强弱指标衡量价格波动的相对强度,通常在0-100范围内。
# 计算14日的相对强弱指标(RSI)
delta = data['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
data['RSI'] = 100 - (100 / (1 + rs))

3. 布林带(Bollinger Bands):布林带由中轨线和上下轨线组成,用来衡量价格波动的程度。

# 计算20日均线和布林带
data['SMA20'] = data['close'].rolling(window=20).mean()
data['stddev'] = data['close'].rolling(window=20).std()
data['upper_band'] = data['SMA20'] + (data['stddev'] * 2)
data['lower_band'] = data['SMA20'] - (data['stddev'] * 2)

4. MACD指标:MACD(Moving Average Convergence Divergence)是由快速线(DIF)和慢速线(DEA)组成,用于衡量趋势的变化。

# 计算MACD
data['EMA12'] = data['close'].ewm(span=12, adjust=False).mean()
data['EMA26'] = data['close'].ewm(span=26, adjust=False).mean()
data['DIF'] = data['EMA12'] - data['EMA26']
data['DEA'] = data['DIF'].ewm(span=9, adjust=False).mean()
data['MACD'] = (data['DIF'] - data['DEA']) * 2


通过以上示例代码,可以对历史数据进行不同技术指标的计算,这些指标可以辅助量化回测中的策略制定和风险管理。在实际应用中,还可以根据需要调整参数,优化指标的计算方法,并结合回测结果进行策略调整和优化。



github:https://github.com/CTradeExchange/free-forex-market-data

申请免费token:https://alltick.co/register

官网:https://alltick.co

标签

技术指标量化回测