Nos partenaires et nous-mêmes utilisons différentes technologies, telles que les cookies, pour personnaliser les contenus et les publicités, proposer des fonctionnalités sur les réseaux sociaux et analyser le trafic. Merci de cliquer sur le bouton ci-dessous pour donner votre accord. Vous pouvez changer d’avis et modifier vos choix à tout moment. Informations RGPD
-- Indicateur BB Narrow v0.3 -- Bastien Faure beobast@gmail.com -- Cet indicateur colorie les lignes de BB lorsque celles ci sont étroites, c'est à dire avec une largeur inférieure à un certain seuil (15 points par défaut) local first, source, period, deviation, BB, hideAverage, BB_Top, BB_Bottom, BB_Middle; function Init() indicator:name("Indicateur BB Narrow"); indicator:description("Colorie les lignes de BB dans les zones etroites"); indicator:requiredSource(core.Bar); indicator:type(core.Indicator); indicator.parameters:addGroup("Calcul"); indicator.parameters:addInteger("period", "Nombre de periodes des BB", "Nombre de periodes des BB", 20, 1, 10000); indicator.parameters:addDouble("deviation", "Ecart-type des BB", "Ecart-type des BB", 2.0, 0.0001, 1000.0); indicator.parameters:addGroup("Style"); indicator.parameters:addColor("bandsColor", "Couleur des lignes en zone etroite", "Couleur des lignes hautes et basses en zone etroite", core.rgb(0, 0, 0)); indicator.parameters:addInteger("bandsWidth", "Largeur des lignes en zone etroite", "Largeur des lignes hautes et basses en zone etroite", 2, 1, 5); indicator.parameters:addInteger("bandsStyle", "Style des lignes en zone etroite", "Style des lignes hautes et basses en zone etroite", core.LINE_SOLID); indicator.parameters:setFlag("bandsStyle", core.FLAG_LINE_STYLE); indicator.parameters:addBoolean("hideAverage", "Masquer la ligne moyenne en zone etroite", "Masquer la ligne moyenne en zone etroite", false); indicator.parameters:addColor("averageColor", "Couleur de la ligne moyenne en zone etroite", "Couleur de la ligne moyenne en zone etroite", core.rgb(0, 0, 0)); indicator.parameters:addInteger("averageWidth", "Largeur de la ligne moyenne en zone etroite", "Largeur de la ligne moyenne en zone etroite", 2, 1, 5); indicator.parameters:addInteger("averageStyle", "Style de la ligne moyenne en zone etroite", "Style de la ligne moyenne en zone etroite", core.LINE_SOLID); indicator.parameters:setFlag("averageStyle", core.FLAG_LINE_STYLE); indicator.parameters:addDouble("maxWidth", "Seuil des bandes etroites", "Les lignes des BB seront coloriees si la largeur des BB est inferieure a ce seuil", 15.0, 0.0, 100.0); end function Prepare(nameOnly) source = instance.source; period = instance.parameters.period; deviation = instance.parameters.deviation; first = source:first() + period; local name = profile:id() .. "(" .. source:name() .. ", " .. period .. ", " .. deviation .. ")"; instance:name(name); if nameOnly then return; end BB = core.indicators:create("BB", source, period, deviation); BB_Top = instance:addStream("BB_Top", core.Line, name .. ".Top", "TL", instance.parameters.bandsColor, first); BB_Top:setWidth(instance.parameters.bandsWidth); BB_Top:setStyle(instance.parameters.bandsStyle); BB_Bottom = instance:addStream("BB_Bottom", core.Line, name .. ".Bottom", "BL", instance.parameters.bandsColor, first); BB_Bottom:setWidth(instance.parameters.bandsWidth); BB_Bottom:setStyle(instance.parameters.bandsStyle); if not instance.parameters.hideAverage then BB_Middle = instance:addStream("BB_Middle", core.Line, name .. ".Middle", "AL", instance.parameters.averageColor, first); BB_Middle:setWidth(instance.parameters.averageWidth); BB_Middle:setStyle(instance.parameters.averageStyle); end end function Update(period, mode) if period <= first then return; end BB:update(mode); local top = BB.TL[period]; local bottom = BB.BL[period]; BB_Top[period] = top; BB_Bottom[period] = bottom; if not hideAverage then BB_Middle[period] = BB.AL[period]; end if (top - bottom > instance.parameters.maxWidth) then BB_Top:setBreak(period, true); BB_Bottom:setBreak(period, true); if not hideAverage then BB_Middle:setBreak(period, true); end end end