
等级: 新手上路
- 注册:
- 2025-5-21
- 曾用名:
|
请专家帮忙看看为什么我的策略运行不了,编译显示正常,回测没有数据,也运行不了,
我的量化策略为:1、 选股范围:所有在上交所和深交所上市的可正常交易的股票且上一交易日首次涨停的个股。 2、 买入信号:今天开盘价涨3.5%至9.5%之间的股票,在开盘后半个小时之内股价触及涨停的一瞬间以涨停价买入10万元人民币,若持仓现金不足10万元则不操作。 3、 卖出信号:除了今天买入的股票,其余持仓股票在今天开盘1小时后未涨停的以市价卖出,已经涨停的股票则持仓不动;编写的代码是:
// 系统参数
INPUT:
BuyAmount(100000,1000,1000000,1000); // 修正参数格式
INPUT:
BuyWindow(30,1,60,1);
INPUT:
SellHour(1,0.5,4,0.5);
VARIABLE:
upper_price=0, // 当日涨停价
pre_upper=0, // 前一日涨停价
first_limit=false, // 是否首次涨停
can_buy=false, // 可买入标记
today_buy=false; // 当日买入标记
// 基础校验
IF MARKETLABEL !='SZ' AND MARKETLABEL !='SH' THEN EXIT; // 排除非股票市场品种
IF STRFIND(STKNAME,'ST',1) OR STRFIND(STKNAME,'退',1) THEN EXIT;
// 计算涨停价(修正函数用法)
last_day_c:=CALLSTOCK(STKLABEL, vtCLOSE, 6, -1);
upper_price = round((0.1+1)*round(last_day_c/0.01))/100;//默认按照10% 计算涨停价
pre_upper = REF(upper_price, 1);
// 首次涨停判断(精确算法)
first_limit = BARSLAST(C>=upper_price)=1
AND SUM(C>=upper_price,20)=1
AND pre_upper>0
AND C[1]>=upper_price-0.004; // 容差处理
// 重置每日状态
IF DATE<>REF(DATE,1) THEN BEGIN
today_buy = false;
END;
// 买入条件(时间精确转换)
can_buy = first_limit
AND O>=REF(C,1)*1.035
AND O<=REF(C,1)*1.095
AND TIMETOT0(DYNAINFO(207)) < TIMETOT0(93000)+BuyWindow*60 // BuyWindow 转换为秒数
AND H>=upper_price
AND TACCOUNT(6)>=BuyAmount
AND NOT(today_buy);
// 执行买入
IF can_buy THEN BEGIN
buy_vol:= INTPART(BuyAmount/(upper_price*100));
IF buy_vol>0 THEN BEGIN
TBUY(1,buy_vol,LMT,upper_price);
today_buy = true;
DEBUGFILE('C:\trade.log','BUY|'&STKLABEL&'|'&NUMTOSTR(upper_price,0)&'|'&NUMTOSTR(buy_vol,0),0);
END;
END;
// 持仓管理
IF TBUYHOLDINGEX('','',0)>0 THEN BEGIN
hold_bars: = TENTERBARS(1); // 使用持仓周期函数
// 非当日仓位处理
IF hold_bars>0 THEN BEGIN
// 卖出条件(时间转换优化)
IF TIMETOT0(DYNAINFO(207)) < TIMETOT0(93000)+SellHour*60 THEN BEGIN
IF DYNAINFO(7) < upper_price THEN BEGIN
TSELL(1,0,MKT);
DEBUGFILE('C:\trade.log','SELL|'&STKLABEL&'|'&NUMTOSTR(DYNAINFO(7),0),0);
END;
END;
END;
END;
// 风控设置
if REMAININGTIME(CLOSETIME(0))<=30 then TCANCELEX(1,0,'',STKLABEL);// 收盘前撤单
|
|