
Strategi ini adalah strategi perdagangan kuantitatif Bitcoin automatik berdasarkan indikator super trend. Ia menggunakan indikator super trend untuk menilai trend pasaran, digabungkan dengan prinsip kawalan risiko ATR, untuk mencapai perdagangan dua hala jangka panjang.
Strategi ini menggunakan indikator supertrend untuk menentukan arah trend pasaran. Apabila indikator supertrend berubah dari tren menurun ke tren naik, masukkan lebih banyak; Apabila indikator supertrend berubah dari tren naik ke tren menurun, masukkan lebih banyak.
Khususnya, strategi ini pertama kali mengira panjang indikator ATR 14 kitaran, untuk menentukan jarak berhenti setiap satu dengan mengalikannya dengan ATR stop loss multiplier (seperti 1.5 kali). Kemudian menghitung indikator super trend, parameter indikator menggunakan nilai lalai (ATR kitaran 9, faktor super trend 2.5). Isyarat perdagangan dikeluarkan apabila indikator super trend mengubah arah.
Selepas masuk, stop loss ditetapkan di atas atau di bawah stop loss ATR. Stop loss pertama dihitung berdasarkan nisbah risiko-keuntungan, dengan asumsi 0.75, iaitu jarak berhenti adalah 0.75 kali jarak berhenti. Apabila harga mencapai stop loss pertama, tutup 50% kedudukan dan pindahkan stop loss ke harga pembukaan, dan kemudian masukkan stop loss untuk mendapatkan keuntungan.
Dengan cara ini, strategi ini dapat memastikan keuntungan melalui penutupan sebahagian dengan memastikan risiko kerugian terkawal, sesuai dengan strategi pelaburan memegang jangka panjang.
Kelebihan utama strategi ini adalah nisbah risiko-keuntungan yang baik, yang boleh dipegang dalam jangka masa sederhana dan panjang. Kelebihan khusus adalah:
Menggunakan super trend untuk menilai trend pasaran, menyaring bunyi pasaran, dan mengelakkan kehilangan trend utama.
ATR dinamik mengesan kehilangan, kawalan yang boleh dipercayai kehilangan tunggal.
Kaedah penangguhan sebahagian mengunci keuntungan, risiko dan keuntungan yang lebih tinggi.
Apabila harga mencapai Stop Loss 1, anda boleh menyesuaikan Stop Loss kepada harga bukaan untuk memastikan keuntungan dan meningkatkan kestabilan strategi.
Logik urus niaga yang sangat mudah, mudah difahami, dan parameter yang boleh disesuaikan.
Ia boleh digunakan pada data harian atau frekuensi tinggi di bursa utama, dengan fleksibiliti yang tinggi.
Strategi ini juga mempunyai risiko, yang tertumpu kepada beberapa aspek:
Kejadian kejutan pasaran menyebabkan jurang atau melompat, tidak dapat dihentikan, menghadapi kerugian yang lebih besar. Risiko boleh dikurangkan dengan menyesuaikan kelipatan stop loss ATR dengan munasabah.
Indikator super trend gagal menilai, menyebabkan kesilapan isyarat perdagangan. ATR dan kombinasi parameter super trend boleh disesuaikan dengan baik untuk pengoptimuman.
Sebahagian daripada nisbah kedudukan rendah ditetapkan terlalu tinggi untuk mendapatkan keuntungan yang cukup trend. Sebahagian daripada nisbah kedudukan rendah harus disesuaikan dengan pasaran yang berbeza.
Frekuensi dagangan mungkin terlalu tinggi atau terlalu rendah. Parameter super trend harus diselaraskan untuk mencari keseimbangan terbaik.
Terdapat banyak ruang untuk pengoptimuman dalam strategi ini, yang tertumpu kepada beberapa aspek berikut:
Cuba pelbagai ATR berhenti, seperti ATR standard, berhenti momentum, berhenti Brin dan lain-lain untuk mengoptimumkan strategi berhenti.
Uji indikator trend super untuk parameter yang berbeza untuk mencari kombinasi parameter yang optimum. Pengoptimuman parameter multidimensi boleh dilakukan menggunakan pengoptimuman langkah demi langkah atau algoritma genetik.
Cuba letakkan penanda stop kedua di atas stop loss, seperti saluran Donchian, untuk membuat stop loss lebih dipercayai.
Uji perkadaran separa simpanan yang berbeza untuk mencari keseimbangan terbaik antara keuntungan dan risiko. Perkadaran separa simpanan juga boleh disesuaikan secara dinamik.
Meneroka strategi yang berasaskan pembelajaran mesin seperti penutupan dinamik, penyesuaian kedudukan dinamik.
Strategi ini adalah strategi kuantitatif yang berdasarkan pada trend penilaian super trend, ATR dinamik berhenti rugi, sebahagian berhenti menang. Ia mempunyai keseimbangan risiko-keuntungan yang baik, sesuai untuk perdagangan automatik. Strategi ini dapat mengoptimumkan dengan ketara overpricing, cara berhenti rugi, cara keuntungan, dan lain-lain.
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
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/
// Developed by © StrategiesForEveryone
//@version=5
strategy("SuperTrend Strategy for BTCUSD 4H", overlay=true, process_orders_on_close = true, initial_capital = 100, default_qty_type = strategy.cash, precision = 2, slippage = 50, commission_value = 0.03, backtest_fill_limits_assumption = 50)
// ------ Date filter (obtained from ZenAndTheArtOfTrading) ---------
initial_date = input(title="Initial date", defval=timestamp("10 Feb 2014 13:30 +0000"), group="Time filter", tooltip="Enter the start date and time of the strategy")
final_date = input(title="Final date", defval=timestamp("01 Jan 2030 19:30 +0000"), group="Time filter", tooltip="Enter the end date and time of the strategy")
dateFilter(int st, int et) => time >= st and time <= et
colorDate = input.bool(defval=false, title="Date background", tooltip = "Add color to the period of time of the strategy tester")
bgcolor(colorDate and dateFilter(initial_date, final_date) ? color.new(color.blue, transp=90) : na)
// ------------ Super Trend ----------
atrPeriod = input(9, "ATR Length SuperTrend")
factor = input.float(2.5, "Factor SuperTrend", step = 0.05)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
show_supertrend = input.bool(defval = false, title="Show supertrend ?", group = "Appearance")
bodyMiddle = plot(show_supertrend ? ((open + close) / 2) : na, display=display.none)
upTrend = plot(show_supertrend and direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(show_supertrend and direction > 0 ? supertrend : na, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
// ---------- Atr stop loss (obtained from garethyeo)
source_atr = input(close, title='Source', group = "Atr stop loss", inline = "A")
length_atr = input.int(14, minval=1, title='Period', group = "Atr stop loss" , inline = "A")
multiplier = input.float(1.5, minval=0.1, step=0.1, title='Atr multiplier', group = "Atr stop loss", inline = "A", tooltip = "Defines the stop loss distance based on the Atr stop loss indicator")
shortStopLoss = source_atr + ta.atr(length_atr) * multiplier
longStopLoss = source_atr - ta.atr(length_atr) * multiplier
show_atr_stoploss = input.bool(defval=false, title="Show Atr stop loss ?", group = "Appearance")
plot(show_atr_stoploss ? longStopLoss : na, color=color.white, style = plot.style_circles)
plot(show_atr_stoploss ? shortStopLoss : na, color=color.white, style = plot.style_circles)
// ------------- Money management --------------
strategy_contracts = strategy.equity / close
distance_sl_atr_long = -1 * (longStopLoss - close) / close
distance_sl_atr_short = (shortStopLoss - close) / close
risk = input.float(2.5, '% Account risk per trade', step=1, group = "Risk management for trades", tooltip = "Percentage of total account to risk per trade")
long_amount = strategy_contracts * (risk / 100) / distance_sl_atr_long
short_amount = strategy_contracts * (risk / 100) / distance_sl_atr_short
// ---------- Risk management ---------------
risk_reward_breakeven_long= input.float(title="Risk/reward for breakeven long", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_take_profit_long= input.float(title="Risk/reward for take profit long", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_breakeven_short= input.float(title="Risk/reward for break even short", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_take_profit_short= input.float(title="Risk/reward for take profit short", defval=0.75, step=0.05, group = "Risk management for trades")
tp_percent=input.float(title="% of trade for first take profit", defval=50, step=5, group = "Risk management for trades", tooltip = "Closing percentage of the current position when the first take profit is reached.")
// ------------ Trade conditions ---------------
bought = strategy.position_size > 0
sold = strategy.position_size < 0
long_supertrend=ta.crossover(close, supertrend)
short_supertrend=ta.crossunder(close, supertrend)
var float sl_long = na
var float sl_short = na
var float be_long = na
var float be_short = na
var float tp_long = na
var float tp_short = na
if not bought
sl_long:=na
if not sold
sl_short:=na
// ---------- Strategy -----------
// Long position
if not bought and long_supertrend
sl_long:=longStopLoss
long_stoploss_distance = close - longStopLoss
be_long := close + long_stoploss_distance * risk_reward_breakeven_long
tp_long:=close+(long_stoploss_distance*risk_reward_take_profit_long)
strategy.entry('L', strategy.long, long_amount, alert_message = "Long")
strategy.exit("Tp", "L", stop=sl_long, limit=tp_long, qty_percent=tp_percent)
strategy.exit('Exit', 'L', stop=sl_long)
if high > be_long
sl_long := strategy.position_avg_price
strategy.exit("Tp", "L", stop=sl_long, limit=tp_long, qty_percent=tp_percent)
strategy.exit('Exit', 'L', stop=sl_long)
if bought and short_supertrend
strategy.close("L", comment="CL")
// Short position
if not sold and short_supertrend
sl_short:=shortStopLoss
short_stoploss_distance=shortStopLoss - close
be_short:=((short_stoploss_distance*risk_reward_breakeven_short)-close)*-1
tp_short:=((short_stoploss_distance*risk_reward_take_profit_short)-close)*-1
strategy.entry("S", strategy.short, short_amount, alert_message = "Short")
strategy.exit("Tp", "S", stop=sl_short, limit=tp_short, qty_percent=tp_percent)
strategy.exit("Exit", "S", stop=sl_short)
if low < be_short
sl_short:=strategy.position_avg_price
strategy.exit("Tp", "S", stop=sl_short, limit=tp_short, qty_percent=tp_percent)
strategy.exit("Exit", "S", stop=sl_short)
if sold and long_supertrend
strategy.close("S", comment="CS")
// ---------- Draw position on chart -------------
if high>tp_long
tp_long:=na
if low<tp_short
tp_short:=na
if high>be_long
be_long:=na
if low<be_short
be_short:=na
show_position_on_chart = input.bool(defval=true, title="Draw position on chart ?", group = "Appearance", tooltip = "Activate to graphically display profit, stop loss and break even")
position_price = plot(show_position_on_chart? strategy.position_avg_price : na, style=plot.style_linebr, color = color.new(#ffffff, 10), linewidth = 1)
sl_long_price = plot(show_position_on_chart and bought ? sl_long : na, style = plot.style_linebr, color = color.new(color.red, 10), linewidth = 1)
sl_short_price = plot(show_position_on_chart and sold ? sl_short : na, style = plot.style_linebr, color = color.new(color.red, 10), linewidth = 1)
tp_long_price = plot(strategy.position_size>0 and show_position_on_chart? tp_long : na, style = plot.style_linebr, color = color.new(#11eb47, 10), linewidth = 1)
tp_short_price = plot(strategy.position_size<0 and show_position_on_chart? tp_short : na, style = plot.style_linebr, color = color.new(#11eb47, 10), linewidth = 1)
breakeven_long = plot(strategy.position_size>0 and high<be_long and show_position_on_chart ? be_long : na , style = plot.style_linebr, color = color.new(#00ff40, 60), linewidth = 1)
breakeven_short = plot(strategy.position_size<0 and low>be_short and show_position_on_chart ? be_short : na , style = plot.style_linebr, color = color.new(#00ff40, 60), linewidth = 1)
position_profit_long = plot(bought and show_position_on_chart and strategy.openprofit>0 ? close : na, style = plot.style_linebr, color = color.new(#4cd350, 10), linewidth = 1)
position_profit_short = plot(sold and show_position_on_chart and strategy.openprofit>0 ? close : na, style = plot.style_linebr, color = color.new(#4cd350, 10), linewidth = 1)
fill(plot1 = position_price, plot2 = position_profit_long, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = position_profit_short, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = sl_long_price, color = color.new(color.red,90))
fill(plot1 = position_price, plot2 = sl_short_price, color = color.new(color.red,90))
fill(plot1 = position_price, plot2 = tp_long_price, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = tp_short_price, color = color.new(color.green,90))