Loading ...

大道至简,30行代码实现马丁带止损策略,ETH回测年化65%,最大回撤11%,功能齐全

Author: kb, Date: 2022-09-09 09:11:41
Tags:

分享说明

本策略主要为了方便小白们能快速简单地使用常规马丁的策略 策略仅供个人用户使用,请勿用于商业用途 请注意,此策略非圣杯,有一定的风险,建议回测好后再使用

策略功能

1、支持多币种多空双开,可配置首仓金额、补仓间隔、全仓止盈比例、尾仓止盈比例,单币止损金额 2、帐户信息显示,包括起跑时间、初始资金、实时权益、浮盈、昨日收益、今天收益、累计收益、日化、月化、年化等等 3、仓位显示,包括币种信息、持仓价、持仓数量、持仓方向、持仓价值、持仓浮盈、币种累计收益、当前步数(无仓位为0步,首仓为1步,每补一次步数+1)等

策略说明

本策略属于非常简单马丁功能,可同时跑多币种,原理如下(按默认配置): 1、没有仓位时,直接开仓,多空双开 2、亏损2.5%时,加仓,加仓金额为上次开仓价的2倍 注:若加仓倍数为2,即每单开仓金额为首仓的倍数比为1、2、4、8、16如此类推 3、尾仓盈利2.5%时,平尾仓 4、全仓盈利1.5%时,市价全平 5、若浮亏达到止损金额,则市价全平 适合比较稳定的币,如BTC、ETH、BNB、EOS、BCH等,不适合波动大的币

ETH回测结果(2021.9.1~2022.8.1,共11个月)

回测说明

由于fmz回测功能的限制,回测多个币种时,每个币种是单独计算盈利的,无法计算多币种同时跑时的回撤情况,因此多币种同时跑时,请注意风险 因为马丁属于抗单策略,因此需要通过计算最大浮亏,来确定策略是否容易出现爆仓情况 而发明者回测马丁时,最大回撤不太准确,策略已自动计算最大浮亏(注意,最大浮亏并非最大回撤),可在日志中查看此数据来确定爆仓风险

爆仓风险

策略未限定最大补仓次数,因此遇上大波动的币时会出现爆仓 有需要的可自己加入其它限制

策略推荐(免费试用一周)

作者经过两年的精心研发,目前研究出来两款长期较稳定的马丁策略: 1、太极马丁

  • 特点是使用太极的思路进行加减仓,止损值低,因此爆仓风险非常低,但有一定的亏损风险,大多数情况下能隔几天后赚回来。
  • 适合多数稳定币,因此建议跑稳定币,大波动币有一定风险
  • 本策略有多个实盘在跑,最长的跑了有4个多月,年化约200%,最大回撤30%,比较稳定
  • 如出现连续5次以上的止损后,会有一定的爆仓风险

2、趋势马丁

  • 特点时根据趋势进行加减仓,止损值相对高,出现止损的概率非常低,爆仓风险相对高些太极高些,但只要降低月化,爆仓风险也是非常低的,但仍有一定的亏损风险
  • 长期的收益曲线相对平稳好看些,大部分情况下回撤非常低,即使大暴跌,多币同时浮亏大的概率极低,风险比较可控
  • 经最近一年的回测发现,币安100多个合约币种里,只有30%左右的币种出现了止损的情况,有80%以上的币种(包括部分止损币)长期跑是盈利的
  • 因此此策略非常适合多币种一起跑!
  • 由于策略最近才完善,因此最长实盘只有一个月

联系方式

电报:https://t.me/kb_mbot


/*backtest
start: 2021-09-01 00:00:00
end: 2022-08-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":10000}]
*/
$.conf.SHOW_POS = true
function main() {
    const ex = $.fmz(null, exchanges[0])
    const exModel = $.ExModel.create(ex, '', '', 'm', BASE_MONEY, false, { SHOW_LOG: true }, 'USDT')
    const exCache = exModel.initModel(ex, exchanges.map(e => e.GetCurrency().split('_').join('')), ((ex, bcache, uBalance, mds, uPrices) => {
        for (let md of mds) {
            if (md.position.positionAmt == 0) {
                // 没有仓位时,直接开仓,多空双开
                md.position.toOpen = true
                md.position.openMoney = BASE_MONEY
            } else  {
                if (getPrePrecent(md.position) < -OPEN_PRECENT) {
                    // 亏损2.5%时,加仓,加仓金额为上次开仓价的2倍
                    md.position.toOpen = true
                    md.position.openMoney = md.position.preAmount * md.position.prePrice * ADD_PRECENT
                } else if (getPrePrecent(md.position) > CLOSE_PRE_PRECENT) {
                    // 尾仓盈利2.5%时,平尾仓
                    md.position.toClose = true
                    md.position.justSub = true
                } else if (getEntryPrecent(md.position) > CLOSE_PRECENT || getProfit(md.position) < -STOP_VALUE) {
                    // 全仓盈利1.5%时,全平
                    md.position.toClose = true
                    md.position.justSub = false
                }
            }
        }
    }))
    while (true) {
        LogStatus($.getStatus())
        $.loop()
    }
}

More