マルティンゲールフューチャー取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-26 11:12:23
タグ:

img

概要

これは,高収益を達成するためにマルチンゲルメカニズムを利用する先物取引戦略である.利益目標を達成するために負ける場合のポジションを増やすためにポジションサイズを動的に調整する.

原則

この戦略の基本的な論理は,価格がストップ・ロスのラインをトリガーすると,ストップ・ロスのラインを一定パーセント下げながら,より大きなサイズのポジションを再開する.ポジションサイズの増加によって,平均エントリー価格を下げることを目指す.ポジション数が設定された最大オーダーに達すると,利益を得るために価格逆転を待つ.

ストップ・ロスは,価格がストップ・ロスのラインに移動すると,より大きなポジションが再開され,ストップ・ロスのラインは一定のパーセントで下げられる.このような再開およびストップ・ロスの減少操作は,平均的なオープニング価格を下げ,利益の可能性を増加させる.追加されたオーダーの数が最大に達した後,価格逆転を待つことで,利益を得る.

利点分析

最大の利点は,レバレッジされた再開を通じてコストベースを下げる能力であり,トレンドがマイナスの場合も有利な逆転のチャンスがあります.また,適切なストップ損失/利益レベルを設定することで,リスクを効果的に制御します.

また,高波動性のある商品やその他の市場でもうまく機能し,レバレッジを通じて利益/損失を拡大します.

リスク分析

主なリスクは,価格が再開後も下落傾向を継続し,以前のストップ損失レベルを突破し,大きな損失につながる可能性があります.これはより広いストップ損失パーセント,より小さなレバレッジ比などを設定することで軽減できます.

もう一つのリスクは,逆転前に最大注文量を支える資金不足です.十分な資金が必要です.

改善 の 分野

戦略をさらに最適化する方法:

  1. 動的にレバレッジレベルを調整し,利益を得るときは低く,損をする時は高くします.

  2. トレンドが不明確である場合,損失を止めるための傾向指標を組み込む

  3. 市場変動に基づいてストップ・ロスの幅を設定し,変動する場合より広い

  4. 極端な損失を制限するために自動停止損失モジュールを追加

概要

これは典型的なレバレッジされたマルティンゲール取引戦略である.追加されたオーダーを通じてコストを下げることで,より高いリターンを追求するが,リスクも導入する.より多くの市場条件に合わせてパラメータチューニングと機能拡張を通じて最適化する余地がある.


/*backtest
start: 2023-01-19 00:00:00
end: 2024-01-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Leveraged Martingale Strategy with Fees", overlay=true)

// User-defined input parameters
var float takeProfitPct = input(2.0, title="Take Profit Percentage") / 100.0
var float positionMultiplier = input(2.0, title="Position Size Multiplier")
var int maxOrders = input(10, title="Maximum Number of Reinforced Orders")
var float tradeSizeUSD = input(10000.0, title="Trade Size in USD")
var float dropPctForNextTrade = input(1.0, title="Drop Percentage for Next Trade") / 100.0
var float leverage = input(5.0, title="Leverage Factor")
var bool enterAtCurrentPrice = input(true, title="Enter First Trade at Current Price")
var float takerFeePct = input(0.1, title="Taker Order Fee Percentage") / 100.0

// State variables
var float last_entry_price = na
var float avg_entry_price = na
var float total_position_size = 0.0
var int num_trades = 0

// Entry logic
if (num_trades == 0)
    if (enterAtCurrentPrice or close < last_entry_price * (1 - dropPctForNextTrade))
        float size = tradeSizeUSD / close * leverage
        strategy.entry("Long", strategy.long, qty=size)
        avg_entry_price := close
        total_position_size := size
        last_entry_price := close
        num_trades := 1
else if (close < last_entry_price * (1 - dropPctForNextTrade) and num_trades < maxOrders)
    float size = tradeSizeUSD / close * leverage * pow(positionMultiplier, num_trades)
    strategy.entry("Double Long" + tostring(num_trades), strategy.long, qty=size)
    avg_entry_price := ((avg_entry_price * total_position_size) + (close * size)) / (total_position_size + size)
    total_position_size := total_position_size + size
    last_entry_price := close
    num_trades := num_trades + 1

// Take profit logic adjusted for leverage and fees
var float take_profit_price = na
var float fee_deduction = na
if (num_trades > 0)
    take_profit_price := avg_entry_price * (1 + takeProfitPct / leverage)
    fee_deduction := total_position_size * close * takerFeePct
    if (close > take_profit_price + fee_deduction / total_position_size)
        strategy.close_all()
        num_trades := 0


もっと