Strategi Ayunan Jalur Bahagian Emas


Tarikh penciptaan: 2023-11-21 13:47:12 Akhirnya diubah suai: 2023-11-21 13:47:12
Salin: 0 Bilangan klik: 630
1
fokus pada
1621
Pengikut

Strategi Ayunan Jalur Bahagian Emas

Gambaran keseluruhan

Strategi pergerakan gelombang pembahagian emas adalah strategi kuantitatif yang direka berdasarkan teori pembahagian emas. Strategi ini menggunakan peraturan pembahagian emas untuk mengira pelbagai jalur harga untuk membentuk jalur atas dan bawah. Ia menghasilkan isyarat perdagangan ketika harga menembusi jalur, dan menghasilkan keuntungan dengan menangkap ciri-ciri pergerakan harga di antara jalur.

Prinsip Strategi

Logik inti kod ini adalah untuk mengira harga emas bagi segmen gelombang sebagai titik penting. Langkah utama adalah:

  1. Hitung EMA purata 14 kitaran sebagai sumbu tengah
  2. 4 jalur gelombang di atas dan bawah yang dikira berdasarkan ATR dan nisbah pembahagian emas
  3. Sinyal perdagangan dihasilkan apabila harga melangkaui turun ke atas atau melangkaui turun ke bawah
  4. Tetapkan Stop Loss Stop Stop dan Lacak Harga Bergolak untuk Keuntungan

Dengan pendekatan yang berasaskan titik-titik utama, anda dapat menangkap pergerakan jangka pendek pasaran dengan berkesan, dan berdagang dengan keuntungan di antara gelombang.

Kelebihan Strategik

Kelebihan utama strategi ini ialah menggunakan pembahagian emas sebagai penunjuk teori penting untuk menentukan titik harga kritikal, dan dengan itu meningkatkan kebarangkalian keuntungan. Kelebihan spesifiknya adalah:

  1. Golden Divide Bands Jelas, Mudah Untuk Menentukan Penembusan
  2. Julat gelombang yang sesuai, tidak terlalu kecil dan tidak terlalu longgar
  3. Pelbagai spektrum boleh dipilih, perdagangan agresif dan perdagangan konservatif
  4. Tanda-tanda gegaran gelombang jelas, strategi pengendalian garis pendek berkesan

Risiko Strategik

Oleh kerana strategi ini bertujuan untuk keuntungan jangka pendek, terdapat beberapa risiko yang perlu diperhatikan:

  1. Tidak boleh mendapat keuntungan dalam kitaran besar
  2. Lebih besar risiko stop loss apabila harga turun naik secara mendadak
  3. Lebih banyak isyarat penembusan, perlu berhati-hati
  4. Tidak sah apabila ciri gegaran gelombang hilang

Risiko-risiko ini boleh dikawal dengan menyesuaikan parameter yang sesuai, memilih jalur yang sesuai dan cara pengurusan wang.

Pengoptimuman Strategi

Strategi ini masih boleh dioptimumkan lagi:

  1. Penapisan penunjuk trend yang digabungkan menghasilkan isyarat arah trend tertentu
  2. Menutup strategi pada masa tertentu atau sebelum titik peristiwa penting
  3. Dinamika penyesuaian stop loss untuk menyesuaikan frekuensi turun naik pasaran
  4. Parameter pengoptimuman memilih EMA berkala yang berbeza sebagai garis tengah asas

ringkaskan

Strategi gelombang gelombang pembahagian emas adalah strategi garis pendek yang sangat praktikal secara keseluruhan. Ia menggunakan teori pembahagian emas untuk menetapkan titik-titik harga yang penting, dan keuntungan yang besar boleh diperoleh apabila harga bergoyang di sekitar titik-titik ini.

Kod sumber strategi
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 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/
// © drhakankilic

//@version=5
strategy("FIBONACCI BANDS Strategy", shorttitle="FBANDS Strategy", overlay=true)
// === Date === { 
//Backtest dates
fromDay = input.int(defval=1, title='From Day',minval=1,maxval=31)
fromMonth = input.int(defval=2, title='From Month',minval=1,maxval=12)
fromYear = input.int(defval=2022, title='From Year')
thruDay = input.int(defval=1, title='Thru Day',minval=1,maxval=31)
thruMonth = input.int(defval=1, title='Thru Month',minval=1,maxval=12)
thruYear = input.int(defval=2112, title='Thru Year')
showDate = true  // input(defval=true, title="Show Date Range")
start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false
// }

// === Long or Short ===  
tradeDirection = input.string(title="Long veya Short", options=["Long", "Short", "Both"], defval="Both",                                       group="Bot")
// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
copypaste   = input('{{strategy.order.alert_message}}',         title='alert message to copy/paste',                                    group="Bot")
// }

// === FIBONACCI BANDS === {
EMAperiod = input.int(14, title='EMAperiod', minval=1, maxval=500, group="Fibonacci")
ATRperiod = input.int(14, title='ATRperiod', minval=1, maxval=500, group="Fibonacci")
EMA = ta.ema(close, EMAperiod)
TR1 = math.max(high - low, math.abs(high - close[1]))
TR = math.max(TR1, math.abs(low - close[1]))
ATR = ta.sma(TR, ATRperiod)
F2 = input(defval=1.618, title='Fibonacci Ratio 2', group="Fibonacci")
F3 = input(defval=2.618, title='Fibonacci Ratio 3', group="Fibonacci")
F4 = input(defval=4.236, title='Fibonacci Ratio 4', group="Fibonacci")
R1 = ATR
R2 = ATR * F2
R3 = ATR * F3
R4 = ATR * F4
FIBOTOP4 = EMA + R4
FIBOTOP3 = EMA + R3
FIBOTOP2 = EMA + R2
FIBOTOP1 = EMA + R1
FIBOBOT1 = EMA - R1
FIBOBOT2 = EMA - R2
FIBOBOT3 = EMA - R3
FIBOBOT4 = EMA - R4
plot(FIBOTOP4[1], title='FIBOTOP4', linewidth=1, color=color.new(color.orange, 0))
plot(FIBOTOP3[1], title='FIBOTOP3', linewidth=1, color=color.new(color.aqua, 20))
plot(FIBOTOP2[1], title='FIBOTOP2', linewidth=1, color=color.new(color.gray, 40))
plot(FIBOTOP1[1], title='FIBOTOP1', linewidth=1, color=color.new(color.purple, 40))

plot(FIBOBOT1[1], title='FIBOBOT1', linewidth=1, color=color.new(color.green, 40))
plot(FIBOBOT2[1], title='FIBOBOT2', linewidth=1, color=color.new(color.yellow, 40))
plot(FIBOBOT3[1], title='FIBOBOT3', linewidth=1, color=color.new(color.blue, 20))
plot(FIBOBOT4[1], title='FIBOBOT4', linewidth=1, color=color.new(color.aqua, 0))
// plot(EMA[1], style=plot.style_cross, title='EMA', color=color.new(color.red, 0))

prefm = input.string(title="Fibo", options=["close>FIBOTOP4(orange)", "close>FIBOTOP3(aqua)","close>FIBOTOP2(gray)","close>FIBOTOP1(purple)", "Disable"] , defval="close>FIBOTOP1(purple)", group="Long")
_prefm = false 
if (prefm == "close>FIBOTOP4(orange)" )
    _prefm := close>FIBOTOP4[1]
    
if (prefm == "close>FIBOTOP3(aqua)" )
    _prefm := close>FIBOTOP3[1]

if (prefm == "close>FIBOTOP2(gray)" )
    _prefm := close>FIBOTOP2[1]
    
if (prefm == "close>FIBOTOP1(purple)" )
    _prefm := close>FIBOTOP2[1]
 
 
if (prefm == "Disable" )
    _prefm := low<low[1] or low>low[1]  
    
prefmS = input.string(title="Fibo", options=["close<FIBOBOT1(green)", "close<FIBOBOT2(yellow)", "close<FIBOBOT3(blue)", "close<FIBOBOT4(aqua)", "Disable"] , defval="close<FIBOBOT1(green)", group="Short")
_prefmS = false 
if (prefmS == "close<FIBOBOT1(green)" )
    _prefmS := close<FIBOBOT1[1]
  
if (prefmS == "close<FIBOBOT2(yellow)" )
    _prefmS := close<FIBOBOT2[1]

if (prefmS == "close<FIBOBOT3(blue)" )
    _prefmS := close<FIBOBOT3[1]
  
if (prefmS == "close<FIBOBOT4(aqua)" )
    _prefmS := close<FIBOBOT4[1]

if (prefmS == "Disable" )
    _prefmS := low<low[1] or low>low[1]  

// }

long2= _prefm 

short2= _prefmS
//

// === Bot Codes === { 
enterlong = input("Long Code", title='Long İlk Alım', group="Long Code")
entershort= input("Short Code", title='Short İlk Alım', group="Short Code")
exitlong = input("Long Exit Code", title='Long Exit', group="Long Code")
exitshort= input("Short Exit Code", title='Short Exit', group="Short Code")
// }

////////////////////////////////////////////////////////////////////////////////////////////TPSL
// Inputs
sl_inp = input.float(4, title='Stop %', step=0.1, group="Long") / 100
tp_inp = input.float(1.5, title='TP %', step=0.1, group="Long") / 100

sl_inp2 = input.float(4, title='Stop %', step=0.1, group="Short") / 100
tp_inp2 = input.float(1.5, title='TP %', step=0.1, group="Short") / 100

longtp = strategy.position_avg_price * (1 + tp_inp) 
longstop=  strategy.position_avg_price * (1 - sl_inp)

shortstop=  strategy.position_avg_price * (1 + sl_inp2)
shorttp = strategy.position_avg_price * (1 - tp_inp2) 
////////////////////////////////////////////////////////////////////////////////////////////
if window() and strategy.position_size==0 and longOK
    strategy.entry("Long", strategy.long, when= long2, alert_message=enterlong, comment="Long")
    
if strategy.position_size>0
    strategy.exit("Long", stop= longstop, limit=longtp, alert_message=exitlong, comment="TPSL")
////////////////////////////////////////////////////////////////////////////////////////////SHORT
if window() and strategy.position_size==0 and shortOK 
    strategy.entry("Short", strategy.short, when= short2, alert_message=entershort, comment="Short")
    
if strategy.position_size<0
    strategy.exit("Short", stop= shortstop, limit= shorttp, alert_message=exitshort, comment="TPSL")