La stratégie d'oscillation de bande de Fibonacci est une stratégie quantitative conçue sur la base de la théorie de Fibonacci. Elle utilise principalement le ratio de Fibonacci pour calculer plusieurs bandes de prix pour former des bandes supérieures et inférieures.
La logique de base du code est de calculer les bandes de prix de Fibonacci comme points clés.
Grâce à cette méthode innovante, il peut capturer efficacement les fluctuations à court terme du marché et effectuer des échanges aller-retour entre les bandes pour réaliser des bénéfices.
Le plus grand avantage de cette stratégie est qu'elle utilise l'indicateur théorique important du ratio de Fibonacci pour localiser les points de prix clés, augmentant ainsi la probabilité de profit.
Comme la stratégie vise des bénéfices à court terme, il y a aussi certains risques à prendre en compte:
Ces risques peuvent être maîtrisés en ajustant les paramètres de manière appropriée, en sélectionnant les bandes appropriées et en utilisant des méthodes de gestion du capital.
Il reste encore des possibilités d'optimisation de la stratégie:
En général, la stratégie d'oscillation des bandes de Fibonacci est une stratégie à court terme très pratique. Elle utilise la théorie de Fibonacci pour définir les points clés des prix. Lorsque le prix oscille autour de ces points, des bénéfices généreux peuvent être obtenus. Cette méthode basée sur la rupture convient aux marchés présentant un certain degré de volatilité et de caractéristiques. Elle peut être utilisée seule ou combinée à d'autres stratégies.
/*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")