indiquer bougie contraire aux volumes et ou se trouva la plupart des achats et v

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #241338 quote
    Atemi19
    Participant
    New

    Bonjour, j’ai le cumulative delta avec le volume achat et vente sous forme d’histogramme séparé. J’aimerais un indicateur qui me montre les bougies vertes dont le volume de vente et supérieur au volume d’achat et les bougies rouges dont le volume d’achats sont supérieur au volume de ventes.

    J’ai également l’indicateur cluster mais j’aimerais avoir une indication automatique en couleur par exemple sur les niveaux de prix qui possèdent une certaine quantité de volume d’achat mais également de vente (ne pas confondre le pourcentage de volume total car je souhaite séparer l’information). En effet plus il y a de volume sur les mèches plus il y a une résistance et support donc gros pièges. Je vous joints une image j’ai entouré ce qui me semble pertinent que l’indicateur montre.

    Cordialement.

    #241348 quote
    Iván González
    Moderator
    Master

    Bonjour. Malheureusement nous n'avons pas la possibilité de pouvoir encoder le volume bid&ask. Il n'est pas différencié ce qui rend votre demande impossible. Vous pourriez être intéressé par ces articles/post :

    #241355 quote
    Alai-n
    Participant
    Veteran

    Bonjour, j’ai le cumulative delta avec le volume achat et vente sous forme d’histogramme séparé. J’aimerais un indicateur qui me montre les bougies vertes dont le volume de vente et supérieur au volume d’achat et les bougies rouges dont le volume d’achats sont supérieur au volume de ventes.

    Le Volume est forcément à somme nulle, on ne peut Acheter 10 que si 10 sont à Vendre ! Il n’y aura donc jamais plus de volume Acheteurs que de volume Vendeurs et inversement… Lorsque l’on s’intéresse au CVD, on recherche 2 informations. La première est-ce que le flux du Volume suit l’évolution du Cours(Prix), la deuxième y a t-il une divergence entre l’évolution du Volume(CVD) et le Cours(Prix), si oui on va apprécier deux types de divergences. 1-Absorption = Les Acteurs agressifs(Ordres au Marché) n’arrive plus à pousser les cours, ils sont systématiquement absorbés par les Acteurs passifs(Ordres Limites). 2-Epuisement = La pression exercée par les Acteurs agressifs sur les Acteurs passifs, diminue… Dans les deux cas cela peut signifier un retournement du cours dans la direction opposée!

    #241357 quote
    Atemi19
    Participant
    New

    Sauf qu’on observe ce que je dis les volumes achat et vente se contredise par rapport à la couleur final de la bougie car les ordres passifs ne sont pas enregistrer sur le cluster. Et lorsque il y a bcp de volume dans le sens de la tendance mais au bout de mèche ça pue…

    #241392 quote
    Atemi19
    Participant
    New
    Voici encore un screen qui illustre mes propos….
    #241396 quote
    Atemi19
    Participant
    New
    J’ai trouvé ce code sur trading view mais il faudrait que ce soit validé avec prorealtime…   // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nico-von //@version=5 indicator(“OrderFlow Absorption Indicator”, shorttitle = “Absorption”, overlay = true, max_labels_count = 500, max_boxes_count = 500) //<constants> const int UP_DIRECTION = 1 const int NT_DIRECTION = 0 const int DOWN_DIRECTION = -1 const string PHDT_TT = “Plot historical absorption occurrences. Using historical data alone cannot accurately replicate real-time absorption, so detections may differ.” const string HDT_TT = “Timeframe for calculating historical absorption: A smaller timeframe results in more accurate detections but in a slower indicator, potentially hindering real-time absorption detection.” const string TL_TT = “Limit detections to consider only traded volume that is greater than or equal the selected volume filter value within the chosen time limit, in seconds. Real-time only.” const string VLMT_TT = “Traded volume greater than or equal this value will be marked as absorbed. The larger value, the fewer detections.” const string VLMT_AUTO_TT = “Automatically set the minimum size according to the standard deviation of traded volume for the last selected minutes.” const string HIST_GP = “Historical/ Backfill Settings” const string MINS_ERROR = “SD Interval must be greater than 0” const string DATA_GP = “Tick Settings” const string AB_GP = “Time Limit Settings” const string AVLMT_GP = “Volume Filter Settings” const string OTHER_GP = “Other Settings” const string CHAR_TO_USE = “×” const string CHAR_TO_USE_POINTER = “■” const string STYLE_GROUP = “Style Settings” const string IN_DELTA = “Delta Colour Settings” const int DEF_SD_MULT = 10 //<input> bool useLtfInput = input.bool(false, “Plot Historical Absorption”, tooltip = PHDT_TT, confirm = true, group = HIST_GP, display = display.none) string ltfInput = input.timeframe(“1”, “Historical Data Timeframe”, tooltip = HDT_TT, confirm = true, group = HIST_GP, display = display.none) float tickSizeInput = input.float(5, “Desired Tick Size”, confirm = true, group = DATA_GP) bool enableTimeLimitInput = input.bool(false, “Enable time limit (realtime only)”, confirm = true, tooltip = TL_TT, group = AB_GP, display = display.none) float timeLimitInput = input.float(0.5, “Time limit (seconds)”, confirm = true, group = AB_GP, display = display.none) float volumeLimitInput = input.float(5, “Volume Filter”, tooltip = VLMT_TT, confirm = true, group = AVLMT_GP, display = display.none) bool autoVolumeLimitInput = input.bool(true, “Use Auto Mode”, tooltip = VLMT_AUTO_TT, confirm = true, group = AVLMT_GP, display = display.none) int autoVolMinsInput = input.int(30, “SD Interval (minutes)”, confirm = true, group = AVLMT_GP, display = display.none) int autoSdMultInput = input.int(DEF_SD_MULT, “SD Multiplier”, confirm = true, group = AVLMT_GP, display = display.none) bool deltaModeInput = input.bool(true, “Enable Delta Mode”, confirm = true, group = OTHER_GP, display = display.none) color neutralColourInput = input.color(color.yellow, “Regular”, group = STYLE_GROUP, display = display.none) color askColourInput = input.color(color.red, “Ask Delta”, group = STYLE_GROUP, inline = IN_DELTA, display = display.none) color bidColourInput = input.color(color.green, “Bid Delta”, group = STYLE_GROUP, inline = IN_DELTA, display = display.none) //<interface> type absorptionObj varip float movePrice varip float nextPriceInQueue varip int moveDirection varip float volumeAbsorbed varip float volumeAccumulator varip bool absorbed varip float absorbingPrice varip bool isBuy varip int startingTime varip int nextTimeInQueue type absorptionDisplayObj varip float sellVolAbsorbed varip float buyVolAbsorbed varip float deltaValue varip bool isrealtime varip float volumeLimit //<function> calculateTick(float price, float tickSize) => float multiplier = math.round(price / tickSize) multiplier * tickSize convertSecstoMs(float seconds) => math.round(seconds * 1000) checkAbsorption(int currDirection, int moveDirection, bool metTimeLimit = true) => absorbed = (currDirection != moveDirection) and metTimeLimit absorbed getDirection(float movePrice, float nextPrice, int upDirection, int ntDirection, int downDirection) => if movePrice == nextPrice ntDirection else if movePrice > nextPrice downDirection else if movePrice < nextPrice upDirection getVolumeChange(float newVolume, float prevVolume) => newVolume – prevVolume checkPriceChange(float currPrice, float newPrice) => currPrice != newPrice updateAbsorptionObj(absorptionObj object, float priceTick, float volumeChange, float volumeLimit, int timeNow = na, int timeLimit = na) => bool priceChanged = checkPriceChange(object.movePrice, priceTick) int currDirection = getDirection(object.movePrice, priceTick, UP_DIRECTION, NT_DIRECTION, DOWN_DIRECTION) object.absorbingPrice := na object.absorbed := false if na(object.movePrice) object.movePrice := priceTick if na(object.startingTime) and not na(timeNow) object.startingTime := timeNow if priceChanged and object.moveDirection == NT_DIRECTION object.moveDirection := currDirection object.nextPriceInQueue := priceTick object.nextTimeInQueue := timeNow if priceChanged and object.moveDirection != NT_DIRECTION bool metTimeLimit = true if not na(timeLimit) and not na(timeNow) int expectedTime = object.startingTime + timeLimit metTimeLimit := timeNow <= expectedTime bool absorbed = checkAbsorption(currDirection, object.moveDirection, metTimeLimit) object.absorbingPrice := object.movePrice object.absorbed := absorbed and (object.volumeAccumulator >= volumeLimit) object.volumeAbsorbed := object.absorbed ? object.volumeAccumulator : 0 object.isBuy := object.moveDirection == DOWN_DIRECTION object.startingTime := object.nextTimeInQueue object.nextTimeInQueue := timeNow object.movePrice := object.nextPriceInQueue object.nextPriceInQueue := priceTick object.moveDirection := currDirection object.volumeAccumulator := volumeChange else if not priceChanged object.volumeAccumulator += volumeChange object.isBuy := na // return object includeToAbsorbingMap(map<float, absorptionDisplayObj> absorbingPrices, absorptionObj mainObject, bool isDelta, float volumeLimit, bool isRealTime = false) => if mainObject.absorbed absorptionDisplayObj absorptionDisplay = absorbingPrices.keys().includes(mainObject.absorbingPrice) ? absorbingPrices.get(mainObject.absorbingPrice) : absorptionDisplayObj.new(0, 0) if mainObject.isBuy absorptionDisplay.buyVolAbsorbed += mainObject.volumeAbsorbed else absorptionDisplay.sellVolAbsorbed += mainObject.volumeAbsorbed absorptionDisplay.deltaValue := absorptionDisplay.buyVolAbsorbed – absorptionDisplay.sellVolAbsorbed absorptionDisplay.volumeLimit := volumeLimit absorptionDisplay.isrealtime := isRealTime if isDelta and math.abs(absorptionDisplay.deltaValue) < absorptionDisplay.volumeLimit absorbingPrices.remove(mainObject.absorbingPrice) else absorbingPrices.put(mainObject.absorbingPrice, absorptionDisplay) absorbingPrices getHistoricalData() => [calculateTick(close, tickSizeInput), volume] getAutoVolumeLimit(int len) => ta.stdev(volume, len) //<calculation> var simple string ltfDisabler = timeframe.from_seconds(timeframe.in_seconds(timeframe.period) * 2) float closeTick = calculateTick(close, tickSizeInput) var int timeLimit = enableTimeLimitInput ? convertSecstoMs(timeLimitInput) : na varip absorptionObj mainObject = absorptionObj.new(na, na, NT_DIRECTION, 0, 0, na, na, na) varip float prevVolume = volume varip bool isBarConfirmed = false varip map<float, absorptionDisplayObj> absorbingPrices = map.new<float, absorptionDisplayObj>() // reset if isBarConfirmed and barstate.isnew isBarConfirmed := false absorbingPrices := map.new<float, absorptionDisplayObj>() float volumeChange = getVolumeChange(volume, prevVolume) // historical [priceTick, volChangeLTF] = request.security_lower_tf(syminfo.tickerid, useLtfInput ? ltfInput : ltfDisabler, getHistoricalData(), true, ignore_invalid_timeframe = true) // volume limit (filter) if autoVolMinsInput <= 0 log.error(MINS_ERROR) autoVolumeLimitVal = request.security(syminfo.tickerid, “1”, getAutoVolumeLimit(autoVolMinsInput) , ignore_invalid_symbol = true, calc_bars_count = autoVolMinsInput) float volumeLimit = if autoVolumeLimitInput and not na(autoVolumeLimitVal) autoVolumeLimitVal * autoSdMultInput else volumeLimitInput priceTick := barstate.ishistory ? priceTick : na if not na(priceTick) for i = 0 to priceTick.size() – 1 if priceTick.size() == 0 break mainObject := updateAbsorptionObj(mainObject, priceTick.get(i), volChangeLTF.get(i), volumeLimit) absorbingPrices := includeToAbsorbingMap(absorbingPrices, mainObject, deltaModeInput, volumeLimit) // live if barstate.isrealtime mainObject := updateAbsorptionObj(mainObject, closeTick, volumeChange, volumeLimit, timenow, timeLimit) absorbingPrices := includeToAbsorbingMap(absorbingPrices, mainObject, deltaModeInput, volumeLimit, true) // prep values for next bar prevVolume := volume if barstate.isconfirmed prevVolume := 0 isBarConfirmed := true // <display> for key in absorbingPrices.keys() chart.point xy = chart.point.new(time, na, key) absorptionDisplayObj absorptionDisplay = absorbingPrices.get(key) string labelText = deltaModeInput ? str.format(“{0} {1}”, CHAR_TO_USE_POINTER, absorptionDisplay.deltaValue) : str.format(“{0} ▲ {1} {2} ▼ {3}”, CHAR_TO_USE_POINTER, str.tostring(absorptionDisplay.buyVolAbsorbed, “#.###”), CHAR_TO_USE, str.tostring(absorptionDisplay.sellVolAbsorbed, “#.###”)) color textColour = deltaModeInput ? absorptionDisplay.deltaValue >= 0 ? bidColourInput : askColourInput : neutralColourInput string tooltip = str.format(“{0} \nVol Absorbed by Bids: {1} \nVol Absorbed by Asks: {2} \nVol Filter Value: {3} \nRealtime Data: {4}”, key, absorptionDisplay.buyVolAbsorbed, absorptionDisplay.sellVolAbsorbed, absorptionDisplay.volumeLimit, absorptionDisplay.isrealtime ? “Yes” : “No”) label.new(xy, labelText, xloc = xloc.bar_time, yloc = yloc.price, color = color.new(color.white, 100), style = label.style_label_left, textcolor = textColour, tooltip = tooltip) // recommendations table string recommendedTickSize = str.format(“Recommended Tick Size: {0}”, str.tostring(request.security(syminfo.tickerid, “1”, ta.atr(14)), “#.###”)) string recommendedFilterArg = not na(autoVolumeLimitVal) ? str.tostring(autoVolumeLimitVal * DEF_SD_MULT, “#.###”) : “Cannot be determined.” string recommendedFilterSize = str.format(“Recommended Volume Filter: {0}”, recommendedFilterArg) table recommendationTable = table.new(position.top_right, 1, 2, bgcolor = color.new(color.black,50)) recommendationTable.cell(0, 0, recommendedTickSize, text_color = color.white, text_halign = text.align_left) recommendationTable.cell(0, 1, recommendedFilterSize, text_color = color.white, text_halign = text.align_left)
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

indiquer bougie contraire aux volumes et ou se trouva la plupart des achats et v


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Atemi19 @atemi19 Participant
Summary

This topic contains 5 replies,
has 3 voices, and was last updated by Atemi19
1 year, 1 month ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 12/11/2024
Status: Active
Attachments: 2 files
Logo Logo
Loading...