Trader view indicator to MQL5

MQL5 Integración

Tarea técnica

Hello,


I need this to be converted to MQL5:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// © LonesomeTheBlue


//@version=4

study("Divergence for Many Indicators v4", overlay = true, max_bars_back = 1000, max_lines_count = 400, max_labels_count = 400)

prd = input(defval = 5, title = "Pivot Period", minval = 1, maxval = 50)

source = input(defval = "Close", title = "Source for Pivot Points", options = ["Close", "High/Low"])

searchdiv = input(defval = "Regular", title = "Divergence Type", options = ["Regular", "Hidden", "Regular/Hidden"])

showindis = input(defval = "Full", title = "Show Indicator Names", options = ["Full", "First Letter", "Don't Show"])

showlimit = input(1, title="Minimum Number of Divergence", minval = 1, maxval = 11)

maxpp = input(defval = 10, title = "Maximum Pivot Points to Check", minval = 1, maxval = 20)

maxbars = input(defval = 100, title = "Maximum Bars to Check", minval = 30, maxval = 200)

shownum = input(defval = true, title = "Show Divergence Number")

showlast = input(defval = false, title = "Show Only Last Divergence")

dontconfirm = input(defval = false, title = "Don't Wait for Confirmation")

showlines = input(defval = true, title = "Show Divergence Lines")

showpivot = input(defval = false, title = "Show Pivot Points")

calcmacd = input(defval = true, title = "MACD")

calcmacda = input(defval = true, title = "MACD Histogram")

calcrsi = input(defval = true, title = "RSI")

calcstoc = input(defval = true, title = "Stochastic")

calccci = input(defval = true, title = "CCI")

calcmom = input(defval = true, title = "Momentum")

calcobv = input(defval = true, title = "OBV")

calcvwmacd = input(true, title = "VWmacd")

calccmf = input(true, title = "Chaikin Money Flow")

calcmfi = input(true, title = "Money Flow Index")

calcext = input(false, title = "Check External Indicator")

externalindi = input(defval = close, title = "External Indicator")

pos_reg_div_col = input(defval = color.yellow, title = "Positive Regular Divergence")

neg_reg_div_col = input(defval = color.navy, title = "Negative Regular Divergence")

pos_hid_div_col = input(defval = color.lime, title = "Positive Hidden Divergence")

neg_hid_div_col = input(defval = color.red, title = "Negative Hidden Divergence")

pos_div_text_col = input(defval = color.black, title = "Positive Divergence Text Color")

neg_div_text_col = input(defval = color.white, title = "Negative Divergence Text Color")

reg_div_l_style_ = input(defval = "Solid", title = "Regular Divergence Line Style", options = ["Solid", "Dashed", "Dotted"])

hid_div_l_style_ = input(defval = "Dashed", title = "Hdden Divergence Line Style", options = ["Solid", "Dashed", "Dotted"])

reg_div_l_width = input(defval = 2, title = "Regular Divergence Line Width", minval = 1, maxval = 5)

hid_div_l_width = input(defval = 1, title = "Hidden Divergence Line Width", minval = 1, maxval = 5)

showmas = input(defval = false, title = "Show MAs 50 & 200", inline = "ma12")

cma1col = input(defval = color.lime, title = "", inline = "ma12")

cma2col = input(defval = color.red, title = "", inline = "ma12")


plot(showmas ? sma(close, 50) : na, color = showmas ? cma1col : na)

plot(showmas ? sma(close, 200) : na, color = showmas ? cma2col: na)


// set line styles

var reg_div_l_style = reg_div_l_style_ == "Solid" ? line.style_solid : 

                       reg_div_l_style_ == "Dashed" ? line.style_dashed :

                       line.style_dotted

var hid_div_l_style = hid_div_l_style_ == "Solid" ? line.style_solid : 

                       hid_div_l_style_ == "Dashed" ? line.style_dashed :

                       line.style_dotted



// get indicators

rsi = rsi(close, 14) // RSI

[macd, signal, deltamacd] = macd(close, 12, 26, 9) // MACD

moment = mom(close, 10) // Momentum

cci = cci(close, 10) // CCI

Obv = obv // OBV

stk = sma(stoch(close, high, low, 14), 3) // Stoch

maFast = vwma(close, 12), maSlow = vwma(close, 26), vwmacd = maFast - maSlow // volume weighted macd

Cmfm = ((close-low) - (high-close)) / (high - low), Cmfv = Cmfm * volume, cmf = sma(Cmfv, 21) / sma(volume,21) // Chaikin money flow

Mfi = mfi(close, 14) // Moneyt Flow Index


// keep indicators names and colors in arrays

var indicators_name = array.new_string(11)

var div_colors = array.new_color(4)

if barstate.isfirst

    // names

    array.set(indicators_name, 0, showindis == "Full" ? "MACD" : "M")

    array.set(indicators_name, 1, showindis == "Full" ? "Hist" : "H")

    array.set(indicators_name, 2, showindis == "Full" ? "RSI" : "E")

    array.set(indicators_name, 3, showindis == "Full" ? "Stoch" : "S")

    array.set(indicators_name, 4, showindis == "Full" ? "CCI" : "C")

    array.set(indicators_name, 5, showindis == "Full" ? "MOM" : "M")

    array.set(indicators_name, 6, showindis == "Full" ? "OBV" : "O")

    array.set(indicators_name, 7, showindis == "Full" ? "VWMACD" : "V")

    array.set(indicators_name, 8, showindis == "Full" ? "CMF" : "C")

    array.set(indicators_name, 9, showindis == "Full" ? "MFI" : "M")

    array.set(indicators_name,10, showindis == "Full" ? "Extrn" : "X")

    //colors

    array.set(div_colors, 0, pos_reg_div_col)

    array.set(div_colors, 1, neg_reg_div_col)

    array.set(div_colors, 2, pos_hid_div_col)

    array.set(div_colors, 3, neg_hid_div_col)


// Check if we get new Pivot High Or Pivot Low

float ph = pivothigh((source == "Close" ? close : high), prd, prd)

float pl = pivotlow((source == "Close" ? close : low), prd, prd)

plotshape(ph and showpivot, text = "H",  style = shape.labeldown, color = color.new(color.white, 100), textcolor = color.red, location = location.abovebar, offset = -prd)

plotshape(pl and showpivot, text = "L",  style = shape.labelup, color = color.new(color.white, 100), textcolor = color.lime, location = location.belowbar, offset = -prd)


// keep values and positions of Pivot Highs/Lows in the arrays

var int maxarraysize = 20

var ph_positions = array.new_int(maxarraysize, 0)

var pl_positions = array.new_int(maxarraysize, 0)

var ph_vals = array.new_float(maxarraysize, 0.)

var pl_vals = array.new_float(maxarraysize, 0.)


// add PHs to the array

if ph

    array.unshift(ph_positions, bar_index)

    array.unshift(ph_vals, ph)

    if array.size(ph_positions) > maxarraysize

        array.pop(ph_positions)

        array.pop(ph_vals)


// add PLs to the array

if pl

    array.unshift(pl_positions, bar_index)

    array.unshift(pl_vals, pl)

    if array.size(pl_positions) > maxarraysize

        array.pop(pl_positions)

        array.pop(pl_vals)


// functions to check Regular Divergences and Hidden Divergences


// function to check positive regular or negative hidden divergence

// cond == 1 => positive_regular, cond == 2=> negative_hidden

positive_regular_positive_hidden_divergence(src, cond)=>

    divlen = 0

    prsc = source == "Close" ? close : low

    // if indicators higher than last value and close price is higher than las close 

    if dontconfirm or src > src[1] or close > close[1]

        startpoint = dontconfirm ? 0 : 1 // don't check last candle

        // we search last 15 PPs

        for x = 0 to maxpp - 1

            len = bar_index - array.get(pl_positions, x) + prd

            // if we reach non valued array element or arrived 101. or previous bars then we don't search more

            if array.get(pl_positions, x) == 0 or len > maxbars

                break

            if len > 5 and 

               ((cond == 1 and src[startpoint] > src[len] and prsc[startpoint] < nz(array.get(pl_vals, x))) or

               (cond == 2 and src[startpoint] < src[len] and prsc[startpoint] > nz(array.get(pl_vals, x))))

                slope1 = (src[startpoint] - src[len]) / (len - startpoint)

                virtual_line1 = src[startpoint] - slope1

                slope2 = (close[startpoint] - close[len]) / (len - startpoint)

                virtual_line2 = close[startpoint] - slope2

                arrived = true

                for y = 1 + startpoint to len - 1

                    if src[y] < virtual_line1 or nz(close[y]) < virtual_line2

                        arrived := false

                        break

                    virtual_line1 := virtual_line1 - slope1

                    virtual_line2 := virtual_line2 - slope2

                

                if arrived

                    divlen := len

                    break

    divlen


// function to check negative regular or positive hidden divergence

// cond == 1 => negative_regular, cond == 2=> positive_hidden

negative_regular_negative_hidden_divergence(src, cond)=>

    divlen = 0

    prsc = source == "Close" ? close : high

    // if indicators higher than last value and close price is higher than las close 

    if dontconfirm or src < src[1] or close < close[1]

        startpoint = dontconfirm ? 0 : 1 // don't check last candle

        // we search last 15 PPs

        for x = 0 to maxpp - 1

            len = bar_index - array.get(ph_positions, x) + prd

            // if we reach non valued array element or arrived 101. or previous bars then we don't search more

            if array.get(ph_positions, x) == 0 or len > maxbars

                break

            if len > 5 and 

               ((cond == 1 and src[startpoint] < src[len] and prsc[startpoint] > nz(array.get(ph_vals, x))) or 

               (cond == 2 and src[startpoint] > src[len] and prsc[startpoint] < nz(array.get(ph_vals, x))))

                slope1 = (src[startpoint] - src[len]) / (len - startpoint)

                virtual_line1 = src[startpoint] - slope1

                slope2 = (close[startpoint] - nz(close[len])) / (len - startpoint)

                virtual_line2 = close[startpoint] - slope2

                arrived = true

                for y = 1 + startpoint to len - 1

                    if src[y] > virtual_line1 or nz(close[y]) > virtual_line2

                        arrived := false

                        break

                    virtual_line1 := virtual_line1 - slope1

                    virtual_line2 := virtual_line2 - slope2

                

                if arrived

                    divlen := len

                    break

    divlen


// calculate 4 types of divergence if enabled in the options and return divergences in an array

calculate_divs(cond, indicator)=>

    divs = array.new_int(4, 0)

    array.set(divs, 0, cond and (searchdiv == "Regular" or searchdiv == "Regular/Hidden") ? positive_regular_positive_hidden_divergence(indicator, 1) : 0)

    array.set(divs, 1, cond and (searchdiv == "Regular" or searchdiv == "Regular/Hidden") ? negative_regular_negative_hidden_divergence(indicator, 1) : 0)

    array.set(divs, 2, cond and (searchdiv == "Hidden" or searchdiv == "Regular/Hidden")  ? positive_regular_positive_hidden_divergence(indicator, 2) : 0)

    array.set(divs, 3, cond and (searchdiv == "Hidden" or searchdiv == "Regular/Hidden")  ? negative_regular_negative_hidden_divergence(indicator, 2) : 0)

    divs


// array to keep all divergences

var all_divergences = array.new_int(44) // 11 indicators * 4 divergence = 44 elements

// set related array elements

array_set_divs(div_pointer, index)=>

    for x = 0 to 3

        array.set(all_divergences, index * 4 + x, array.get(div_pointer, x))


// set divergences array 

array_set_divs(calculate_divs(calcmacd, macd), 0)

array_set_divs(calculate_divs(calcmacda, deltamacd), 1)

array_set_divs(calculate_divs(calcrsi, rsi), 2)

array_set_divs(calculate_divs(calcstoc, stk), 3)

array_set_divs(calculate_divs(calccci, cci), 4)

array_set_divs(calculate_divs(calcmom, moment), 5)

array_set_divs(calculate_divs(calcobv, Obv), 6)

array_set_divs(calculate_divs(calcvwmacd, vwmacd), 7)

array_set_divs(calculate_divs(calccmf, cmf), 8)

array_set_divs(calculate_divs(calcmfi, Mfi), 9)

array_set_divs(calculate_divs(calcext, externalindi), 10)


// check minimum number of divergence, if less than showlimit then delete all divergence

total_div = 0

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

    total_div := total_div + round(sign(array.get(all_divergences, x)))


if total_div < showlimit

    array.fill(all_divergences, 0)


// keep line in an array

var pos_div_lines = array.new_line(0)

var neg_div_lines = array.new_line(0)

var pos_div_labels = array.new_label(0)

var neg_div_labels = array.new_label(0) 


// remove old lines and labels if showlast option is enabled

delete_old_pos_div_lines()=>

    if array.size(pos_div_lines) > 0    

        for j = 0 to array.size(pos_div_lines) - 1 

            line.delete(array.get(pos_div_lines, j))

        array.clear(pos_div_lines)


delete_old_neg_div_lines()=>

    if array.size(neg_div_lines) > 0    

        for j = 0 to array.size(neg_div_lines) - 1 

            line.delete(array.get(neg_div_lines, j))

        array.clear(neg_div_lines)


delete_old_pos_div_labels()=>

    if array.size(pos_div_labels) > 0 

        for j = 0 to array.size(pos_div_labels) - 1 

            label.delete(array.get(pos_div_labels, j))

        array.clear(pos_div_labels)


delete_old_neg_div_labels()=>

    if array.size(neg_div_labels) > 0    

        for j = 0 to array.size(neg_div_labels) - 1 

            label.delete(array.get(neg_div_labels, j))

        array.clear(neg_div_labels)


// delete last creted lines and labels until we met new PH/PV 

delete_last_pos_div_lines_label(n)=>

    if n > 0 and array.size(pos_div_lines) >= n    

        asz = array.size(pos_div_lines)

        for j = 1 to n

            line.delete(array.get(pos_div_lines, asz - j))

            array.pop(pos_div_lines)

        if array.size(pos_div_labels) > 0  

            label.delete(array.get(pos_div_labels, array.size(pos_div_labels) - 1))

            array.pop(pos_div_labels)


delete_last_neg_div_lines_label(n)=>

    if n > 0 and array.size(neg_div_lines) >= n    

        asz = array.size(neg_div_lines)

        for j = 1 to n

            line.delete(array.get(neg_div_lines, asz - j))

            array.pop(neg_div_lines)

        if array.size(neg_div_labels) > 0  

            label.delete(array.get(neg_div_labels, array.size(neg_div_labels) - 1))

            array.pop(neg_div_labels)

            

// variables for Alerts

pos_reg_div_detected = false

neg_reg_div_detected = false

pos_hid_div_detected = false

neg_hid_div_detected = false


// to remove lines/labels until we met new // PH/PL

var last_pos_div_lines = 0

var last_neg_div_lines = 0

var remove_last_pos_divs = false 

var remove_last_neg_divs = false

if pl

    remove_last_pos_divs := false

    last_pos_div_lines := 0

if ph

    remove_last_neg_divs := false

    last_neg_div_lines := 0


// draw divergences lines and labels

divergence_text_top = ""

divergence_text_bottom = ""

distances = array.new_int(0)

dnumdiv_top = 0

dnumdiv_bottom = 0

top_label_col = color.white

bottom_label_col = color.white

old_pos_divs_can_be_removed = true

old_neg_divs_can_be_removed = true

startpoint = dontconfirm ? 0 : 1 // used for don't confirm option


for x = 0 to 10

    div_type = -1

    for y = 0 to 3

        if array.get(all_divergences, x * 4 + y) > 0 // any divergence?

            div_type := y

            if (y % 2) == 1 

                dnumdiv_top := dnumdiv_top + 1

                top_label_col := array.get(div_colors, y)

            if (y % 2) == 0

                dnumdiv_bottom := dnumdiv_bottom + 1

                bottom_label_col := array.get(div_colors, y)

            if not array.includes(distances, array.get(all_divergences, x * 4 + y))  // line not exist ?

                array.push(distances, array.get(all_divergences, x * 4 + y))

                new_line = showlines ? line.new(x1 = bar_index - array.get(all_divergences, x * 4 + y), 

                          y1 = (source == "Close" ? close[array.get(all_divergences, x * 4 + y)] : 

                                           (y % 2) == 0 ? low[array.get(all_divergences, x * 4 + y)] : 

                                                          high[array.get(all_divergences, x * 4 + y)]),

                          x2 = bar_index - startpoint,

                          y2 = (source == "Close" ? close[startpoint] : 

                                           (y % 2) == 0 ? low[startpoint] : 

                                                          high[startpoint]),

                          color = array.get(div_colors, y),

                          style = y < 2 ? reg_div_l_style : hid_div_l_style,

                          width = y < 2 ? reg_div_l_width : hid_div_l_width

                          )

                          : na

                if (y % 2) == 0

                    if old_pos_divs_can_be_removed

                        old_pos_divs_can_be_removed := false

                        if not showlast and remove_last_pos_divs

                            delete_last_pos_div_lines_label(last_pos_div_lines)

                            last_pos_div_lines := 0

                        if showlast

                            delete_old_pos_div_lines()

                    array.push(pos_div_lines, new_line)

                    last_pos_div_lines := last_pos_div_lines + 1

                    remove_last_pos_divs := true

                    

                if (y % 2) == 1

                    if old_neg_divs_can_be_removed

                        old_neg_divs_can_be_removed := false

                        if not showlast and remove_last_neg_divs

                            delete_last_neg_div_lines_label(last_neg_div_lines)

                            last_neg_div_lines := 0

                        if showlast

                            delete_old_neg_div_lines()

                    array.push(neg_div_lines, new_line)

                    last_neg_div_lines := last_neg_div_lines + 1

                    remove_last_neg_divs := true

                    

            // set variables for alerts

            if y == 0

                pos_reg_div_detected := true

            if y == 1

                neg_reg_div_detected := true

            if y == 2

                pos_hid_div_detected := true

            if y == 3

                neg_hid_div_detected := true

    // get text for labels

    if div_type >= 0

        divergence_text_top    := divergence_text_top    + ((div_type % 2) == 1 ? (showindis != "Don't Show" ? array.get(indicators_name, x) + "\n" : "") : "")

        divergence_text_bottom := divergence_text_bottom + ((div_type % 2) == 0 ? (showindis != "Don't Show" ? array.get(indicators_name, x) + "\n" : "") : "")



// draw labels

if showindis != "Don't Show" or shownum

    if shownum and dnumdiv_top > 0

        divergence_text_top := divergence_text_top + tostring(dnumdiv_top)

    if shownum and dnumdiv_bottom > 0

        divergence_text_bottom := divergence_text_bottom + tostring(dnumdiv_bottom)

    if divergence_text_top != ""

        if showlast

            delete_old_neg_div_labels()

        array.push(neg_div_labels, 

                      label.new( x = bar_index, 

                                 y = max(high, high[1]), 

                                 text = divergence_text_top,

                                 color = top_label_col,

                                 textcolor = neg_div_text_col,

                                 style = label.style_label_down

                                 ))

                                 

    if divergence_text_bottom != ""

        if showlast

            delete_old_pos_div_labels()

        array.push(pos_div_labels, 

                      label.new( x = bar_index, 

                                 y = min(low, low[1]), 

                                 text = divergence_text_bottom,

                                 color = bottom_label_col, 

                                 textcolor = pos_div_text_col,

                                 style = label.style_label_up

                                 ))

                                 

    

alertcondition(pos_reg_div_detected, title='Positive Regular Divergence Detected', message='Positive Regular Divergence Detected')

alertcondition(neg_reg_div_detected, title='Negative Regular Divergence Detected', message='Negative Regular Divergence Detected')

alertcondition(pos_hid_div_detected, title='Positive Hidden Divergence Detected', message='Positive Hidden Divergence Detected')

alertcondition(neg_hid_div_detected, title='Negative Hidden Divergence Detected', message='Negative Hidden Divergence Detected')


alertcondition(pos_reg_div_detected or pos_hid_div_detected, title='Positive Divergence Detected', message='Positive Divergence Detected')

alertcondition(neg_reg_div_detected or neg_hid_div_detected, title='Negative Divergence Detected', message='Negative Divergence Detected')


============================

I need it to work 100% the same. 


Han respondido

1
Desarrollador 1
Evaluación
(132)
Proyectos
176
39%
Arbitraje
4
25% / 50%
Caducado
14
8%
Libre
Solicitudes similares
Hey there, interested in your services for merging 2 pinescripts into one Ninjatrader Strategy. I have attached both scripts below and both will be running on Renko Charts. I added entry examples in the attachment as well. For this, I would like to add some user-defined variables such as Stop Loss and Profit Targets, or allow it to sync with my ATM strategies. Please advise if this would be possible. Additional
https://github.com/theshadow76/PocketOptionAPI https://lu-yi-hsun.github.io/pocketoptionapi/ i need someone to help with with connecting to this API and recieving signals from telegram channel i have created the app but can't make it connect with SSID and start trades and veiw these trades in realtime on the app if someone can help i would be thankful telegram : @sadscan
hi, just like mt5 plateform. there is one another new platefrom called TM9 whose website is( https://trademaster9.com/site/index.html ) i want you to create an API intigration to connect mt5 or mt4 plateform to this platform. i want you to create a copy trading software which can copy trade from mt5/mt4 to trade master 9 plateform. for more information please contact me directly. PRICE CAN BE NEGOTIATED. looking
I have a python script that connects MT5 to Deriv for binary trading which is having some bug. It stops executing trades after a while. I need someone to check the code and fix it. Negotiable price
Hi I am looking for some developer, who can develop WebPage which can display my open trades position, Trade History and Live Bid/Ask of my Watchlist. Frontend web app for customers/clients where they can login and see (Account info, Watchlist, Positions, History) Control Panel to create users and map user emails to MT5 account numbers etc

Información sobre el proyecto

Presupuesto
30 - 50 USD
Para el ejecutor
27 - 45 USD