股票:追涨之2进3打涨停板搏龙头

声明:本策略仅为示例策略,可根据自己需要自行修改策略逻辑

声明:本策略需要在AIStudio 3.0环境下运行

股票提取:提取昨天和前天均涨停(2连扳),股价在五天均线上方运行,市盈率5-30倍左右,近一个季度利润增速超10%

股票过滤:过滤ST,过滤北交所,过滤科创版,上市天数大于270天,股价小于30元

股票排序:按照成交量从大到小排序

买卖时间:开盘买入,收盘卖出,涨停不卖出

初始资金:100万

持仓票数:5

持仓周期:3天

加载包

In [64]:
## 加载包
import dai
import pandas as pd
import numpy as np
import math
import warnings
from datetime import datetime, timedelta

from bigmodule import M
from bigtrader.finance.commission import PerOrder

数据提取

In [65]:
## 设置开始和结束时间
sd = '2020-01-01'
ed = datetime.now().date().strftime("%Y-%m-%d")
In [66]:
## 提因子用的SQL
sql = f"""

SELECT 
    date, 
    instrument,

FROM cn_stock_factors

WHERE date BETWEEN DATE '{sd}' - INTERVAL 0 DAY AND '{ed}'
AND st_status = 0
AND trading_days > 270
AND list_sector NOT in (2, 4)

QUALIFY COLUMNS(*) IS NOT NULL
AND price_limit_status_1 = 3
AND price_limit_status_2 = 3
AND close > m_avg(close, 5)
AND close < 30
AND (5 < pe_ttm AND pe_ttm < 30)
AND net_profit_yoy_mrq > 0.1

ORDER BY date, volume DESC

"""

# 数据提取
data = dai.query(sql).df()
data
Out[66]:
date instrument
0 2020-01-13 601010.SH
1 2020-01-17 603839.SH
2 2020-01-20 603839.SH
3 2020-02-10 002599.SZ
4 2020-02-27 002599.SZ
... ... ...
352 2024-04-03 600097.SH
353 2024-04-03 605088.SH
354 2024-04-08 603967.SH
355 2024-04-10 600094.SH
356 2024-04-15 600815.SH

357 rows × 2 columns

回测引擎

In [67]:
def m_initialize_bigquant_run(context):
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
    context.holding_days = 3
    context.target_hold_count = 5
    context.target_percent_per_instrument = 1.0 / context.target_hold_count

def m_before_trading_start_bigquant_run(context, data):
    pass

def m_handle_tick_bigquant_run(context, tick):
    pass

def m_handle_data_bigquant_run(context, data):
    if context.trading_day_index % context.holding_days != 0:
        return
    
    current_date = data.current_dt.strftime("%Y-%m-%d")
    current_day_data = context.data[context.data["date"] == current_date]
    current_day_data = current_day_data.head(context.target_hold_count)

    target_hold_instruments = set(current_day_data["instrument"])
    current_hold_instruments = set(context.get_account_positions().keys())
    sell_set = current_hold_instruments - target_hold_instruments
    buy_set  = target_hold_instruments  - current_hold_instruments

    if len(target_hold_instruments) < context.target_hold_count and len(target_hold_instruments) != 0:
        weight = 1 / len(target_hold_instruments)
    else:
        weight = 1 / context.target_hold_count

    for instrument in sell_set:
        context.order_target_percent(instrument, 0)
    for instrument in target_hold_instruments:
        pl = dai.query(f"SELECT date, instrument, price_limit_status FROM cn_stock_factors WHERE date = '{current_date}' AND instrument = '{instrument}'").df()["price_limit_status"].iloc[0]
        if pl != 3:
            context.order_target_percent(instrument, weight)

def m_handle_trade_bigquant_run(context, trade):
    pass

def m_handle_order_bigquant_run(context, order):
    pass

def m_after_trading_bigquant_run(context, data):
    pass

m = M.bigtrader.v14(
    data=data,
    start_date='',
    end_date='',
    initialize=m_initialize_bigquant_run,
    before_trading_start=m_before_trading_start_bigquant_run,
    handle_tick=m_handle_tick_bigquant_run,
    handle_data=m_handle_data_bigquant_run,
    handle_trade=m_handle_trade_bigquant_run,
    handle_order=m_handle_order_bigquant_run,
    after_trading=m_after_trading_bigquant_run,
    capital_base=1000000,
    frequency='daily',
    product_type='股票',
    before_start_days=0,
    volume_limit=1,
    order_price_field_buy='open',
    order_price_field_sell='close',
    benchmark='000300.SH',
    plot_charts=True,
    disable_cache=False,
    debug=False,
    backtest_only=False,
    m_cached=False
)
BigTrader(高性能回测/交易)
收益:年化收益越大得分越高
抗风险:回撤越低得分越高
分散度:持仓和交易股票数越多得分越高,股票数超过10只后趋于稳定
稳定性:超额收益越高,波动越小,得分越高
模拟时长:模拟时间越长得分越高,超过100天后得分趋于稳定

+36.62%
收益率
  • 年化收益率+7.61%
  • 基准收益率-15.58%
  • 阿尔法0.12
  • 贝塔0.2
  • 夏普比率0.3
  • 胜率0.45
  • 盈亏比1.27
  • 收益波动率32.99%
  • 信息比率0.03
  • 最大回撤53.23%
评分规则
日期 时间 证券代码 证券名称 买/卖 数量 成交价 成交金额 平仓盈亏 交易费用
Loading... (need help?)
日期 证券代码 证券名称 数量 持仓均价 收盘价 持仓市值 持仓占比 收益
Loading... (need help?)
时间 级别 内容
Loading... (need help?)