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