P-Signal 策略 策略

1.策略原理

这是基于 p 信号构建交易策略的示例。 p 信号表示 Kolmogorov 概率空间中 交易对的 D 帧系统状态的熵。

TradingView完整源码:

strategy("P-Signal Strategy:", precision = 3)
//
// Parameters and const of P-Signal.
//
nIntr = input(title = "Number of Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
bSmooth = input(title = "Smoothing", type = input.bool,  defval = true, group = "Parameters of observation.")
// 
// Horner's method for the error (Gauss) & P-Signal functions.
//
fErf(x) =>
    nT = 1.0/(1.0 + 0.5*abs(x))
    nAns = 1.0 - nT*exp(-x*x - 1.26551223 + 
     nT*( 1.00002368 + nT*( 0.37409196 + nT*( 0.09678418 + 
     nT*(-0.18628806 + nT*( 0.27886807 + nT*(-1.13520398 + 
     nT*( 1.48851587 + nT*(-0.82215223 + nT*( 0.17087277 ))))))))))
    x >= 0 ? nAns : -nAns

fPSignal(ser, int) => 
    nStDev = stdev(ser, int)
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)
//
// Signals on Set of Frames.
//

nPSignal = fPSignal(change(ohlc4), nIntr)
nPSignal := if (bSmooth) 
    sma(nPSignal, nIntr)
ndPSignal = sign(nPSignal[0] - nPSignal[1])
//
// P-Signal plotting. 
//
hline(+1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
hline(-1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
plot(nPSignal, color = nPSignal > nPSignal[1] ? color.green : color.red, style = plot.style_line)
//
// Strategy "A penny saved is a penny earnd." Caution with short!
//
strategy.entry("long", strategy.long, when = nPSignal < 0 and ndPSignal > 0)
strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)

图片alt


Python实现:
图片alt


2. 回测结果

K线15m 手续费万4% MA周期60 止盈30% 止损6.6%
2021年:
图片alt


苏慕白 发布于  2021-12-1 17:28 

11-29日 实盘策略 实盘

0. 前言

还在苦苦等待上涨趋势吗,还在忍耐一个月就交易几次,结果还是赔钱的状态吗?
现在不一样了!加入组合投资、做空趋势策略、震荡策略后

让你每天都能开仓,不管行情是上涨还是下跌,还是震荡不动
时时刻刻给您保证全天24小时都是在赔钱的状态

这就是实盘v3版本的魅力!
v3更新详情:https://sumubai.cc/post/43


往期实盘策略:

之前做的实盘并没有完全停止,只是改成小资金观察,10u一个策略 2333


以下回测手续费设置为:双边万5%


1. Bounce 反弹 [圣杯]

该策略为震荡策略,
顺大势逆小势,大势为多,那么每当在底部就开多,到高处平多。做空反之
亏损的原因为大势逆转

12-19日 BTCUSDT 更换为BounceV2版本,回撤从-26.57%降低到-23.51%%

地址:https://sumubai.cc/post/49


2. Ema Vol [已停止]

Ema与量加权价格线的交叉

地址:https://sumubai.cc/post/45


3. KDJ OTT [已停止]

将KDJ的K值进过OTT平滑实现过滤噪声
金叉开多 死叉开空

地址:https://sumubai.cc/post/47


4. Fib Vwap [赚了30%后停止,懒得跑]

计算一周的Vwap线,再计算上轨和下轨,博底反弹
因为价格做为阈值的原因,2021年的参数无法在2020年开仓
所以跑着玩

地址:https://sumubai.cc/post/40


5. Rsi Ma

Rsi值进行平滑处理
地址: https://sumubai.cc/post/60


苏慕白 发布于  2021-11-29 00:26 

组合投资仓位管理 笔记

在做虚拟币组合投资的情况下,因为虚拟币很大一部分都是同时涨跌
导致两个币种放一起组合投资回撤就会1+1=2
那么如何增加交易次数降低回撤呢?

这里可以尝试下限制持仓


1. 不限制持仓:

5个交易对进行回测
图片alt
最大回撤达到了40%


2. 限制所有持仓数量

把限制持仓数量调整为3
图片alt
可以看见回撤降低到了32%

但是同时也限制了盈利能力,无法五个交易对同时盈利


3. 浮亏持仓后停止开仓

我们再把持仓限制改成如果2个持仓都是浮亏的状态
那么就停止开仓

图片alt

最大回撤降低到了25%!,达到了我30%以内的要求,且盈利能力没有下降多少

通过观察,我们发现策略在盈利的状态下,5个交易对都是满仓同时盈利
如果亏损的状态,最多两个交易对一起亏损


苏慕白 发布于  2021-11-28 20:13 

参数寻优 笔记

筛选最近几个月表现好的参数
再从这些参数里选出最近几年表现好的参数
可以减少遗传算法运行时间


苏慕白 发布于  2021-11-28 16:37 

Bounce趋势反弹 震荡策略 策略

1. 策略原理

该策略为震荡策略,
顺大势逆小势,大势为多,那么每当在底部就开多,到高处平多。做空反之
亏损的原因为大势逆转

这个策略好处在于一套参数可以适应最近五年
并且因为是震荡策略,不用苦逼的等趋势

还是有优化的空间,这个出场太早,无法吃到趋势
然后这个策略组合投资会是什么情况呢?
睡了明天搞


2. 回测结果

图片alt
图片alt


苏慕白 发布于  2021-11-28 00:59 

KDJ OTT平滑策略 策略

1.策略原理

原理用K的值,再进行趋势过滤平滑,适合分钟K线,2m 5m 15m
计算太过复杂,实现也弄了挺久,直接放代码

图片alt
图片alt
图片alt

2. 回测结果

2021 5m 多空
图片alt


2020 5m 多
图片alt


2021 15m 多
图片alt

2020 15m 多
图片alt

2020年的回测没有参数调优


苏慕白 发布于  2021-11-27 20:38 

EMA交叉策略 V3 【动量Ema】 策略

1. 策略原理

Ema价格线 与 量加权Ema线交叉

量加权Ema线计算:
(过去N根 价格 * 量) 总和 除以 (过去N根 量) 总和
得出的值再计算Ema

核心代码:
图片alt
图片alt

2. 回测结果

ETHUSDT 15m 2020-2021两年
图片alt


苏慕白 发布于  2021-11-26 10:14 

ApiKey泄露 被对敲 笔记

今天群友的币安ApiKey泄露了,然后钱划转到现货
各种买卖垃圾币,把钱给转走

对方通过在垃圾币埋单,然后操控账户去买,这样他的垃圾币就卖了高价

这是一种不通过转账就能转走的方法(对敲)

应当注意ApiKey的隐秘,并且开启ApiKey的IP限制

图片alt
图片alt


苏慕白 发布于  2021-11-25 23:02 

实盘交易框架升级完毕 V3 笔记

上午肝了一上午让回测支持多策略同时回测
下午肝到半夜3点,肝了一天,实盘交易框架 V3版本终于诞生~

等财富自由再也不写代码了!!!!!吐了

实盘交易框架改成多策略多交易对共存了,可以搞组合投资了
支持钉钉通知,支持云端操作,支持多挂单监控

升级后的界面:
图片alt
图片alt


后台总控:
图片alt
图片alt







之前的版本:
图片alt


苏慕白 发布于  2021-11-24 02:41 

【扩展】VWAP+Fibo 反转策略 组合投资 策略

1.原理

之前我做的策略和回测都是单个交易对交易,那么我们可不可以多个交易对同时进行交易呢?

下面找了八个交易对,然后使用VWAP+Fibo 反转策略: https://sumubai.cc/post/40
一起交易

因为杠杠的存在,我们可以每个交易对都满仓
比如每个交易对买一份,共买8份,杠杠开8倍即可

单个交易对最大回撤是30%, 但是组合在一起后最大回撤没有出现30%+30%=60%的情况
因为这个交易对出现最大回撤了,但是其他交易对这个时间都赚钱了

唯一的风险就是所有交易对同时亏钱,这个就需要实盘运行时加一个风控管理
控制账户最大浮亏


2. 回测结果

2021年 不复利
图片alt


10月-12月 不复利
图片alt


复利回测就没必要看了,好几个亿


苏慕白 发布于  2021-11-23 14:58 

VWAP+Fibo斐波那契 反转策略 策略

1.策略原理

VWAP:交易量加权平均线,这里周期用的一周,也就是每周一早上八点重置
Fibo:斐波那契黄金分割线

根据VWAP线+Fibo比例,设置四条轨道,突破上轨后做空,突破下轨后做多
价格回到VWAP线平仓

图片alt

2.回测结果

PS:参数没有做最优化

ETH 今年回测结果:
图片alt

BTC 今年回测结果:
图片alt

3. 结语

交易次数低,收益也过少,不如趋势策略,不过胜在胜率高
并且全品种通用,期货之类也是

可以考虑加止盈止损调参


苏慕白 发布于  2021-11-22 11:14 

多缓空急 笔记

多缓空急,意思是趋势上涨缓慢,下跌迅速,跌完就没了
因为均线都有滞后性,那么会不会是均线类策略无法做空盈利的原因呢?

这里我觉得可以用止盈出场,或者用其他指标出场例如ATR


苏慕白 发布于  2021-11-21 00:28 

LGB机器学习预测数字货币涨跌 策略

1. 模型选择

LGB全名LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀。原理上它和GBDT及xgboot类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。

一开始选择的是LSTM,不过经过各种折腾,对我这个新手小白都不好解决欠拟合和过拟合
参考了以下文章后选择了LGB
文章:

  1. 送你一份年化100%+的策略
  2. LightGBM模型简单预测股票涨跌情况
  3. LightGBM(lgb)介绍

2. 数据来源

我这边选择的是爬取币安给出的2020年至今的几大主流币历史合约K线数据,周期为5m
主流币选择,看总市值排行选择出来的币:
'BTCUSDT',
'ETHUSDT',
'LTCUSDT',
'BNBUSDT',
'XMRUSDT',
'XRPUSDT',
'XTZUSDT',
'ADAUSDT',
'BCHUSDT',


3. 模型问题

LGB可以解决多分类问题、线性问题、二分类问题,我这边选择的是二分类问题
也就是下一根收盘价大于这一根收盘价标记为1,反之为0,让LGB去预测分类

代码:

features['label'] = ((features['next_close'] / features['Close'] - 1) > 0)
features['label'] = features['label'].astype('int')

4. 模型特征

在我每天尝试几个指标,尝试了几十个指标(说多了都是泪,每个指标Talib没有的得自己实现,实现后再慢慢调参):
图片alt

最后组合出来了以下做为特征:
'close_tf',
'vol_tf',
'high_tf',
'low_tf',
'hlc_tf',
'zhenfu',
'macd',
'adx',
'rsi',
'dpo',


5. 数据处理

处理就是把缺少数据的行给删除
我还做了以下尝试,效果都没优化:

  1. 删除涨幅小的数据,删除后预测效果更差了
  2. 删除inf值的数据,删除后预测效果更差了

LGB不像神经网络需要对异常值很敏感,所以就不处理其他的了

然后再划分出训练集和测试集
训练集:20200101-20210601
测试集:20210601-20211101
图片alt


6. 模型训练

代码:

import lightgbm as lgb
param = {
     'num_leaves': 31,
     'learning_rate': 0.06,
     "boosting": "gbdt",
     "metric": 'auc',
     'device': 'gpu',
     "verbosity": -1,
}

trn_data = lgb.Dataset(trn, label=trn_label)
val_data = lgb.Dataset(val, label=val_label)
num_round = 500
#clf = lgb.train(param, trn_data, num_round, valid_sets=[trn_data, val_data])
clf = lgb.train(param, trn_data, num_round)
#clf.save_model("v6_8-25.txt")
test_lgb = clf.predict(val, num_iteration=clf.best_iteration)
pd.DataFrame({
        'column': feature_col,
        'importance': clf.feature_importance(),
    }).sort_values(by='importance', ascending=False)

参数为第一篇文章所给的参数,在这里感谢下他的分享

训练结果:
图片alt

正确率为52.2%


6. 模型回测

模型训练完,那么就让他在测试集表现一下如何

回测设置:双边万4%,杠杠5,不复利

因为手续费的问题
这里设置的为预测下一根K线涨跌概率大于63%才开仓
要不然会赔的裤衩子都不剩,如果有手续费为0的账号那么55%概率就可以开仓了
退出条件为5m走完就平仓

回测结果:
图片alt
图片alt

7. 结语

我做量化以来踩过3个坑,其中这个机器学习就占了两个

  1. 我做了一个策略,回测今年每个月都有一次30%以上的大回撤并且2020年无法盈利,还是让它上线了,前面翻倍,后面本金腰斩
  2. 一开始做这个机器学习,测试集只用了80天,年初也无法盈利,导致过拟合本金腰斩
  3. 最后呢 机器学习终于做出来了,杠杠开太大25倍,本金腰斩,哈哈哈哈

唯一没赔钱的一次还是靠爬交易所公告,找即将上线的新币梭哈的

因为水平有限,我现在做量化暂时不用机器学习这种方式了
原因是我的水平只能做类似黑盒测试,无法了解他的运行原理,导致我无法再优化它

不要灰心,这个模型到现在11月20日也是盈利的状态,什么时候失效就不知道了

并且做机器学习的这几个月让我知道了很多指标的计算方式和使用方式
可以尝试根据自己对指标的认知做策略了,策略稳定盈利后再来剖析机器学习


最后给打算接触的一些建议:

  1. 不要尝试预测价格,否则最优结果永远是上一根K线收盘价,预测涨跌、收益率
  2. 初学者做这个很难分辨策略是不是过拟合了(大佬除外)
  3. 可以尝试预测高频,高频数据的拟合更加容易
  4. 也可以去试试NLP自然语言处理,爬各种动态新闻,先行一步入场,做庄家肚子里的蛔虫

苏慕白 发布于  2021-11-20 22:44 

【原生代码】Pyrhon3实现VWAP成交量加权平均线 指标

1. VWAP成交量加权平均线算法:

公式: (price * Volume) / Volume


详细解释:
当日累积((High+Low+Close) / 3 * Volume)
再除以当日累积交易量


当日是指每天早上8点重置累积的量(TradingView中是这样)
有需求可以自行看代码自行修改重置的时间


2. 代码实现:

impot time

"""字典转数组"""
def GetSrc(r, name):
    if name == 'o+h+l+c':
        src = [ (v['Open'] + v['High'] + v['Low'] + v['Close']) / 4 for v in r ]

    elif name == 'h+l+c':
        src = [ (v['High'] + v['Low'] + v['Close']) / 3 for v in r ]

    elif name == 'h+l':
        src = [ (v['High'] + v['Low']) / 2 for v in r ]

    else:
        src = [ v[name] for v in r ] if name else r

    return src

""" 时间戳转换"""
def GetTime(x, style="%H:%M:%S"):
    x = int(str(x)[:10])
    time_local = time.localtime(x)
    dt = time.strftime(style,time_local)
    return dt

"""成交量加权平均线"""
def VWAP(r, dayTime='08:00', name='h+l+c',):
    src = GetSrc(r, name)
    emas = [0 for i in range(len(src))]  # 创造一个和cps一样大小的集合

    srcVol,Vol = 0, 0
    for i in range(len(src)):
        if GetTime(r[i]['Time'], "%H:%M") == dayTime: #每天早上八点重置
            Vol = r[i]['Volume']
            srcVol = src[i] * r[i]['Volume']
        else:
            Vol += r[i]['Volume']
            srcVol += src[i] * r[i]['Volume']
        emas[i] = srcVol / Vol

    return emas

3. 变量r 结构图如下:

{
    {
        'Time': 0, #时间戳
        'Close': 0,
        'Open': 0,
        'High': 0,
        'Low': 0,
        'Volume': 0, #成交量
    }
}

4. 调用:

vwap = VWAP(r)

结果基本和TradingView一致


苏慕白 发布于  2021-11-20 20:46 

EMA交叉策略 V2 【金三角回调】 策略

1. 策略原理

V1版本: https://sumubai.cc/post/12

原理基本和第一个版本一致,只是增加了入场的两个条件:

  1. 增加一条超长线,例如EMA200,然后短线必须在超长线之上,之间的标准差一样做归一化阈值过滤,(短线可以选择不在中线之上)
  2. 形成回调后入场

回调例子:
图片alt
图片alt

回调代码描述:

df['bars_max'] = df['Close'].rolling(seting['bars']).max()
df['bars_min'] = df['Close'].rolling(seting['bars']).min()
bars = df['Low'][i] > df['bars_min'][i] and df['High'][i] < df['bars_max'][i]

不过经过我的测试增加一条超长线就行了,回调可有可无


出场:短线下穿中线和强止损,(如果开仓短线已经在中线下方了,那就下一次下穿)

2. 回测结果

2021年 15m周期 不使用回调入场 短线可在中线下方
图片alt


2021年 30m周期 使用回调入场 短线可在中线下方
图片alt

3.总结

虽然收益率没之前的好,但是开阔了思路(胜率也提高了),值得写一篇文章


苏慕白 发布于  2021-11-19 22:15