Strategi Dynamic Take Profit Following Trend mengesan trend jangka panjang dan penarikan balik jangka pendek untuk mencapai membeli rendah dan menjual tinggi, dengan tujuan mengejar trend menaik. Strategi ini juga menggunakan unit turun naik untuk mengesan saiz kemenangan dan kerugian supaya ia dapat digunakan untuk semua syiling tanpa perlu bimbang tentang perubahan peratusan.
Logik pembelian strategi ini adalah: apabila trend kenaikan jangka panjang muncul (EMA 200 hari naik, RSI 200 hari lebih besar daripada 51) dan penurunan jangka pendek berlaku (dua candlestick terakhir menunjukkan harga penutupan menurun), kedudukan panjang dibuka.
Logik penjualan adalah: mengambil keuntungan apabila harga meningkat lebih daripada 1 unit turun naik; hentikan kerugian apabila harga menurun lebih daripada 2 unit turun naik.
Unit turun naik dikira sebagai: 2 kali deviasi standard harga penutupan dalam 50 hari terakhir. Ini boleh mengesan keadaan turun naik syiling yang berbeza secara automatik tanpa memerlukan tetapan peratusan manual.
Kelebihan terbesar strategi ini adalah bahawa ia dapat secara dinamik mengesan saiz turun naik syiling yang berbeza dan menetapkan tahap stop loss / mengambil keuntungan dengan sewajarnya. Ini mengelakkan masalah tetapan peratusan tetap dan dapat menyesuaikan diri dengan lebih banyak syiling.
Satu lagi kelebihan adalah menggabungkan penghakiman jangka panjang dan jangka pendek dapat menyaring pecah palsu dengan berkesan. Menggunakan trend jangka panjang untuk menilai syiling yang berpotensi naik dan menggabungkannya dengan isyarat mundur jangka pendek dapat mengelakkan isyarat palsu seperti memerah Bollinger.
Risiko terbesar strategi ini adalah tetapan unit stop loss / take profit. Jika turun naik terlalu tinggi, jarak mengambil keuntungan mungkin terlalu dekat untuk terus mengejar trend menaik; jika turun naik terlalu rendah, stop loss mungkin mencetuskan terlalu cepat. Ini memerlukan EMA jangka panjang sebagai bantuan untuk mengelakkan kesilapan dalam penilaian unit turun naik.
Risiko lain adalah strategi bergantung pada trend jangka pendek. Jika terdapat trend menaik jangka panjang tanpa penarikan balik jangka pendek, masa masuk akan terlepas. Ini mungkin memerlukan penunjuk sokongan tambahan.
Strategi ini boleh dioptimumkan ke arah berikut:
Tambah penilaian EMA jangka panjang untuk mengelakkan kesilapan unit turun naik
Tambah penunjuk seperti jumlah dagangan untuk menilai trend, mengurangkan pergantungan pada lilin jangka pendek
Mengoptimumkan syarat kemasukan dan keluar, menetapkan peraturan kemasukan yang lebih ketat
Gabungkan algoritma pembelajaran mesin untuk menentukan arah trend, mencapai kadar kemenangan yang lebih tinggi
Strategi mengambil keuntungan dinamik mengikuti trend mempunyai logika yang jelas di terasnya
/*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"}] */ // @version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © BHD_Trade_Bot strategy(shorttitle='Take Profit On Trend', title='Take Profit On Trend (by BHD_Trade_Bot)', overlay=true, initial_capital = 15, default_qty_type = strategy.cash, default_qty_value = 15, commission_type=strategy.commission.percent, commission_value=0.1) //Backtest Time start_day = 1 start_month = 1 start_year = 2021 end_day = 1 end_month = 1 end_year = 2050 start_time = timestamp(start_year, start_month, start_day, 00, 00) end_time = timestamp(end_year, end_month, end_day, 23, 59) is_back_test_time() => time >= start_time and time <= end_time ? true : false // Last bar h1_last_bar = (timenow - time)/1000/60/60 < 2 // EMA ema50 = ema(close, 50) ema200 = ema(close, 200) // RSI length 200 rsi200 = rsi(close, 200) // Bollinger Bands length 50 bb50 = 2 * stdev(close, 50) // BHD Unit bhd_unit = sma(bb50, 100) bb50_upper = ema50 + bhd_unit bb50_lower = ema50 - bhd_unit // All n candles is going down all_body_decrease(n) => isValid = true for i = 0 to (n - 1) if (close[i] > close[i + 1]) isValid := false break isValid // ENTRY // Long-term uptrend entry_condition1 = rsi200 > 51 // Short-term downtrend entry_condition2 = all_body_decrease(2) ENTRY_CONDITION = entry_condition1 and entry_condition2 if (ENTRY_CONDITION and is_back_test_time()) strategy.entry("entry", strategy.long) // CLOSE CONDITIONS // Price increase 1 BHD unit TAKE_PROFIT = close > strategy.position_avg_price + bhd_unit // Price decrease 2 BHD unit STOP_LOSS = close < strategy.position_avg_price - bhd_unit * 2 CLOSE_CONDITION = TAKE_PROFIT or STOP_LOSS if (CLOSE_CONDITION or h1_last_bar) strategy.close("entry") // Draw plot(ema50) plot(ema200, color=color.yellow) plot(bb50_upper) plot(bb50_lower)