Strategi ini menggabungkan beberapa indikator teknis seperti RSI, ADX, ATR dan momentum untuk mengidentifikasi tren dan menangkap titik breakout.
Gunakan RSI, ADX, DI+, DI- dll untuk menentukan arah dan kekuatan tren. RSI menunjukkan tingkat overbought/oversold, ADX menunjukkan kekuatan tren, sementara DI+/DI- menunjukkan tren bullish/bearish. Indikator ini ditampilkan dalam tabel untuk referensi mudah.
Gunakan moving average untuk menentukan arah tren. EMA 5 & 9 hari mendefinisikan tren jangka pendek, WMA 21 hari tren jangka menengah dan WMA 60 hari tren jangka panjang.
Mengidentifikasi tingkat retracement Fibonacci utama 0,5, 0,618 yang sering bertindak sebagai zona support/resistance untuk pembalikan.
Tetapkan stop loss berdasarkan ATR dan stop loss % untuk mengendalikan risiko. ambil keuntungan berdasarkan ATR dan ambil keuntungan % untuk mengunci keuntungan.
Pertimbangkan pembalikan pada sinyal RSI overbought/oversold. Pertimbangkan tren naik ke golden cross dengan volume yang meningkat. Setel stop loss dan ambil keuntungan setelah masuk.
Kombinasi indikator meningkatkan akurasi keputusan tentang tren dan kekuatan.
Stop loss & take profit berbasis ATR mengontrol risiko secara efektif.
Fibonacci meningkatkan identifikasi titik pembalikan.
Filter volume menghindari pecah palsu ketika mengikuti tren.
Tabel memberikan gambaran yang jelas tentang nilai indikator untuk keputusan cepat.
Kemungkinan sinyal yang tidak akurat tidak dapat dihindari sepenuhnya, menyebabkan perdagangan yang salah. Dapat mengoptimalkan parameter untuk meningkatkan akurasi indikator.
ATR dan stop loss % mempengaruhi harga stop loss yang sebenarnya. pengaturan yang tidak tepat dapat meningkatkan risiko. membutuhkan penyetelan halus.
Filter volume tidak dapat sepenuhnya menghindari false breakout.
Tingkat Fibonacci tidak selalu dapat diandalkan.
Uji dan optimalkan parameter seperti RSI, ADX, ATR untuk menemukan kombinasi terbaik.
Uji kombinasi rata-rata bergerak yang berbeda untuk identifikasi tren terbaik.
Uji rasio stop loss/take profit yang berbeda untuk risiko-manfaat terbaik.
Pertimbangkan untuk menambahkan Bollinger Bands untuk memeriksa ekspansi volume.
Strategi ini menggabungkan analisis tren, identifikasi tingkat kunci, analisis volume dan banyak lagi. Optimasi parameter lebih lanjut dapat meningkatkan akurasi dan profitabilitas. Stop loss & take profit mengelola risiko dan memaksimalkan imbalan.
/*backtest start: 2022-12-22 00:00:00 end: 2023-12-28 00:00:00 period: 1d basePeriod: 1h 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/ // © amit74sharma135 //@version=5 strategy(" KritikSharma Strategy for NIFTY,BNIFTY,NG,CRUDE,WTICrude,BTC,GOLD,SILVER,COPPER", overlay=true) plotHVB = input.bool(defval=true, title='Plot HVB') plotPVT = input.bool(defval=false, title='Plot Pivots') hvbEMAPeriod = input.int(defval=12, minval=1, title='Volume EMA Period') hvbMultiplier = input.float(defval=1.5, title='Volume Multiplier') pivotLookup = input.int(defval=2, minval=1, maxval=15, title='Pivot Lookup') ShowAvg1 = input(false, title="Show trend line", group="TREND LINE Moving Average", tooltip="Display a trend line based on EMA.") showLines1 = input.bool(defval=false, title="Draw EMA,WMA Line") ema200_length= input.int(defval=200, minval=1, maxval=500, title='ema1') ema300_length= input.int(defval=300, minval=1, maxval=500, title='ema2') wma60_length= input.int(defval=60, minval=1, maxval=100, title='wma60') ema5 = ta.ema(close, 5) ema9 = ta.ema(close, 9) wma21=ta.wma(close,21) wma60=ta.wma(close,wma60_length) len1 = input.int(11, minval=1, maxval=500, title="Length", group="TREND LINE Moving Average", tooltip="Set EMA length.") ema=ta.ema(close, len1) rsiLength = input.int(14, title="RSI Length", minval=1, maxval=50, group="Table ADX, RSI, DI values with Red, Green, Yellow Signal") adxLength = input.int(14, title="ADX Length", minval=1, maxval=50, group="Table ADX, RSI, DI values with Red, Green, Yellow Signal") adxThreshold = input.int(20, title="ADX Threshold", group="Table ADX, RSI, DI values with Red, Green, Yellow Signal") diThreshold = input.int(25, title="DI Threshold", group="Table ADX, RSI, DI values with Red, Green, Yellow Signal") atr = input.int(14, title="ATR values", group="Table ADX, RSI, DI values with Red, Green, Yellow Signal") //////////////////////////////////////////////// hvbBullColor = color.rgb(181, 37, 225) hvbBearColor = #ffbb00ad pvtTopColor = color.new(#154bef, 0) pvtBottomColor = color.new(#b81657, 0) //////////////////// Pivots //////////////////// hih = ta.pivothigh(high, pivotLookup, pivotLookup) lol = ta.pivotlow(low , pivotLookup, pivotLookup) top1 = ta.valuewhen(hih, high[pivotLookup], 0) bottom1 = ta.valuewhen(lol, low [pivotLookup], 0) plot(top1, offset=-pivotLookup, linewidth=1, color=(top1 != top1[1] ? na : (plotPVT ? pvtTopColor : na)), title="Pivot Top") plot(bottom1, offset=-pivotLookup, linewidth=1, color=(bottom1 != bottom1[1] ? na : (plotPVT ? pvtBottomColor : na)), title="Pivot Bottom") //////////////////////////////////////Functions isUp(index) => close[index] > open[index] isDown(index) => close[index] < open[index] isObUp(index) => isDown(index + 1) and isUp(index) and close[index] > high[index + 1] isObDown(index) => isUp(index + 1) and isDown(index) and close[index] < low[index + 1] ////////////////// High Volume Bars ////////////////// volEma = ta.ema(volume, hvbEMAPeriod) isHighVolume = volume > (hvbMultiplier * volEma) barcolor(plotHVB and isUp(0) and isHighVolume ? hvbBullColor : na, title="Bullish HVB") barcolor(plotHVB and isDown(0) and isHighVolume ? hvbBearColor : na, title="Bearish HVB") // Calculate ADX, DI+, DI-,RSI,ATR [diplus, diminus, adx] = ta.dmi(adxLength, adxThreshold) rsi=ta.rsi(close,rsiLength) atrValue=ta.atr(atr) // Check for oversold,Overbought condition oversold_condition = rsi < 20 overbought_condition = rsi > 80 // Plot Trend Line trendColor = ema5 > ema9 ? color.rgb(22, 203, 28) : ema5 < ema9 ? color.rgb(224, 15, 15) : na plot(ShowAvg1? ema:na, color=trendColor, linewidth=6, title="Trend Line Upper Ribbon") /////////////////////////plot ema,wma plot(showLines1 ? ta.ema(close, ema200_length) : na, color=color.rgb(102, 110, 103), style=plot.style_line, title="ema1",linewidth = 4) plot(showLines1 ? ta.ema(close, ema300_length) : na, color=color.rgb(18, 20, 18), style=plot.style_line, title="ema2",linewidth = 4) plot(showLines1 ? ta.wma(close, wma60_length) : na, color=color.rgb(238, 75, 211), style=plot.style_line, title="wma60",linewidth = 3) // Plot signals with smaller text plotshape(oversold_condition ? 1 : na, title="RSI Oversold Signal", color=color.rgb(238, 8, 8), style=shape.labelup, location=location.belowbar, text="RSI OS", textcolor=color.rgb(17, 17, 17), size=size.tiny) plotshape(overbought_condition ? 1 : na, title="RSI Overbought Signal", color=#08f710, style=shape.labeldown, location=location.abovebar, text="RSI OB", textcolor=color.rgb(8, 8, 8), size=size.tiny) /////////////////////////////////////////////////////////////////////////////////////////////// // Define input options showTable = input(false, title="Show Table ADX, RSI, DI values with RED, GREEN and YELLOW Signal") tablePosition = input.string("Top Right", title="Table Position", options=["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left", "Bottom Center"]) // Define colors for the table cells colorRsi = rsi > 55 ? color.green : rsi < 45 ? color.red : color.yellow colorDiPlus = diplus > diThreshold ? color.green : color.red colorDiMinus = diminus > diThreshold ? color.red : color.green colorAdx = (rsi < 45 and diplus < diThreshold and diminus > diThreshold and adx > adxThreshold) ? color.red : (rsi > 55 and diplus > diThreshold and diminus < diThreshold and adx > adxThreshold) ? color.green : color.yellow // Create the table var table testTable = na if showTable var position = tablePosition == "Top Right" ? position.top_right : tablePosition == "Top Left" ? position.top_left : tablePosition == "Top Center" ? position.top_center : tablePosition == "Bottom Right" ? position.bottom_right : tablePosition == "Bottom Left" ? position.bottom_left : position.bottom_center testTable := table.new(position, columns = 4, rows = 2, border_width = 1, border_color = color.black, frame_width = 1, frame_color = color.black) // Column Headings table.cell(table_id = testTable, column = 0, row = 0, text = " DI+ ", bgcolor=color.aqua, text_color = color.white) table.cell(table_id = testTable, column = 1, row = 0, text = " DI- ", bgcolor=color.aqua, text_color = color.white) table.cell(table_id = testTable, column = 2, row = 0, text = " ADX ", bgcolor=color.aqua, text_color = color.white) table.cell(table_id = testTable, column = 3, row = 0, text = " RSI ", bgcolor=color.aqua, text_color = color.white) // Column values table.cell(table_id = testTable, column = 0, row = 1, text = str.tostring(math.round(diplus, 0)), bgcolor=colorDiPlus, text_color = color.black) table.cell(table_id = testTable, column = 1, row = 1, text = str.tostring(math.round(diminus, 0)), bgcolor=colorDiMinus, text_color = color.black) table.cell(table_id = testTable, column = 2, row = 1, text = str.tostring(math.round(adx, 0)), bgcolor=colorAdx, text_color = color.black) table.cell(table_id = testTable, column = 3, row = 1, text = str.tostring(math.round(rsi, 0)), bgcolor=colorRsi, text_color = color.black) // Initialize variables to keep track of the previous condition var bool prev_oversold = na var bool prev_overbought = na plotshape(ta.crossover(ema,wma60) and isHighVolume, style=shape.labelup, location=location.belowbar, color=#1adaf3,size=size.small) plotshape(ta.crossunder(ema,wma60) and isHighVolume, style=shape.labeldown, location=location.abovebar, color=#f30aa9, size=size.small) ////////////////////////////////////////////////// plotFibRetracement = input.bool(title="Plot Fibonacci Retracement", defval=false) fibLevel1 = input.float(title="Fibonacci Level", defval=0.5, minval=0, maxval=1, step=0.01) fibLevel2 = input.float(title="Fibonacci Level", defval=0.618, minval=0, maxval=1, step=0.01) fibLevel3 = input.float(title="Fibonacci Level", defval=0.368, minval=0, maxval=1, step=0.01) // Calculate Fibonacci Levels highPrice = ta.highest(high, 100) lowPrice = ta.lowest(low, 100) priceRange = highPrice - lowPrice fibonacciLevel1 = lowPrice + priceRange * fibLevel1 fibonacciLevel2 = lowPrice + priceRange * fibLevel2 fibonacciLevel3 = lowPrice + priceRange * fibLevel3 // Plot Fibonacci Levels if plotFibRetracement line.new(x1=bar_index[1], y1=fibonacciLevel1, x2=bar_index, y2=fibonacciLevel1, color=color.blue, width=2) line.new(x1=bar_index[1], y1=fibonacciLevel2, x2=bar_index, y2=fibonacciLevel2, color=color.blue, width=2) line.new(x1=bar_index[1], y1=fibonacciLevel3, x2=bar_index, y2=fibonacciLevel3, color=color.blue, width=2) // Draw Trendline var float trendlineY1 = na var float trendlineY2 = na if bar_index % 50 == 0 trendlineY1 := low trendlineY2 := high // line.new(x1=bar_index, y1=trendlineY1, x2=bar_index - 100, y2=trendlineY2, color=#3708a5, width=2) ////////////////////////////////////////////////entry, exit, profit booking, stoploss/////////////////////// if (rsi > 63 and adx> adxThreshold and diplus>diThreshold) strategy.entry("Buy", strategy.long, qty = 1) if (rsi < 40 and adx> adxThreshold and diminus>diThreshold) strategy.entry("Sell", strategy.short, qty = 1) // Set stop loss and take profit levels stop_loss = input(1.5, title = "Stop Loss (%)") * atrValue take_profit = input(4.0, title = "Take Profit (%)") * atrValue strategy.exit("Take Profit/Stop Loss", from_entry = "Buy", stop = close - stop_loss, limit = close + take_profit) strategy.exit("Take Profit/Stop Loss", from_entry = "Sell", stop = close + stop_loss, limit = close - take_profit) ////////////////////////