
Strategi ini menggunakan sistem dua garis rata untuk mencari peluang terobosan yang berpotensi dalam saham atau mata wang digital tertentu. Prinsip dasarnya adalah membeli saham atau mata wang digital apabila garis rata jangka pendek bangkit dari bawah garis rata jangka panjang. Menjual saham atau mata wang digital apabila harga menguji semula garis rata jangka panjang.
Strategi ini menggunakan purata bergerak sederhana ((SMA) dari dua kitaran yang berbeza sebagai isyarat perdagangan. Kitaran SMA pertama lebih panjang, mewakili arah trend keseluruhan. Kitaran SMA kedua lebih pendek, digunakan untuk menangkap turun naik harga jangka pendek.
Apabila SMA jangka pendek memakai SMA jangka panjang dari bawah, mewakili harga dalam trend naik secara keseluruhan, oleh itu strategi membuka kedudukan multihead. Apabila harga turun untuk menguji semula SMA jangka panjang, menandakan berakhirnya pullback jangka pendek, ketika ini strategi mempertimbangkan untuk menghentikan kerugian atau mengambil keuntungan untuk menutup kedudukan.
Selain itu, strategi ini juga menetapkan syarat overbought dan overbought untuk mengelakkan dagangan dalam keadaan yang melampau. Hanya apabila kedua-dua syarat crossover dan penilaian yang munasabah dipenuhi secara serentak, kedudukan akan dibuka.
Strategi ini masih boleh dioptimumkan lagi:
Strategi ini mengintegrasikan kelebihan trend mengikuti dan meminda perdagangan, menggunakan sistem dua garis lurus untuk menilai peluang yang muncul. Pada masa yang sama, terbina dalam tertentu syarat overbuy oversell, dapat mengelakkan kedudukan yang tidak perlu dibuka. Ini adalah strategi perdagangan kuantitatif yang sangat praktikal, yang patut dikaji dan dioptimumkan.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2 = (ma2/ma1-1) < too_deep
too_thin2 = (ma2/ma1-1) > too_thin
// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1 = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na
// Entry and close orders
if buy_condition
strategy.entry('Long',strategy.long)
if buy_condition[1]
buy_price := open
if close_condition1 or close_condition2
strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
buy_price := na
plot(ma1,color = color.blue)
plot(ma2,color = color.orange)