답변완료
당일
Input : 전환(0.45);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분("");
Array:고[10,4](0),저[10,4](0);
var : box(0),TX(0),TX2(0),TL(0),TL1(0);
HH = H;
LL = L;
If Index == 0 Then
{
고[1,1] = HH;
고[1,2] = 0;
고[1,3] = sDate;
고[1,4] = sTime;
저[1,1] = LL;
저[1,2] = 0;
저[1,3] = sDate;
저[1,4] = sTime;
}
If Index > 0 Then
{
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HH[hiBar] < HH Then hiBar = 0;
If LL[loBar] > LL Then loBar = 0;
Condition1 = 저[1,1]+전환 <= HH and hiBar == 0;
Condition2 = 고[1,1]-전환 >= LL and loBar == 0;
처리구분 = "";
If Condition1 and Condition2 Then
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL = TL_New_Self(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL,1);
TL_SetColor(TL,RED);
TX = Text_New_Self(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetSize(tx,25);
Text_SetColor(tx,Red);
Text_SetStyle(tx,1,1);
Text_SetBold(tx,1);
box = Box_New_Self(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
}
If 고[1,1] < HH[hiBar] Then
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL,고[1,3],고[1,4],고[1,1]);
Text_SetString(TX,NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetLocation(TX,고[1,3],고[1,4],고[1,1]);
Box_SetEnd(box,고[1,3],고[1,4],고[1,1]);
}
if 고[1,1] >= 저[1,1]+1.9 Then
{
Box_SetColor(box,Pink);
Box_SetFill(box,true,60);
}
else if 고[1,1] < 저[1,1]+1.9 and 고[1,1] >= 저[1,1]+1.3 Then
{
Box_SetColor(box,Gray);
Box_SetFill(box,true,40);
}
else if 고[1,1] < 저[1,1]+1.3 and 고[1,1] >= 저[1,1]+0.8 Then
{
Box_SetColor(box,Magenta);
Box_SetFill(box,true,30);
}
else if 고[1,1] < 저[1,1]+0.8 and 고[1,1] >= 저[1,1]+0.6 Then
{
Box_SetColor(box,Gray);
Box_SetFill(box,true,50);
}
else
{
Box_SetColor(box,Orange);
Box_SetFill(box,true,70);
}
최종꼭지점 = "고점";
Plot1(고[1,1]);
NoPlot(2);
}
If 처리구분 == "저점처리" Then
{
If 최종꼭지점 == "고점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL = TL_New_Self(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL,1);
TL_SetColor(TL,Green);
TX = Text_New_Self(저[1,3],저[1,4],저[1,1],NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetSize(tx,25);
Text_SetColor(tx,Blue);
Text_SetStyle(tx,1,0);
Text_SetBold(tx,1);
Condition5 = False;
if Condition5 == False and 저[1,1]<= 고[1,1]-0.9 Then
{
Condition5 = true;
}
box = Box_New_Self(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
}
If 저[1,1] > LL[loBar] Then
{
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL,저[1,3],저[1,4],저[1,1]);
Text_SetString(TX,NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetLocation(TX,저[1,3],저[1,4],저[1,1]);
if Condition5 == False and 저[1,1] <= 고[1,1]-0.9 Then
{
Condition5 = true;
tx2 = Text_New_Self(저[1,3],저[1,4],저[1,1]+0.6,"★");
Text_SetStyle(tx2,2,2);
Text_SetColor(tx2,Blue);
Text_SetSize(tx2,70);
}
Box_SetEnd(box,저[1,3],저[1,4],저[1,1]);
}
if 저[1,1] > 고[1,1]-0.6 Then
{
Box_SetColor(box,Cyan);
Box_SetFill(box,true,80);
}
else if 저[1,1] <= 고[1,1]-0.6 and 저[1,1] > 고[1,1]-0.9 Then
{
Box_SetColor(box,Yellow);
Box_SetFill(box,true,120);
}
else if 저[1,1] <= 고[1,1]-0.9 and 저[1,1] > 고[1,1]-1.3 Then
{
Box_SetColor(box,Lime);
Box_SetFill(box,true,70);
}
else if 저[1,1] <= 고[1,1]-1.3 and 저[1,1] > 고[1,1]-1.6 Then
{
Box_SetColor(box,Cyan);
Box_SetFill(box,true,70);
}
else if 저[1,1] <= 고[1,1]-1.6 and 저[1,1] > 고[1,1]-1.9 Then
{
Box_SetColor(box,Blue);
Box_SetFill(box,true,20);
}
else
{
Box_SetColor(box,Yellow);
Box_SetFill(box,true,70);
}
최종꼭지점 = "저점";
Plot2(저[1,1]);
NoPlot(1);
}
모든 지표의 계산을, 전일과 무관하게 당일 시초부터 계산. 표시는 전일도.
수식 추가가 대략 20줄 이상으로 복잡하게 많으면, 아예 당일만 표시.
당일만 표시에도 20줄 이상 추가되면 취소. 감사합니다.
2024-06-27
948
글번호 181016
지표
답변완료
적용가능하도록 부탁드립니다.
트레이딩 뷰 지표입니다.
적용가능하도록 부탁드립니다.
indicator('Optimized Trend Tracker Oscillator', 'OTTO', overlay=false)
length = input.int(2, 'OTT Period', minval=1)
percent = input.float(0.6, 'OTT Optimization Coeff', step=0.1, minval=0)
flength = input.int(10, 'FAST VIDYA Length', minval=1)
slength = input.int(25, 'SLOW VIDYA Length', minval=1)
coco = input.int(100000, 'Correcting Constant', minval=1)
src1 = input(close, title='Source')
showsignalsc = input(title='OTTO Crossing Signals?', defval=true)
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_Func1(src1, length) =>
valpha1 = 2 / (length + 1)
vud11 = src1 > src1[1] ? src1 - src1[1] : 0
vdd11 = src1 < src1[1] ? src1[1] - src1 : 0
vUD1 = math.sum(vud11, 9)
vDD1 = math.sum(vdd11, 9)
vCMO1 = nz((vUD1 - vDD1) / (vUD1 + vDD1))
VAR1 = 0.0
VAR1 := nz(valpha1 * math.abs(vCMO1) * src1) + (1 - valpha1 * math.abs(vCMO1)) * nz(VAR1[1])
VAR1
VAR1 = Var_Func1(src1, length)
mov1 = Var_Func1(src1, slength / 2)
mov2 = Var_Func1(src1, slength)
mov3 = Var_Func1(src1, slength * flength)
src = mov1 / (mov2 - mov3 + coco)
Var_Func(src, length) =>
valpha = 2 / (length + 1)
vud1 = src > src[1] ? src - src[1] : 0
vdd1 = src < src[1] ? src[1] - src : 0
vUD = math.sum(vud1, 9)
vDD = math.sum(vdd1, 9)
vCMO = nz((vUD - vDD) / (vUD + vDD))
VAR = 0.0
VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
VAR
VAR = Var_Func(src, length)
DEMA = 2 * ta.ema(src, length) - ta.ema(ta.ema(src, length), length)
Wwma_Func(src, length) =>
wwalpha = 1 / length
WWMA = 0.0
WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
WWMA
WWMA = Wwma_Func(src, length)
Zlema_Func(src, length) =>
zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
zxEMAData = src + src - src[zxLag]
ZLEMA = ta.ema(zxEMAData, length)
ZLEMA
ZLEMA = Zlema_Func(src, length)
Tsf_Func(src, length) =>
lrc = ta.linreg(src, length, 0)
lrc1 = ta.linreg(src, length, 1)
lrs = lrc - lrc1
TSF = ta.linreg(src, length, 0) + lrs
TSF
TSF = Tsf_Func(src, length)
HMA = ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length)))
Var_Funcl(srcl, length) =>
valphal = 2 / (length + 1)
vud1l = srcl > srcl[1] ? srcl - srcl[1] : 0
vdd1l = srcl < srcl[1] ? srcl[1] - srcl : 0
vUDl = math.sum(vud1l, 9)
vDDl = math.sum(vdd1l, 9)
vCMOl = nz((vUDl - vDDl) / (vUDl + vDDl))
VARl = 0.0
VARl := nz(valphal * math.abs(vCMOl) * srcl) + (1 - valphal * math.abs(vCMOl)) * nz(VARl[1])
VARl
getMA(src, length) =>
ma = 0.0
if mav == 'SMA'
ma := ta.sma(src, length)
ma
if mav == 'EMA'
ma := ta.ema(src, length)
ma
if mav == 'WMA'
ma := ta.wma(src, length)
ma
if mav == 'DEMA'
ma := DEMA
ma
if mav == 'TMA'
ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
ma
if mav == 'VAR'
ma := VAR
ma
if mav == 'WWMA'
ma := WWMA
ma
if mav == 'ZLEMA'
ma := ZLEMA
ma
if mav == 'TSF'
ma := TSF
ma
if mav == 'HULL'
ma := HMA
ma
ma
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.new(color.red, 0)
LOTT = src
LOTTC = color.new(color.blue, 0)
HOTTLine = plot(nz(HOTT[2]), title='HOTT', color=HOTTC, linewidth=2, style=plot.style_line)
LOTTLine = plot(nz(LOTT), title='LOTT', color=LOTTC, linewidth=2, style=plot.style_line)
FillColor = highlighting and LOTT < HOTT[2] ? color.new(color.red, 20) : color.new(color.green, 20)
fill(HOTTLine, LOTTLine, title='Highligter', color=FillColor)
alertcondition(ta.crossunder(HOTT[2], LOTT), title='Crossover Alarm', message='OTTO - BUY SIGNAL!')
alertcondition(ta.crossover(HOTT[2], LOTT), title='Crossunder Alarm', message='OTTO - SELL SIGNAL!')
buySignalc = ta.crossunder(HOTT[2], LOTT)
plotshape(buySignalc and showsignalsc ? HOTT[2] * 0.9995 : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
sellSignallc = ta.crossover(HOTT[2], LOTT)
plotshape(sellSignallc and showsignalsc ? LOTT * 1.0005 : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
2024-06-26
688
글번호 181013
지표