Strategi Dagangan Pembalikan Momentum

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

Ringkasan

Strategi ini berdasarkan konsep perdagangan pembalikan momentum. Ia menggunakan RSI, Stoch dan MACD untuk menentukan arah trend semasa, dan menetapkan stop loss dan mengambil keuntungan berdasarkan ATR, untuk melaksanakan strategi perdagangan automatik yang dapat menangkap pembalikan trend dengan cekap.

Logik Perdagangan

Strategi ini menggunakan RSI, Stoch dan MACD sebagai tiga penunjuk untuk menentukan arah trend semasa.

  • RSI(7): RSI di atas 50 menunjukkan trend menaik, manakala di bawah 50 trend menurun
  • Stoch ((%K, 14, 3, 3): %K di atas 50 adalah aliran menaik, di bawah 50 adalah aliran menurun
  • MACD ((12, 26, 9): MACD di atas garis isyarat adalah aliran menaik, di bawah adalah aliran menurun

Apabila ketiga-tiga penunjuk adalah bullish, warna bar ditetapkan ke hijau. Apabila semua bearish, warna bar ditetapkan ke merah. Jika terdapat perbezaan antara penunjuk, warna bar ditetapkan ke hitam.

Peraturan perdagangan adalah:

  • Apabila bar semasa berwarna hijau, dan bar sebelumnya berwarna hitam atau merah, pergi panjang.
  • Apabila bar semasa adalah merah, dan bar sebelumnya adalah hitam atau hijau, pergi pendek. harga kemasukan adalah 0.01 di bawah bar yang rendah.
  • Jika bar berubah menjadi merah atau hitam semasa kedudukan panjang, tutup perdagangan panjang.
  • Jika bar berubah menjadi hijau atau hitam semasa kedudukan pendek, tutup perdagangan pendek.

Strategi ini juga menggunakan ATR(7) untuk menetapkan stop loss dan mengambil keuntungan. Stop loss ditetapkan pada 1.5 kali ATR, dan mengambil keuntungan pada 3 kali ATR.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Menggunakan pelbagai penunjuk untuk menentukan trend dapat menapis penembusan palsu dengan berkesan. Kebarangkalian pembalikan trend yang tinggi apabila RSI, Stoch dan MACD semua bersetuju.

  2. Tetapan stop loss dan take profit ATR adalah munasabah. ATR dapat dengan berkesan mengesan turun naik pasaran. Dengan menggunakan kelipatan ATR, berhenti dan sasaran boleh diselaraskan secara dinamik berdasarkan keadaan pasaran.

  3. Logik yang mudah dan jelas, mudah difahami dan automatik.

Analisis Risiko

Risiko strategi ini termasuk:

  1. Kesalahan dalam penunjuk individu boleh mempengaruhi masa kemasukan. Boleh mempertimbangkan menyesuaikan parameter atau menambah lebih banyak penunjuk pengesahan untuk mengurangkan kesilapan.

  2. Saiz ATR sangat mempengaruhi perhentian dan sasaran. Pengiraan ATR yang salah boleh menyebabkan perhentian terlalu lebar atau sasaran terlalu ketat. Boleh menambah penunjuk tambahan untuk mengesahkan ATR.

  3. Kekurangan penentuan trend. Berfokus pada perdagangan pembalikan, analisis trend yang tidak mencukupi boleh menyebabkan whipsaws di pasaran yang berbeza. Boleh menambah penunjuk trend.

  4. Risiko overfitting. memerlukan pengujian balik yang menyeluruh untuk mengesahkan ketahanan parameter dan peraturan.

Arahan Penambahbaikan

Peningkatan yang mungkin untuk strategi ini:

  1. Penyesuaian atau penambahan penunjuk untuk meningkatkan ketepatan dalam menentukan titik pembalikan.

  2. Mengoptimumkan pengiraan ATR untuk mengesan turun naik dengan lebih baik. contohnya menggunakan nisbah ATR / Harga.

  3. Menambah penunjuk trend untuk mengelakkan whipsaws semasa pasaran berkisar.

  4. Mengoptimumkan pengurusan wang, seperti menyesuaikan saiz kedudukan berdasarkan pengeluaran.

  5. Pengoptimuman tempoh untuk menguji ketahanan merentasi jangka masa.

  6. Lebih banyak pengujian semula pada pelbagai produk dan tempoh masa untuk mengesahkan kebolehpercayaan.

Ringkasan

Strategi ini direka berdasarkan konsep pembalikan momentum, menggunakan gabungan RSI, Stoch dan MACD untuk mengenal pasti pembalikan, dengan hentian dan sasaran ATR dinamik. Ia membentuk sistem pembalikan trend yang agak lengkap. Kelebihan termasuk logik yang jelas dan hentian / sasaran yang munasabah. Kekurangan termasuk kesilapan isyarat dan kekurangan penapis trend. Penambahbaikan boleh dibuat dengan mengoptimumkan penunjuk, menambah trend, dan menyesuaikan saiz kedudukan. Ini dapat menjadikan strategi lebih mantap.


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