Nicolas

Quick Fib

Category: Indicators By: Nicolas Created: January 9, 2019, 2:34 PM
January 9, 2019, 2:34 PM
Indicators
27 Comments
Quick Fib

The Quick Fibonacci indicator plots automatically the Fibonacci retracement calculated with the last highest high and lowest low of the last X periods.

It adds on the price chart 2 trend lines:

  • ascending trendline starting from lowest low to second lowest price found
  • descending trendline starting from highest high to second highest price found

A “retracement block” can be also drawn by the indicator to indicate how much the price has retraced since the Fibonacci figure was formed.

The retracement lines change color depending of the trend:

  • green color if the price has retraced from a lowest low (price is ascending since longer)
  • red color if the price has retraced from a highest high (price is descending since longer)
//PRC_Quick Fib | indicator
//09.01.2019
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge

defparam drawonlastbaronly = true

// --- settings 
period = 100 //lookback period of the Fibonacci Retracement 
DrawRetracementBlocks = 1 // 0=false ; 1=true
// --- end of settings

hh=0
ll=low
shiftlowest=barindex
for i = period downto 1 do
 if high[i]>hh then
  hh=high[i]
  shifthighest=barindex[i]
 endif
 if low[i]<ll then
  ll=low[i]
  shiftlowest=barindex[i]
 endif
next

isSwingDown = shiftHighest < shiftLowest

if isSwingDown then
 fullrange = abs(hh-ll)
 fibo100 = hh
 fibo0 = ll
 fibo236 = ll+(fullrange*0.236)
 fibo382 = ll+(fullrange*0.382)
 fibo50 = ll+fullrange/2
 fibo618 = ll+(fullrange*0.618)
 startbar = min(shifthighest,shiftlowest)
 r=255
 g=0
 b=0
else
 fullrange = abs(hh-ll)
 fibo100 = ll
 fibo0 = hh
 fibo236 = hh-(fullrange*0.236)
 fibo382 = hh-(fullrange*0.382)
 fibo50 = hh-fullrange/2
 fibo618 = hh-(fullrange*0.618)
 startbar = min(shifthighest,shiftlowest)
 r=0
 g=255
 b=0
endif

if startbar>0 then
 //plot fibonacci levels
 drawsegment(startbar,fibo100,barindex,fibo100) coloured(r,g,b)
 drawtext("          100%",barindex,fibo100,Dialog,Standard,20) coloured(r,g,b)
 drawsegment(startbar,fibo0,barindex,fibo0) coloured(r,g,b)
 drawtext("          0%",barindex,fibo0,Dialog,Standard,20) coloured(r,g,b)
 drawsegment(startbar,fibo236,barindex,fibo236) coloured(r,g,b)
 drawtext("          23.6%",barindex,fibo236,Dialog,Standard,20) coloured(r,g,b)
 drawsegment(startbar,fibo382,barindex,fibo382) coloured(r,g,b)
 drawtext("          38.2%",barindex,fibo382,Dialog,Standard,20) coloured(r,g,b)
 drawsegment(startbar,fibo50,barindex,fibo50) coloured(r,g,b)
 drawtext("          50%",barindex,fibo50,Dialog,Standard,20) coloured(r,g,b)
 drawsegment(startbar,fibo618,barindex,fibo618) coloured(r,g,b)
 drawtext("          61.8%",barindex,fibo618,Dialog,Standard,20) coloured(r,g,b)
 //plot price at 0% and 100% levels
 drawtext("#ll#",shiftlowest,ll-fullrange*0.03,dialog,standard,20) coloured(0,255,0)
 drawtext("#hh#",shifthighest,hh+fullrange*0.03,dialog,standard,20) coloured(255,0,0)
endif

//contour lines
shiftContourDown = barindex-shiftHighest
highestSlope = 0
counth=max(1,(barindex-shifthighest))
for i = 2 to counth do
 thisSlope = (High[i] - hh) / ((barindex-shiftHighest) - i)

 if (thisSlope >= highestSlope or highestSlope = 0) then
  shiftContourDown = i
  highestSlope = thisSlope
 endif
next
shiftContourUp = barindex-shiftLowest
LowestSlope = 0
countl=max(1,(barindex-shiftLowest))
for i = 2 to countl do
 thisSlope = (low[i] - ll) / ((barindex-shiftLowest) - i)

 if (thisSlope <= LowestSlope or LowestSlope = 0) then
  shiftContourUp = i
  LowestSlope = thisSlope
 endif
next
drawline(shifthighest,hh,barindex[shiftcontourdown],high[shiftcontourdown]) coloured(r,g,b)
drawline(shiftlowest,ll,barindex[shiftcontourup],low[shiftcontourup]) coloured(r,g,b)

//retracement blocks
if DrawRetracementBlocks then 
 if not isSwingDown then 
  blockprice=hh
  startbar=barindex-shifthighest
  for i = startbar downto 2 do
   if low[i]<blockprice then
    blockprice=low[i]
    blockbar=barindex[i]
   endif
  next
  drawrectangle(blockbar,blockprice,barindex,ll) coloured(r,g,b)
 else
  blockprice=ll
  startbar=barindex-shiftlowest
  for i = startbar downto 2 do
   if high[i]>blockprice then
    blockprice=high[i]
    blockbar=barindex[i]
   endif
  next
  drawrectangle(blockbar,blockprice,barindex,hh) coloured(r,g,b)
 endif

endif

return

 

Download
Filename: PRC_QuickFib.itf
Downloads: 542
Nicolas
Nicolas Legend
I created ProRealCode because I believe in the power of shared knowledge. I spend my time coding new tools and helping members solve complex problems. If you are stuck on a code or need a fresh perspective on a strategy, I am always willing to help. Welcome to the community!
Author’s Profile

Comments

Diamant
2 years ago
#

Bonjour à vous tous, D'après vous, quelle serais la bonne période pour du trading 15 minutes. Merci d'avance

FREDNC
8 years ago
#

@Nicolas merci pour se remarquable indicateur, reste à voir comment on va pourvoir l'intégrer dans nos stratégies ;-)

Hans63
8 years ago
#

Thank you swapping

swapping
8 years ago
#

https://www.prorealcode.com/topic/prc_quickfibtl/ Please Hans63 and robdav follow to upper link and download the good file PRC_QuikFibTL.itf ;)

robdav
8 years ago
#

https://drive.google.com/file/d/1-HuXczXqf-92g8xcZxXF_FYj6OzfX5TW/view?usp=sharing

robdav
8 years ago
#

@Hans63, not sure if it will fix the problem but worth trying this option.

Hans63
8 years ago
#

here's a pic https://i.ibb.co/QQcj7Vb/Quick-fibo.png

Hans63
8 years ago
#

However I have a problem with this tool I have a annoying vertical line that appears in the previous bar before the last bar and start from the ZERO LEVEL OF THE GRAPH TO THE INFINITO Furthermore the number of retracement are too big

Hans63
8 years ago
#

78.6 yes it's the square root of 0.618

robdav
8 years ago
#

Shouldn't the missing level be 78.6 not 76.4!

swapping
8 years ago
#

Voici le lien pour continuer cette discussion (avec le code correct) sur le forum français ... https://www.prorealcode.com/topic/prc_quickfibtl/

swapping
8 years ago
#

oui supertiti, même en faisant un copier/coller de ma modif (qui fonctionne parfaitement sur ma plate forme), il y a de nouvelles erreurs qui se crée en utilisant la balise (code), dommage que Nicolas ou un programmeur chez Prorealcode ne regarde pas de près ce bug dès qu'on utilise la balise [Add PRT code], ce serais plus pratique et éviterais ce genre de situation ou on génère d'autres erreurs au lieu d'apporter sa pierre à l'édifice ! Donc le mieux serais d'ouvrir un thread spécifique dans le forum pour pouvoir utiliser cette balise qui fonctionne correctement dans ce cas de figure ...

supertiti
8 years ago
#

@ Swapping J'ai des erreurs sur ton code ? ligne 23 0) parenthèse en trop ligne 41 endif ligne 43 is swingdown .... ligne 71 if low .... une idée ? merci

swapping
8 years ago
#

N'oubliez pas d'ajouter dans les variables par la clef a mollette comme ci dessous TrendLine Type (booléen = vrai) Fibonacci Type (booléen = vrai)

swapping
8 years ago
#

Voici la modification du code de Nicolas pour les personnes intéressées comprenant : 1) le niveau de "76.4% de Fibonacci" 2) une case à cocher supplémentaire "TrendLine" afin de ne visualiser que les Trend Line (si vous le souhaitez) 3) une case à cocher supplémentaire "Fibonacci" afin de ne visualiser que les niveaux de Fibonacci (idem) et si vous décochez les 3 cases et bien vous n'avez plus rien ;) il vaut mieux l'appeler PRC_QuickFibTL pour le différencier de l'original (qui donne de très bon résultats d'ailleurs) //PRC_Quick Fib Trend Line | indicator //09.01.2019 (release 1.1) //Nicolas @ www.prorealcode.com //Sharing ProRealTime knowledge DefParam DrawOnLastBarOnly = true // --- settings //period = 100 // lookback period of the Fibonacci Retracement //DrawRetracementBlocks = 1 // 0=false ; 1=true //TrendLine = 1 // 0=false ; 1=true // --- end of settings hh = 0 ll = low shiftlowest = barindex for i = period downto 1 do if high[i]>hh then hh = high[i] shifthighest = barindex[i] endif if low[i]= highestSlope or highestSlope = 0) then shiftContourDown = i highestSlope = thisSlope endif next shiftContourUp = barindex-shiftLowest LowestSlope = 0 countl = max(1,(barindex-shiftLowest)) for i = 2 to countl do thisSlope = (low[i] - ll) / ((barindex-shiftLowest) - i) if (thisSlope <= LowestSlope or LowestSlope = 0) then shiftContourUp = i LowestSlope = thisSlope endif next DrawLine(shifthighest,hh,barindex[shiftcontourdown],high[shiftcontourdown]) coloured(r,g,b) DrawLine(shiftlowest,ll,barindex[shiftcontourup],low[shiftcontourup]) coloured(r,g,b) endif isSwingDown = shiftHighest 0 then // plot fibonacci levels DrawSegment(startbar,fibo100,barindex,fibo100) coloured(r,g,b) DrawText(" 100%",barindex,fibo100,Dialog,Standard,11) coloured(r,g,b) DrawSegment(startbar,fibo0,barindex,fibo0) coloured(r,g,b) DrawText(" 0%",barindex,fibo0,Dialog,Standard,11) coloured(r,g,b) DrawSegment(startbar,fibo236,barindex,fibo236) coloured(r,g,b) DrawText(" 23.6%",barindex,fibo236,Dialog,Standard,11) coloured(r,g,b) DrawSegment(startbar,fibo382,barindex,fibo382) coloured(r,g,b) DrawText(" 38.2%",barindex,fibo382,Dialog,Standard,11) coloured(r,g,b) DrawSegment(startbar,fibo50,barindex,fibo50) coloured(r,g,b) DrawText(" 50%",barindex,fibo50,Dialog,Standard,11) coloured(r,g,b) DrawSegment(startbar,fibo618,barindex,fibo618) coloured(r,g,b) DrawText(" 61.8%",barindex,fibo618,Dialog,Standard,11) coloured(r,g,b) DrawSegment(startbar,fibo764,barindex,fibo764) coloured(r,g,b) DrawText(" 76.4%",barindex,fibo764,Dialog,Standard,11) coloured(r,g,b) // plot price at 0% and 100% levels DrawText("HI #hh#",shifthighest,hh+fullrange*0.03,dialog,standard,11) coloured(255,0,0) DrawText("LO #ll#",shiftlowest,ll-fullrange*0.03,dialog,standard,11) coloured(0,255,0) endif endif // retracement blocks if DrawRetracementBlocks then if not isSwingDown then blockprice = hh startbar = barindex-shifthighest for i = startbar downto 2 do if low[i]blockprice then blockprice = high[i] blockbar = barindex[i] endif next DrawRectangle(blockbar,blockprice,barindex,hh) coloured(r,g,b) endif endif return

swapping
8 years ago
#

test pour visualiser ce que donne quelque ligne de programme avec la balise "code" hh = 0 ll = low shiftlowest = barindex for i = period downto 1 do if high[i]>hh then hh = high[i] shifthighest = barindex[i] endif if low[i]<ll then ll = low[i] shiftlowest = barindex[i] endif next

swapping
8 years ago
#

Bonjour Florian, c'est les ajouts des lignes que j'ai mentionné dans ma seconde réponse (sous celui de supertiti)

Florian Legeard
8 years ago
#

Bonjour, Quel est le bon code avec l’ajout de Fibo 76,4 % et les tendances qui fonctionnent ? Merci à vous ;)

supertiti
8 years ago
#

Pour les droites de tendances ce code fonctionne bien nota le bouton add PRT code ne fonctionne pas ici defparam drawonlastbaronly = true // --- settings //period = 100 //lookback period of the Fibonacci Retracement // --- end of settings hh=0 ll=low shiftlowest=barindex for i = period downto 1 do if high[i]>hh then hh=high[i] shifthighest=barindex[i] endif if low[i]<ll then ll=low[i] shiftlowest=barindex[i] endif next isSwingDown = shiftHighest 0 then drawtext("#ll#",shiftlowest,ll-fullrange*0.03,dialog,standard,20) coloured(0,255,0) drawtext("#hh#",shifthighest,hh+fullrange*0.03,dialog,standard,20) coloured(255,0,0) endif //contour lines shiftContourDown = barindex-shiftHighest highestSlope = 0 counth=max(1,(barindex-shifthighest)) for i = 2 to counth do thisSlope = (High[i] - hh) / ((barindex-shiftHighest) - i) if (thisSlope >= highestSlope or highestSlope = 0) then shiftContourDown = i highestSlope = thisSlope endif next shiftContourUp = barindex-shiftLowest LowestSlope = 0 countl=max(1,(barindex-shiftLowest)) for i = 2 to countl do thisSlope = (low[i] - ll) / ((barindex-shiftLowest) - i) if (thisSlope <= LowestSlope or LowestSlope = 0) then shiftContourUp = i LowestSlope = thisSlope endif next drawline(shifthighest,hh,barindex[shiftcontourdown],high[shiftcontourdown]) coloured(r,g,b) drawline(shiftlowest,ll,barindex[shiftcontourup],low[shiftcontourup]) coloured(r,g,b) return

crolakstrading
8 years ago
#

Hi Supertiti... there's an error in your code?

supertiti
8 years ago
#

Pour le niveau fibo 76.4 c'est bon ça fonctionne. Pour les lignes de tendances c'est pas bon , j'avais déjà pris ce bloc sans succès, peut être que le chef peut nous aider ? Bonne soirée

crolakstrading
8 years ago
#

//PRC_Quick Fib | indicator //09.01.2019 //Nicolas @ www.prorealcode.com //Sharing ProRealTime knowledge defparam drawonlastbaronly = true // --- settings //period = 100 //lookback period of the Fibonacci Retracement //DrawRetracementBlocks = 1 // 0=false ; 1=true // --- end of settings hh=0 ll=low shiftlowest=barindex for i = period downto 1 do if high[i]>hh then hh=high[i] shifthighest=barindex[i] endif if low[i]<ll then ll=low[i] shiftlowest=barindex[i] endif next isSwingDown = shiftHighest 0 then //plot fibonacci levels drawsegment(startbar,fibo100,barindex,fibo100) coloured(r,g,b) drawtext(" 100%",barindex,fibo100,Dialog,Standard,20) coloured(r,g,b) drawsegment(startbar,fibo0,barindex,fibo0) coloured(r,g,b) drawtext(" 0%",barindex,fibo0,Dialog,Standard,20) coloured(r,g,b) drawsegment(startbar,fibo236,barindex,fibo236) coloured(r,g,b) drawtext(" 23.6%",barindex,fibo236,Dialog,Standard,20) coloured(r,g,b) drawsegment(startbar,fibo382,barindex,fibo382) coloured(r,g,b) drawtext(" 38.2%",barindex,fibo382,Dialog,Standard,20) coloured(r,g,b) drawsegment(startbar,fibo50,barindex,fibo50) coloured(r,g,b) drawtext(" 50%",barindex,fibo50,Dialog,Standard,20) coloured(r,g,b) drawsegment(startbar,fibo618,barindex,fibo618) coloured(r,g,b) drawtext(" 61.8%",barindex,fibo618,Dialog,Standard,20) coloured(r,g,b) drawsegment(startbar,fibo764,barindex,fibo764)coloured(r,g,b) drawtext (" 76.4%", barindex,fibo764,Dialog,Standard,20) coloured (r, g, b) drawsegment(startbar,fibo272,barindex,fibo272)coloured(r,g,b) drawtext (" -27.2%", barindex,fibo272,Dialog,Standard,20) coloured (r, g, b) drawsegment(startbar,fibo1618,barindex,fibo1618)coloured(r,g,b) drawtext (" -61.8%", barindex,fibo1618,Dialog,Standard,20) coloured (r, g, b) //plot price at 0% and 100% levels drawtext("#ll#",shiftlowest,ll-fullrange*0.03,dialog,standard,20) coloured(0,255,0) drawtext("#hh#",shifthighest,hh+fullrange*0.03,dialog,standard,20) coloured(255,0,0) endif //contour lines shiftContourDown = barindex-shiftHighest highestSlope = 0 counth=max(1,(barindex-shifthighest)) for i = 2 to counth do thisSlope = (High[i] - hh) / ((barindex-shiftHighest) - i) if (thisSlope >= highestSlope or highestSlope = 0) then shiftContourDown = i highestSlope = thisSlope endif next shiftContourUp = barindex-shiftLowest LowestSlope = 0 countl=max(1,(barindex-shiftLowest)) for i = 2 to countl do thisSlope = (low[i] - ll) / ((barindex-shiftLowest) - i) if (thisSlope <= LowestSlope or LowestSlope = 0) then shiftContourUp = i LowestSlope = thisSlope endif next drawline(shifthighest,hh,barindex[shiftcontourdown],high[shiftcontourdown]) coloured(r,g,b) drawline(shiftlowest,ll,barindex[shiftcontourup],low[shiftcontourup]) coloured(r,g,b) //retracement blocks if DrawRetracementBlocks then if not isSwingDown then blockprice=hh startbar=barindex-shifthighest for i = startbar downto 2 do if low[i]blockprice then blockprice=high[i] blockbar=barindex[i] endif next drawrectangle(blockbar,blockprice,barindex,hh) coloured(r,g,b) endif endif return

supertiti
8 years ago
#

Merci Swapping pour ton aide , meilleurs voeux également

DaxRider
8 years ago
#

Excellent c'est Noël après l'heure merci Nicolas pour cet apport Bonne année à tous

crolakstrading
8 years ago
#

Wow this is brilliant! Thank you both Nicolas and and swapping.. I have added 76.4% and also 127.2 and 161.8 as target levels!! please check if its correct!! thanks

swapping
8 years ago
#

excellent travail qui va devenir rapidement indispensable à certain :) @supertiti, pour l'ajout du fibo 76.4% et comme le bouton [Add PRT code] fait toujours des siennes dans les réponses, les voici une à une ! insert après ligne 36 (du code original) fibo764 = ll+(fullrange*0.764) insert après ligne 48 (du code original) fibo764 = hh-(fullrange*0.764) insert après ligne 68 (du code original) drawsegment(startbar,fibo764,barindex,fibo764) coloured(r,g,b) drawtext(" 76.4%",barindex,fibo764,Dialog,Standard,20) coloured(r,g,b) et pour ce qui traite des lignes de code reflétant les lignes de tendances, je pense que c'est de la ligne 75 à 98 Bonne année à toi (et à nicolas par la même occasion)

supertiti
8 years ago
#

Bonjour Nicolas, Tu commences fort l'année ! quelle soit bonne et fructueuse pour tous tes projets. Pourrais tu rajouter le fibo 76.4% sur le code ? Et quel est le bout de code qui reflète les lignes de tendances ? merci, bonne après midi

ProRealCode ProRealCode
Loading...