Нужно сконвертировать код из tradingview в мт5

MQL5 Konvertierung

Auftrag beendet

Ausführungszeit 7 Tage

Spezifikation

Нужно сконвертировать код из tradingview в мт5.

 study("Double Top/Bottom - Ultimate (OS)", shorttitle="W/M - Ultimate(OS)", overlay=true, max_lines_count=500, max_labels_count=500, max_bars_back=1000)

length = input(10, step=5, minval=5)

showZigzag = input(false)

showPivots = input(true)

showStats = input(true)

bullishColor = input(color.green)

bullTrapColor = input(color.orange)

bearishColor = input(color.red)

bearTrapColor = input(color.lime)

textColor = input(color.black)


MaxRiskPerReward = input(30, step=5, minval=5, maxval=100)

DisplayRiskPerReward = input(true)

var zigzagvalues = array.new_float(0)

var zigzagindexes = array.new_int(0)

var zigzagdir = array.new_int(0)


var doubleTopBottomValues = array.new_float(3)

var doubleTopBottomIndexes = array.new_int(3)

var doubleTopBottomDir = array.new_int(3)


int max_array_size = 10

max_bars_back(high, 1000)

max_bars_back(low, 1000)


var lineArray = array.new_line(0)

var labelArray = array.new_label(0)

pivots(length)=>

    float ph = highestbars(high, length) == 0 ? high : na

    float pl = lowestbars(low, length) == 0 ? low : na

    dir = 0

    dir := iff(ph and na(pl), 1, iff(pl and na(ph), -1, dir[1]))

    [dir, ph, pl]


add_to_array(value, index, dir)=>

    mult = array.size(zigzagvalues) < 2? 1 : 

                 (dir*value > dir*array.get(zigzagvalues,1))? 2 : 1

    array.unshift(zigzagindexes, index)

    array.unshift(zigzagvalues, value)

    array.unshift(zigzagdir, dir*mult)

    if array.size(zigzagindexes) > max_array_size

        array.pop(zigzagindexes)

        array.pop(zigzagvalues)

        array.pop(zigzagdir)


add_to_zigzag(dir, dirchanged, ph, pl, index)=>

    value = (dir == 1? ph : pl)

    if array.size(zigzagvalues) == 0 or dirchanged

        add_to_array(value, index, dir)

    else if(dir == 1 and value > array.get(zigzagvalues, 0)) or (dir == -1 and value < array.get(zigzagvalues, 0))

        array.shift(zigzagvalues)

        array.shift(zigzagindexes)

        array.shift(zigzagdir)

        add_to_array(value, index, dir)


zigzag(length)=>

    [dir, ph, pl] = pivots(length)

    dirchanged = change(dir)

    if(ph or pl)

        add_to_zigzag(dir, dirchanged, ph, pl, bar_index)


calculate_double_pattern()=>

    doubleTop = false

    doubleTopConfirmation = 0

    doubleBottom = false

    doubleBottomConfirmation = 0

    if(array.size(zigzagvalues) >= 4) 

        index = array.get(zigzagindexes, 1)

        value = array.get(zigzagvalues, 1)

        highLow = array.get(zigzagdir, 1)

        

        lindex = array.get(zigzagindexes, 2)

        lvalue = array.get(zigzagvalues, 2)

        lhighLow = array.get(zigzagdir, 2)

        

        llindex = array.get(zigzagindexes, 3)

        llvalue = array.get(zigzagvalues, 3)

        llhighLow = array.get(zigzagdir, 3)

        risk = abs(value-llvalue)

        reward = abs(value-lvalue)

        riskPerReward = risk*100/(risk+reward)

        

        if(highLow == 1 and llhighLow == 2 and lhighLow < 0  and riskPerReward < MaxRiskPerReward)

            doubleTop := true

        if(highLow == -1 and llhighLow == -2 and lhighLow > 0 and riskPerReward < MaxRiskPerReward)

            doubleBottom := true


        if(doubleTop or doubleBottom)

            array.set(doubleTopBottomValues, 0, value)

            array.set(doubleTopBottomValues, 1, lvalue)

            array.set(doubleTopBottomValues, 2, llvalue)

            

            array.set(doubleTopBottomIndexes, 0, index)

            array.set(doubleTopBottomIndexes, 1, lindex)

            array.set(doubleTopBottomIndexes, 2, llindex)

            

            array.set(doubleTopBottomDir, 0, highLow)

            array.set(doubleTopBottomDir, 1, lhighLow)

            array.set(doubleTopBottomDir, 2, llhighLow)

    

    [doubleTop, doubleBottom]


get_crossover_info(doubleTop, doubleBottom)=>

    index = array.get(doubleTopBottomIndexes, 0)

    value = array.get(doubleTopBottomValues, 0)

    highLow = array.get(doubleTopBottomDir, 0)

    

    lindex = array.get(doubleTopBottomIndexes, 1)

    lvalue = array.get(doubleTopBottomValues, 1)

    lhighLow = array.get(doubleTopBottomDir, 1)

    

    llindex = array.get(doubleTopBottomIndexes, 2)

    llvalue = array.get(doubleTopBottomValues, 2)

    llhighLow = array.get(doubleTopBottomDir, 2)

    

    latestDoubleTop = false

    latestDoubleBottom = false

    latestDoubleTop := doubleTop ? true : doubleBottom? false : latestDoubleTop[1]

    latestDoubleBottom := doubleBottom? true : doubleTop? false : latestDoubleBottom[1]

    

    doubleTopConfirmation = 0

    doubleBottomConfirmation = 0

    doubleTopConfirmation := latestDoubleTop? (crossunder(low, lvalue) ? 1 : crossover(high, llvalue) ? -1 : 0) : 0

    doubleBottomConfirmation := latestDoubleBottom? (crossover(high, lvalue) ? 1 : crossunder(low, llvalue) ? -1 : 0) : 0

    [doubleTopConfirmation, doubleBottomConfirmation]


draw_double_pattern(doubleTop,doubleBottom,doubleTopConfirmation,doubleBottomConfirmation)=>

    index = array.get(doubleTopBottomIndexes, 0)

    value = array.get(doubleTopBottomValues, 0)

    highLow = array.get(doubleTopBottomDir, 0)

    

    lindex = array.get(doubleTopBottomIndexes, 1)

    lvalue = array.get(doubleTopBottomValues, 1)

    lhighLow = array.get(doubleTopBottomDir, 1)

    

    llindex = array.get(doubleTopBottomIndexes, 2)

    llvalue = array.get(doubleTopBottomValues, 2)

    llhighLow = array.get(doubleTopBottomDir, 2)

    

    isBullish = true

    isBullish := (doubleTop or doubleBottom)? doubleTop : isBullish[1]

    

    risk = abs(value-llvalue)

    reward = abs(value-lvalue)

    riskPerReward = risk*100/(risk+reward)

    

    base = line.new(x1=index, y1=value, 

                 x2 = llindex, y2=llvalue,

                 color=doubleTop? bearishColor : bullishColor, width=2, style=line.style_solid)

    l1 = line.new(x1=index, y1=value, 

                 x2 = lindex, y2=lvalue,

                 color=doubleTop? bearishColor : bullishColor, width=2, style=line.style_dotted)

    l2 = line.new(x1=lindex, y1=lvalue, 

                 x2 = llindex, y2=llvalue,

                 color=doubleTop? bearishColor : bullishColor, width=2, style=line.style_dotted)

    labelText = (doubleTop? "Double Top" : "Double Bottom") + (DisplayRiskPerReward ? " RR - "+tostring(riskPerReward) : "")

    

    baseLabel = label.new(x=index, y=value, text=labelText, yloc=doubleTop?yloc.abovebar:yloc.belowbar,

                             color=doubleTop?bearishColor:bullishColor, 

                             style=doubleTop?label.style_label_down:label.style_label_up,

                             textcolor=textColor, size=size.normal)

    

    if not (doubleTop or doubleBottom) 

        line.delete(base)

        line.delete(l1)

        line.delete(l2)

        label.delete(baseLabel)

        

    var doubleTopCount = 0

    var doubleBottomCount = 0

    doubleTopCount := doubleTop? nz(doubleTopCount[1],0) + 1 : nz(doubleTopCount[1],0)

    doubleBottomCount := doubleBottom? nz(doubleBottomCount[1],0) + 1 : nz(doubleBottomCount[1],0)

        

    if(line.get_x2(base) == line.get_x2(base[1]))

        line.delete(base[1])

        line.delete(l1[1])

        line.delete(l2[1])

        label.delete(baseLabel[1])

        doubleTopCount := doubleTop? doubleTopCount -1 : doubleTopCount

        doubleBottomCount := doubleBottom? doubleBottomCount -1 : doubleBottomCount

    

    

    if(barstate.islast)

        lres = line.new(x1=bar_index, y1=lvalue, 

                     x2 = lindex, y2=lvalue,

                     color=isBullish? bearishColor : bullishColor, width=2, style=line.style_dashed, extend=extend.left)

        lsup = line.new(x1=bar_index, y1=llvalue, 

                     x2 = llindex, y2=llvalue,

                     color=isBullish? bullishColor : bearishColor , width=2, style=line.style_dashed, extend=extend.left)


    

    doubleTopConfirmationCount = doubleTopConfirmation>0? 1 : 0

    doubleBottomConfirmationCount = doubleBottomConfirmation>0? 1:0

    doubleTopInvalidationCount = doubleTopConfirmation<0? 1 : 0

    doubleBottomInvalidationCount = doubleBottomConfirmation<0? 1:0

    

    if(doubleTopConfirmation != 0 or doubleBottomConfirmation !=0)

        if(doubleTopConfirmation>0 or doubleBottomConfirmation > 0)

            lresbreak = line.new(x1=lindex, y1=lvalue, 

                     x2 = bar_index, y2=lvalue,

                     color=isBullish? bearishColor : bullishColor, width=2, style=line.style_dashed)

            if(line.get_x1(lresbreak[1]) == line.get_x1(lresbreak))

                doubleTopConfirmationCount := 0

                doubleBottomConfirmationCount := 0

                doubleTopInvalidationCount := 0

                doubleBottomInvalidationCount := 0

                line.delete(lresbreak)

                lresbreak := lresbreak[1]

        else if(doubleTopConfirmation<0 or doubleBottomConfirmation < 0)

            lsupbreak = line.new(x1=llindex, y1=llvalue, 

                     x2 = bar_index, y2=llvalue,

                     color=isBullish? bullishColor : bearishColor , width=2, style=line.style_dashed)

            if(line.get_x1(lsupbreak[1]) == line.get_x1(lsupbreak))

                doubleTopInvalidationCount := 0

                doubleBottomInvalidationCount := 0

                doubleTopConfirmationCount := 0

                doubleBottomConfirmationCount := 0

                line.delete(lsupbreak)

                lsupbreak := lsupbreak[1]

    doubleTopConfirmationCount := nz(doubleTopConfirmationCount[1],0)+doubleTopConfirmationCount

    doubleBottomConfirmationCount := nz(doubleBottomConfirmationCount[1],0)+doubleBottomConfirmationCount

    doubleTopInvalidationCount := nz(doubleTopInvalidationCount[1],0)+doubleTopInvalidationCount

    doubleBottomInvalidationCount := nz(doubleBottomInvalidationCount[1],0)+doubleBottomInvalidationCount

    [doubleTopCount, doubleBottomCount, doubleTopConfirmationCount, doubleBottomConfirmationCount, doubleTopInvalidationCount, doubleBottomInvalidationCount]


zigzag(length)


[doubleTop, doubleBottom] = calculate_double_pattern()

[doubleTopConfirmation, doubleBottomConfirmation] = get_crossover_info(doubleTop, doubleBottom)

[doubleTopCount, doubleBottomCount, 

                 doubleTopConfirmationCount, doubleBottomConfirmationCount,

                 doubleTopInvalidationCount, doubleBottomInvalidationCount] = draw_double_pattern(doubleTop,doubleBottom,doubleTopConfirmation,doubleBottomConfirmation)


var stats = table.new(position = position.top_right, columns = 5, rows = 5, border_width = 1)

if(barstate.islast and showStats)

    colorWorst = color.rgb(255, 153, 51)

    colorBest = color.rgb(51, 204, 51)

    colorBad = color.rgb(255, 204, 153)

    colorGood = color.rgb(204, 255, 204)

    colorNeutral = color.rgb(255, 255, 204)

    

    dtConfirmationPercent = doubleTopConfirmationCount+doubleTopInvalidationCount == 0? 0.5 : doubleTopConfirmationCount/(doubleTopConfirmationCount+doubleTopInvalidationCount)

    dbConfirmationPercent = (doubleBottomConfirmationCount+doubleBottomInvalidationCount) == 0? 0.5 : doubleBottomConfirmationCount/(doubleBottomConfirmationCount+doubleBottomInvalidationCount)

    

    dtColor = dtConfirmationPercent >= 0.8? colorBest :

                 dtConfirmationPercent >= 0.6? colorGood :

                 dtConfirmationPercent >= 0.4? colorNeutral :

                 dtConfirmationPercent >= 0.2? colorBad : colorWorst

    dbColor = dbConfirmationPercent >= 0.8? colorBest :

                 dbConfirmationPercent >= 0.6? colorGood :

                 dbConfirmationPercent >= 0.4? colorNeutral :

                 dbConfirmationPercent >= 0.2? colorBad : colorWorst

    table.cell(table_id = stats, column = 0, row = 0 , text = "", bgcolor=color.black, text_color=color.white)

    table.cell(table_id = stats, column = 0, row = 1 , text = "Double Top", bgcolor=color.black, text_color=color.white)

    table.cell(table_id = stats, column = 0, row = 2 , text = "Double Bottom", bgcolor=color.black, text_color=color.white)

    

    table.cell(table_id = stats, column = 1, row = 0 , text = "Count", bgcolor=color.black, text_color=color.white)

    table.cell(table_id = stats, column = 2, row = 0 , text = "Confirmation", bgcolor=color.black, text_color=color.white)

    table.cell(table_id = stats, column = 3, row = 0 , text = "Invalidation", bgcolor=color.black, text_color=color.white)

    

    table.cell(table_id = stats, column = 1, row = 1, text = tostring(doubleTopCount), bgcolor=dtColor)

    table.cell(table_id = stats, column = 1, row = 2, text = tostring(doubleBottomCount), bgcolor=dbColor)

    

    table.cell(table_id = stats, column = 2, row = 1, text = tostring(doubleTopConfirmationCount), bgcolor=dtColor)

    table.cell(table_id = stats, column = 3, row = 1, text = tostring(doubleTopInvalidationCount), bgcolor=dtColor)

    

    table.cell(table_id = stats, column = 2, row = 2, text = tostring(doubleBottomConfirmationCount), bgcolor=dbColor)

    table.cell(table_id = stats, column = 3, row = 2, text = tostring(doubleBottomInvalidationCount), bgcolor=dbColor)


if(barstate.islast and array.size(zigzagindexes) > 1)

    lastHigh = 0.0

    lastLow = 0.0

    for x = 0 to array.size(zigzagindexes)-1

        i = array.size(zigzagindexes)-1-x

        index = array.get(zigzagindexes, i)

        value = array.get(zigzagvalues, i)

        highLow = array.get(zigzagdir, i)

        index_offset = bar_index-index

        

        labelText = highLow ==2 ? "HH" : highLow == 1? "LH" : highLow == -1? "HL" : "LL"

        labelColor = highLow ==2 ? bullishColor : highLow == 1? bullTrapColor : highLow == -1? bearTrapColor : bearishColor

        labelStyle = highLow > 0? label.style_label_down : label.style_label_up

        // labelLocation = highLow > 0? yloc.abovebar : yloc.belowbar

        labelLocation = yloc.price

        if(showPivots)

            l = label.new(x=index, y = value, text=labelText, xloc=xloc.bar_index, yloc=labelLocation, style=labelStyle, size=size.tiny, 

                                 color=labelColor, textcolor=textColor)

            array.unshift(labelArray, l)

            if(array.size(labelArray) > 100)

                label.delete(array.pop(labelArray))

        if(i < array.size(zigzagindexes)-1 and showZigzag)

            indexLast = array.get(zigzagindexes, i+1)

            valueLast = array.get(zigzagvalues, i+1)

            l = line.new(x1=index, y1=value, 

                         x2 = indexLast, y2=valueLast,

                         color=labelColor, width=2, style=line.style_solid)

                         

            array.unshift(lineArray, l)

            if(array.size(lineArray) > 100)

                line.delete(array.pop(lineArray))

alertcondition(doubleBottom, "Double Bottom", "Probable double bottom observed for {{ticker}} on {{interval}} timeframe")

alertcondition(doubleBottomConfirmation > 0, "Double Bottom Confirmation", "Double bottom confirmation observed for {{ticker}} on {{interval}} timeframe")

alertcondition(doubleBottomConfirmation < 0, "Double Bottom Invalidation", "Double bottom invalidation observed for {{ticker}} on {{interval}} timeframe")

alertcondition(doubleTop, "Double Top", "Probable double top observed for {{ticker}} on {{interval}} timeframe")

alertcondition(doubleTopConfirmation > 0, "Double Top Confirmation", "Double top confirmation observed for {{ticker}} on {{interval}} timeframe")

alertcondition(doubleTopConfirmation < 0, "Double Top Invalidation", "Double top invalidation observed for {{ticker}} on {{interval}} timeframe")

Bewerbungen

1
Entwickler 1
Bewertung
(236)
Projekte
440
26%
Schlichtung
125
21% / 57%
Frist nicht eingehalten
96
22%
Arbeitet

Projektdetails

Budget
50+ USD
Für die Entwickler
45 USD