双均线策略——股票分钟
由iquant创建,最终由iquant 被浏览 59 用户
策略介绍
本策略基于日频双均线策略基础上,衍生至分钟频。涉及两条移动平均线——一条短期(快速)和一条长期(慢速)——并通过观察这两条线的交叉点来决定买入或卖出的时机。
策略流程
- 筛选条件:将5日平均收盘价作为短线,40日平均收盘价作为长线;短线上穿长线买入,长线下穿短线卖出。
- 策略回测:开盘买卖,回测时间为2024-05-20 09:00:00至2024-05-28 15:00:00。
策略实现
输入特征模块
- 将5日均线作为短线,
m_avg(close, 5) AS _mean_short
;40日均线作为长线,m_avg(close, 40) AS _mean_long
- 过滤条件中不做筛选,选择全市场股票数据
\
数据抽取模块
- 将数据抽取出来,在这当中设置起始时间为2024-05-13 09:00:00,结束时间为2024-05-21 15:15:00。
\
BigTrader模块
- 在
m4
”BigTrader“模块中,实现交易逻辑,依据发出信号进行买卖。 - K线处理函数
def bigquant_run(context, data):
import pandas as pd
from bigtrader.constant import Direction
from bigtrader.constant import OrderType
# 下一个交易日不是调仓日,则不生成信号
if not context.rebalance_period.is_signal_date(data.current_dt.date()):
return
# 从传入的数据 context.data 中读取今天的信号数据
today_df = context.data[context.data["date"] == data.current_dt.strftime("%Y-%m-%d %H:%M:%S")]
# 获取当日符合买入/卖出条件的股票列表
try:
buy_stock = (today_df[today_df['buy_signal'] == 1].iloc[:context.target_hold_count]['instrument']).tolist() # 当日符合买入条件的股票(20只)
except:
buy_stock=[]
try:
sell_stock = (today_df[today_df['sell_signal']==1]['instrument']).tolist() # 当日符合卖出条件的股票
except:
sell_stock = []
# 获取当前已持有股票
current_hold_instruments = set(context.get_account_positions().keys())
hold_num=len(current_hold_instruments)
# 需要卖出的股票:已有持仓中符合卖出条件的股票
sell_set = [i for i in current_hold_instruments if i in sell_stock]
# 卖出不在目标持有列表中的股票
for instrument in sell_set:
context.order_target_percent(instrument, 0)
hold_num-=1
# 需要买入的股票:没有持仓且符合买入条件的股票
buy_set = [i for i in buy_stock if i not in current_hold_instruments]
# 当日还允许买入建仓的股票数目
stock_can_buy_num = context.target_hold_count - hold_num
stock_to_buy_num = min(stock_can_buy_num,len(buy_set))
# 如果当天没有买入的股票,就返回
if stock_to_buy_num == 0:
return
# 记录已经买入的股票数量
buy_num = 0
# 买入目标持有列表中的股票
for instrument in buy_set:
if buy_num < stock_to_buy_num:
context.order_target_percent(instrument, context.target_percent_per_instrument)
buy_num += 1
策略代码
https://bigquant.com/codesharev2/9a5c86a8-14a8-464e-833f-456be753ce87
\