Please – Translation of Order Blocks from TV

Viewing 15 posts - 1 through 15 (of 22 total)
  • Author
    Posts
  • #199375 quote
    KhaledKhaled
    Participant
    Veteran
    Hello, Can anyone please help translating the code below from TradingView? I don’t need the alerts. I just need the order blocks boxes to be drawn. Thanks in advance. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ClayeWeight // Sonarlabs – Order Block Finder // // // ENJOY THE FREE SCRIPT //@version=5 indicator(title=’Sonarlab – Order Blocks’, shorttitle=’Sonarlab – OB’, overlay=true, max_boxes_count=20) _v = input.string(“1.0.2″, title=”Version”, options=[“1.0.2″], group=”Sonarlab.io”, tooltip=”This is a free script based on our premium Smart Money Concepts (SMC) indicator. Get a free trial of our SMC indicator by visiting our website.\nhttps://www.sonarlab.io”) sens = input.int(28, minval=1, title=’Sensitivity’, group=’Order Block’, tooltip=’Lower the sensitivity to show more order blocks. A higher sensitivity will show less order blocks.’) sens /= 100 // OB OBMitigationType = input.string(“Close”, title=”OB Mitigation Type”, options=[“Close”, “Wick”], group=”Order Block”, tooltip=”Choose how Order Blocks are mitigated”) OBBullMitigation = OBMitigationType==”Close” ? close[1] : low OBBearMitigation = OBMitigationType==”Close” ? close[1] : high //OB Colors col_bullish = input.color(#5db49e, title=”Bullish OB Border”, inline=”a”, group=”Order Block”) col_bullish_ob = input.color(color.new(#64C4AC, 85), title=”Background”, inline=”a”, group=”Order Block”) col_bearish = input.color(#4760bb, title=”Bearish OB Border”, inline=”b”, group=”Order Block”) col_bearish_ob = input.color(color.new(#506CD3, 85), title=”Background”, inline=”b”, group=”Order Block”) // Alerts buy_alert = input.bool(title=’Buy Signal’, defval=true, group=’Alerts’, tooltip=’An alert will be sent when price goes below the top of a bullish order block.’) sell_alert = input.bool(title=’Sell Signal’, defval=true, group=’Alerts’, tooltip=’An alert will be sent when price goes above the bottom of a bearish order block.’) // Delacring Variables bool ob_created = false bool ob_created_bull = false var int cross_index = na // Declaring Box Arrays var box drawlongBox = na var longBoxes = array.new_box() var box drawShortBox = na var shortBoxes = array.new_box() // Custom Rate of Change (ROC) calculation. This is to calculate high momentum moves in the market. pc = (open – open[4]) / open[4] * 100 // If the ROC crossover our Sensitivty input – Then create an Order Block // Sensitivty is negative as this is a Bearish OB if ta.crossunder(pc, -sens) ob_created := true cross_index := bar_index cross_index // If the ROC crossover our Sensitivty input – Then create an Order Block if ta.crossover(pc, sens) ob_created_bull := true cross_index := bar_index cross_index // ——————————- // Bearish OB Creation // ——————————- // Check if we should create a OB, Also check if we haven’t created an OB in the last 5 candles. if ob_created and cross_index – cross_index[1] > 5 float last_green = 0 float highest = 0 // Loop through the most recent candles and find the first GREEN (Bullish) candle. We will place our OB here. for i = 4 to 15 by 1 if close[i] > open[i] last_green := i break // Draw our OB on that candle – then push the box into our box arrays. drawShortBox := box.new(left=bar_index[last_green], top=high[last_green], bottom=low[last_green], right=bar_index[last_green], bgcolor=col_bearish_ob, border_color=col_bearish, extend=extend.right) array.push(shortBoxes, drawShortBox) // ——————————- // Bullish OB Creation // ——————————- // Check if we should create a OB, Also check if we haven’t created an OB in the last 5 candles. if ob_created_bull and cross_index – cross_index[1] > 5 float last_red = 0 float highest = 0 // Loop through the most recent candles and find the first RED (Bearish) candle. We will place our OB here. for i = 4 to 15 by 1 if close[i] < open[i] last_red := i break // Draw our OB on that candle – then push the box into our box arrays. drawlongBox := box.new(left=bar_index[last_red], top=high[last_red], bottom=low[last_red], right=bar_index[last_red], bgcolor=col_bullish_ob, border_color=col_bullish, extend=extend.right) array.push(longBoxes, drawlongBox) // —————– Bearish Order Block ——————- // Clean up OB boxes and place alerts if array.size(shortBoxes) > 0 for i = array.size(shortBoxes) – 1 to 0 by 1 sbox = array.get(shortBoxes, i) top = box.get_top(sbox) bot = box.get_bottom(sbox) // If the two last closes are above the high of the bearish OB – Remove the OB if OBBearMitigation > top array.remove(shortBoxes, i) box.delete(sbox) // Alerts if high > bot and sell_alert alert(‘Price inside Bearish OB’, alert.freq_once_per_bar) // —————– Bullish Clean Up ——————- // Clean up OB boxes and place alerts if array.size(longBoxes) > 0 for i = array.size(longBoxes) – 1 to 0 by 1 sbox = array.get(longBoxes, i) bot = box.get_bottom(sbox) top = box.get_top(sbox) // If the two last closes are below the low of the bullish OB – Remove the OB if OBBullMitigation < bot array.remove(longBoxes, i) box.delete(sbox) // Alerts if low < top and buy_alert alert(‘Price inside Bullish OB’, alert.freq_once_per_bar)
    #199376 quote
    KhaledKhaled
    Participant
    Veteran
    #199437 quote
    KhaledKhaled
    Participant
    Veteran
    Anyone can help PLEASE ! It will benefit all the PRT community. Thank you 🙂
    #199440 quote
    JSJS
    Participant
    Master

    I can’t translate the code but maybe this is a beginning:

     

    It looks like a SAR with a custom ROC calculation:

    pc = (open – open[4]) / open[4] * 100

    The trigger lines are set with “Sensitivty” (sens = 28/100)

    At a positive crossing (Crosses Over) “Bullish OB” are drawn:

    If pc crosses over sens then

    As a starting point, the last red candle is sought

    For i = 4 to 15

    If Close[i] < Open[i] then

    LastRed = i

    Break

    At a negative crossing (Crosses Under) “Bearish OB” are drawn:

    If pc crosses under -sens then

    with the last green candle as the starting point.

    For i = 4 to 15

    If Close[i] > Open[i] then

    LastGreen = i

    Break

    #199442 quote
    KhaledKhaled
    Participant
    Veteran
    Thank you JS!
    #199443 quote
    KhaledKhaled
    Participant
    Veteran
    I tried my best, but I’m still far away… Nicolas, Roberto, pleeeease!
    obbull=0
    obbear=0
    Sensi = 30
    
    pc = (open - open[4]) / open[4] * 10000
    
    if pc crosses over Sensi then
    obbull = 1
    bullcrossindex = barindex
    endif
    
    if pc crosses under -Sensi then
    obbear = 1
    bearcrossindex = barindex
    endif
    
    if obbull=1 and bullcrossindex - bullcrossindex[1] > 5 then
    floatlastgreen = 0
    floathighest = 0
    For i = 4 to 15
    If Close[i] > Open[i] then
    LastGreen = i
    endif
    //Break
    next
    DRAWRECTANGLE(barindex[i], close, bullcrossindex, open)coloured("blue")
    endif
    
    if obbear=1 and bearcrossindex - bearcrossindex[1] > 5 then
    floatlastred = 0
    floathighest = 0
    For i = 4 to 15
    If Close[i] < Open[i] then
    LastRed = i
    endif
    //Break
    next
    DRAWRECTANGLE(barindex[LastRed], open, bearcrossindex, close)coloured("red")
    endif
    
    return
    #199453 quote
    robertogozzirobertogozzi
    Moderator
    Legend
    Sorry, I don’t have a good knowledge of then Pinescript programming language.
    Khaled thanked this post
    #199506 quote
    KhaledKhaled
    Participant
    Veteran
    Dear All, Below my updated attempt to convert the code above, but it doesn’t seem to work properly. Any help would be much appreciated.
    obbull=0
    obbear=0
    bullcrossindex=0
    bearcrossindex=0
    Lookback = 4
    Sensi = 30
    
    pc = (open - open[Lookback]) / open[Lookback] * 10000
    
    
    if pc crosses over Sensi then
    obbull = 1
    bullcrossindex = barindex
    endif
    
    if pc crosses under -Sensi then
    obbear = 1
    bearcrossindex = barindex
    endif
    
    if obbull=1 and bullcrossindex - bullcrossindex[1] > 5 then
    floatlastred = 0
    floathighest = 0
    For i = 4 to 15
    If Close[i] < Open[i] then
    LastRed = i
    endif
    //Break
    next
    DRAWRECTANGLE(bullcrossindex, high, bullcrossindex+40, low)coloured("red")
    endif
    
    if obbear=1 and bearcrossindex - bearcrossindex[1] > 5 then
    floatlastgreen = 0
    floathighest = 0
    For i = 4 to 15
    If Close[i] > Open[i] then
    LastGreen = i
    endif
    //Break
    next
    DRAWRECTANGLE(bearcrossindex, high, bearcrossindex+40, low)coloured("green")
    endif
    
    return
    #199508 quote
    KhaledKhaled
    Participant
    Veteran
    Dear @Nicolas, please HELP ! Thanks a million!
    #199811 quote
    KhaledKhaled
    Participant
    Veteran
    Since most of us were on holidays, I suspect this why I didn’t get too many replies. @Nicolas, can you please help with this Order Blocks code? Thanks Khaled
    #199874 quote
    NicolasNicolas
    Keymaster
    Legend
    Please don’t multiple post for the same query. We are all very busy, trying to solve queries everywhere, please be patient.
    Khaled thanked this post
    #200306 quote
    KhaledKhaled
    Participant
    Veteran
    Nicolas, I understand PRT doesn’t handle yet two dimension Arrays. Can’t substiute  “array.push(longBoxes, drawlongBox)” with $array1 = longBoxes $array2 = drawlongBox and then create a conditional drawing of the box: if array1 = condition1 and $array2 = condition2 then drawrectangle(…) endif   like you have done on the first example on Arrays about Support and Resistance.   Merci beaucoup
    #200329 quote
    KhaledKhaled
    Participant
    Veteran
    I tried my best, spent hours reading TradingView coding manual, but couldn’t reach a satisfactory result. Can someone who knows Arrays in PRT (not necessary need to know TradingView) please help me to figure out if all Arrays are OK and why it doesn’t remove old order blocks? The original TradingView code is above. A BIG THANK YOU!
    obbull=0
    obbear=0
    OBBullMitigation=1
    OBBearMitigation=1
    boxdrawlongBox = 0
    boxdrawShortBox = 0
    Long=0
    Short = 0
    $longboxes[i]=0
    $shortboxes[i]=0
    $drawlongbox[i]=0
    $drawshortbox[i]=0
    
    // Variable Definition
    Sensi     = 30
    Lookback  = 4
    Loop      = 15
    
    pc = (open - open[Lookback]) / open[Lookback] * 10000
    
    
    if pc crosses over Sensi then
    obbull = 1
    bullcrossindex = barindex
    endif
    
    if pc crosses under -Sensi then
    obbear = 1
    bearcrossindex = barindex
    endif
    
    if OBBullMitigation = 1 then
    OBBullMitiValue  = close[1]
    endif
    if OBBearMitigation = 1 then
    OBBearMitiValue  = close[1]
    endif
    
    // -------------------------------
    // Bullish OB Creation
    // -------------------------------
    if obbull=1 and (bullcrossindex - bullcrossindex[1]) > 5 then
    lastred = 0
    ihighest = 0
    For i = 4 to Loop do
    If Close[i] < Open[i] then
    LastRed = i
    endif
    Break
    next
    
    //openobbull= open[LastRed]
    highobbull = high[LastRed]
    lowobbull = low[LastRed]
    //closeobbull = close[LastRed]
    
    $longboxes[i]=1
    $drawlongbox[i]=1
    
    endif
    
    // -------------------------------
    // Bearish OB Creation
    // -------------------------------
    if obbear=1 and (bearcrossindex - bearcrossindex[1]) > 5 then
    lastgreen = 0
    ihighest = 0
    For i = 4 to Loop do
    If Close[i] > Open[i] then
    LastGreen = i
    endif
    Break
    next
    
    //openobbear= open[LastGreen]
    highobbear = high[LastGreen]
    lowobbear = low[LastGreen]
    //closeobbear = close[LastGreen]
    
    $shortboxes[i]=1
    $drawshortbox[i]=1
    
    endif
    
    // ----------------- Bearish Order Block -------------------
    // Clean up OB boxes and place alerts
    // -------------------------------
    
    if $shortboxes[i] > 0 then
    for i = $shortboxes[i] -1 to 0 do
    sbox = $shortboxes[i]
    ibot = lowobbear
    itop = highobbear
    next
    if OBBearMitiValue > itop then
    $shortboxes[i]=0
    $drawshortbox[i]=0
    elsif OBBearMitiValue < itop  then
    DRAWRECTANGLE(bearcrossindex[LastGreen], highobbear, bearcrossindex+150, lowobbear)coloured(80,108,211)//style(line,2)
    //COLORBETWEEN(lowobbear,highobbear,"RED")
    endif
    if high > ibot then
    Short=-1
    endif
    endif
    
    
    // ----------------- Bullish Clean Up -------------------
    // Clean up OB boxes and place alerts
    // -------------------------------
    
    if $longboxes[i] > 0 then
    for i = $longboxes[i] -1 to 0 do
    sbox = $longboxes[i]
    ibot = lowobbull
    itop = highobbull
    next
    if OBBullMitiValue < ibot then
    $longboxes[i]=0
    $drawlongbox[i]=0
    elsif OBBullMitiValue > ibot then
    DRAWRECTANGLE(bullcrossindex[LastRed], highobbull, bullcrossindex+150, lowobbull)coloured(196,102,100)
    //COLORBETWEEN(lowobbull,highobbull,"blue")
    endif
    if low < itop then
    Long=1
    endif
    endif
    
    return
    #200334 quote
    NicolasNicolas
    Keymaster
    Legend
    You can’t remove previous objects on the chart if they are painted along the read of history. The best thing to do is to paint them all from the last candlestick within a loop through your arrays.
    Khaled thanked this post
    #200336 quote
    NicolasNicolas
    Keymaster
    Legend
    Ok digging into the code and I understand where is the trouble, all that zones must be erased if the price has breached them. Just made the version for the bearish zones, you can learn from it to create the other side 🙂
    defparam drawonlastbaronly=true
    
    //sens = 28
    // -----------------
    sens = sens/100
    OBBearMitigation = close
    
    
    // Custom Rate of Change (ROC) calculation. This is to calculate high momentum moves in the market.
    pc = (open - open[4]) / open[4] * 100
    
    // If the ROC crossover our Sensitivty input - Then create an Order Block
    // Sensitivty is negative as this is a Bearish OB
    if pc crosses under -sens then //ta.crossunder(pc, -sens)
    obcreated = 1
    crossindex = barindex
    endif
    
    // If the ROC crossover our Sensitivty input - Then create an Order Block
    if pc crosses over sens then //ta.crossover(pc, sens)
    obcreatedbull = 1
    crossindex = barindex
    endif
    
    // -------------------------------
    // Bearish OB Creation
    // -------------------------------
    // Check if we should create a OB, Also check if we haven't created an OB in the last 5 candles.
    if obcreated and crossindex - crossindex[1] > 5 then 
    lastgreen = 0
    hhighest = 0
    // Loop through the most recent candles and find the first GREEN (Bullish) candle. We will place our OB here.
    for i = 4 to 15 
    if close[i] > open[i] then 
    lastgreen = i
    //populate the arrays of order block to draw them later
    $left[plot]= barindex[lastgreen]
    $top[plot]=high[lastgreen]
    $bottom[plot]=low[lastgreen]
    $right[plot]=barindex[lastgreen]
    plot=plot+1 //increase the array column for next data
    break
    endif
    next
    
    endif
    
    // Clean up OB boxes
    if plot>0 then 
    for j = 0 to plot-1
    // If the two last closes are above the high of the bearish OB - Remove the OB
    if $left[j]>0 then //check if the zone still exist 
    itop = $top[j]
    breakout = summation[max(1,barindex-$left[j])](OBBearMitigation>itop)>=2
    if breakout then
    $left[j]=0 
    endif
    endif
    next
    endif
    
    //plot the boxes
    if islastbarupdate and plot>0 then 
    for j = 0 to plot-1 
    if $left[j]>0 then 
    drawrectangle($left[j],$top[j],barindex,$bottom[j]) coloured("grey",50) bordercolor("grey",50)
    endif
    next
    endif
    
    return
    Khaled and PLermite thanked this post
    order-blocks.png order-blocks.png
Viewing 15 posts - 1 through 15 (of 22 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Please – Translation of Order Blocks from TV


ProBuilder: Indicators & Custom Tools

New Reply
Author
author-avatar
Khaled @khaled Participant
Summary

This topic contains 21 replies,
has 5 voices, and was last updated by foxxcryptofoxxcrypto
4 years ago.

Topic Details
Forum: ProBuilder: Indicators & Custom Tools
Language: English
Started: 08/22/2022
Status: Active
Attachments: 6 files
ProRealCode ProRealCode
Loading...