探讨胜率、盈亏比、收益率、杠杆四者的关系

文章介绍

胜率重要还是盈亏比重要?
是高胜率小赚好还是低胜率大赚好?
是刺激火爆的标的好,还是温和的标的好?
杠杆用多大?杠杆用大了是能发财致富还是加速破产?
胜率、盈亏比、收益率、波动率、杠杆这些这些概念对交易的结果至关重要,所以本文对这些作些探讨。个人整理,如有不对,烦请指正。

整体思路上,会对涉及到的概念做些约定,推导下公式,然后基于公式分析各因子的作用与关系,并做几个程序实验。后面基于探究的结果谈谈如何改善交易结果。

概念约定

因为研究一般性规律,如同物理学里假定物体都是标准物体一样,这里假定盈利单的收益都是一样的,亏损单的亏损也都是一样。
PS:缩写的定义可能不是很标准~
总资产:F
总收益率:E,earnling,F=FE
胜率:W,win
单笔收益率:Y。实际反映的交易结果的振幅,你是大赚大亏还是小赚小亏。
亏盈比:R,亏损和盈利的比值。用亏盈比而不是盈亏比是因为我觉得这样好理解一点...亏盈比R和收益率Y相乘得到亏损时的收益率为-RY。因为实际上波动大的市场,一定是赚的多亏的也多,所以盈利和亏损之间更接近于是一个比例关系。
杠杆数:L,level
总交易次数:N

盈亏顺序无关:这不是一个约定,是一个基础认知。最终交易结果只取决于每次交易的收益率,和这些交易什么顺序无关。

杠杆与真实收益率:杠杆其实只影响真实的收益率,2倍5%的收益率和1倍10%的收益率其实是一样的。所以在实际上我们并不需要单独去考虑杠杆这个因子,它的作用可以体现在收益率里

各因子分析

\begin{aligned} &盈利单数为WN\\ &盈利单的总收益为(1+Y)^{WN}\\ &亏损单数为(1-W)N\\ &亏损单的总收益为(1-RY)^{(1-W)N}\\ &故,最终总收益E=(1+Y)^{WN}*(1-RY)^{(1-W)N}\\ &若要交易获胜,首先要不亏,即E>1\\ &即(1+Y)^{WN}*(1-RY)^{(1-W)N}>1\\ &即[(1+Y)^{W}*(1-RY)^{(1-W)}]^{N}>1\\ &因为N为正整数,故等价于(1+Y)^{W}*(1-RY)^{1-W}>1\\ &因为Y>0,所以(1+Y) > 1,(1+Y)^{W}也必定大于1,是总收益率里的盈利部分\\ &R>0,Y>0,所以(1-RY)小于1,而指数1-W大于0\\ &所以(1-RY)^{1-W}也必定小于1,是总收益率里的亏损部分\\ \end{aligned}

提一下要点---总收益E率是盈利部分(1+Y)WN和亏损部分(1-RY)(1-W)N的乘积

分析下参数

  • 波动性(杠杆、仓位)越大收益越大,但是有一个阈值,超过后就逐渐归零
    波动性,其实这里可以等价于收益率Y,因为波动越大,收益越大,也等同于杠杆值和仓位比例。仓位越大,或者杠杆越大,或者市场本身波动率越大,那么收益和亏损就越大,本质都是一回事。随着Y的变大,盈利部分(1+Y)WN和亏损部分(1-RY)(1-W)N都是变大的,最终收益E变大变小,关键是看哪个变化的快。这个问题如果用数学分析,因为涉及多个参数,就要分很多种情况分析,那太复杂了,我们先经验判断。Y很小且能盈利的时候,增加仓位可以增加最终盈利。但是当Y增大到1/R,这时候(1-RY)为0,最终收益也就为0了,即爆仓了。我们可以想象,爆仓不是突然发生的,在走向最终爆仓的过程中,肯定存在收益慢慢变小这样一个过程。这一点后面给程序实验。
  • 胜率越大,收益越好
    因为(1+Y)是大于1的,所以W增大后,盈利部分是增加的;只要R小于1/Y,而(1-RY)是小于1大于0的,W增大后指数(1-W)N减小,所以是亏损部分降低(可以想象从1/2的3次方降低到2次方),如果R大于1/Y,那么(1-RY)小于0,这个时候E小于0,FE小于0,即你的资产已经小于0,爆仓了,后面不用看了,交易停止,胜率再大也没用。
    所以,胜率提高可以提高最终收益。这不是废话么。
  • 盈亏比越大(亏盈比越小),收益越好
    假定W和Y固定,当R增大,即亏盈比(注意我这里是亏盈比不是盈亏比)增大,显然(1-RY)1-W会变小,即收益降低。
    所以,亏盈比越大,盈亏比越小,收益越小。废话again。
  • 盈亏比和胜率对最终收率的改善是非线性的
    我们知道胜率和盈亏比很重要,但是可能没想到它们的影响力有这么大。
    E= (1+Y)WN*(1-RY)(1-W)N,当我们改胜率W时,其实是改变的等式里的指数,当我们改变盈亏比时,改变的是亏损部分乘幂运算的底,所以胜率和盈亏比的每一点改动,对交易结果的影响都是很大的。具体的相对关系,后面用程序绘图表示。
  • Y和W的关系:
    W越大,WN越大,盈利部分的影响越大,同理亏损部分的影响就越小,所以虽然Y增大后盈利和亏损都放大了,但是盈利的影响更大。反之,如果胜率低,亏损部分的作用就会更大,要想赚钱就必须降低Y。极限的情况下,W=1,即100%的胜率,那么Y越大越好;W=0,即0%的胜率,那么Y肯定越小越好,即一笔交易都不要做。
  • Y和R的关系
    如果R是一个无限大的值,那么Y增大后,(1-RY)的变动肯定更大,Y增大后总收益E将减小;如果R是一个无限小的值,那么Y的改变也没什么影响,Y增大后总收益E将增大。如果亏盈比很大,即盈亏比很小,那么收益率的波动率小点反而更好;如果亏盈比小,即盈亏比大,那么收率越大越好。

综上,胜率和盈亏比都是越大越好。胜率越大、盈亏比越大,可以使用的真实收益率也即杠杆越大;反之越小。都是废话。

程序测试

用方便好用的python测试。

一个遍历所有因子计算最终收益的接口

def calculate_rate_of_return(wr_list=None, lr_list=None, yr_list=None, lever_list=None, trade_cnt=TRADE_CNT):
    """
    :param wr_list: 胜率
    :param lr_list: 亏盈比
    :param yr_list: 收益率
    :param lever_list:杠杆
    :param trade_cnt:交易次数
    :return:
    """
    # 遍历胜率
    if lever_list is None:
        lever_list = [1]
    if yr_list is None:
        yr_list = [0.1]
    if lr_list is None:
        lr_list = [0.5]
    if wr_list is None:
        wr_list = [0.6]
    for wr in wr_list:
        win_cnt = int(trade_cnt * wr)
        lose_cnt = trade_cnt - win_cnt
        # 遍历基础收益率
        for yr in yr_list:
            print('\n')
            # 遍历盈亏比
            for lr in lr_list:
                true_yield_rate_list = []
                for _ in range(win_cnt):
                    true_yield_rate_list.append(yr)
                for _ in range(lose_cnt):
                    true_yield_rate_list.append(-yr * lr)
                random.shuffle(true_yield_rate_list)  # 洗个牌,不影响最终收益
                # 遍历杠杆
                for lever in lever_list:
                    result = 1
                    for bs in true_yield_rate_list:
                        result = result * (1 + lever * bs)
                        if result < 0:
                            result = 0
                            break
                    print('wr = {:.2%}, yr = {:.2%},lr = {:.2%}, lever = {},result = {:.2f}'.format(
                        wr, yr, lr, lever, result))

实验:不同盈亏比对最终收益率的影响

懒得上代码和文字结果了,直接看图吧。

60%胜率,10%单次收益率:


60%胜率10%单次收益率不同盈亏比100次交易后的收益曲线

刚开始陡峭上升,后面依旧稳定提升,但是没那么明显了,不过基本也没人能做到后面的部分。盈亏比做好3到4样子就很好了。

实验:不同杠杆对最终收益率的影响

因为真实收益率=杠杆*单倍收益率,所以这里采用固定的收益率1%配合1到200倍的杠杆测试,交易次数为100。

60%胜率,2:1的盈亏比:


可以看到收益率刚开始随着杠杆的增大而增大,大概在85%真实单次收益率时达到最高,120%后开始归零。如果市场波动是10%,你有60%的胜率、2:1的盈亏比,看上去完全是盈利的胜率和盈亏比组合,你用8.5倍杠杆做单,会获得最高收益率,12倍做单就会爆仓归零。可以看到,8.5和12之间其实也没用差很多,在考虑到真实市场的波动未必是那么标准的,峰值可能更大,那么实际如果用8.5可能就已经爆仓了。

60%胜率,10:1超高盈亏比,1~200倍杠杆:


纳尼?看上去似乎杠杆越大越好。我继续增加杠杆到1000。


可以看到在接近600倍杠杆是利润最大,之后开始下降,700左右开始归零。

90%超高胜率,2:1盈亏比:



也是一样的先上升后降低。

貌似效果没有盈亏比的明显,于是把胜率提高99%看看。
然而好像并没有什么卵用,因为没有盈亏比的支撑,超大杠杆之后爆仓了,囧~


实验:不同胜率的影响

4:1盈亏比,单次收益率为5%:



可以看到,胜率对最终收益率的影响基本是指数级的。其实这个好理解,胜率提高之后,赚的多,亏的少,盈余多了很多,加上复利的影响,自然会提升很大。

实验:50%胜率,1:1盈亏比,不同基础收益率下归零需要的次数

我们知道,如果胜率50%,赢1输1,盈亏比例都一样,你其实是会慢慢归零的。比如你有100,赚50%之后是150,再亏50%,就变成了75。看上去赢一次输一次,比例还都一样,但是实际上你的钱会变少。

现在用程序测试,不同基础收益率下归零需要的次数。

测试代码:

def test_trade_cnt_fixed_50wr_50rr(lever=1):
    """
    因为杠杆就是直接增加收益率,所以这里可以只考虑没有杠杆的情况
    """
    for yr in [x * 0.05 for x in range(1,21,1)]:
        result = 1
        trade_cnt = 0
        while True:
            result = result * (1 + lever * yr)
            trade_cnt += 1
            result = result * (1 - lever * yr)
            trade_cnt += 1
            if result < 0.01:
                print(
                    'yr is {:.2f}, be 0 after {} trade'.format(yr, trade_cnt))
                break


test_trade_cnt_fixed_50wr_50rr()

测试结果:

yr is 0.05, be 0 after 3680 trade
yr is 0.10, be 0 after 918 trade
yr is 0.15, be 0 after 406 trade
yr is 0.20, be 0 after 226 trade
yr is 0.25, be 0 after 144 trade
yr is 0.30, be 0 after 98 trade
yr is 0.35, be 0 after 72 trade
yr is 0.40, be 0 after 54 trade
yr is 0.45, be 0 after 42 trade
yr is 0.50, be 0 after 34 trade
yr is 0.55, be 0 after 26 trade
yr is 0.60, be 0 after 22 trade
yr is 0.65, be 0 after 18 trade
yr is 0.70, be 0 after 14 trade
yr is 0.75, be 0 after 12 trade
yr is 0.80, be 0 after 10 trade
yr is 0.85, be 0 after 8 trade
yr is 0.90, be 0 after 6 trade
yr is 0.95, be 0 after 4 trade
yr is 1.00, be 0 after 2 trade

虽然都是亏钱,但是波动小一点能活得久很多。所以如果还没有在市场里验证过的稳定盈利的能力,就尽量低杠杆,这样才能在这个市场活的足够久到你慢慢成长到能稳定盈利。

实验:分批下单对交易结果的影响

现在我们知道盈亏比的重要性。那么怎么提高盈亏比?其中一个方法就是分批下单,使用小仓位测试行情后再跟进,先锋不盈,后续不进。这样损失了部分利润,但是降低了更多的亏损。

假设分成等额的两批,第一批入场后发现不能盈利,亏损出局,那么这样就减少了一半的亏损,可以认为亏损比例降低了50%。同理,如果第一批入场后发现能赢利,补后面的单子,这样第一批是能拿到全部利润的,第二批只能拿到后面的利润。假设在全额利润50%处第二批进场,那么实际总利润只是少了第二批仓位本来该在前面拿到的利润,一半仓位的一半行情,即25%。所以通过分批进场,利润为原来的75%。亏损降低到1/2,利润降低到3/4,R变为(1/2)/(3/4) =2/3,即R变为原来的2/3,盈亏比1/R变为原来的3/2。

这对实际的交易结果有多大的影响呢?用程序测试下。
使用60%的胜率,收益率为10%,没分批前的亏盈比是0.6,分批后是0.4。比较两次的收益情况。

测试代码:

def test_in_batches():
    """
    :return:
    """
    calculate_rate_of_return(lr_list=[0.6], yr_list=[0.1], lever_list=[
        x for x in range(1, 21)], trade_cnt=20)
    calculate_rate_of_return(lr_list=[0.4], yr_list=[0.1], lever_list=[
        x for x in range(1, 21)], trade_cnt=20)


test_in_batches()

测试结果:

#没分批进场前
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 1,result = 1.91
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 2,result = 3.21
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 3,result = 4.76
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 4,result = 6.31
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 5,result = 7.48
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 6,result = 7.92
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 7,result = 7.46
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 8,result = 6.18
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 9,result = 4.44
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 10,result = 2.68
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 11,result = 1.31
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 12,result = 0.49
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 13,result = 0.12
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 14,result = 0.02
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 15,result = 0.00
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 16,result = 0.00
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 17,result = 0.00
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 18,result = 0.00
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 19,result = 0.00
wr = 60.00%, yr = 10.00%,lr = 60.00%, lever = 20,result = 0.00

#分批进场后
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 1,result = 2.26
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 2,result = 4.58
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 3,result = 8.38
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 4,result = 14.05
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 5,result = 21.77
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 6,result = 31.33
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 7,result = 42.08
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 8,result = 52.89
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 9,result = 62.30
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 10,result = 68.80
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 11,result = 71.14
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 12,result = 68.72
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 13,result = 61.75
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 14,result = 51.30
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 15,result = 39.06
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 16,result = 26.92
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 17,result = 16.50
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 18,result = 8.77
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 19,result = 3.89
wr = 60.00%, yr = 10.00%,lr = 40.00%, lever = 20,result = 1.36

可以看到,效果非常明显。没有分批前,在6倍杠杆时出现最大收益7.92,11倍之后开始亏损,14倍之后开始归零。分批后,在11倍杠杆出现最大收益71.14,20倍还没有看到亏损和归零。看到这里,怎么做,不用说了吧?

要点总结

  • 杠杆(仓位、波动性一个道理)对总收益的作用存在一个阈值
    总收益先随着杠杆的增大而增大,后面反而会降低,最后归零。这个阈值取决于你的胜率和盈亏比,你的胜率和盈亏比越大,这个阈值越高。实际市场中行情不是平均波动的,峰值可能很大,所以一定要控制好仓位,否则很可能亏损甚至爆仓。
  • 胜率对总收益的提升是接近指数级的
    赚钱次数多了,不仅是赚的多了,亏的也少了,一来一去,就多赚很多。再配合复利的影响,日积月累,最终的差距大的惊人。所以,尽可能地不要瞎操作,机会不够好就不要做,宁可错过,踏空总比亏损好,胜率的一点提升,可以让你的交易成绩好上很多。
  • 及时止盈,避免盈利转亏
    一定要注意及时止盈止损,不然趋势(尤其是短线)很可能很快过去了,赢单要变成亏单,这样就降低了胜率,而胜率是我们首先要去保护的。而且拿久了波动率被放大,可能更放大亏损,对总收益不好。
  • 简单的分批进场会提高很多的总收益
    因为分批进场对亏损的减少大于对盈利的减少,总体上提高了盈亏比,而盈亏比对总收益的改善也是近似指数级的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342