Karena saya telah mengajukan beberapa pertanyaan di sini dalam upaya untuk memecahkan masalah saya, pertanyaan baru ini mengikat semuanya bersama-sama dan memberikan beberapa konteks.
Pertanyaan sebelumnya terkait dengan ini:

Saya memiliki program (di luar TradingView) yang mencoba memperkirakan level tinggi/rendah/penutupan ticker SPX untuk hari perdagangan berikutnya.
Saya berencana untuk merencanakan ini hanya pada kerangka waktu intraday (mulai dari 1 menit hingga 4 jam).
Satu-satunya ticker yang akan saya plot adalah SPX.

Sekarang saya mencoba untuk memplot level ini di TradingView, untuk mendapatkan representasi visual tentang seberapa akurat level yang diprediksi.
Ini berarti saya memiliki nilai high/low/close untuk setiap hari perdagangan.
Dataset saat ini berisi sekitar 50 entri (jadi 50 hari di mana saya memiliki level tinggi/rendah/dekat untuk diplot) dan akan bertambah 1 entri setiap hari perdagangan.
Jadi dalam 1 tahun, dataset akan berisi sekitar 200 entri.

Karena dataset lebih besar dari jumlah objek gambar yang dapat ditampilkan oleh TradingView, saya telah mengesampingkan penggunaan objek gambar seperti line.new().
Pengumpul sampah hanya akan menampilkan sekitar 50 objek terakhir yang digambar, dan saya ingin kumpulan data lengkap ditampilkan.
Oleh karena itu, saya pikir saya perlu menggunakan fungsi plot().

Ini berarti saya akan berakhir dengan 3 seri untuk diplot: high, low dan close.
Masing-masing akan memiliki nilai yang berbeda per tanggal perdagangan.
Jadi intinya, saya mencoba membuat 3 seri ini secara manual dengan memberi mereka nilai untuk setiap tanggal.
Tapi sejauh ini, saya gagal mencapainya.
Saya juga mencoba untuk hanya memiliki 1 baris entri data per tanggal perdagangan untuk menghindari kekacauan dan menjaga kode tetap bersih dan dapat dipelihara.
Oleh karena itu, saya mencoba mengatur 3 titik data ini per tanggal perdagangan dengan hanya 1 fungsi.

Skrip di bawah ini adalah upaya terbaru saya dengan pengurangan dataset hanya 5 hari perdagangan untuk kejelasan.
Saya tahu skrip di bawah ini salah, karena variabel tidak dapat digunakan kembali.
Itulah mengapa dikatakan line 19: 'h' is already defined.
Saya tidak punya solusi untuk ini, dan saya benar-benar ingin menemukannya.

//@version=4
study("Study", overlay=true)

// Variables    
var float dh = na
var float dl = na
var float dc = na

// Functions
isDate(y,m,d) => y==year and m==month and d==dayofmonth ? true:false 
d(y,m,d,h,l,c) => // Daily Levels
    if isDate(y,m,d)
        [h,l,c]
    else
        [na,na,na] 

// Set data for Daily High,Low,Close
[h,l,c] = d(2020,04,13,2800,2700,2725), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,14,2850,2810,2825), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,15,2800,2750,2710), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,16,2850,2700,2790), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,17,2900,2800,2850), dh:=h,dl:=l,dc:=c

// Plot Daily High,Low,Close
plot(dh, color=color.red)
plot(dl, color=color.green)
plot(dc, color=color.blue)

Upaya lain adalah kode di bawah ini, yang dapat dikompilasi dengan baik.

//@version=4
study("Functions test", overlay=true)

var float h = na
var float l = na
var float c = na

isDate(y,m,d) => y==year and m==month and d==dayofmonth ? true:false
setData() => 
    if isDate(2020,04,13)
        [2800,2700,2725]
    if isDate(2020,04,14)
        [2850,2810,2825]
    if isDate(2020,04,15)
        [2800,2750,2710]
    if isDate(2020,04,16)
        [2850,2700,2790]
    if isDate(2020,04,17)
        [2900,2800,2850]

[h1,l1,c1] = setData()

h := h1
l := l1
c := c1

plot(h,color=color.red)
plot(l,color=color.green)
plot(c,color=color.blue)

Masalahnya di sini adalah hanya memplot nilai untuk tanggal terakhir.

enter image description here

0
Bjorn Mistiaen 19 April 2020, 20:30

1 menjawab

Jawaban Terbaik

Ini harus skala. POC saja dengan banyak baris untuk memastikan:

//@version=4
study("HLC Levels", "", true)

initOnDate(_y, _m, _d, _prev, _init) => 
    if _y == year and _m == month and _d == dayofmonth
        _init
    else
        _prev

float h = na
float l = na
float c = na
int   y = 0
int   m = 0
int   d = 0

y := 2020, m := 03, d := 31, h := initOnDate(y, m, d, h, 2600), l := initOnDate(y, m, d, l, 2500), c := initOnDate(y, m, d, c, 2525)
y := 2020, m := 04, d := 01, h := initOnDate(y, m, d, h, 2610), l := initOnDate(y, m, d, l, 2510), c := initOnDate(y, m, d, c, 2535)
y := 2020, m := 04, d := 02, h := initOnDate(y, m, d, h, 2620), l := initOnDate(y, m, d, l, 2520), c := initOnDate(y, m, d, c, 2545)

plot(h, "h", change(h) ? na : color.green,  1)
plot(l, "l", change(l) ? na : color.red,    1)
plot(c, "c", change(c) ? na : color.orange, 1)

enter image description here

0
PineCoders-LucF 20 April 2020, 09:45