策略代码

定义

一个完整的交易实例代码

描述

初始化:设置沪深300为基准,并且加载沪深300下所有的股票,并设置每只股票的设续费和滑点,并以分钟来运行。
选股:筛选出非ST,非停牌,10日和20日涨幅超过0的股票,选股时初始化InitChooseStock方法,请参考:InitChooseStock
运行数据:
1.在每天9点30分开始选股,选出来的股票会放到SymbolPoolEveryDay对象中,该对象结构为List<string>股票代码集合。
2.在每天10点10分的时候用10000元去购买选出股票中的第一支股票

示例

using QuantConnect.Algorithm.LocalData.CoreUtils;
using QuantConnect.Data;
using static Chinahoo.Model.Quant.RuntimeSelectionStock;
using System.Collections.Generic;
using QuantConnect.Algorithm.LocalData.DataModel.FillModel;
using System.Linq;

public class Test : AlgorithmLogic
{
    /// <summary>
    /// 初始化算法逻辑,设置基准指数和股票数据
    /// </summary>
    public override void Initialize()
    {
        //设置基准 300
        var index300 = AddIndex("000300.XSHG", Resolution.Minute);
        SetBenchmark(index300);
        ///加载沪深300指数下的股票
        FillStocks(["000300.XSHG"], (symbol) =>
        {
            symbol.FeeModel = new CustomFeeService();//手续费
            symbol.SlippageModel = new SlippageModel(0.02m);//滑点
        }, Resolution.Minute);//分钟频率

    }
    /// <summary>
    /// 根据指数选股
    /// </summary>
    /// <param name="code"></param>
    private void FillterStocks(string code, Slice slice)
    {
        //选股
        List<ChooseStockResultModel> resp = InitChooseStock([code], 1)
                                     .AddChooseStockMethod(StockSelectionEnum.NoSt, 0) //非ST股票
                                     .AddChooseStockMethod(StockSelectionEnum.NoPaused, 1) //非停牌股票
                                     .AddChooseStockMethod(StockSelectionEnum.StockClose, 20, [new List<int> { 10, 20 }])// 获取10天前收盘价和20天前收盘价
                                     .RunChooseStock();
       
    }

    /// <summary>
    /// 每天数据到达时调用
    /// </summary>
    /// <param name="slice"></param>
    public override void OnData(Slice slice)
    {
        if (Time.Hour == 9 && Time.Minute == 30)
        {
            //9点30分开始选股
            FillterStocks("000300.XSHG", slice);
        }
        // 10点以后 整点10分钟检测下涨停票
        if (Time.Hour >= 10 && Time.Minute == 10)
        {
            // 从slice数据中获取所有的Symbol
            var list = slice.AllData.Select(o => o.Symbol);
            // 获取出选出来的股票中的第一支股票的Symbol
            var symbol = list.FirstOrDefault(o => o.Value == SymbolPoolEveryDay[0]);
            // 购买这支股票,买入 10000元的
            Buy(symbol, 10000);
        }
    }
}