デジタル通貨に基づくダイナミックバランス戦略

作者: リン・ハーン , 作成日: 2020-03-03 10:17:43, 更新日: 2023-10-09 22:49:27

img

"つ目 概要

ウォーレン・バフェットの指導者であるベンジャミン・グラハムが『賢明な投資家の』で,株と債券の動的均衡の取引モデルについて言及している.imgこの取引モデルは非常にシンプルです.

  • 持っていた資金の50%を株式基金に投資し,残りの50%を債券基金に投資します. つまり,株と債券はそれぞれ半分です.
  • 固定時間間隔または市場の変化に応じて資産を1回再平衡し,株式資産と債券資産の比率を初期1:1に戻す. この戦略の論理は,いつ,どのくらい買おうか,ということも含まれています. 簡単です.

2 ダイナミックバランス原理

この方法では,債券ファンドの波動率は株式の波動率よりもはるかに低いので,債券はここで"参照"として扱われる.つまり,債券を使って株が多く稼いでいるか少ないかを測定する.

株価が上昇すると,株価が債券より高くなり,両者の市場価値比率が設定された値を超えると,総ポジションを調整し,株を売却し,債券を購入し,株式債券の市場価値比率を元の1:1に戻す.

逆に,株価が下がると,株価の市場価値が債券の市場価値より小さい.両者の市場価値比率が設定された値を超えると,総ポジションを調整し,株を買い,債券を売り,株債市場価値比率が元の1:1に戻す.img

動的バランスのとれた株式と債券の比率で 株の成長の恩恵を享受し,資産の変動を軽減できるのです. 価値投資の先駆者として,グラハムは素晴らしいアイデアを提示しています. これが完全な戦略であるなら,なぜそれをデジタル通貨で使わないのでしょうか?

3 戦略的論理

ブロックチェーン資産BTCにおける動的バランス戦略

戦略的論理

  • 当時のBTCの価値では,口座残高は5000円の現金と0.1 BTCを保持しており,現金とBTCの市場価値の初期比率は1:1である.
  • BTCの価格が円6,000に上昇すると,つまりBTCの市場価値が口座残高よりも大きく,その差が設定された値を超えると,販売します. (※6000-5000) /6000/2コイン.BTCが上昇したことを示し,お金を引き換えます.
  • BTCの価格が円4000に下がり,BTCの市場価値が口座残高未満で,その差が設定された値を超えると,BTCの値が下がったことを示し,BTCを買い戻します.

BTCの値下げや値上げに関わらず,口座残高は BTCの市場価値と同等に動いています. BTCが値下げされた場合,購入し,再び戻ってくるまで待って,平気のように販売します.

4.戦略的枠組み

開発者による量化取引プラットフォームの例として,まず戦略の枠組みを見てみましょう.

// 撤单函数
function CancelPendingOrders() {}

// 下单函数
function onTick() {}

// 主函数
function main() {
    // 过滤非重要信息
    SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
    while (true) { // 轮询模式
        if (onTick()) { // 执行 onTick 函数
            CancelPendingOrders(); // 取消未成交的挂单
            Log(_C(exchange.GetAccount)); // 打印当前账户信息
        }
        Sleep(LoopInterval * 1000); // 休眠
    }
}

基本的には,メイン主関数,オンティック下記関数,CancelPendingOrders関数,必要パラメータなどで,基本はシンプルです.

5つ目,下記のモジュール

// 下单函数
function onTick() {
    var acc = _C(exchange.GetAccount); // 获取账户信息
    var ticker = _C(exchange.GetTicker); // 获取 Tick 数据
    var spread = ticker.Sell - ticker.Buy; // 获取 Tick 数据的买卖价差
    // 账户余额与当前持仓价值的差值的 0.5倍
    var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
    var ratio = diffAsset / acc.Balance; // diffAsset / 账户余额
    LogStatus('ratio:', ratio, _D()); // 打印 ratio和当前时间
    if (Math.abs(ratio) < threshold) { // 如果 ratio的绝对值小于指定阈值
        return false; // 返回 false
    }
    if (ratio > 0) { // 如果 ratio大于 0
        var buyPrice = _N(ticker.Sell + spread, ZPrecision); // 计算下单价格
        var buyAmount = _N(diffAsset / buyPrice, XPrecision); // 计算下单量
        if (buyAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // 买入下单
    } else {
        var sellPrice = _N(ticker.Buy - spread, ZPrecision); // 计算下单价格
        var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // 计算下单量
        if (sellAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // 卖出下单
    }
    return true; // 返回 true
}

取引のロジックは明確で,すべての解説がコードに書かれています. 画像をクリックして拡大してください.

基本的には以下の通りです.

  • アカウント情報を取得します.
  • Tick のデータを取得します.
  • Tickのデータ値が計算される.
  • 計算した口座残高とBTC市場価値の差.
  • 販売条件,注文価格,注文量を計算する.
  • 返信は true です.

6 撤収モジュール

// 撤单函数
function CancelPendingOrders() {
    Sleep(1000); // 休眠 1秒
    var ret = false;
    while (true) {
        var orders = null;
        // 持续获取未成交订单数组,如果返回异常,则继续获取
        while (!(orders = exchange.GetOrders())) {
            Sleep(1000); // 休眠 1秒
        }
        if (orders.length == 0) { // 如果订单数组为空
            return ret; // 返回撤单状态
        }
        for (var j = 0; j < orders.length; j++) { // 遍历未成交订单数组
            exchange.CancelOrder(orders[j].Id); // 依次取消未成交订单
            ret = true;
            if (j < (orders.length - 1)) {
                Sleep(1000); // 休眠 1秒
            }
        }
    }
}

ブロックを削除するには,次の手順で簡単にできます.

  • 引き出す前に1秒待って,個別の取引所,あなたは知っています.
  • 継続的に未完成の注文の配列を取得し,異常が返ってきた場合,継続的に取得します.
  • もし未完成の注文列が空である場合は,即座に取り消しの状態に戻します.
  • 順番に順番の注文番号で撤回します.

7 戦略の完全なソースコード

// 回测环境
/*backtest
start: 2018-01-01 00:00:00
end: 2018-08-01 11:00:00
period: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/



// 撤单函数
function CancelPendingOrders() {
    Sleep(1000); // 休眠 1秒
    var ret = false;
    while (true) {
        var orders = null;
        // 持续获取未成交订单数组,如果返回异常,则继续获取
        while (!(orders = exchange.GetOrders())) {
            Sleep(1000); // 休眠 1秒
        }
        if (orders.length == 0) { // 如果订单数组为空
            return ret; // 返回撤单状态
        }
        for (var j = 0; j < orders.length; j++) { // 遍历未成交订单数组
            exchange.CancelOrder(orders[j].Id); // 依次取消未成交订单
            ret = true;
            if (j < (orders.length - 1)) {
                Sleep(1000); // 休眠 1秒
            }
        }
    }
}

// 下单函数
function onTick() {
    var acc = _C(exchange.GetAccount); // 获取账户信息
    var ticker = _C(exchange.GetTicker); // 获取 Tick 数据
    var spread = ticker.Sell - ticker.Buy; // 获取 Tick 数据的买卖价差
    // 账户余额与当前持仓价值的差值的 0.5倍
    var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
    var ratio = diffAsset / acc.Balance; // diffAsset / 账户余额
    LogStatus('ratio:', ratio, _D()); // 打印 ratio和当前时间
    if (Math.abs(ratio) < threshold) { // 如果 ratio的绝对值小于指定阈值
        return false; // 返回 false
    }
    if (ratio > 0) { // 如果 ratio大于 0
        var buyPrice = _N(ticker.Sell + spread, ZPrecision); // 计算下单价格
        var buyAmount = _N(diffAsset / buyPrice, XPrecision); // 计算下单量
        if (buyAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // 买入下单
    } else {
        var sellPrice = _N(ticker.Buy - spread, ZPrecision); // 计算下单价格
        var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // 计算下单量
        if (sellAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // 卖出下单
    }
    return true; // 返回 true
}

// 主函数
function main() {
    // 过滤非重要信息
    SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
    while (true) { // 轮询模式
        if (onTick()) { // 执行 onTick 函数
            CancelPendingOrders(); // 取消未成交的挂单
            Log(_C(exchange.GetAccount)); // 打印当前账户信息
        }
        Sleep(LoopInterval * 1000); // 休眠
    }
}

外部パラメータ img

8. 戦略的再テスト

次は,この単純な動的バランス戦略をテストして,効果があるか見てみましょう. 以下は,BTCの歴史上のデータへのレビューで,参考にします.

環境を復元する img

テスト結果 img

復習曲線 img

このグラフは,BTCの価格の動向を示していますimg

この回顧期間中,BTCは8ヶ月間も下落し,最大70%以上も下落しており,多くの投資家がブロックチェーン資産に対する信頼を失っている.この戦略は累積収益が160%に達し,年収リスク比は5以上である.このようなシンプルな投資戦略では,この投資の収益率は,ほとんどのハッパー群を上回っている.

9. 策略のソースコードを取得

策略のソースコードは,発明者の定量化ウェブサイトに公開されています.https://www.fmz.com/strategy/110545オンライン回線を直接設定する必要はありません.

10 概要

このダイナミックバランス戦略は,ただ一つのコアパラメータである ("スリース値下げ) と,非常にシンプルな投資方法であり,過剰な利益ではなく,安定した利益を追求する. 傾向戦略とは異なり,ダイナミックバランス戦略は逆勢動的である. ダイナミックバランス戦略は,逆に,市場が熱いときに株を冷やし,市場が冷たいときに株を浮動させ,マクロ経済規制に似ています.

実際,ダイナミックバランス戦略は,価格の予測不可能な概念を堅持し,同時に価格変動を捉える手法の1つです. ダイナミックバランス戦略の重要な核心は,資産配置比率を設定し,調整し,値引きを誘発することです. 文章の理由から,一文では顔面で理解することはできません. ダイナミックバランス戦略の最も重要なことは,投資思想です.

この記事の締めくくりには,ベンジャミン・グラハムの著書"賢明な投資家の"で有名な言葉を引用しましょう.株式市場は,価値を正確に測る"重量計"ではなく,むしろ"投票機"であり,数え切れないほどの人が理性と感情の混ざり合いで意思決定する.多くの場合,これらの選択と理性の価値評価は遠く離れています.投資の秘訣は,価格が内在値よりもはるかに低いときに投資し,市場のトレンドが回復すると信じることです.ベンジャミン・グラハム 賢明な投資家


関連性

もっと