
Strategi ini menggunakan harga tertinggi, harga terendah dan harga penutupan pada hari perdagangan sebelumnya sebagai tahap sokongan dan rintangan pada hari itu, melakukan lebih banyak ketika memecahkan tahap rintangan, dan membuat kosong ketika menguji kembali tahap sokongan, merupakan strategi pemecahan yang tipikal.
Kod pertama mendefinisikan fungsi untuk mengira tahap rintangan sokongan, calculatedSupportResistance, yang mengambil harga tertinggi, terendah dan harga penutupan hari perdagangan sebelumnya sebagai tahap rintangan sokongan hari itu.
Kemudian fungsi ini dipanggil dalam logik utama untuk mendapatkan tiga bit harga dan menunjukkannya dalam peta.
Dalam logik pengulangan, jika harga penutupan lebih rendah daripada harga terendah hari sebelumnya dan harga semasa lebih tinggi daripada harga terendah itu merupakan penembusan, maka lebih banyak; jika harga penutupan lebih tinggi daripada harga tertinggi hari sebelumnya dan harga semasa lebih rendah daripada harga tertinggi yang merupakan penembusan, maka kosong.
Model terobosan seperti ini membolehkan penilaian trend dan penjanaan isyarat perdagangan.
Kaedah pencegahan:
Strategi ini secara keseluruhannya adalah strategi penembusan yang tipikal, mudah dan intuitif, membina rintangan sokongan pada hari itu melalui data hari perdagangan sebelumnya, mengesan semula titik tersebut. Kelebihannya adalah mudah difahami untuk dilaksanakan, dan rintangan sokongan dapat dilihat secara langsung; Kelemahannya adalah terdapat risiko penembusan palsu, tidak dapat menentukan kesinambungan trend. Langkah seterusnya dapat dioptimumkan dari segi menentukan keberkesanan penembusan, mengawal risiko, mengoptimumkan pengurusan dana dan sebagainya.
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Support and Resistance with Backtesting", overlay=true)
// Function to calculate support and resistance levels
calculateSupportResistance() =>
highPrevDay = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
lowPrevDay = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
closePrevDay = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
[highPrevDay, lowPrevDay, closePrevDay]
// Call the function to get support and resistance levels
[supResHigh, supResLow, supResClose] = calculateSupportResistance()
// Plotting support and resistance levels
plot(supResHigh, color=color.red, linewidth=2, title="Previous Day High")
plot(supResLow, color=color.green, linewidth=2, title="Previous Day Low")
plot(supResClose, color=color.blue, linewidth=2, title="Previous Day Close")
// Backtesting logic
backtestCondition = close[1] < supResLow and close > supResLow
strategy.entry("Long", strategy.long, when=backtestCondition)
// Plotting buy/sell arrows for backtesting
plotarrow(backtestCondition ? 1 : na, colorup=color.green, offset=-1, transp=0)