获取股票代码以跟随价格

时间:2021-05-14 22:06:47

标签: pine-script

我正在尝试绘制多个资产的百分比变化。我想让股票代码显示百分比变化。问题是尝试将 ID 与更改匹配,并使 id 随相应更改而移动。这就是我所拥有的

study("My Script", precision=2)

btc = security('ftx:btcperp', timeframe.period, close)
eth = security('ftx:ethperp', timeframe.period, close)
ltc = security('ftx:ltcperp', timeframe.period, close)
doge = security('ftx:dogeperp', timeframe.period, close)

a = (btc - btc[1]) / btc[1] * 100
b = (eth - eth[1]) / eth[1] * 100
c = (ltc - ltc[1]) / ltc[1] * 100
d = (doge - doge[1]) / doge[1] * 100

nsec0(v1,v2,v3,v4) =>
    v = array.new_float()
    array.push(v,v1),array.push(v,v2),array.push(v,v3),array.push(v,v4)
    array.sort(v, order.descending)
    array.get(v,3)
nsec1(v1,v2,v3,v4) =>
    v = array.new_float()
    array.push(v,v1),array.push(v,v2),array.push(v,v3),array.push(v,v4)
    array.sort(v, order.descending)
    array.get(v,2)
nsec2(v1,v2,v3,v4) =>
    v = array.new_float()
    array.push(v,v1),array.push(v,v2),array.push(v,v3),array.push(v,v4)
    array.sort(v, order.descending)
    array.get(v,1)
nsec3(v1,v2,v3,v4) =>
    v = array.new_float()
    array.push(v,v1),array.push(v,v2),array.push(v,v3),array.push(v,v4)
    array.sort(v, order.descending)
    array.get(v,0)

plot(nsec0(a,b,c,d),style=plot.style_columns, show_last=1, color=color.blue, offset=0)
plot(nsec1(a,b,c,d),style=plot.style_columns, show_last=1, color=color.white, offset=-1)
plot(nsec2(a,b,c,d),style=plot.style_columns, show_last=1, color=color.yellow, offset=-2)
plot(nsec3(a,b,c,d),style=plot.style_columns, show_last=1, color=color.orange, offset=-3)

lt = tostring(nsec0(a,b,c,d), '#.##')
ln = label.new(x = bar_index, y = na, text=lt, yloc=yloc.price, color=color.white)
label.delete(ln[1])

lt1 = tostring(nsec1(a,b,c,d), '#.##')
ln1 = label.new(x = bar_index - 1, y = na, text=lt1, yloc=yloc.price, color=color.white)
label.delete(ln1[1])

lt2 = tostring(nsec2(a,b,c,d), '#.##')
ln2 = label.new(x = bar_index - 2, y = na, text=lt2, yloc=yloc.price, color=color.white)
label.delete(ln2[1])

lt3 = tostring(nsec3(a,b,c,d), '#.##')
ln3 = label.new(x = bar_index - 3, y = na, text=lt3, yloc=yloc.price, color=color.white)
label.delete(ln3[1])

1 个答案:

答案 0 :(得分:0)

怎么样?

//@version=4
study("My Script", precision=2)

var label[] labels  = array.new_label()
var float[] v       = array.new_float(4,na)

f_label_move(_i) =>
    lbl = array.get(labels,_i)
    label.set_text(lbl, tostring(array.get(v,_i), '#.##') + '%')
    label.set_xy(lbl, bar_index - _i, array.max(v))

f_get_data(_sec) => security(_sec, timeframe.period, close)

f_change(_src) => change(_src)  / _src[1]  * 100

btc  = f_get_data('ftx:btcperp')
eth  = f_get_data('ftx:ethperp')
ltc  = f_get_data('ftx:ltcperp')
doge = f_get_data('ftx:dogeperp')

a = f_change(btc)
b = f_change(eth)
c = f_change(ltc)
d = f_change(doge)

if barstate.isfirst
    for i = 0 to 3
        array.push(labels, label.new(na, na, "", color=color.white))

if barstate.islast
    v := array.from(a,b,c,d)
    array.sort(v, order.descending)
    
    for i = 0 to 3
        f_label_move(i)

plot(array.get(v,0), style=plot.style_columns, show_last=1, color=color.blue,   offset= 0)
plot(array.get(v,1), style=plot.style_columns, show_last=1, color=color.white,  offset=-1)
plot(array.get(v,2), style=plot.style_columns, show_last=1, color=color.yellow, offset=-2)
plot(array.get(v,3), style=plot.style_columns, show_last=1, color=color.orange, offset=-3)

编辑 1 - 这显示了证券的名称。

//@version=4
study("My Script", precision=2)

var string[]    label_names     = array.new_string(4,na)
var label[]     label_values    = array.new_label()
var float[]     v               = array.new_float(4,na)

f_label_move(_i) =>
    lbl = array.get(label_values,_i)
    label.set_text(lbl, array.get(label_names,_i) + '\n' + tostring(array.get(v,_i), '#.##') + '%')
    label.set_xy(lbl, bar_index - _i, array.max(v))

f_get_data(_sec) => security(_sec, timeframe.period, close)

f_change(_src) => change(_src)  / _src[1]  * 100

btc  = f_get_data('ftx:btcperp')
eth  = f_get_data('ftx:ethperp')
ltc  = f_get_data('ftx:ltcperp')
doge = f_get_data('ftx:dogeperp')

a = f_change(btc)
b = f_change(eth)
c = f_change(ltc)
d = f_change(doge)

if barstate.isfirst
    for i = 0 to 3
        array.push(label_values, label.new(na, na, "", color=color.white))

if barstate.islast
    v := array.from(a,b,c,d)
    labels_orig = array.from("btc","eth","ltc","doge")
    v_orig      = array.copy(v)
    array.sort(v, order.descending)
    for i = 0 to 3
        idx = array.indexof(v_orig, array.get(v,i))
        array.set(label_names, i, array.get(labels_orig, idx))
    
    for i = 0 to 3
        f_label_move(i)

plot(array.get(v,0), style=plot.style_columns, show_last=1, color=color.blue,   offset= 0)
plot(array.get(v,1), style=plot.style_columns, show_last=1, color=color.white,  offset=-1)
plot(array.get(v,2), style=plot.style_columns, show_last=1, color=color.yellow, offset=-2)
plot(array.get(v,3), style=plot.style_columns, show_last=1, color=color.orange, offset=-3)