# BWB3实盘代码修改 **Published by:** [KeepLearning](https://paragraph.com/@keeplearning-2/) **Published on:** 2024-01-31 **URL:** https://paragraph.com/@keeplearning-2/bwb3-3 ## Content 1, 现象:空头偶尔会出现19个,默认选择20个空头 打印log发现是由于经过 transfer_swap函数后,币种名称出现了空的现象。这个函数的作用是用合约的symbol来确定现货的symbol,用的转换关系是 df_swap['symbol_spot'] = df_swap['symbol'].map(lambda x: x.split('1000')[1] if '1000' in x else special_symbol_dict.get(x.replace('USDT', ''), x.replace('USDT', ''))+'USDT') special_symbol_dict.get(x.replace('USDT', ''), x.replace('USDT', '')) 的作用是从 special_symbol_dict 中获取键为 x.replace('USDT', '') 对应的值,如果该键不存在,则返回 x.replace('USDT', '')。这个操作实际上是在尝试查找 x.replace('USDT', '') 在字典中的映射关系,如果有映射关系就返回映射值,否则返回原始的 x.replace('USDT', '')。 如果合约symbol包含1000的字符串,则取[1]第一个字符作为输出 如果symbol不包含1000的字符串,则判断symbol.replace('USDT', '')是否在special_symbol_dict中,如果在,则返回对应的value值,如果不在special_symbol_dict中,则返回symbol.replace('USDT', '')。 两个如果最后都加上USDT。 一个新的币种 现货和合约symbol都是1000sats,如果还用上面的逻辑,则会出现问题,导致从合约倒推spot名称出来是satsusdt,导致在现货中找不到这个现货,因为现货也是1000satsusdt。 修改如下 df_swap['symbol_spot'] = df_swap['symbol'].map(lambda x: '1000SATSUSDT' if x == '1000SATSUSDT' else (x.split('1000')[1] if '1000' in x else special_symbol_dict.get(x.replace('USDT', ''), x.replace('USDT', ''))+'USDT')) 对1000SATSUSDT做了特殊处理,其实应该是把1000SATSUSDT加入到special_symbol_dict,然后先判断是否在special_symbol_dict里,再判断是否包含1000,先不搞了。关系不大。 可以在网站上看看历史的BUG修正 2, 实盘与回测有些选币对不上的问题。 应该是由于提前获取K线计算的因子排序不一样,所以会有差异。但是这个差异还是比较大,大概看了下,20个币种里有7个不一样。再对了另外一个时间点,3个不一样的。正常么?不好确认。那么我将选币个数调整到30个,看看回测效果会不会有很大不同?如果回测结果差异不大,那么就不管它了。如果差异大,则需要继续定位研究。回测结果和选20个币还是有差异的。不过选30个本来就会导致收益降低,不一定是由于这个选币不一直引起的。发现一个好的思路,如果我取数据的时候,把最新的一根K线去掉,也就是去掉最近的K线,然后计算因子值,回测的时候也这么做,那么选币应该是一样了吧? 修改成以下方式: df[factor_name] = df[factor_name].shift(2) 回测效果如下,和df[factor_name] = df[factor_name].shift(1)差的有点多。 ## Publication Information - [KeepLearning](https://paragraph.com/@keeplearning-2/): Publication homepage - [All Posts](https://paragraph.com/@keeplearning-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@keeplearning-2): Subscribe to updates