卖出规则是用来过滤的,比如4个ETF(A,B,C,D),有1个ETF(A)符合卖出条件,且这个ETF动量排名是第1的,那么,按照代码规则,首先是排除掉A(卖出A),然后从剩下的3个ETF(B,C,D)中找排名第一的买入;
xuanyuan1hao
-
关于ETF轮动策略“排序规则”和“卖出规则” -
bt框架的常见问题——汇总我怀疑bt框架在偷数据;如果我将测试数据的2025-10-15日(包括这一天)及以后的数据给删除,测试的时候get_transactions()方法拿不到2025-10-14日的调仓信息;如果按照收盘价进行调仓换股的话,那么2025-10-14日的数据是有的,2025-10-14日的调仓数据应该是要输出的;我现在增加一条测试数据(日期为2025-10-15,其它OHLC的数据随便填写)这个时候回测就会出来2025-10-14日的调仓信息;按照这个逻辑,它只有后一天的数据出来的时候,前一日的调仓信息才能出来,所以它应该是次日开盘显示前一日的调仓信息的。
-
aitrader 开源系统 代码下载说明gitee上面的代码不全;我从github上面下载到一份完整的源码;github上面搜索aitrader就有了。
-
关于trend_score和ROC的计算问题我这里修改了一下,拟合直线的斜率改成了暴力两点 斜率
获取斜率(回归系数)
slope = model.coef_[0]
暴力首尾两点斜率
slope=(close_values[n-1]-close_values[0])/close_values[0]这样计算出来总收益为50.57812057000028
-
关于trend_score和ROC的计算问题from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_scoredef calculate_R2_with_slope(close_values,K):
n = len(close_values)
if n < K:
return np.nan
# 获取最新的close_values数据
close_values = close_values[-K:]
n = len(close_values)
# 取close_values窗口滑动向前的20天数据
x = np.arange(n).reshape(-1, 1)
model = LinearRegression()
model.fit(x, close_values)
# 获取斜率(回归系数)
slope = model.coef_[0]
#print(f"斜率(回归系数): {slope}")
X_test = np.array(x)
y_test= np.array(close_values)
# 获取拟合度(R-squared值)
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
return r2*slope@calc_by_symbol
def trend_score(se: pd.Series,d):
# 这里使用滑动窗口获取 斜率*拟合度
return se.rolling(window=d).apply(lambda x: calculate_R2_with_slope(x.values, d))我这里的计算方式是这样的,也回测不出来公开策略的60%多倍收益,只测试出来37倍收益