Ide utama dari strategi ini adalah untuk pergi panjang ketika MA cepat melintasi MA lambat, pergi pendek ketika MA cepat melintasi di bawah MA lambat, dan mengatur mengambil keuntungan setelah memasuki posisi.
Strategi ini terdiri dari bagian-bagian utama berikut:
Menghitung rata-rata bergerak cepat dan lambat. periode MA cepat adalah 20 dan periode MA lambat adalah 50.
Tentukan kondisi masuk. pergi panjang ketika MA cepat melintasi MA lambat, pergi pendek ketika MA cepat melintasi di bawah MA lambat.
Menentukan arah tren. Catat jumlah bar sejak sinyal panjang dan pendek, menilai apakah itu adalah tren naik atau turun.
Catat harga saat sinyal perdagangan dipicu sebagai harga masuk.
Setel garis take profit. Untuk long, take profit adalah tinggi * (1 + take profit percentage); untuk short, take profit adalah rendah * (1 - take profit percentage).
Mengikuti mengambil keuntungan garis mengambil keuntungan terus menyesuaikan, bergerak persentase tetap mendukung arah menguntungkan.
Ketika harga menyentuh garis keuntungan, tutup posisi untuk keuntungan.
Hanya ketika harga pertama kali menembus tingkat aktivasi, trailing take profit akan dipicu.
Keuntungan terbesar dari strategi ini adalah memaksimalkan keuntungan dengan mengikuti mengambil keuntungan. Ketika harga bergerak ke arah yang menguntungkan, garis mengambil keuntungan terus bergerak ke arah yang menguntungkan untuk mengunci keuntungan.
Ini juga menambahkan penyaringan tren dengan penyeberangan MA untuk menghindari whipsaws yang tidak perlu di pasar non-trending.
Dengan menggabungkan tren, masuk, mengambil keuntungan, itu dapat naik tren untuk mendapatkan keuntungan terus menerus dan memaksimalkan pengembalian.
Risiko utama adalah bahwa hal ini membutuhkan pergerakan harga yang memadai untuk mencapai mengambil keuntungan.
Juga, sering mengambil keuntungan memicu di pasar bergolak dapat menyebabkan kerugian.
Dan parameter yang tidak tepat seperti persentase keuntungan yang terlalu tinggi dapat meningkatkan risiko.
Risiko dapat dikelola dengan menetapkan persentase keuntungan yang tepat, menghindari perdagangan di pasar yang berbelit-belit, atau menggunakan stop loss.
Strategi dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan parameter MA dengan menguji periode yang berbeda untuk menemukan kombinasi yang lebih baik.
Mengoptimalkan fitur aktivasi dengan menguji tingkat aktivasi yang berbeda.
Mengoptimalkan mengambil persentase keuntungan melalui backtesting.
Tambahkan stop loss pada tingkat yang tepat untuk mengendalikan risiko.
Uji filter tambahan seperti volume, ATR stop dll.
Uji di pasar yang berbeda seperti saham, forex, crypto.
Strategi ini mengintegrasikan beberapa modul seperti trend, entry, trailing take profit untuk memaksimalkan keuntungan dengan menunggang tren. tetapi risiko harus dikelola, menghindari pasar bergolak, mengoptimalkan parameter sebelum digunakan.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-06 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //@author=Daveatt SystemName = "BEST Trailing Profit Strategy" // This string is to personalize the text that appears with your orders on the chart through strategy() calls and entry/exit markers, and in the alert default message. // Although leaving it empty will not cause problems in study mode, TradeId = "BEST" // These values are used both in the strategy() header and in the script's relevant inputs as default values so they match. // Unless these values match in the script's Inputs and the TV backtesting Properties, results between them cannot be compared. InitCapital = 1000000 InitPosition = 100 InitCommission = 0.075 InitPyramidMax = 1 CalcOnorderFills = true CalcOnTick = true DefaultQtyType = strategy.fixed DefaultQtyValue = strategy.fixed Precision = 2 Overlay=true // strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay, // pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent, // commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2) // strategy(title=SystemName, shorttitle=SystemName, overlay=true, // pyramiding=0, default_qty_value=100, precision=7, currency=currency.USD, // commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=10000) // // Author: Daveatt // Revision: R0.1 Beta // Date: 8-Dec-2019 // // inputs src = input(defval=close, type=input.source, title="Source") slowLength = input(20, "Fast Length",minval=2,step=1) fastLength = input(50, "Fast Length",minval=2,step=1) // Calculate moving averages fastSMA = sma(src, slowLength) slowSMA = sma(src, fastLength) // Calculate trading conditions enterLong = crossover(fastSMA, slowSMA) enterShort = crossunder(fastSMA, slowSMA) // trend states since_buy = barssince(enterLong) since_sell = barssince(enterShort) buy_trend = since_sell > since_buy sell_trend = since_sell < since_buy change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1]) // get the entry price entry_price = valuewhen(enterLong or enterShort, src, 0) // Plot moving averages plot(series=fastSMA, color=color.teal) plot(series=slowSMA, color=color.orange) // Plot the entries plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small) plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small) /////////////////////////////// //======[ Take Profit ]======// /////////////////////////////// // Use TP? useTP = input(true, "Use take profit") // TP trailing ProfitTrailPerc = input(1.0, "Trailing Profit (%)",minval=0,step=0.5,type=input.float) * 0.01 use_TP_Trigger = input(true, "Use Take Profit Trigger") // Will trigger the take profit trailing once reached takeProfitTrigger = input(3.0, "Take Profit Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01 // ttp := ttp>tp ? tp : ttp takeprofitPriceTrigger = 0.0 takeprofitPriceTrigger := if (use_TP_Trigger) if (buy_trend) entry_price * (1 + takeProfitTrigger) else entry_price * (1 - takeProfitTrigger) else -1 //plot(entry_price, title='entry_price', transp=100) var TP_Trigger_Long_HIT = false TP_Trigger_Long_HIT := useTP and use_TP_Trigger and buy_trend and high >= takeprofitPriceTrigger ? true : TP_Trigger_Long_HIT[1] var TP_Trigger_Short_HIT = false TP_Trigger_Short_HIT := useTP and use_TP_Trigger and sell_trend and low <= takeprofitPriceTrigger ? true : TP_Trigger_Short_HIT[1] display_long_TP_trigger = useTP and buy_trend and TP_Trigger_Long_HIT == false and takeprofitPriceTrigger != -1 display_short_TP_trigger = useTP and sell_trend and TP_Trigger_Short_HIT == false and takeprofitPriceTrigger != -1 display_TP_trigger = display_long_TP_trigger or display_short_TP_trigger //🔷🔷🔷 // @hugo: Will display the TP trigger as long as not hit // once the TP trigger is hit, the TP trailing will activate plot(display_TP_trigger ? takeprofitPriceTrigger : na, title='takeprofitPriceTrigger', transp=0, color=color.orange, style=plot.style_cross, linewidth=3) longTrailTP= 0.0, shortTrailTP = 0.0 // Trailing Profit // Start trailing once trigger is reached longTrailTP := if useTP and buy_trend tpValue = high * (1 + ProfitTrailPerc) max(tpValue, longTrailTP[1]) else 0 shortTrailTP := if useTP and sell_trend tpValue = low * (1 - ProfitTrailPerc) min(tpValue, shortTrailTP[1]) else 999999 //plot(longTrailTP, title='debug longTrailTP', transp=100) //plot(shortTrailTP, title='debug shortTrailTP', transp=100) ////////////////////////////////////////////////////////////////////////////////////////// //*** TRAILING TAKE PROFIT HIT CONDITIONS TO BE USED IN ALERTS ***// ////////////////////////////////////////////////////////////////////////////////////////// //🔷🔷🔷 // @hugo: I use crossover/crossunder for the alerts to trigger the events only once cond_long_trail_tp_hit = useTP and buy_trend and crossover(high, longTrailTP[1]) and (TP_Trigger_Long_HIT or use_TP_Trigger == false) cond_short_trail_tp_hit = useTP and sell_trend and crossunder(low, shortTrailTP[1]) and (TP_Trigger_Short_HIT or use_TP_Trigger == false) // 🔷🔷🔷 // Plot take profits values for confirmation // Display the trailing TP until not hit plot(series= useTP and buy_trend and high <= longTrailTP and (TP_Trigger_Long_HIT or use_TP_Trigger == false) ? longTrailTP : na, color=color.aqua, style=plot.style_circles, linewidth=2, title="Long Trail TP") plot(series= useTP and sell_trend and low >= shortTrailTP and (TP_Trigger_Short_HIT or use_TP_Trigger == false) ? shortTrailTP : na, color=color.aqua, style=plot.style_circles, linewidth=2, title="Short Trail TP") close_long = cond_long_trail_tp_hit close_short = cond_short_trail_tp_hit // Submit entry orders strategy.entry("EL", long=true, when=enterLong) strategy.close("EL", when=close_long) //if (enterShort) strategy.entry("ES", long=false, when=enterShort) strategy.close("ES", when=close_short) /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////// ALERTS //////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////// //* Put Entry Alerts below *// ////////////////////////////// // IN STUDY MODE ONLY // ⚠️⚠️⚠️ For alerts on the signal itself ⚠️⚠️⚠️ //alertcondition(buy_event, "Open Long", "LONG") //alertcondition(sell_event, "Open Short", "SHORT") // For the closes you will want to trigger these alerts on condition with alert // option "Once Per Bar" for TP and SL if change_trend TP_Trigger_Long_HIT := false TP_Trigger_Short_HIT := false