优矿能运行的双均线策略代码
时间: 2023-10-10 16:06:35 浏览: 69
双均线法定投策略在股票市场的实现_python代码
以下是在优矿平台上运行的双均线策略代码:
```
# 导入函数库
import numpy as np
import talib
# 初始化函数,设定基准等等
def initialize(context):
# 设定基准
set_benchmark('000001.XSHG')
# 设定调仓周期
g.period = 20
# 获取股票池
g.stocks = get_index_stocks('000001.XSHG')
# 设置手续费与滑点
set_slippage(FixedSlippage(0.02))
set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
# 设置账户信息
g.initial_cash = context.portfolio.starting_cash
g.cash = g.initial_cash
g.max_value = g.initial_cash * 0.3
# 设置回测参数
g.days = 0
g.buy = False
g.sell = False
# 定义交易函数
def trade(context):
# 获取当前持仓
positions = context.portfolio.positions
# 卖出股票
for stock in positions:
if g.sell and context.current_dt.hour > 14:
order_target(stock, 0)
g.cash += positions[stock].total_amount * positions[stock].last_sale_price
g.sell = False
# 买入股票
if g.buy and context.current_dt.hour > 14:
# 获取股票池
stocks = g.stocks
# 获取行情数据
prices = history(20, '1d', 'close')[stocks]
# 计算短期均线和长期均线
ma5 = talib.MA(prices, timeperiod=5)[-1]
ma20 = talib.MA(prices, timeperiod=20)[-1]
# 产生买入信号
if ma5 > ma20:
# 计算每只股票的权重
weights = (1 / len(stocks)) * np.ones(len(stocks))
# 计算最大买入量
max_value = g.max_value
# 买入股票
for i in range(len(stocks)):
stock = stocks[i]
price = prices[stock][-1]
value = max_value * weights[i]
amount = value // price
cash = amount * price
if g.cash >= cash:
order_value(stock, value)
g.cash -= cash
g.buy = False
# 调整仓位
if g.days == g.period:
g.sell = True
g.buy = True
g.days = 0
else:
g.days += 1
# 处理数据函数
def handle_data(context, data):
trade(context)
# 运行回测
run_backtest(strategy_name='dual_moving_average_strategy',
start_date='2010-01-01',
end_date='2021-01-01',
initialize=initialize,
handle_data=handle_data,
order_price_field='close',
capital_base=g.initial_cash,
benchmark='000001.XSHG')
```
在上述代码中,我们首先使用了talib库计算了5日均线和20日均线,并根据两者的交叉产生买卖信号。然后,我们定义了交易函数,根据买卖信号进行买卖操作。最后,我们运行了回测,设置了回测起止日期、初始资金、交易费用等参数。在回测过程中,我们每20天进行一次调仓。
阅读全文