写一个简单聚宽期货量化交易双均线策略及源代码
时间: 2023-09-13 21:05:23 浏览: 453
### 回答1:
以下是一个简单的聚宽期货量化交易双均线策略及其源代码:
策略思路:
- 策略采用双均线交叉的方式进行买卖信号的产生。
- 当短期均线上穿长期均线时,产生买入信号。
- 当短期均线下穿长期均线时,产生卖出信号。
- 策略在每个交易日收盘价进行交易,不考虑交易成本和滑点。
源代码:
# 导入聚宽数据包
import jqdata
# 定义策略参数
fast_ma = 5 # 短期均线
slow_ma = 20 # 长期均线
# 初始化函数,设定基准等等
def initialize(context):
# 设定沪深300作为基准
set_benchmark('IF88.CCFX')
# 设定交易手续费,买入时万分之0.3,卖出时万分之0.3,最低交易费为5元
set_commission(PerTrade(buy_cost=0.00003, sell_cost=0.00003, min_cost=5))
# 设定策略参数
g.fast_ma = fast_ma
g.slow_ma = slow_ma
# 设定交易品种
g.security = 'IF88.CCFX'
# 设定每个交易日下单时间
set_option('use_real_price', True)
set_option('order_volume_ratio', 1)
set_option('order_price_field', 'close')
set_option('avoid_future_data', True)
run_daily(trade, time='14:55')
# 交易函数
def trade(context):
# 获取当前价格
current_price = get_close_price(g.security)
# 获取当前持仓
current_position = context.portfolio.positions[g.security]
# 获取短期均线和长期均线
fast_ma = get_ma(g.security, g.fast_ma, '1d', 'close')
slow_ma = get_ma(g.security, g.slow_ma, '1d', 'close')
# 判断交易信号
if fast_ma > slow_ma and current_position is None:
# 产生买入信号
order_value(g.security, context.portfolio.cash)
elif fast_ma < slow_ma and current_position is not None:
# 产生卖出信号
order_target(g.security, 0)
# 获取均线函数
def get_ma(security, ma_length, frequency, field):
# 获取历史价格
prices = attribute_history(security, ma_length+1, frequency, ['close'])
# 计算均线
ma = sum(prices['close']) / ma_length
return ma
# 获取收盘价函数
def get_close_price(security):
return get_price(security, end_date=context.current_dt, fields=['close'], count=1)[security][-1]
### 回答2:
以下是一个简单的聚宽期货量化交易双均线策略的源代码:
```python
def initialize(context):
# 设置回测的参数
# 设置交易标的为IF主力合约
set_benchmark('IF88.CCFX')
# 交易周期为日级别
set_frequency('1d')
# 设置手续费为万分之二
set_commission(Commission(0.0002, close_commission=False, open_commission=True))
# 设置策略参数
context.fast_ma_length = 5
context.slow_ma_length = 10
def handle_data(context, data):
# 获取历史价格数据
hist = history_bars(context.fast_ma_length + 1, '1d', 'close')
# 计算快速均线和慢速均线
fast_ma = np.mean(hist[:-1])
slow_ma = np.mean(hist)
# 获取当前持仓
position = context.portfolio.positions[symbol('IF88.CCFX')].quantity
# 判断交易信号
if fast_ma > slow_ma and position == 0:
# 金叉且没有持仓,买入
order(symbol('IF88.CCFX'), 1)
elif fast_ma < slow_ma and position > 0:
# 死叉且持仓,卖出
order(symbol('IF88.CCFX'), -1)
```
这个策略根据输入的参数设置快速均线和慢速均线的长度,然后在每个交易周期(这里设置为日级别)更新均线数据。如果快速均线上穿慢速均线且当前没有持仓,则以Market Order方式买入;如果快速均线下穿慢速均线且当前持有头寸,则以Market Order方式卖出。此外,还可以根据实际需求添加止盈止损等逻辑。
请注意,这只是一个简单的示例策略,可能需要根据实际情况进行修改和优化,以适应各种市场和交易品种。
### 回答3:
双均线策略是一种常用的量化交易策略,适用于期货交易。以下是一个简单的聚宽期货量化交易双均线策略及其源代码示例。
在这个双均线策略中,我们使用了两个指数移动平均线(MA),一个短期均线和一个长期均线。当短期均线从下方上穿长期均线时,我们以开盘价买入;当短期均线从上方下穿长期均线时,我们以开盘价卖出。
以下是实现该策略的示例源代码(Python):
```python
# 导入所需库
import jqdata
import numpy as np
# 初始化函数,设定要操作的股票、基准等等
def initialize(context):
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 设置交易参数
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0002, close_commission=0.001))
# 定义股票池
context.future = 'RB.SHF'
# 定义短期均线和长期均线的天数
context.short_period = 10
context.long_period = 30
# 每个交易日开盘前运行
def before_trading_start(context):
pass
# 交易时运行
def handle_data(context, data):
# 获取历史数据
hist = history_bars(context.future, context.long_period + 1, '1d', 'close')
# 计算短期均线和长期均线
short_ma = np.mean(hist[-context.short_period:])
long_ma = np.mean(hist[-context.long_period:])
# 获取当前持仓
positions = context.portfolio.positions
# 如果短期均线上穿长期均线,买入
if short_ma > long_ma and context.future not in positions:
# 获取当天开盘价
open_price = data[context.future].open
# 计算买入数量
buy_quantity = max(int(context.portfolio.cash / open_price), 1)
# 买入
order_buy(context.future, buy_quantity)
# 如果短期均线下穿长期均线,卖出
elif short_ma < long_ma and context.future in positions:
# 获取当天开盘价
open_price = data[context.future].open
# 卖出当前持仓
order_sell(context.future, positions[context.future].quantity)
```
使用以上代码示例可以在聚宽平台上进行期货量化交易,该策略根据短期均线和长期均线的交叉信号进行买卖操作。请注意,此示例代码仅供参考,具体交易策略需要根据实际情况进行进一步优化和测试。
阅读全文