예스스탁
예스스탁 답변
2022-07-01 14:03:23
안녕하세요
예스스탁입니다.
rsi = rsi(ema(src, ema_length), rsi_length)
range = atr(atr_length)[atr_offset] * (0.01*rsi_length)
h = src + ((100 - rsi) * range)
l = src - (rsi * range)
올리신 내용은 위 수식의 타주기를 계산해 그리는 지표입니다.
5분 주기 내용을 그려야 하므로 1분 차트에 적용하셔야 합니다.
예스랭귀지에서는 기본차트 데이타를 이용해 타주기를 계산하는 것은
기본차트 주기로 배수로 높은 주기만 계산해 그릴수 있습니다.
input : tf(5),ema_length(1),rsi_length(20),atr_length(20),atr_offset(1),ob_value(70),os_value(30);
var : S1(0),D1(0),TM(0),분(0);
var : cnt(0),OO(0),HH(0),LL(0),prec(0),sumTR(0),ATRV(0);
var : ep(0),SigSum(0),count2(0),RSIsig(0);
Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0);
var : idx(0), PreUpAvg(0), preDownAvg(0),RSIV(0);
var : hv(0),lv(0),sob(0),sos(0),sm(0);
Array : TH[100](0),TL[100](0),src[100](0);
Ep = 2/(ema_length+1);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
분 = TM%TF;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and TF > 1 and 분 < 분[1]) or
(Bdate == Bdate[1] and TF > 1 and TM >= TM[1]+TF) or
(Bdate == Bdate[1] and TF == 1 and TM > TM[1]) Then
{
for cnt = 99 downto 1
{
TH[cnt] = TH[cnt-1];
TL[cnt] = TL[cnt-1];
src[cnt] = src[cnt-1];
}
OO = O;
HH = H;
LL = L;
prec = C[1];
PreUpAvg = UpAvg[1];
preDownAvg = DownAvg[1];
idx = idx + 1;
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
TH[0] = max(prec,HH);
TL[0] = Min(prec,LL);
if idx <= 1 then
src[0] = OO;
else
src[0] = OO * EP + src[1] * (1-EP);
if TH[ATR_Length+atr_offset-1] > 0 and TL[ATR_Length+atr_offset-1] > 0 then
{
sumTR = 0;
for cnt = 0+atr_offset to ATR_Length+atr_offset-1
{
sumTR = sumTR + (TH[cnt]-TL[cnt]);
}
ATRV = sumTR/ATR_Length;
}
If idx == rsi_length+1 Then
{
UpSum = 0;
DownSum = 0;
For Counter = 0 To rsi_length - 1
{
UpAmt = src[Counter] - src[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
}
UpAvg = UpSum / rsi_length;
DownAvg = DownSum / rsi_length;
}
If idx > rsi_length Then
{
UpAmt = src[0] - src[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else {
DownAmt = -UpAmt;
UpAmt = 0;
}
UpAvg = (PreUpAvg * (rsi_length - 1) + UpAmt) / rsi_length;
DownAvg = (preDownAvg * (rsi_length - 1) + DownAmt) / rsi_length;
}
If UpAvg + DownAvg <> 0 Then
RSIv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIv = 0;
hv = src[0] + ((100 - RSIv) * ATRV);
lv = src[0] - (RSIv-ATRV);
sob = hv + ((hv - lv)*(ob_value/100));
sm = lv + ((hv - lv)*0.50);
sos = lv + ((hv - lv)*(os_value/100));
Plot1(hv,"hv",Black);
plot2(sob,"sob",Red);
plot3(sm,"sm",Black);
plot4(sos,"sos",Lime);
plot5(lv,"lv",Black);
}
즐거운 하루되세요
> 부똘이 님이 쓴 글입니다.
> 제목 : 수식 문의
>
아래의 수식을 예트의 수식으로
변환해 주시기를 요청 드립니다.
엔밸롭지표에 RSI와 ART 변동성을 추가한 지표라고 합니다.
아래 링크를 참고 하시기 바랍니다.
https://www.tradingview.com/scr ipt/MKPAvSrz-RS-MTF-RSI-Weighted-Range-Envelope-V0/
덕분에 예트에서 벗어나지 못하고 있습니다.
항상 친절한 답변 미리 감사드립니다.
//@version=2
study(title='[RS]MTF RSI Weighted Range Envelope V0', shorttitle='E', overlay=true)
tf = input('5')
src = input(open)
ema_length = input(1)
rsi_length = input(20)
atr_length = input(20)
atr_offset = input(1)
ob_value = input(70)*0.01
os_value = input(30)*0.01
rsi = rsi(ema(src, ema_length), rsi_length)
range = atr(atr_length)[atr_offset] * (0.01*rsi_length)
h = src + ((100 - rsi) * range)
l = src - (rsi * range)
sh = security(tickerid, tf, h)
sl = security(tickerid, tf, l)
sob = sl + ((sh - sl)*ob_value)
sm = sl + ((sh - sl)*0.50)
sos = sl + ((sh - sl)*os_value)
p100 = plot(series=sh, title='', color=black, style=line, transp=0, linewidth=1)
pob = plot(series=sob, title='', color=red, style=circles, transp=0, linewidth=1)
pm = plot(series=sm, title='', color=black, style=circles, transp=0, linewidth=1)
pos = plot(series=sos, title='', color=lime, style=circles, transp=0, linewidth=1)
p0 = plot(series=sl, title='', color=black, style=line, transp=0, linewidth=1)
fill(pos, pob, color=purple, transp=90)