
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.
Logik inti kod ini adalah untuk mengira harga emas bagi segmen gelombang sebagai titik penting. Langkah utama adalah:
Dengan pendekatan yang berasaskan titik-titik utama, anda dapat menangkap pergerakan jangka pendek pasaran dengan berkesan, dan berdagang dengan keuntungan di antara gelombang.
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:
Oleh kerana strategi ini bertujuan untuk keuntungan jangka pendek, terdapat beberapa risiko yang perlu diperhatikan:
Risiko-risiko ini boleh dikawal dengan menyesuaikan parameter yang sesuai, memilih jalur yang sesuai dan cara pengurusan wang.
Strategi ini masih boleh dioptimumkan lagi:
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.
/*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")