【Python】 网格策略回测(日内高频数据)

策略思路:传统网格策略需要设定参数为网格间距、仓位权重。

相当于把收盘价分成数个网格、价格移动到下个网格则成交。

【Python】 网格策略回测(日内高频数据)_第1张图片

传统网格策略需提前设置格子数量、若价格走到无格子的位置时则不产生交易。

本文主要参考网格策略的思想,取消格子数量限制,选用日内Tick级别高频数据,专注于下单策略及成交情况。

引入必要库、读取数据(可以使用Tick级别、分钟级别,不支持日级别)

import pandas as pd
import warnings
import datetime
import numpy as np
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Kline, Line,Grid,Scatter

data = pd.read_csv('你的数据源.csv')
data.index = data['tradetime']

# 打上时间标签为后续记录做准备
data['time'] = data.index.map(lambda x: x.time())

初始化必要参数、可以将后续代码设置为函数

# 设置买买双边报单价格
sell_price = data['close'][0]*1.01
buy_price = data['close'][0]*0.99

# 记录每日最初股票持仓、现金持仓
s_inday = 5000
cash_inday = 1000000

# 记录实时股票持仓、
s = s_inday
c = cash_inday

# 初始化卖单买单记录
sell = []
buy = []

遍历所有数据,记录交易情况,网格间距为1%

# 最后一个时点要做平仓、循环时不遍历
for i in range(0, len(data)-1):
    # 假设时点的最高价>卖单报价,且有足够股票持仓则卖单成交      
    if ((data['high'][i]>sell_price) & (s_inday > 200)):

        # 记录成交时点、报单成交价格、成交数量
        sell.append([data.index[i], sell_price.round(2), 200])

        # 更新当日可出售股票持仓记录、全部股票持仓、现金持仓记录
        s_inday -= 200
        s -= 200
        c += 200*data['close'][i]*0.998

        # 重置双边报价
        buy_price = sell_price *0.99
        sell_price = sell_price*1.01

    # 假设时点的最低价<卖单报价,且有足够现金持仓则买单成交
    elif ((data['low'][i] data.close[i]*200)):

        # 记录成交时点、报单成交价格、成交数量
        buy.append([data.index[i], buy_price.round(2),200])

        # 更新当日可用于购买现金持仓记录、全部股票持仓、现金持仓记录
        cash_inday -= data.close[i]*200
        c -= data.close[i]*200
        s += 200

        # 重置双边报价
        sell_price = buy_price*1.01
        buy_price = buy_price*0.99

    # 每日15:00确定次日可用股票、及现金持仓 
    if data['time

你可能感兴趣的:(python,开发语言,pandas,金融)