# 自己想的一些策略

By [KeepLearning](https://paragraph.com/@keeplearning-2) · 2024-01-01

---

1.

基于volumn的保温杯中性策略，效果比ILLQStd差一些。问了GPT，一般用于中性策略的因子，市值因子，跟流动性差不多，还有波动性因子。

2，不过测试了波动性因子，效果并不明显。

df\[factor\_name\] = df\['close'\].pct\_change().rolling(window=n).std()

流动性因子效果接近，还不错。

下面这个思路也不行。gpt也说波动性对未来趋势没法预测。

3.做多跌的多的，做空跌的少的

df\[factor\_name\] = df\['close'\].rolling(window=n, min\_periods=1).min() / df\['close'\]

也没有明显的特征。不是说跌的多的就能涨，涨的多的就能跌。币圈还是有很大的动量效应。

4.本想着用RSI来试试看，效果也不行。

df\[factor\_name\] = ta.momentum.RSIIndicator(df\['close'\], window=n).rsi()。就是说RSI越大，并不一定涨或者跌。

为什么只有邢大能找到这种流动性因子呢？

5，20240118

bwb3框架，纯多头，涨的最多的选10个币，跌的最多的选10个币，做成20个币的纯多头，

结果是归零。

df\_long\['PctChange\_168\_abs'\] = df\_long.groupby('candle\_begin\_time')\['PctChange\_168'\].transform(lambda x: x.abs()) df\_long = df\_long.loc\[ df\_long.groupby('candle\_begin\_time')\['PctChange\_168\_abs'\].nlargest(20).reset\_index()\['level\_1'\]\]

再试试选涨幅前20的币，纯多头。

df\_long = df\_long.loc\[ df\_long.groupby('candle\_begin\_time')\['PctChange\_168'\].nlargest(20).reset\_index()\['level\_1'\]\]

也归零。

是不是128参数太大了，7小时试试，争取赶上暴涨，然后跟一波。

df\_long = df\_long.loc\[ df\_long.groupby('candle\_begin\_time')\['PctChange\_1'\].nlargest(20).reset\_index()\['level\_1'\]\]

急速归零。

这方法不行，因子还是需要那种基本面或者有理论经济基础的，比如说netbuy，买的人多就能涨，小市值能涨的更多。不能是量化因子。因为量化因子随参数的波动很大。量化因子最好用来过滤。不要做主因子。

20240122

如果一根小时K涨了10%，我就买入。想着会不会有惯性原理。

回测py：

[guanxing.py](http://guanxing.py) 段落1

回测条件：

当一根K线涨幅超过0.1时，就在下一根K线开始卖出（注意时卖出，不是买入，相当于一根K线涨幅超过10%，认为涨的太多了，做空它），就持有一个小时后平仓。

spot数据\*\*：\*\*

币种大于0的百分比 72.53668763102725 平均利润 4346.7856497075945 大于0的利润总和,大于0币种的平均利润 2438275.423893083 7047.038797378852 小于0的利润总和,小于0币种的平均利润 -364858.6689825602 -2785.1806792561847

如果改成原来自己想的，超过10%，然后买入，看看下面的回测结果

币种大于0的百分比 22.431865828092242 平均利润 -4346.7856497075945 大于0的利润总和,大于0币种的平均利润 364858.66898256005 3409.8941026407483 小于0的利润总和,小于0币种的平均利润 -2438275.423893083 -6589.9335780894135

结果很差。所以自己想的策略不太靠谱。

相当于对于小时K，大涨后跌的概率会变大，所以就是做空。那么只能用swap来回测。

币种大于0的百分比 48.818897637795274 平均利润 -343.16174748844156 大于0的利润总和,大于0币种的平均利润 157288.59833490054 1268.4564381846817 小于0的利润总和,小于0币种的平均利润 -244451.6821969647 -1880.397555361267

竟然是负的平均利润。就是说如果纯在合约做，则是亏本的，但是加上现货，则是赚的。

真的是不让做的能赚钱，只有现货，无法做空。

那我如果在合约里做多呢？

币种大于0的百分比 41.34 平均利润 380.62 币种小于于0的百分比 48.82 大于0的利润总和,大于0币种的平均利润 244451.68 2328.11 小于0的利润总和,小于0币种的平均利润 -157288.6 -1055.63

那么结论是，合约里如果一根K线涨了10%以上，做多下一根K线，能赚钱。而在现货中，则需要做空才能赚钱，做多会亏的很惨。

现货的威力那么大么？不一定，因为现货时间早，可能跟历史的回测也有关系。swap和spot回测时间是不一样的。

难道是一个币种在只有现货的时候需要做空？而在有了合约以后则需要做多？

可以以合约上线的时间为分割点做一个统计。这种现象是由于下面哪种因素导致的呢？

1，合约上线时间晚，跟最近几年的行情有关系

2，现货不能做空。

那么就先看看第一种原因

[guanxing.py](http://guanxing.py) 段落2

第一种情况，将有合约的币种从上线合约开始作为分割点，分别计算只有spot的时段和上线swap以后的时间 都是涨10%，做空下一根K。

结果如下

spot大于0的个数 144

swap大于0的个数 114

总是是233个合约，相当于当一个币种上线了合约后，做空的收益会变差。只有spot的时候，做空利润为正的百分比61.8%，然后上线合约后48%。只有spot的平均利润 1769，上线swap后的平均利润-398.

那么如果我现在只统计只有spot的时候会是什么情况呢？

[guanxing.py](http://guanxing.py) 段落3

spot大于0的个数 332 总个数 470

平均值4200，总和1982183，

总交易次数 14297

大概算了下，每小时的交易次数 14297/24/365/4 = 0.4次。

每次交易的平均利润 = 1982183/14297=138刀/10000=1.38%。

然后其实杠杆那边是可以做空大部分的币的，可以试一试。就是回测没有考虑到手续费和杠杆借币的情况。先可以程序监控，然后手工做几天试试。看这个1.38%每次交易盈利，应该够手续费和杠杆借币的钱了。

---

*Originally published on [KeepLearning](https://paragraph.com/@keeplearning-2/5BNRuYTRrD6FFedkgx90)*
