写一个适合joinquant的量化交易策略。策略:当mancd在零轴以下死叉且股价高于100均线时买入,金叉卖出。
时间: 2024-03-11 18:48:23 浏览: 168
好的,我理解了你的要求。以下是适合joinquant的量化交易策略,实现了当mancd在零轴以下死叉且股价高于100均线时买入,金叉卖出的操作:
```python
# 导入所需模块
import talib
import numpy as np
# 初始化策略
def initialize(context):
# 设置交易标的
context.stock = '000001.XSHE'
# 设置买卖手数
context.amount = 100
# 设置股票池
g.stocks = [context.stock]
# 设置交易周期
g.period = 30
# 定义计算mancd的函数
def mancd(context):
# 获取股票价格数据
prices = history(g.period, '1d', 'close')[context.stock]
# 计算macd指标
macd, signal, hist = talib.MACD(prices)
# 计算mancd指标
mancd, signal, hist = talib.MACDEXT(prices, fastperiod=12, slowperiod=26, signalperiod=9)
# 返回计算结果
return mancd, hist
# 定义计算100日均线的函数
def ma(context):
# 获取股票价格数据
prices = history(100, '1d', 'close')[context.stock]
# 计算100日均线
ma = np.mean(prices)
# 返回计算结果
return ma
# 定义买入函数
def buy(context):
# 获取当前持仓
position = context.portfolio.positions[context.stock]
# 计算买入数量
amount = context.amount
# 如果持仓为空,则买入
if not position:
order_value(context.stock, amount * context.price)
# 如果持仓不为空,则加仓
else:
order(context.stock, amount)
# 定义卖出函数
def sell(context):
# 获取当前持仓
position = context.portfolio.positions[context.stock]
# 如果持仓不为空,则卖出
if position:
order_target_value(context.stock, 0)
# 定义每日交易逻辑
def handle_data(context, data):
# 计算mancd指标
mancd, hist = mancd(context)
# 计算100日均线
ma = ma(context)
# 获取当前股票价格
context.price = data[context.stock].close
# 如果mancd在零轴以下死叉且股价高于100均线,则买入
if mancd[-1] < 0 and hist[-1] < 0 and mancd[-1] < mancd[-2] and context.price > ma:
buy(context)
# 如果mancd在零轴以上金叉,则卖出
elif mancd[-1] > 0 and hist[-1] > 0 and mancd[-1] > mancd[-2]:
sell(context)
```
该策略在每日交易中计算mancd指标和100日均线,如果mancd在零轴以下死叉且股价高于100均线,则买入;如果mancd在零轴以上金叉,则卖出。
阅读全文