예스스탁
예스스탁 답변
2023-07-05 10:27:19
안녕하세요
예스스탁입니다.
1
예스랭귀지에서 VAR는 내부변수를 선언하는 키워드입니다.
해당 키워드는 수식에서 변수로 사용할 수 없어 _VAR로 처리되어 있습니다.
2
input : length(2),percent(0.6),hllength(10);
input : highlighting(true);
input : mav(1); # 1:SMA, 2:EMA, 3:WMA, 4:DEMA, 5:TMA, 6:VAR, 7:WWMA, 8:ZLEMA, 9:TSF, 10:HULL
var : src(0),srcl(0);
var : DEMA(0);
src = highest(high, hllength);
srcl = lowest(low, hllength);
var : valpha(0),vud1(0),vdd1(0),vUD(0),vDD(0),vCMO(0),_var(0);
valpha = 2 / (length + 1);
vud1 = iff(src > src[1] , src - src[1] , 0);
vdd1 = iff(src < src[1] , src[1] - src , 0);
vUD = AccumN(vud1, 9);
vDD = AccumN(vdd1, 9);
vCMO = iff(isnan(((vUD - vDD) / (vUD + vDD))),((vUD - vDD) / (vUD + vDD)),0);
_VAR = 0.0;
_VAR = iff(isnan(valpha * abs(vCMO) * src) == False,valpha * abs(vCMO) * src,0) + (1 - valpha * abs(vCMO)) * iff(isnan(_VAR[1])==False,_VAR[1],0);
DEMA = 2 * ema(src, length) - ema(ema(src, length), length);
var : wwalpha(0),wwma(0);
wwalpha = 1 / length;
WWMA = 0.0;
WWMA = wwalpha * src + (1 - wwalpha) * IFf(IsNan(WWMA[1]) == False,WWMA[1],0);
var : zxLag(0),zxEMAData(0),ZLEMA(0);
zxLag = IFf(length / 2 == round(length / 2,0) , length / 2 , (length - 1) / 2);
zxEMAData = src + src - src[zxLag];
ZLEMA = ema(zxEMAData, length);
var : lrc(0),lrc1(0),LRS(0),TSF(0);
lrc = LRL(src, length);
lrc1 = LRL(src, length)[1];
lrs = lrc - lrc1;
TSF = lrc + lrs;
var : hma(0);
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length),0));
var : valphal(0),vud1l(0),vdd1l(0),vUDl(0),vDDl(0),vCMOl(0),VARl(0);
valphal = 2 / (length + 1);
vud1l = iff(srcl > srcl[1] , srcl - srcl[1] , 0);
vdd1l = iff(srcl < srcl[1] , srcl[1] - srcl , 0);
vUDl = AccumN(vud1l, 9);
vDDl = AccumN(vdd1l, 9);
vCMOl = iff(IsNan((vUDl - vDDl) / (vUDl + vDDl)) == False,(vUDl - vDDl) / (vUDl + vDDl),0);
VARl = 0.0;
VARl = iff(IsNan(valphal * abs(vCMOl) * srcl),valphal * abs(vCMOl) * srcl,0) + (1 - valphal * abs(vCMOl)) * iff(isnan(VARl[1]) == False,VARl[1],0);
var : DEMAl(0);
DEMAl = 2 * ema(srcl, length) - ema(ema(srcl, length), length);
var : wwalphal(0),WWMAl(0);
wwalphal = 1 / length;
WWMAl = 0.0;
WWMAl = wwalphal * srcl + (1 - wwalphal) * iff(IsNan(WWMAl[1]) == False,WWMAl[1],0);
var : zxLagl(0),zxEMADatal(0),ZLEMAl(0);
zxLagl = iff(length / 2 == round(length / 2,0) , length / 2 , (length - 1) / 2);
zxEMADatal = srcl + srcl - srcl[zxLagl];
ZLEMAl = ema(zxEMADatal, length);
var : lrcl(0),lrc1l(0),lrsl(0),TSFl(0);
lrcl = lrl(srcl, length);
lrc1l = LRl(srcl, length)[1];
lrsl = lrcl - lrc1l;
TSFl = LRl(srcl, length) + lrsl;
var : HMAL(0);
HMAl = wma(2 * wma(srcl, length / 2) - wma(srcl, length), round(sqrt(length),0));
var : _MA(0),mal(0);
if mav == 1 then
_ma = ma(src, length);
if mav == 2 then
_ma = ema(src, length);
if mav == 3 then
_ma = wma(src, length);
if mav == 4 then
_ma = DEMA;
if mav == 5 then
_ma = ma(ma(src, Ceiling(length / 2)), floor(length / 2) + 1);
if mav == 6 then
_ma = _VAR;
if mav == 7 then
_ma = WWMA;
if mav == 8 then
_ma = ZLEMA;
if mav == 9 then
_ma = TSF;
if mav == 10 then
_ma = HMA;
if mav == 1 then
mal = ma(srcl, length);
if mav == 2 then
mal = ema(srcl, length);
if mav == 3 then
mal = wma(srcl, length);
if mav == 4 then
mal = DEMAl;
if mav == 5 then
mal = ma(ma(srcl, Ceiling(length / 2)), floor(length / 2) + 1);
if mav == 6 then
mal = VARl;
if mav == 7 then
mal = WWMAl;
if mav == 8 then
mal = ZLEMAl;
if mav == 9 then
mal = TSFl;
if mav == 10 then
mal = HMAl;
var : mavg(0),fark(0),longstop(0),longStopPrev(0),shortstop(0),shortstopprev(0);
var : dir(0),MT(0),HOTT(0),HOTTC(0);
var : MAvgl(0),farkl(0),longStopl(0),longStopPrevl(0),shortStopl(0),shortStopPrevl(0);
var : dirl(0),MTl(0),LOTT(0),LOTTC(0);
MAvg = _ma;
fark = MAvg * percent * 0.01;
longStop = MAvg - fark;
longStopPrev = iff(IsNaN(longStop[1]) == False, longStop,0);
longStop = iff(MAvg > longStopPrev , max(longStop, longStopPrev) , longStop);
shortStop = MAvg + fark;
shortStopPrev = iff(isnan(shortStop[1])==False, shortStop,0);
shortStop = iff(MAvg < shortStopPrev , min(shortStop, shortStopPrev) , shortStop);
dir = 1;
dir = iff(isnan(dir[1])== False, dir,0);
dir = iff(dir == -1 and MAvg > shortStopPrev , 1 , iff(dir == 1 and MAvg < longStopPrev , -1 , dir));
MT = iff(dir == 1 , longStop , shortStop);
HOTT = iff(MAvg > MT , MT * (200 + percent) / 200 , MT * (200 - percent) / 200);
HOTTC = blue;
MAvgl = MAl;
farkl = MAvgl * percent * 0.01;
longStopl = MAvgl - farkl;
longStopPrevl = iff(isnan(longStopl[1]) == False, longStopl,0);
longStopl = iff(MAvgl > longStopPrevl , max(longStopl, longStopPrevl) , longStopl);
shortStopl = MAvgl + farkl;
shortStopPrevl = iff(isnan(shortStopl[1])==False, shortStopl,0);
shortStopl = iff(MAvgl < shortStopPrevl , min(shortStopl, shortStopPrevl) , shortStopl);
dirl = 1;
dirl = iff(isnan(dirl[1]), dirl,0);
dirl = iff(dirl == -1 and MAvgl > shortStopPrevl , 1 , iff(dirl == 1 and MAvgl < longStopPrevl , -1 , dirl));
MTl = iff(dirl == 1 , longStopl , shortStopl);
LOTT = iff(MAvgl > MTl , MTl * (200 + percent) / 200 , MTl * (200 - percent) / 200);
LOTTC = red;
plot1(HOTT[2], "HOTT",HOTTC);
plot2(LOTT[2], "LOTT",LOTTC);
즐거운 하루되세요
> 다올 님이 쓴 글입니다.
> 제목 : 부탁드립니다.
> 매번 도움 주셔서 진심 감사 드립니다.
변형 부탁 드립니다.
1.
1. 트레이팅뷰에서
if mav == 'VAR'
ma := VAR
ma
부분을
if mav == 6 then
_ma = VAR;
으로 변형시켜 주셨는데 "var"부분에서 [문법에러,잘못된 토큰:"var"] 로 에러가 발생합니다.
2.
indicator('HIGH AND LOW Optimized Trend Tracker', 'HL OTT', overlay=true)
length = input.int(2, 'OTT Period', minval=1)
percent = input.float(0.6, 'OTT Optimization Coeff', step=0.1, minval=0)
hllength = input.int(10, 'Highest and Lowest Length', minval=1)
src = ta.highest(high, hllength)
srcl = ta.lowest(low, hllength)
highlighting = input(title='Highlighter On/Off ?', defval=true)
mav = input.string(title='Moving Average Type', defval='VAR', options=['SMA', 'EMA', 'WMA', 'DEMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF', 'HULL'])
Var_Func(src, length) =>
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir == 1 ? longStop : shortStop
HOTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200
HOTTC = color.blue
MAvgl = getMAl(srcl, length)
farkl = MAvgl * percent * 0.01
longStopl = MAvgl - farkl
longStopPrevl = nz(longStopl[1], longStopl)
longStopl := MAvgl > longStopPrevl ? math.max(longStopl, longStopPrevl) : longStopl
shortStopl = MAvgl + farkl
shortStopPrevl = nz(shortStopl[1], shortStopl)
shortStopl := MAvgl < shortStopPrevl ? math.min(shortStopl, shortStopPrevl) : shortStopl
dirl = 1
dirl := nz(dirl[1], dirl)
dirl := dirl == -1 and MAvgl > shortStopPrevl ? 1 : dirl == 1 and MAvgl < longStopPrevl ? -1 : dirl
MTl = dirl == 1 ? longStopl : shortStopl
LOTT = MAvgl > MTl ? MTl * (200 + percent) / 200 : MTl * (200 - percent) / 200
LOTTC = color.red
HOTTLine = plot(nz(HOTT[2]), title='HOTT', color=color.new(HOTTC, 0), linewidth=2, style=plot.style_line)
LOTTLine = plot(nz(LOTT[2]), title='LOTT', color=color.new(LOTTC, 0), linewidth=2, style=plot.style_line)
FillColor = highlighting ? color.new(#9915FF, 80) : na
fill(HOTTLine, LOTTLine, title='Highligter', color=FillColor)
color1 = close > HOTT[2] ? #00FFFF : close < LOTT[2] ? #FF00FF : na
barcolor(color1)
alertcondition(ta.crossover(close, HOTT[2]), title='Price Crossover Alarm', message='PRICE OVER HOTT - BUY SIGNAL!')
alertcondition(ta.crossunder(close, LOTT[2]), title='Price Crossunder Alarm', message='PRICE UNDER LOTT - SELL SIGNAL!')