# 量化選股策略完整分析與優化建議
## 策略整體架構分析
這個量化交易策略主要由以下幾個核心部分組成:
1. **初始化設置**:配置基準指數、交易參數和全局變量
2. **選股邏輯**:通過財務指標篩選優質股票
3. **股票過濾**:排除新股和停牌股
4. **交易執行**:定期調倉和資金分配
## 代碼詳細解析與修正建議
### 1. 初始化函數 (initialize)
```python
def initialize(context):
? ? # 基準設置為滬深300指數(修正代碼)
? ? set_benchmark('000300.XSHG') ?# 原代碼有大小寫錯誤
? ??
? ? # 啟用真實價格模式
? ? set_option('use_real_price', True)
? ??
? ? # 設置成交量比例
? ? set_option('order_volume_ratio', 1)
? ??
? ? # 設置交易成本(修正格式)
? ? set_order_cost(OrderCost(
? ? ? ? open_tax=0,
? ? ? ? close_tax=0.001,
? ? ? ? open_commission=0.0003,
? ? ? ? close_commission=0.0003,
? ? ? ? close_today_commission=0,
? ? ? ? min_commission=5
? ? ), type="stock") ?# 修正type參數
? ??
? ? # 全局變量設置
? ? g.stocknum = 20 ? ? # 持倉股票數量
? ? g.days = 20 ? ? ? ? # 調倉周期(天)
? ? g.refresh_rate = 100 # 刷新率
```
**修正建議**:
1. 指數代碼統一為大寫
2. 補全交易成本參數
3. 建議增加日志記錄功能
### 2. 選股查詢 (query)
```python
q = query(
? ? indicator.code,
? ? valuation.market_cap, ?# 修正為market_cap
? ? indicator.roe,
? ? indicator.gross_profit_margin
).filter(
? ? valuation.market_cap > 50, ? ? ? ? ? ? ?# 市值>50億
? ? valuation.circulation_ratio > 0.95, ? ? ?# 流通比例>95%
? ? indicator.gross_profit_margin > 20, ? ? # 毛利率>20%
? ? indicator.roe > 20 ? ? ? ? ? ? ? ? ? ? ?# ROE>20%
).order_by(
? ? valuation.market_cap.desc() ? ? ? ? ? ? # 按市值降序
).limit(100) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 限制100只
```
**修正建議**:
1. 統一使用market_cap而非capitalization
2. 流通比例字段修正為circulation_ratio
3. 增加注釋說明各篩選條件的商業邏輯
### 3. 股票過濾函數
```python
def delete_stock(stocks, beginDate, n=750):
? ? """
? ? 排除上市不足n天的股票
? ? :param stocks: 待篩選股票列表
? ? :param beginDate: 當前日期
? ? :param n: 最小上市天數(默認750天)
? ? :return: 符合條件的股票列表
? ? """
? ? stockList = []
? ? for stock in stocks:
? ? ? ? start_date = get_security_info(stock).start_date
? ? ? ? if start_date < (beginDate - timedelta(days=n)).date():
? ? ? ? ? ? stockList.append(stock)
? ? return stockList
def filter_paused_stock(stock_list):
? ? """
? ? 過濾停牌股票
? ? :param stock_list: 待篩選股票列表
? ? :return: 正常交易的股票列表
? ? """
? ? current_data = get_current_data() ?# 修正函數名
? ? return [stock for stock in stock_list if not current_data[stock].paused]
```
**修正建議**:
1. 修正get_current_date()為get_current_data()
2. 增加函數文檔字符串
3. 統一上市天數參數為750天(3年)
### 4. 交易執行函數
```python
def trade(context):
? ? if g.days % g.refresh_rate == 0:
? ? ? ? # 獲取目標股票列表
? ? ? ? stockList = check_stocks(context)
? ? ? ??
? ? ? ? # 獲取當前持倉
? ? ? ? sell_list = list(context.portfolio.positions.keys())
? ? ? ??
? ? ? ? # 確定需要賣出的股票(持倉但不在目標列表中的)
? ? ? ? sells = list(set(sell_list).difference(set(stockList)))
? ? ? ??
? ? ? ? # 執行賣出
? ? ? ? for stock in sells:
? ? ? ? ? ? order_target_value(stock, 0)
? ? ? ??
? ? ? ? # 資金分配邏輯
? ? ? ? if len(context.portfolio.positions) < g.stocknum:
? ? ? ? ? ? num = g.stocknum - len(context.portfolio.positions)
? ? ? ? ? ? cash_per_stock = context.portfolio.total_value / g.stocknum
? ? ? ? ? ? for stock in stockList[:num]:
? ? ? ? ? ? ? ? if stock not in context.portfolio.positions:
? ? ? ? ? ? ? ? ? ? order_target_value(stock, cash_per_stock)
```
**優化建議**:
1. 增加風險控制邏輯(單只股票最大倉位限制)
2. 考慮交易滑點設置
3. 增加交易日志記錄
## 完整策略邏輯流程圖
1. 初始化設置 → 2. 定期檢查調倉條件 → 3. 執行財務數據查詢 → 4. 過濾新股和停牌股 → 5. 確定買賣清單 → 6. 執行交易 → 7. 等待下一周期
## 策略優化方向
1. **風險控制增強**:
? ?- 增加最大回撤控制
? ?- 設置單行業最大暴露比例
? ?- 加入黑名單機制
2. **選股指標擴展**:
? ?```python
? ?.filter(
? ? ? ?valuation.pe_ratio < 30, ? ? ? ? ? ? ?# 市盈率<30
? ? ? ?indicator.debt_to_assets < 0.6, ? ? ? # 資產負債率<60%
? ? ? ?indicator.dividend_yield > 0.01 ? ? ? # 股息率>1%
? ?)
? ?```
3. **交易執行優化**:
? ?- 引入VWAP/TWAP算法交易
? ?- 增加止盈止損邏輯
? ?- 考慮市場狀態判斷(牛市/熊市不同參數)
4. **績效分析**:
? ?- 增加夏普率計算
? ?- 跟蹤信息比率
? ?- 分析行業分布
這個策略框架已經具備了價值投資的基本要素,通過上述優化可以進一步提升策略的穩定性和風險調整后收益。建議在實際應用前進行充分的回測和模擬交易驗證。
9.4規模因子
總市值
價值因子
總資產凈利率