Strategi beli tinggi dan jual rendah berdasarkan garis bahagian emas pangsi


Tarikh penciptaan: 2023-12-29 16:48:06 Akhirnya diubah suai: 2023-12-29 16:48:06
Salin: 1 Bilangan klik: 720
1
fokus pada
1621
Pengikut

Strategi beli tinggi dan jual rendah berdasarkan garis bahagian emas pangsi

Gambaran keseluruhan

Strategi ini menghasilkan strategi perdagangan yang tinggi dan rendah dengan mengira titik-titik yang berbeza dalam tempoh masa sebagai kawasan harga utama, dan menggunakan prinsip garis perpecahan emas untuk menentukan arah trend.

Prinsip Strategi

  1. Hitung harga penutupan, harga tertinggi, dan harga terendah untuk tempoh masa yang berbeza.

  2. Berdasarkan harga terobosan naik turun, menilai kawasan harga yang anda berada sekarang. Ia dibahagikan kepada lima kawasan membeli dan lima kawasan menjual.

  3. Isikan isyarat beli di kawasan beli, isikan isyarat jual di kawasan jual, gunakan strategi beli tinggi dan jual rendah.

Analisis kelebihan

  1. Menggunakan pelbagai kitaran masa untuk menilai trend, dan mengelakkan diri anda dari gangguan pasaran.

  2. Ia juga menggabungkan sokongan klasik dan sokongan pemisahan emas untuk meningkatkan kebolehpercayaan sokongan.

  3. Untuk mengelakkan risiko kerugian, anda perlu menentukan masa untuk memasuki pasaran dengan mengkaji kawasan harga.

  4. Menggunakan strategi jual beli tinggi, mematuhi peraturan perdagangan trend, dan mengelakkan perdagangan berlawanan arah.

Analisis risiko

  1. Titik sokongan mungkin tidak berfungsi, perlu berhati-hati dengan pecahnya.

  2. Mengelakkan pengesanan kerugian yang tidak baik dan meningkatkan kerugian.

  3. Kos transaksi juga akan mempengaruhi hasil akhir.

Arah pengoptimuman

  1. Anda boleh menguji parameter yang berbeza, seperti parameter jangka masa, parameter arah perdagangan, dan lain-lain, untuk mengoptimumkan strategi.

  2. Ia boleh digabungkan dengan petunjuk lain untuk menentukan trend dan mengelakkan penembusan palsu.

  3. Anda boleh menambah mekanisme penangguhan kerugian untuk mengawal kerugian tunggal.

ringkaskan

Strategi ini mengintegrasikan kaedah analisis teknikal klasik dengan strategi perdagangan trend, menggunakan zon penyokong untuk menentukan masa masuk ke pasaran, dan menggunakan prinsip pembelian tinggi dan jualan rendah, yang dapat mengawal risiko perdagangan dengan berkesan, yang patut diperiksa dan dioptimumkan di lapangan.

Kod sumber strategi
/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("BuyHighSellLow - Pivot points", overlay=true, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)
Source = input(close)
resolution = input("4D", type=input.resolution)
HTFMultiplier = input(4, title="Higher Timeframe multiplier (Used when resolution is set to Same as Symbol)", minval=2, step=1)
//ppType = input(title="Pivot points type", defval="classic", options=["classic", "fib"])
ppType = "fib"
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestBars = input(title="Backtest from ", defval=10, minval=1, maxval=30)
backtestFrom = input(title="Timeframe", defval="years", options=["days", "months", "years"])
hideBands = input(true)
f_multiple_resolution(HTFMultiplier) => 
    target_Res_In_Min = timeframe.multiplier * HTFMultiplier * (
      timeframe.isseconds   ? 1. / 60. :
      timeframe.isminutes   ? 1. :
      timeframe.isdaily     ? 1440. :
      timeframe.isweekly    ? 7. * 24. * 60. :
      timeframe.ismonthly   ? 30.417 * 24. * 60. : na)

    target_Res_In_Min     <= 0.0417       ? "1S"  :
      target_Res_In_Min   <= 0.167        ? "5S"  :
      target_Res_In_Min   <= 0.376        ? "15S" :
      target_Res_In_Min   <= 0.751        ? "30S" :
      target_Res_In_Min   <= 1440         ? tostring(round(target_Res_In_Min)) :
      tostring(round(min(target_Res_In_Min / 1440, 365))) + "D"

f_getBackTestTimeFrom(backtestFrom, backtestBars)=>
    byDate = backtestFrom == "days"
    byMonth = backtestFrom == "months"
    byYear = backtestFrom == "years"
    
    date = dayofmonth(timenow)
    mth = month(timenow)
    yr = year(timenow)
    
    leapYearDaysInMonth = array.new_int(12,0)
    array.set(leapYearDaysInMonth,0,31)
    array.set(leapYearDaysInMonth,1,29)
    nonleapYearDaysInMonth = array.new_int(12,0)
    array.set(leapYearDaysInMonth,0,31)
    array.set(leapYearDaysInMonth,1,28)
    
    restMonths = array.new_int(10,0)
    array.set(leapYearDaysInMonth,0,31)
    array.set(leapYearDaysInMonth,1,30)
    array.set(leapYearDaysInMonth,2,31)
    array.set(leapYearDaysInMonth,3,30)
    array.set(leapYearDaysInMonth,4,31)
    array.set(leapYearDaysInMonth,5,31)
    array.set(leapYearDaysInMonth,6,30)
    array.set(leapYearDaysInMonth,7,31)
    array.set(leapYearDaysInMonth,8,30)
    array.set(leapYearDaysInMonth,9,31)
    
    array.concat(leapYearDaysInMonth,restMonths)
    array.concat(nonleapYearDaysInMonth,restMonths)
    isLeapYear = yr % 4 == 0 and (year%100 != 0 or year%400 == 0)
    numberOfDaysInCurrentMonth = isLeapYear ? array.get(leapYearDaysInMonth, mth-2) : array.get(nonleapYearDaysInMonth, mth-2)
    if(byDate)
        mth := (date - backtestBars) < 0 ? mth - 1 : mth
        yr := mth < 1 ? yr - 1 : yr
        mth := mth < 1 ? 1 : mth
        date := (date - backtestBars) < 0 ? numberOfDaysInCurrentMonth - backtestBars + date + 1 : date - backtestBars + 1
    if(byMonth)
        date := 1
        yr := (mth - (backtestBars%12)) < 0 ? yr - int(backtestBars/12) - 1 : yr - int(backtestBars/12)
        mth := mth - (backtestBars%12) + 1
    if(byYear)
        date := 1
        mth := 1
        yr := yr - backtestBars
    [date, mth, yr]

f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)

f_getClassicPivots(HIGHprev, LOWprev, CLOSEprev)=>
    PP = (HIGHprev + LOWprev + CLOSEprev) / 3
    R1 = PP * 2 - LOWprev
    S1 = PP * 2 - HIGHprev
    R2 = PP + (HIGHprev - LOWprev)
    S2 = PP - (HIGHprev - LOWprev)
    R3 = PP * 2 + (HIGHprev - 2 * LOWprev)
    S3 = PP * 2 - (2 * HIGHprev - LOWprev)
    R4 = PP * 3 + (HIGHprev - 3 * LOWprev)
    S4 = PP * 3 - (3 * HIGHprev - LOWprev)
    R5 = PP * 4 + (HIGHprev - 4 * LOWprev)
    S5 = PP * 4 - (4 * HIGHprev - LOWprev)
    [R5, R4, R3, R2, R1, PP, S1, S2, S3, S4, S5]
    
f_getFibPivots(HIGHprev, LOWprev, CLOSEprev)=>
    PP = (HIGHprev + LOWprev + CLOSEprev) / 3
    R1 = PP + 0.382 * (HIGHprev - LOWprev)
    S1 = PP - 0.382 * (HIGHprev - LOWprev)
    R2 = PP + 0.618 * (HIGHprev - LOWprev)
    S2 = PP - 0.618 * (HIGHprev - LOWprev)
    R3 = PP + (HIGHprev - LOWprev)
    S3 = PP - (HIGHprev - LOWprev)
    R4 = PP + 1.41 * (HIGHprev - LOWprev)
    S4 = PP - 1.41 * (HIGHprev - LOWprev)
    R5 = PP + 1.65 * (HIGHprev - LOWprev)
    S5 = PP - 1.65 * (HIGHprev - LOWprev)
    [R5, R4, R3, R2, R1, PP, S1, S2, S3, S4, S5]
    
f_getPivotPoints(HTFMultiplier, resolution, ppType)=>
    derivedResolution = resolution == ""? f_multiple_resolution(HTFMultiplier) : resolution
    HIGHprev = f_secureSecurity(syminfo.tickerid, derivedResolution, high)
    LOWprev = f_secureSecurity(syminfo.tickerid, derivedResolution, low)
    CLOSEprev = f_secureSecurity(syminfo.tickerid, derivedResolution, close)
    [R5, R4, R3, R2, R1, PP, S1, S2, S3, S4, S5] = f_getClassicPivots(HIGHprev, LOWprev, CLOSEprev)
    [Rf5, Rf4, Rf3, Rf2, Rf1, PPf, Sf1, Sf2, Sf3, Sf4, Sf5] = f_getFibPivots(HIGHprev, LOWprev, CLOSEprev)
    [R5, R4, R3, R2, R1, PP, S1, S2, S3, S4, S5]

f_getState(Source, R5, R4, R3, R2, R1, PP, S1, S2, S3, S4, S5)=>
    state =
     Source > R5 ? 5 :
     Source > R4 ? 4 :
     Source > R3 ? 3 : 
     Source > R2 ? 2 :
     Source > R1 ? 1 :
     Source > PP ? 0 :
     Source > S1 ? -1 :
     Source > S2 ? -2 :
     Source > S3 ? -3 :
     Source > S4 ? -4 :
     Source > S5 ? -5 : -6
    state

[R5, R4, R3, R2, R1, PP, S1, S2, S3, S4, S5] = f_getPivotPoints(HTFMultiplier, resolution, ppType)

[date, mth, yr] = f_getBackTestTimeFrom(backtestFrom, backtestBars)
inDateRange = time >= timestamp(syminfo.timezone, yr, mth, date, 0, 0)

BBU5 = plot(not hideBands ? R5: na, title="R5", color=color.orange, linewidth=1, transp=50, style=plot.style_linebr)
BBU4 = plot(not hideBands ? R4: na, title="R4", color=color.yellow, linewidth=1, transp=50, style=plot.style_linebr)
BBU3 = plot(not hideBands ? R3: na, title="R3", color=color.navy, linewidth=1, transp=50, style=plot.style_linebr)
BBU2 = plot(not hideBands ? R2: na, title="R2", color=color.olive, linewidth=1, transp=50, style=plot.style_linebr)
BBU1 = plot(not hideBands ? R1: na, title="R1", color=color.lime, linewidth=1, transp=50, style=plot.style_linebr)
BBM4 = plot(not hideBands ? PP:na, title="PP", color=color.black, linewidth=2, style=plot.style_linebr)
BBL1 = plot(not hideBands ? S1: na, title="S1", color=color.lime, linewidth=1, transp=50, style=plot.style_linebr)
BBL2 = plot(not hideBands ? S2: na, title="S2", color=color.olive, linewidth=1, transp=50, style=plot.style_linebr)
BBL3 = plot(not hideBands ? S3: na, title="S3", color=color.navy, linewidth=1, transp=50, style=plot.style_linebr)
BBL4 = plot(not hideBands ? S4: na, title="S4", color=color.yellow, linewidth=1, transp=50, style=plot.style_linebr)
BBL5 = plot(not hideBands ? S5: na, title="S5", color=color.orange, linewidth=1, transp=50, style=plot.style_linebr)


fill(BBU5, BBU4, title="RZ5", color=color.green, transp=90)
fill(BBU4, BBU3, title="RZ4", color=color.lime, transp=90)
fill(BBU3, BBU2, title="RZ3", color=color.olive, transp=90)
fill(BBU2, BBU1, title="RZ2", color=color.navy, transp=90)
fill(BBU1, BBM4, title="RZ1", color=color.yellow, transp=90)
fill(BBM4, BBL1, title="SZ1", color=color.orange, transp=90)
fill(BBL1, BBL2, title="SZ2", color=color.red, transp=90)
fill(BBL2, BBL3, title="SZ3", color=color.maroon, transp=90)
fill(BBL3, BBL4, title="SZ4", color=color.maroon, transp=90)
fill(BBL4, BBL5, title="SZ5", color=color.maroon, transp=90)

strategy.risk.allow_entry_in(tradeDirection)
longCondition = crossover(Source[1],R1) and inDateRange
shortCondition = crossunder(Source[1], S2) and inDateRange

strategy.entry("Buy", strategy.long, when=longCondition, oca_name="oca")
strategy.entry("Sell", strategy.short, when=shortCondition, oca_name="oca")