BigQuant使用文档

双均线策略——股票分钟

由iquant创建,最终由iquant 被浏览 25 用户

策略介绍

本策略基于日频双均线策略基础上,衍生至分钟频。涉及两条移动平均线——一条短期(快速)和一条长期(慢速)——并通过观察这两条线的交叉点来决定买入或卖出的时机。

策略流程

  1. 筛选条件:将5日平均收盘价作为短线,40日平均收盘价作为长线;短线上穿长线买入,长线下穿短线卖出。
  2. 策略回测:开盘买卖,回测时间为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

\

标签

股票交易策略回测
{link}