Strategi sokongan dan rintangan dinamik berdasarkan data sejarah

Penulis:ChaoZhang, Tarikh: 2023-11-28 17:00:13
Tag:

img

Ringkasan

Strategi ini secara dinamik mengira tahap sokongan dan rintangan berdasarkan harga tinggi, rendah dan dekat dalam sejarah, dan menghasilkan isyarat perdagangan dengan sewajarnya.

Logika Strategi

  1. Hitung purata harga tinggi, rendah dan dekat tempoh sebelumnya sebagai titik pusingan (PP).

  2. Hitung 3 garis sokongan: S1 = 2PP - harga tertinggi; S2 = PP - (R1-S1); S3 = harga terendah - 2(harga tertinggi - PP).

  3. Hitung 3 garisan rintangan: R1 = 2PP - harga terendah; R2 = PP + (R1-S1); R3 = harga tertinggi + 2(PP - harga terendah).

  4. Mengambil kedudukan panjang apabila harga menembusi garis rintangan, mengambil kedudukan pendek apabila harga menembusi garis sokongan.

Analisis Kelebihan

  1. Tahap sokongan dan rintangan dinamik berdasarkan data sejarah dapat menangkap perubahan struktur pasaran tepat pada masanya.

  2. Tetapan sokongan dan rintangan pelbagai lapisan membolehkan pengoptimuman pengurusan risiko yang lebih baik.

  3. Isyarat perdagangan yang mudah dan intuitif dan mekanisme stop loss.

Analisis Risiko

  1. Tahap harga rujukan yang disediakan oleh data sejarah mungkin tidak sah dalam senario turun naik yang tinggi.

  2. Peralihan antara kedudukan panjang dan pendek harus mengambil kira kos dagangan.

  3. Kualiti data perlu dijamin untuk mengelakkan kesilapan pengiraan.

Arahan pengoptimuman

  1. Pertimbangkan untuk memasukkan rujukan data sejarah seperti purata bergerak 100 hari dan lain-lain.

  2. Mengoptimumkan saiz kedudukan, contohnya menyesuaikan saiz kedudukan berdasarkan turun naik.

  3. Tambah strategi stop loss seperti trailing stop loss atau stop loss berasaskan risiko.

Ringkasan

Strategi ini menyediakan tahap harga rujukan sokongan dan rintangan berbilang lapisan berdasarkan sejarah. Ia mempunyai logik yang mudah dan mudah untuk kedudukan jangka menengah hingga panjang. Sementara itu, risiko di bawah pasaran dan kos perdagangan turun naik yang tinggi harus dipantau. Pengoptimuman lanjut boleh menjadikan strategi yang kukuh di bawah persekitaran yang kompleks.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/06/2020
// Pivot points simply took the high, low, and closing price from the previous period and 
// divided by 3 to find the pivot. From this pivot, traders would then base their 
// calculations for three support, and three resistance levels. The calculation for the most 
// basic flavor of pivot points, known as ‘floor-trader pivots’, along with their support and 
// resistance levels.
//
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Pivot Point V2", shorttitle="Pivot Point V2", overlay = true)
res = input(title="Resolution", type=input.resolution, defval="D")
SellFrom = input(title="Sell from ", defval="R1", options=["R1", "R2", "R3"])
BuyFrom = input(title="Buy from ", defval="S1", options=["S1", "S2", "S3"])
width = input(1, minval=1)
reverse = input(false, title="Trade reverse")
xHigh  = security(syminfo.tickerid,res, high)
xLow   = security(syminfo.tickerid,res, low)
xClose = security(syminfo.tickerid,res, close)
vPP = (xHigh+xLow+xClose) / 3
vS1 = 2*vPP - xHigh 
vR1 = 2*vPP-xLow
vS2 = vPP - (vR1 - vS1)
vR2 = vPP + (vR1 - vS1)
vS3 = xLow - 2 * (xHigh - vPP)
vR3 = xHigh + 2 * (vPP - xLow) 
pos = 0
S = iff(BuyFrom == "S1", vS1, 
      iff(BuyFrom == "S2", vS2,
         iff(BuyFrom == "S3", vS3,0)))
B = iff(SellFrom == "R1", vR1, 
      iff(SellFrom == "R2", vR2,
         iff(SellFrom == "R3", vR3,0)))
pos := iff(close > B, 1,
       iff(close < S, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Lebih lanjut