推荐阅读《以交易为生》 笔记

一名副业研究心理学的交易员写的一本书
朋友推荐我去看的,的确是一本好书!

图片alt
图片alt
图片alt


苏慕白 发布于  2021-11-11 10:49 

【Supertrend】ATR通道突破的策略 策略

0.前言

市场是随时变化且无情的
回测只能做为参考,不代表此策略会一直有效

1. 策略原理

ATR:真实波动指数
前一根收盘价突破ATR通道 则做多

此策略因为是价格突破,相比上一个EMA策略交易次数会减少很多

2. 回测设置

虚拟币:BTCUSDT、ETHUSDT (参数根据遗传算法得出)
股票:茅台、五粮液 (参数使用默认参数)
手续费:双边万4%

根据我的经验,趋势策略更适合跑ETHUSDT

3. 回测结果

BTCUSDT:
图片alt
图片alt


ETHUSDT:
图片alt
图片alt
图片alt
图片alt


茅台:
图片alt


五粮液:
图片alt


苏慕白 发布于  2021-11-2 19:06 

【原生代码】Python3 实现ATR、MA、EMA、SMMA、RMA、TEMA指标的计算 指标

1. 参数说明

r:K线数据,字典或者数组
days:指标长度
name:使用哪一个字段,填'Close'即可,如果不填则代表r是数组而不是字典

变量r 字典结构图如下:

{
    {
        'Time': 0,
        'Close': 0,
        'Open': 0,
        'High': 0,
        'Low': 0,
        'Volume': 0,
    }
}

2. ATR 真实波动幅度 (需配合下面的指标)

def ATR(r, days, ma='sma'):
    tr = [0]
    for i in range(len(r)):
        if i:
            tr.append(max(r[i]['High']-r[i]['Low'], abs(r[i]['High'] - r[i-1]['Close']), abs(r[i]['Low'] - r[i-1]['Close'])))

    if ma == 'rma':
        return RMA(tr, days)

    if ma == 'ema':
        return EMA(tr, days)

    return SMA(tr, days)

3. MA 移动平均线

def SMA(r, days, name=0):
    cps = [ v[name] for v in r ] if name else r
    emas = cps.copy()  # 创造一个和cps一样大小的集合

    for i in range(len(cps)):
        if i < days-1:
            emas[i] = 0
        else:
            ma = 0
            for i2 in range(i-days,i):
                i2 += 1
                ma += cps[i2]
            emas[i] = ma / days
    return emas

4. EMA 指数移动平均线

def EMA(r, days, name=0):

    if name == 'o+h+l+c':
        cps = [ (v['Open'] + v['High'] + v['Low'] + v['Close']) / 4 for v in r ]

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

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

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

    emas = [0 for i in range(len(cps))]  # 创造一个和cps一样大小的集合
    for i in range(len(cps)):
        if i == 0:
            emas[i] = cps[i]
        if i > 0:
            emas[i] = ((days - 1) * emas[i - 1] + 2 * cps[i]) / (days + 1)

    emas = [v for v in emas]
    return emas

5. SMMA 平滑移动平均线

def SMMA(r, days, name=0):
    cps = [ v[name] for v in r ] if name else r
    emas = [0 for i in range(len(cps))]  # 创造一个和cps一样大小的集合
    ma = 0
    for i in range(len(cps)):
        if i < days:
            ma += cps[i]
            emas[i] = 0

        else:
            if emas[i-1] == 0:
                emas[i] = ma / days
            else:
                emas[i] = (emas[i-1] * (days - 1) + cps[i]) / days

    emas = [v for v in emas]
    return emas

6. RMA,RSI中使用的移动平均线,它是指数加权移动平均线

def RMA(r, days, name=0):
    cps = [ v[name] for v in r ] if name else r
    rmas = [0 for i in range(len(cps))]  # 创造一个和cps一样大小的集合
    alpha = 1 / days

    for i in range(len(cps)):
        if i < days-1:
            rmas[i] = 0
        else:
            if rmas[i-1]:
                rmas[i] = alpha * cps[i] + (1 - alpha) * rmas[i-1]
            else:
                ma = 0
                for i2 in range(i-days,i):  #求平均值
                    ma += cps[i2+1]
                rmas[i] = ma / days
    return rmas

7. TEMA 三重指数平滑移动平均线

def TEMA(r, days, name='Close'):
    v2 = EMA(r, days, name)
    v3 = EMA(v2, days)
    v4 = EMA(v3, days)

    emas = []
    for i in range(len(v2)):
        ok = 3 * (v2[i] - v3[i]) + v4[i]
        emas.append(ok)
    return emas

苏慕白 发布于  2021-11-1 19:51 

EMA交叉策略 策略

0.前言

市场是随时变化且无情的
回测只能做为参考,不代表此策略会一直有效

1. 策略原理

前一个K线的EMA短线上穿长线EMA则做多
其中EMA的来源用o+h+l+c/4,并且通过ATR把标准差归一化,再做阈值处理
最后用遗传算法找出收益率、回撤最佳的参数

2. 回测设置

使用的交易对:ETHUSDT
K线周期:2h
手续费:双边万4%

3. 回测结果

2020年:
图片alt
图片alt
图片alt


2021年:
图片alt
图片alt
图片alt


2020年-2021年 两年
图片alt
图片alt
图片alt

2019年-2021年 TradingView现货回测结果 复利无杠杠
图片alt


苏慕白 发布于  2021-11-1 19:31