Loading ...

图解正反马丁格尔策略

Author: Hukybo, Created: 2020-07-17 16:33:23, Updated: 2020-07-20 10:58:30

[TOC]

摘要

严格来说马丁格尔是一种仓位管理方法,最早可以追溯到十八世纪,历经几百年经久不衰,直到现在还有很多马丁格尔或者类似的策略。人们对此策略也是褒贬不一,本节利用发明者量化(FMZ.COM)以图表的方式进行论证。

什么是马丁格尔

马丁格尔起源于法国,英文直译为:martegal,最初是指控制马车的马具。后来马丁格尔代表一种赌博策略。最初应用在轮盘赌博中,逐渐延伸到金融交易中,直到今天在股票、期货、外汇,还能看到马丁格尔的影子。之所以经久不衰,是因为从理论上讲,这是一种永不亏钱的策略。

正向马丁格尔

这种永不亏钱的秘诀在于,在每次赔钱后,将赌注加倍,而在任何一次赢钱之后,将赌注回归到初始单位。无论在赢钱之前输了多少次,只要概率让下注者赢一次,不但能赢回之前所有的损失,还外加一次赌注的收益。马丁格尔在金融市场中,创造了很多盈利奇迹和滑铁卢的亏损。

以抛硬币为例,出现正反面的概率约等于 50%,连续出现正面或反面的次数,都是以 50%的概率开始递减,也就是说在任何一次抛硬币中,出现正面的概率是 50%,连续 2 次出现正面的概率是 25%,连续 3 次出现正面的概率是 12.5%等等以此类推。

如果最开始赌注是 1 元,连续输钱的赌注以 2 的倍数增加,也就是:1、2、4、8、16、32、64、128、256、512 等等,直到赢钱为止,一个回合才结束,所以每个回合都能赢得 1 元。虽然在纸面上,马丁格尔可以做到永不亏钱,但是随着一连串的损失发生,赌注的规模会呈几何倍的速度增加。为了避免资金雄厚的赌徒运用这个策略,几乎所有的赌场对每一次赌局有最高的下注限制。

用代码验证正向马丁格尔
/*backtest
start: 2020-01-01 00:00:00
end: 2020-01-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

var chart = {
    __isStock: true,
    tooltip: {
        xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
    },
    title: {
        text: '资金曲线'
    },
    rangeSelector: {
        buttons: [{
            type: 'hour',
            count: 1,
            text: '1h'
        }, {
            type: 'hour',
            count: 2,
            text: '3h'
        }, {
            type: 'hour',
            count: 8,
            text: '8h'
        }, {
            type: 'all',
            text: 'All'
        }],
        selected: 0,
        inputEnabled: false
    },
    xAxis: {
        type: ''
    },
    yAxis: {
        title: {
            text: ''
        },
        opposite: false,
    },
    series: [{
        name: "",
        id: "",
        data: []
    }]
}; // 画图对象


// 策略入口函数
function main() {
    var ObjChart = Chart(chart);  // 绘图对象
    ObjChart.reset();  // 启动前先清空绘图
    var now = 0  // 随机次数
    var bet = 1
    var maxBet = 0  // 记录最大倍数
    var lost = 0
    var maxLost = 0  // 最大连续亏损次数
    initialFunds = 10000  // 初始资金
    var funds = initialFunds  // 实时资金
    while (true) {
        if (Math.random() > 0.5) { // 胜率为50%
            funds = funds + bet  // 赚钱
            bet = 1 // 每次赚钱后,就把下注倍数重置为1
            lost = 0
        } else {
            funds = funds - bet // 赔钱
            bet = bet * 2 // 失败就把下注倍数翻倍
            lost++
        }
        if (bet > maxBet) {
            maxBet = bet  // 计算最大倍数
        }
        if (lost > maxLost) {
            maxLost = lost  // 计算连续亏损次数
        }
        ObjChart.add([0, [now, funds]])  // 添加画图数据
        ObjChart.update(chart)  // 画图
        now++  // 随机次数加1
        if (funds < 0) {  // 如果破产结束程序
            return Log("初始资金:" + initialFunds + " 随机次数:" + now   + " 最大连续亏损次数:" + maxLost  + " 最大倍数:" + maxBet + " 最终资金:" + funds)
        }
    }
}

测试结果 img

反向马丁格尔

与正向马丁格尔相反,反向马丁格尔则是每次赢的时候,将赌注加倍,直到出现赔钱的时候将赌注回归到初始单位。这是马丁格尔策略的延伸,理论上这种策略更适合用在趋势行情中,因为顺势而为的操作有很高的成功率。成功率的提高伴随的是逐步加仓获取的超额收益。

用代码验证反向马丁格尔
/*backtest
start: 2020-01-01 00:00:00
end: 2020-01-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

var chart = {
    __isStock: true,
    tooltip: {
        xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
    },
    title: {
        text: '资金曲线'
    },
    rangeSelector: {
        buttons: [{
            type: 'hour',
            count: 1,
            text: '1h'
        }, {
            type: 'hour',
            count: 2,
            text: '3h'
        }, {
            type: 'hour',
            count: 8,
            text: '8h'
        }, {
            type: 'all',
            text: 'All'
        }],
        selected: 0,
        inputEnabled: false
    },
    xAxis: {
        type: ''
    },
    yAxis: {
        title: {
            text: ''
        },
        opposite: false,
    },
    series: [{
        name: "",
        id: "",
        data: []
    }]
}; // 画图对象


// 策略入口函数
function main() {
    var ObjChart = Chart(chart);  // 绘图对象
    ObjChart.reset();  // 启动前先清空绘图
    var now = 0  // 随机次数
    var bet = 1
    var maxBet = 0  // 记录最大倍数
    var lost = 0
    var maxLost = 0  // 最大连续亏损次数
    initialFunds = 10000  // 初始资金
    var funds = initialFunds  // 实时资金
    while (true) {
        if (Math.random() > 0.5) { // 胜率为50%
            funds = funds + bet  // 赚钱
            bet = bet * 2 // 赚钱就把下注倍数翻倍
            lost = 0
        } else {
            funds = funds - bet // 赔钱
            bet = 1 // 每次赔钱后,就把下注倍数重置为1
            lost++
        }
        if (bet > maxBet) {
            maxBet = bet  // 计算最大倍数
        }
        if (lost > maxLost) {
            maxLost = lost  // 计算连续亏损次数
        }
        ObjChart.add([0, [now, funds]])  // 添加画图数据
        ObjChart.update(chart)  // 画图
        now++  // 随机次数加1
        if (funds < 0) {  // 如果破产结束程序
            return Log("初始资金:" + initialFunds + " 随机次数:" + now   + " 最大连续亏损次数:" + maxLost  + " 最大倍数:" + maxBet + " 最终资金:" + funds)
        }
    }
}

测试结果 img

马丁格尔在期货市场上的应用

虽然在期货市场并没有最高下单量的限制,但与赌场不同的是,期货的涨跌并不是完全随机赌大小,真实的金融交易市场要比赌场更加复杂。如果将马丁格尔策略用在期货交易中,一旦市场按照反方向趋势行情运行,后面随着行情的发展,头寸翻倍增加会越来越大,风险也随之加大。那么对于想要使用马丁格尔策略用于期货市场的交易者来说,至少需要解决 3 个问题:

1、起始仓位 2、加仓倍数 3、加仓距离

起始仓位需要根据你的资金量而定,也就是在交易之前计算好资金能承受的最大连续亏损次数。如果起始仓位过高,会导致每次翻倍加仓后投入过大的资金量。另外加仓倍数太高也会导致同样的问题,马丁格尔默认是双倍加仓,如果设置成 3 倍加仓,破产的速度会更快,但如果设置成 1.5 倍加仓,就会出现另一种结果。最后需要考虑的是加仓的距离,比如在 5000 点开多单,价格下跌 15 点加仓,和价格下跌 30 点加仓,也是不一样的。这点完全取决于交易者的风险承受能力和交易习惯偏好。


Related

More