Strategi Dagangan Futures Martingale yang dikuasai

Penulis:ChaoZhang, Tarikh: 2024-01-26 11:12:23
Tag:

img

Ringkasan

Ini adalah strategi perdagangan niaga hadapan yang memanfaatkan mekanisme martingale untuk mencapai pulangan yang tinggi. Ia secara dinamik menyesuaikan saiz kedudukan untuk meningkatkan kedudukan apabila kehilangan untuk memenuhi sasaran keuntungan.

Prinsip-prinsip

Logik utama strategi ini ialah: apabila harga mencetuskan garis stop loss, buka semula kedudukan dengan saiz yang lebih besar sambil menurunkan garis stop loss dengan peratusan tertentu. Dengan meningkatkan saiz kedudukan, ia bertujuan untuk menurunkan harga masuk purata. Apabila bilangan kedudukan mencapai pesanan maksimum yang ditetapkan, ia menunggu pembalikan harga untuk mengambil keuntungan.

Secara khusus, ia mula-mula memasuki pada harga semasa dengan saiz kedudukan yang ditetapkan dan mengambil tahap keuntungan / kerugian. Apabila harga bergerak ke garisan stop loss, kedudukan yang lebih besar akan dibuka semula dan garisan stop loss diturunkan dengan peratusan yang ditetapkan. Operasi pembukaan semula dan penurunan stop loss seperti itu akan menurunkan harga pembukaan purata, meningkatkan potensi keuntungan. Selepas jumlah pesanan tambahan mencapai maksimum, ia menunggu pembalikan harga untuk mencapai keuntungan.

Analisis Kelebihan

Kelebihan terbesarnya adalah keupayaan untuk menurunkan asas kos melalui pembukaan semula leveraged, sementara masih mempunyai peluang pembalikan yang menguntungkan apabila trend negatif.

Ia juga berfungsi dengan baik untuk komoditi dan pasaran turun naik yang tinggi, memperkuat keuntungan / kerugian melalui leverage.

Analisis Risiko

Risiko utama ialah harga mungkin terus trend menurun selepas dibuka semula, bahkan memecahkan tahap stop loss sebelumnya, yang membawa kepada kerugian besar.

Risiko lain adalah modal yang tidak mencukupi untuk menyokong kuantiti pesanan maksimum sebelum pembalikan.

Kawasan Peningkatan

Beberapa cara untuk mengoptimumkan lagi strategi:

  1. Sesuaikan tahap leverage secara dinamik, lebih rendah apabila mendapat keuntungan dan lebih tinggi apabila kehilangan

  2. Memasukkan penunjuk trend untuk menghentikan kerugian apabila trend tidak jelas

  3. Tetapkan lebar stop loss berdasarkan turun naik pasaran, lebih luas apabila turun naik

  4. Tambah modul kehilangan berhenti automatik untuk mengehadkan kerugian melampau

Ringkasan

Ini adalah strategi perdagangan martingale leveraged yang tipikal. Dengan menurunkan kos melalui pesanan tambahan, ia mengejar pulangan yang lebih tinggi tetapi juga memperkenalkan risiko. Masih ada ruang untuk pengoptimuman melalui penyesuaian parameter dan pengembangan ciri untuk memenuhi keadaan pasaran yang lebih banyak.


/*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


Lebih lanjut