Strategi ini menggunakan Average True Range (ATR) dan indeks CHOP sebagai indikator teknis utama untuk mengidentifikasi dan melacak tren. Ini masuk ketika indeks menembus rel atas dan bawah, dikombinasikan dengan arah tren sebagai sinyal masuk; dan keluar dengan stop loss atau take profit ketika indeks kembali memasuki area sabuk.
Gunakan ATR untuk menghitung ukuran kotak dan membangun saluran Renko untuk menentukan arah tren harga.
Menggunakan indeks CHOP untuk menilai apakah pasar cocok untuk perdagangan. Indeks ini menggabungkan harga tertinggi, harga terendah dan ATR. Ketika berada di antara 38.2-61.8, ini menunjukkan volatilitas pasar yang rendah; jika tidak, ini menandakan volatilitas tinggi dan pasar perdagangan yang tidak cocok.
Ketika indeks CHOP memecahkan rel atas 61.8, harga memasuki tren menurun. Jika EMA cepat jangka pendek juga menunjukkan harga memimpin, pergi pendek. Sebaliknya, ketika CHOP memecahkan rel bawah 38.2 dan EMA jangka pendek naik, pergi panjang.
Gunakan strategi stop loss/take profit. Ketika harga kembali memasuki area sabuk 38.2-61.8 CHOP, tutup posisi dengan stop loss atau take profit.
Strategi ini menggabungkan penilaian tren dan kontrol volatilitas, yang dapat menangkap tren harga dan mengendalikan risiko.
Saluran Renko yang dibangun oleh ATR dapat secara efektif melacak tren harga.
Indeks CHOP menilai tingkat volatilitas pasar untuk menghindari perdagangan yang salah dalam fluktuasi yang keras.
Menggabungkan EMA cepat untuk menentukan arah tren jangka pendek menghindari operasi terbalik.
Strategi stop loss/take profit mengontrol kerugian tunggal.
Risiko utama yang dihadapi strategi ini:
Pada pasar sisi, sinyal saluran ATR dan CHOP dapat menghasilkan sinyal yang salah.
Kombinasi indikator teknis tunggal tidak dapat sepenuhnya menghindari kerugian.
Posisi stop loss yang diatur terlalu longgar dapat menyebabkan oversized loss tunggal.
Strategi ini dapat dioptimalkan dalam aspek berikut:
Meningkatkan indikator tambahan lainnya untuk menentukan sinyal, seperti pola candlestick, volume dll untuk meningkatkan akurasi sinyal.
Mengoptimalkan parameter ATR dan CHOP untuk menangkap fluktuasi harga dengan lebih baik.
Tetapkan posisi stop loss/take profit yang dinamis untuk margin keuntungan yang lebih besar dan stop loss yang lebih cepat.
Dengan benar melonggarkan stop loss range setelah menentukan tren utama untuk mendapatkan lebih banyak keuntungan dalam tren.
Strategi ini mengintegrasikan indikator teknis yang umum digunakan dan sederhana & praktis. Dengan penyesuaian parameter dan optimasi, efek pelacakan yang memuaskan dapat diperoleh. Tetapi masih membutuhkan penilaian manual tren utama dan tidak dapat sepenuhnya otomatis. Ini dapat berfungsi sebagai alat pengambilan keputusan tambahan dan referensi untuk strategi lain.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 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/ // © sharatgbhat //@version=4 strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500) maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float) // strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity) method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method") methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value") pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source") useClose = pricesource == "Close" useOpenClose = pricesource == "Open / Close" or useClose useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume") isOscillating = input(defval=false, type=input.bool, title="Oscillating") normalize = input(defval=false, type=input.bool, title="Normalize") vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume op = useClose ? close : open hi = useOpenClose ? close >= op ? close : op : high lo = useOpenClose ? close <= op ? close : op : low if method == "ATR" methodvalue := atr(round(methodvalue)) if method == "Part of Price" methodvalue := close / methodvalue currclose = float(na) prevclose = nz(currclose[1]) prevhigh = prevclose + methodvalue prevlow = prevclose - methodvalue currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose direction = int(na) direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1]) directionHasChanged = change(direction) != 0 directionIsUp = direction > 0 directionIsDown = direction < 0 barcount = 1 barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount vol := not directionHasChanged ? vol[1] + vol : vol res = barcount > 1 ? vol / barcount : vol plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume") length = input(14, minval=1) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(ci, "CHOP", color=#2962FF, offset = offset) band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed) band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background") MomentumBull = close>ema(close,8) MomentumBear = close<ema(close,8) Tradecon = crossunder(ci,61.8) if (MomentumBull and directionIsUp and Tradecon) strategy.entry("Buy", strategy.long) if (MomentumBear and directionIsDown and Tradecon ) strategy.entry("Sell", strategy.short) strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10) strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)