Strategi Keseimbangan Celah Singa

Penulis:ChaoZhang, Tarikh: 2023-11-02 16:55:00
Tag:

img

Ringkasan

Strategi baki celah singa adalah strategi perdagangan jangka pendek yang mudah berdasarkan persilangan purata bergerak. Ia terutamanya menggunakan dua purata bergerak - apabila MA pantas melintasi di atas MA perlahan dari bawah, pergi panjang; apabila MA pantas melintasi di bawah MA perlahan dari atas, tutup kedudukan. Nama strategi berasal dari jargon perdagangan popular Lion Fissure, yang bermaksud menangkap tindakan harga kecil dan mendapat keuntungan dari jurang yang sempit antara MA.

Logika Strategi

Strategi ini menggunakan dua purata bergerak: MA cepat (smallMAPeriod) dan MA perlahan (bigMAPeriod). Kedua-dua MA membentuk saluran harga, dengan MA cepat sebagai pangkalan saluran dan MA perlahan sebagai siling saluran. Apabila harga memecahkan di atas pangkalan saluran ke atas, pergi panjang; apabila harga memecahkan siling saluran ke bawah, posisi ditutup.

Secara khusus, strategi ini mula-mula mengira MA cepat (smallMA) dan MA perlahan (bigMA). Kemudian ia mengira garis beli (buyMA), yang merupakan (100 - peratusBelowToBuy)% daripada MA perlahan. Apabila MA cepat melintasi di atas garis beli ke atas, pergi panjang; apabila mencapai keuntungan 1% atau memegang 7 bar tanpa keuntungan, tutup kedudukan.

Ringkasnya, strategi ini bertujuan untuk menangkap Lion Fissure antara MA untuk keuntungan jangka pendek.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Konsep yang mudah difahami dan dilaksanakan.

  2. Mudah backtesting. strategi secara langsung menggunakan TradingView terbina dalam backtester tanpa pelaksanaan tambahan.

  3. Penglihatan yang kuat. TradingView boleh menunjukkan isyarat perdagangan dan data statistik secara langsung pada carta.

  4. Risiko yang boleh dikawal. Strategi menetapkan keadaan mengambil keuntungan dan menghentikan kerugian untuk mengawal kerugian setiap perdagangan dengan berkesan.

  5. Pengguna boleh menyesuaikan parameter MA dan penunjuk lain agar sesuai dengan produk dan gaya perdagangan yang berbeza.

Analisis Risiko

Strategi ini juga mempunyai risiko berikut:

  1. Sinyal yang berpotensi berlebihan. Strategi MA berganda cenderung menghasilkan isyarat palsu semasa penyatuan.

  2. Kepercayaan satu penunjuk. Menggunakan hanya salib MA mengabaikan faktor lain, berpotensi mengakibatkan kualiti isyarat yang buruk.

  3. Pengoptimuman parameter yang sukar. Mencari kombinasi MA yang optimum memerlukan pengiraan yang luas.

  4. Kecenderungan backtest. Strategi MA berganda yang mudah sering melakukan lebih baik dalam backtest daripada perdagangan langsung.

  5. Stop loss yang sukar. Tahap stop loss tetap mungkin gagal menyesuaikan diri dengan keadaan pasaran yang berubah.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dari aspek berikut:

  1. Tambah penapis lain seperti jumlah dan turun naik untuk mengelakkan isyarat yang tidak berkesan semasa penyatuan.

  2. Menggabungkan bias trend untuk mengelakkan perdagangan kontra-trend. MA tempoh yang lebih lama boleh ditambah untuk menentukan arah trend.

  3. Gunakan pembelajaran mesin untuk mencari parameter optimum, seperti optimum parameter berurutan atau algoritma genetik.

  4. Meningkatkan strategi stop loss, seperti trailing stop loss dan adaptive stop loss untuk fleksibiliti yang lebih baik.

  5. Mengoptimumkan masa kemasukan menggunakan penunjuk lain untuk mengenal pasti titik kemasukan yang lebih berkemungkinan.

  6. Melakukan penyelidikan kuantitatif dan pengujian semula untuk meningkatkan kestabilan set parameter yang dioptimumkan.

  7. Membangunkan sistem perdagangan automatik untuk mengoptimumkan dan menilai kombinasi parameter secara sistematik.

Kesimpulan

Strategi imbangan celah singa adalah strategi permulaan yang sangat baik untuk pemula untuk belajar. Ia menggunakan logik silang MA berganda yang mudah dan menetapkan peraturan mengambil keuntungan dan menghentikan kerugian untuk menangkap perubahan harga jangka pendek. Strategi ini mudah difahami dan dilaksanakan, dan menunjukkan hasil backtest yang baik. Walau bagaimanapun, ia mengalami kesukaran pengoptimuman dan prestasi langsung yang dipersoalkan. Kita boleh meningkatkan strategi dengan menggabungkan penunjuk lain, mengoptimumkan parameter, dan membangunkan sistem perdagangan automatik. Secara keseluruhan, strategi imbangan celah singa menyediakan platform pembelajaran yang hebat untuk pemula perdagangan kuantitatif.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TraderHalai
// This script was born out of my quest to be able to display strategy back test statistics on charts to allow for easier backtesting on devices that do not natively support backtest engine (such as mobile phones, when I am backtesting from away from my computer). There are already a few good ones on TradingView, but most / many are too complicated for my needs.
//
//Found an excellent display backtest engine by 'The Art of Trading'. This script is a snippet of his hard work, with some very minor tweaks and changes. Much respect to the original author.
//
//Full credit to the original author of this script. It can be found here: https://www.tradingview.com/script/t776tkZv-Hammers-Stars-Strategy/?offer_id=10&aff_id=15271
//
// This script can be copied and airlifted onto existing strategy scripts of your own, and integrates out of the box without implementation of additional functions. I've also added Max Runup, Average Win and Average Loss per trade to the orignal script.
//
//Will look to add in more performance metrics in future, as I further develop this script.
//
//Feel free to use this display panel in your scripts and strategies.

//Thanks and enjoy! :)
//@version=5
// strategy("Strategy BackTest Display Statistics - TraderHalai", overlay=true, default_qty_value= 5, default_qty_type = strategy.percent_of_equity, initial_capital=10000,  commission_type=strategy.commission.percent, commission_value=0.1)

//DEMO basic strategy - Use your own strategy here -  Jaws Mean Reversion from my profile used here
source = input(title = "Source", defval = close)
smallMAPeriod = input(title = "Small Moving Average", defval = 2)
bigMAPeriod = input(title = "Big Moving Average", defval = 8)
percentBelowToBuy = input(title = "Percent below to buy %", defval = 1)

smallMA = ta.sma(source, smallMAPeriod)
bigMA =  ta.sma(source, bigMAPeriod) 
buyMA = ((100 - percentBelowToBuy) / 100) * ta.sma(source, bigMAPeriod)[0]

buy = ta.crossunder(smallMA, buyMA)
if(buy)
    strategy.entry("BUY", strategy.long)

if(strategy.openprofit >= strategy.position_avg_price * 0.01) // 1% profit target
    strategy.close("BUY")

if(ta.barssince(buy) >= 7) //Timed Exit, if you fail to make 1 percent in 7 candles.
    strategy.close("BUY")
    
///////////////////////////// --- BEGIN TESTER CODE --- ////////////////////////
// COPY below into your strategy to enable display
////////////////////////////////////////////////////////////////////////////////

// strategy.initial_capital = 50000
// // Declare performance tracking variables
// drawTester = input.bool(true, "Draw Tester")
// var balance = strategy.initial_capital
// var drawdown = 0.0
// var maxDrawdown = 0.0
// var maxBalance = 0.0
// var totalWins = 0
// var totalLoss = 0

// // Prepare stats table
// var table testTable = table.new(position.top_right, 5, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
//     _cellText = _title + "\n" + _value
//     table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)
    
// // Custom function to truncate (cut) excess decimal places
// truncate(_number, _decimalPlaces) =>
//     _factor = math.pow(10, _decimalPlaces)
//     int(_number * _factor) / _factor
    
// // Draw stats table
// var bgcolor = color.new(color.black,0)
// if drawTester
//     if barstate.islastconfirmedhistory
//         // Update table
//         dollarReturn = strategy.netprofit
//         f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
//         f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(truncate((strategy.wintrades/strategy.closedtrades)*100,2)) + "%", bgcolor, color.white)
//         f_fillCell(testTable, 1, 0, "Starting:", "$" + str.tostring(strategy.initial_capital), bgcolor, color.white)
//         f_fillCell(testTable, 1, 1, "Ending:", "$" + str.tostring(truncate(strategy.initial_capital + strategy.netprofit,2)), bgcolor, color.white)
//         f_fillCell(testTable, 2, 0, "Avg Win:", "$"+ str.tostring(truncate(strategy.grossprofit / strategy.wintrades, 2)), bgcolor, color.white)
//         f_fillCell(testTable, 2, 1, "Avg Loss:", "$"+ str.tostring(truncate(strategy.grossloss / strategy.losstrades, 2)), bgcolor, color.white)
//         f_fillCell(testTable, 3, 0, "Profit Factor:", str.tostring(truncate(strategy.grossprofit / strategy.grossloss,2)), strategy.grossprofit > strategy.grossloss ? color.green : color.red, color.white)
//         f_fillCell(testTable, 3, 1, "Max Runup:",  str.tostring(truncate(strategy.max_runup, 2 )), bgcolor, color.white)
//         f_fillCell(testTable, 4, 0, "Return:", (dollarReturn > 0 ? "+" : "") + str.tostring(truncate((dollarReturn / strategy.initial_capital)*100,2)) + "%", dollarReturn > 0 ? color.green : color.red, color.white)
//         f_fillCell(testTable, 4, 1, "Max DD:", str.tostring(truncate((strategy.max_drawdown / strategy.equity) * 100 ,2)) + "%", color.red, color.white)
// // --- END TESTER CODE --- ///////////////

Lebih lanjut