[TOC]
严格来说马丁格尔是一种仓位管理方法,最早可以追溯到十八世纪,历经几百年经久不衰,直到现在还有很多马丁格尔或者类似的策略。人们对此策略也是褒贬不一,本节利用优宽量化(youquant.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)
}
}
}
测试结果
与正向马丁格尔相反,反向马丁格尔则是每次赢的时候,将赌注加倍,直到出现赔钱的时候将赌注回归到初始单位。这是马丁格尔策略的延伸,理论上这种策略更适合用在趋势行情中,因为顺势而为的操作有很高的成功率。成功率的提高伴随的是逐步加仓获取的超额收益。
/*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)
}
}
}
测试结果
虽然在期货市场并没有最高下单量的限制,但与赌场不同的是,期货的涨跌并不是完全随机赌大小,真实的金融交易市场要比赌场更加复杂。如果将马丁格尔策略用在期货交易中,一旦市场按照反方向趋势行情运行,后面随着行情的发展,头寸翻倍增加会越来越大,风险也随之加大。那么对于想要使用马丁格尔策略用于期货市场的交易者来说,至少需要解决 3 个问题:
1、起始仓位 2、加仓倍数 3、加仓距离
起始仓位需要根据你的资金量而定,也就是在交易之前计算好资金能承受的最大连续亏损次数。如果起始仓位过高,会导致每次翻倍加仓后投入过大的资金量。另外加仓倍数太高也会导致同样的问题,马丁格尔默认是双倍加仓,如果设置成 3 倍加仓,破产的速度会更快,但如果设置成 1.5 倍加仓,就会出现另一种结果。最后需要考虑的是加仓的距离,比如在 5000 点开多单,价格下跌 15 点加仓,和价格下跌 30 点加仓,也是不一样的。这点完全取决于交易者的风险承受能力和交易习惯偏好。