python 网格交易源码下载_GitHub - xiongyixiaoyang/grid-trading: 网格交易(期货) ,基于网格交易方法的交易策略...
# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
import numpy as np
import pandas as pd
from gm.api import *
'''
本策略首先計算了過去300個價格數據的均值和標準差
并根據均值加減1和2個標準差得到網格的區間分界線,
并分別配以0.3和0.5的倉位權重
然后根據價格所在的區間來配置倉位(+/-40為上下界,無實際意義):
(-40,-3],(-3,-2],(-2,2],(2,3],(3,40](具體價格等于均值+數字倍標準差)
[-0.5, -0.3, 0.0, 0.3, 0.5](資金比例,此處負號表示開空倉)
回測數據為:SHFE.rb1801的1min數據
回測時間為:2017-07-01 08:00:00到2017-10-01 16:00:00
'''
def init(context):
context.symbol = 'SHFE.rb1801'
# 訂閱SHFE.rb1801, bar頻率為1min
subscribe(symbols=context.symbol, frequency='60s')
# 獲取過去300個價格數據
timeseries = history_n(symbol=context.symbol, frequency='60s', count=300, fields='close', fill_missing='Last',
end_time='2017-07-01 08:00:00', df=True)['close'].values
# 獲取網格區間分界線
context.band = np.mean(timeseries) + np.array([-40, -3, -2, 2, 3, 40]) * np.std(timeseries)
# 設置網格的倉位
context.weight = [0.5, 0.3, 0.0, 0.3, 0.5]
def on_bar(context, bars):
bar = bars[0]
# 根據價格落在(-40,-3],(-3,-2],(-2,2],(2,3],(3,40]的區間范圍來獲取最新收盤價所在的價格區間
grid = pd.cut([bar.close], context.band, labels=[0, 1, 2, 3, 4])[0]
# 獲取多倉倉位
position_long = context.account().position(symbol=context.symbol, side=PositionSide_Long)
# 獲取空倉倉位
position_short = context.account().position(symbol=context.symbol, side=PositionSide_Short)
# 若無倉位且價格突破則按照設置好的區間開倉
if not position_long and not position_short and grid != 2:
# 大于3為在中間網格的上方,做多
if grid >= 3:
order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
position_side=PositionSide_Long)
print(context.symbol, '以市價單開多倉到倉位', context.weight[grid])
if grid <= 1:
order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
position_side=PositionSide_Short)
print(context.symbol, '以市價單開空倉到倉位', context.weight[grid])
# 持有多倉的處理
elif position_long:
if grid >= 3:
order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
position_side=PositionSide_Long)
print(context.symbol, '以市價單調多倉到倉位', context.weight[grid])
# 等于2為在中間網格,平倉
elif grid == 2:
order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
position_side=PositionSide_Long)
print(context.symbol, '以市價單全平多倉')
# 小于1為在中間網格的下方,做空
elif grid <= 1:
order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
position_side=PositionSide_Long)
print(context.symbol, '以市價單全平多倉')
order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
position_side=PositionSide_Short)
print(context.symbol, '以市價單開空倉到倉位', context.weight[grid])
# 持有空倉的處理
elif position_short:
# 小于1為在中間網格的下方,做空
if grid <= 1:
order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
position_side=PositionSide_Short)
print(context.symbol, '以市價單調空倉到倉位', context.weight[grid])
# 等于2為在中間網格,平倉
elif grid == 2:
order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
position_side=PositionSide_Short)
print(context.symbol, '以市價單全平空倉')
# 大于3為在中間網格的上方,做多
elif grid >= 3:
order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,
position_side=PositionSide_Short)
print(context.symbol, '以市價單全平空倉')
order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
position_side=PositionSide_Long)
print(context.symbol, '以市價單開多倉到倉位', context.weight[grid])
if __name__ == '__main__':
'''
strategy_id策略ID,由系統生成
filename文件名,請與本文件名保持一致
mode實時模式:MODE_LIVE回測模式:MODE_BACKTEST
token綁定計算機的ID,可在系統設置-密鑰管理中生成
backtest_start_time回測開始時間
backtest_end_time回測結束時間
backtest_adjust股票復權方式不復權:ADJUST_NONE前復權:ADJUST_PREV后復權:ADJUST_POST
backtest_initial_cash回測初始資金
backtest_commission_ratio回測傭金比例
backtest_slippage_ratio回測滑點比例
'''
run(strategy_id='strategy_id',
filename='main.py',
mode=MODE_BACKTEST,
token='token_id',
backtest_start_time='2017-07-01 08:00:00',
backtest_end_time='2017-10-01 16:00:00',
backtest_adjust=ADJUST_PREV,
backtest_initial_cash=10000000,
backtest_commission_ratio=0.0001,
backtest_slippage_ratio=0.0001)
總結
以上是生活随笔為你收集整理的python 网格交易源码下载_GitHub - xiongyixiaoyang/grid-trading: 网格交易(期货) ,基于网格交易方法的交易策略...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 迷侠剧情介绍
- 下一篇: 地下城与勇士格斗家转什么职好?
