Strategi Perdagangan Pembalikan Momentum

Penulis:ChaoZhang, Tanggal: 2023-10-07 16:52:05
Tag:

Gambaran umum

Strategi ini didasarkan pada konsep perdagangan pembalikan momentum. Ini menggunakan RSI, Stoch dan MACD untuk menentukan arah tren saat ini, dan menetapkan stop loss dan take profit berdasarkan ATR, untuk menerapkan strategi perdagangan otomatis yang dapat menangkap pembalikan tren secara efisien.

Logika Perdagangan

Strategi ini menggunakan RSI, Stoch dan MACD sebagai tiga indikator untuk menentukan arah tren saat ini.

  • RSI ((7): RSI di atas 50 menunjukkan tren naik, sementara di bawah 50 tren turun
  • Stoch ((%K, 14, 3, 3): %K di atas 50 adalah tren naik, di bawah 50 adalah tren turun
  • MACD ((12, 26, 9): MACD di atas garis sinyal adalah tren naik, di bawahnya adalah tren turun

Ketika ketiga indikator bullish, warna bar ditetapkan menjadi hijau. Ketika semua bearish, warna bar ditetapkan menjadi merah. Jika ada perbedaan antara indikator, warna bar ditetapkan menjadi hitam.

Aturan perdagangan adalah:

  • Ketika bar saat ini berwarna hijau, dan bar sebelumnya berwarna hitam atau merah, pergi panjang.
  • Ketika bar saat ini berwarna merah, dan bar sebelumnya berwarna hitam atau hijau, pilih short.
  • Jika bar berubah menjadi merah atau hitam selama posisi panjang, tutup perdagangan panjang.
  • Jika bar berubah menjadi hijau atau hitam selama posisi pendek, tutup perdagangan pendek.

Strategi ini juga menggunakan ATR(7) untuk mengatur stop loss dan take profit. Stop loss ditetapkan pada 1,5 kali ATR, dan take profit pada 3 kali ATR.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Menggunakan beberapa indikator untuk menentukan tren dapat secara efektif menyaring terobosan palsu. Probabilitas pembalikan tren yang tinggi ketika RSI, Stoch dan MACD semuanya setuju.

  2. Dengan menggunakan kelipatan ATR, stop dan target dapat disesuaikan secara dinamis berdasarkan kondisi pasar.

  3. Logika sederhana dan jelas, mudah dimengerti dan otomatis.

Analisis Risiko

Risiko dari strategi ini meliputi:

  1. Kesalahan dalam indikator individu dapat mempengaruhi waktu masuk. Dapat mempertimbangkan penyesuaian parameter atau menambahkan lebih banyak indikator konfirmasi untuk mengurangi kesalahan.

  2. Ukuran ATR secara signifikan mempengaruhi pemberhentian dan target. Perhitungan ATR yang salah dapat mengakibatkan pemberhentian terlalu lebar atau target terlalu ketat. Dapat menambahkan indikator tambahan untuk mengkonfirmasi ATR.

  3. Kurangnya penentuan tren. Berfokus pada perdagangan pembalikan, analisis tren yang tidak memadai dapat menyebabkan whipsaws di pasar yang berkisar. Dapat menambahkan indikator tren.

  4. Risiko overfitting. membutuhkan backtesting menyeluruh untuk memverifikasi keandalan parameter dan aturan.

Arah Peningkatan

Peningkatan yang mungkin untuk strategi ini:

  1. Menyesuaikan atau menambahkan indikator untuk meningkatkan presisi dalam menentukan titik pembalikan. misalnya menambahkan Bollinger Bands untuk memeriksa tingkat overbought / oversold.

  2. Mengoptimalkan perhitungan ATR untuk melacak volatilitas dengan lebih baik.

  3. Menambahkan indikator tren untuk menghindari whipsaws selama pasar berkisar.

  4. Mengoptimalkan pengelolaan uang, seperti menyesuaikan ukuran posisi berdasarkan penarikan.

  5. Optimasi periode untuk menguji ketahanan di seluruh kerangka waktu.

  6. Lebih banyak backtesting pada berbagai produk dan periode waktu untuk memverifikasi keandalan.

Ringkasan

Strategi ini dirancang berdasarkan konsep pembalikan momentum, menggunakan RSI, Stoch dan MACD combo untuk mengidentifikasi pembalikan, dengan berhenti dan target ATR dinamis. Ini membentuk sistem pembalikan tren yang relatif lengkap. Keuntungan termasuk logika yang jelas dan berhenti / target yang wajar. Kekurangan termasuk kesalahan sinyal dan kurangnya filter tren. Perbaikan dapat dilakukan dengan mengoptimalkan indikator, menambahkan tren, dan menyesuaikan ukuran posisi. Ini dapat membuat strategi lebih kuat.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © jwitt98
//The PowerX strategy - based on the rules outlined in the book "The PowerX Strategy: How to Trade Stocks and Options in Only 15 Minutes a Day" by Markus Heitkoetter

//@version=5
strategy("PowerX", overlay=true)
strategy.initial_capital = 50000
longEntry = "Enter long"
shortEntry = "Enter short"
longExit = "Exit long"
shortExit = "Exit short"

//*********************************Begin inputs*********************************

//get time range inputs and set time range bool
timeRangeGroup = "Select the trading range"
startDate = input(timestamp("1 Jan 2021 00:00 +0000"), "Start date", "Select the start date for the trading range", "", timeRangeGroup)
endDate = input(timestamp("1 Jan 2050 00:00 +0000"), "End date", "Select the end date for the trading range", "", timeRangeGroup)
isInTimeRange = true

//get long/short inputs
positionsAllowedGroup = "Select the direction(s) of trades to allow"
isLongsAllowed = input.bool(true, "Allow long positions", "Check the box if you want to allow long positions", "", positionsAllowedGroup)
isShortsAllowed = input.bool(true, "Allow short positions", "Check the box if you want to allow short positions", "", positionsAllowedGroup)

//get the stop loss and profit target multiples.  Per the PowerX rules the ratio shoud be 1:2.  1.5 and 3 are defaults
adrMultuplesGroup="Select the multipliers for the stop loss and profit targets"
stopLossMultiple = input.float(1.5, "Stop loss multiple", 0.1, 10, 0.1, "The ADR is multiplied by the stop loss multiple to calculate the stop loss", group=adrMultuplesGroup)
profitTargetMultiple=input.float(3.0, "Profit target multiple", 0.1, 10, 0.1, "The ADR is multiplied by the profit target multiple to calculate the profit target", group=adrMultuplesGroup)

//get the option to use the money management stategy or not.  This is a fixed ratio type management system
moneyManagementGroup="Money management"
isUsingMoneyManagement=input.bool(false, "Use money management", "Check the box if you want to use a fixed ratio type money management system, such as the type described in PowerX", group=moneyManagementGroup)
initial_riskPercent=input.float(2.0, "Percent risk per trade", .1, 100, .1, "The percentage of capital you want to risk when starting out.  This will increase or decrease base on the money management rules.  Only applicable if money managent is used", group=moneyManagementGroup)/100
isRiskDowsideLimited=input.bool(false, "Keep risk at or above the set point", "Check the box if you don't want the risk to fall below the set \"risk per trade\" percentage, for example, when your equity is underwater. Only applicable if money management is used", "", moneyManagementGroup)
initial_riskPerTrade=initial_riskPercent * strategy.initial_capital 
riskFactor = 0.0
currentProfit = 0.0
currentRisk = 0.0

//*********************************End inputs*********************************

//*********************************Begin money management*********************************

if(isUsingMoneyManagement)
    currentProfit := strategy.equity - strategy.initial_capital
    if(currentProfit < 0)
        currentProfit:=math.abs(currentProfit)
        riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1)
        currentRisk := 1/riskFactor * initial_riskPercent * strategy.initial_capital
        if(isRiskDowsideLimited)
            currentRisk := initial_riskPerTrade
    else
        riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1)
        currentRisk := riskFactor * initial_riskPercent * strategy.initial_capital
        
plot(strategy.equity, "Strategy equity")
plot(currentRisk, "Current risk")
plot(riskFactor, "Risk Factor")

//*********************************End money management*********************************


//*********************************Begin indicators*********************************
//4 indicators are used in this strategy, RSI(7), Stochastics(14, 3, 3), MACD(12, 26, 9), and ADR(7)

rsiVal = ta.rsi(close, 7)//this checks out
plot(rsiVal, "RSI(7)", color.lime)

stochKVal = ta.sma(ta.sma(ta.stoch(close, high, low, 14),3),3)//this formula checks out
plot(stochKVal, "Stoch %K", color.lime)

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(histLine, "MACD Hist", color.lime)

adr = ta.sma(high, 7) - ta.sma(low, 7)
plot(adr, "Average daily range", color.orange)


//*********************************End indicators*********************************

//*********************************Define the bar colors*********************************

greenBar = rsiVal > 50 and stochKVal > 50 and histLine > 0
redBar = rsiVal < 50 and stochKVal < 50 and histLine < 0
blackBar = not greenBar and not redBar

color currentBarColor = switch
    greenBar => color.green
    redBar => color.red
    blackBar => color.gray //because black is too hard to see in dark mmode
    => color.yellow
    
barcolor(currentBarColor)

//*********************************End defining the bar colors*********************************

//*********************************Define the entry, stop loss and profit target*********************************

longStopLimit = high + .01
longProfitTarget = high + (profitTargetMultiple * adr)
longStopLoss = high - (stopLossMultiple * adr)

shortStopLimit = low - .01
shortProfitTarget = low - (profitTargetMultiple * adr)
shortStopLoss = low + (stopLossMultiple * adr)

qtyToTrade= math.floor(currentRisk / (stopLossMultiple * adr))//only if using money management
if(qtyToTrade * high > strategy.equity)
    qtyToTrade := math.floor(strategy.equity / high)

//*********************************End defining stop loss and profit targets*********************************

//*********************************Execute trades, set rules, stop loss and profit targets*********************************

if (greenBar and not greenBar[1] and isInTimeRange and isLongsAllowed)
    if(isUsingMoneyManagement)
        strategy.order(longEntry, strategy.long, qtyToTrade, limit=longStopLimit, stop=longStopLimit)
        //strategy.order(longEntry, strategy.long, qtyToTrade, stop=longStopLimit)
    else
        strategy.order(longEntry, strategy.long, limit=longStopLimit,stop=longStopLimit)
        //strategy.order(longEntry, strategy.long, stop=longStopLimit)
    strategy.exit("Long limit/stop", from_entry=longEntry, limit=longProfitTarget, stop=longStopLoss)
    

if(blackBar or redBar)
    strategy.cancel(longEntry)
    strategy.close(longEntry, longExit)
    

if (redBar and not redBar[1] and isInTimeRange and isShortsAllowed)
    if(isUsingMoneyManagement)
        strategy.order(shortEntry, strategy.short, qtyToTrade, limit=shortStopLimit, stop=shortStopLimit)
        //strategy.order(shortEntry, strategy.short, qtyToTrade, stop=shortStopLimit)
    else
        strategy.order(shortEntry, strategy.short, limit=shortStopLimit, stop=shortStopLimit)
        //strategy.order(shortEntry, strategy.short, stop=shortStopLimit)
    strategy.exit("Short limit/stop", from_entry=shortEntry, limit=shortProfitTarget, stop=shortStopLoss)

if(blackBar or greenBar)
    strategy.cancel(shortEntry)
    strategy.close(shortEntry, shortExit)
    

//*********************************End execute trades, set rules, stop loss and profit targets*********************************






















Lebih banyak