답변완료
수식 도움 요청드립니다
수고에 늘 감사드립니다.
아래 수식을 예스랭귀지로 변환하고자 도움을 요청 드립니다.
매번 수고에 거듭 감사드립니다.
//@version=5
indicator(title='Super trend B', overlay=true)
length = input.int(20, minval=1)
src = close
mult1 = input.float(0.5, minval=0.001, maxval=50, title=" multiflier")
basis = ta.sma(src, length)
upper1 = basis + mult1 * ta.stdev(src, length)
lower1 = basis - mult1 * ta.stdev(src, length)
plot(basis, "Basis", color=#FF6D00)
plot(upper1, "Upper 1", color=#2962FF)
plot(lower1, "Lower 1", color=#2962FF)
// INPUTS //
st_mult = input.float(3, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(7, title='SuperTrend Period', minval=1)
// CALCULATIONS //
up_lev = upper1 - st_mult * ta.atr(st_period)
dn_lev = lower1 + st_mult * ta.atr(st_period)
up_trend = 0.0
up_trend := close > up_trend ? math.max(up_lev, up_trend) : up_lev
down_trend = 0.0
down_trend := close < down_trend ? math.min(dn_lev, down_trend) : dn_lev
// Calculate trend var
trend = 0
trend := close > down_trend ? 1 : close < up_trend ? -1 : nz(trend, 1)
// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend
// Plotting
//plot(st_line[1], color=trend == 1 ? color.green : color.red, style=plot.style_cross, linewidth=2, title='SuperTrend')
buy = ta.crossover(close, st_line)
sell = ta.crossunder(close, st_line)
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
//plotshape(buy, title='buy', text='Buy', color=color.new(color.green, 0), style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.new(color.white, 0)) //plot for buy icon
plotshape(sell, title='sell', text='Sell', color=color.new(color.red, 0), style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.new(color.white, 0)) //plot for sell icon
//
multiplier = input.float(title='DEV', defval=2, minval=1)
src5 = close
len5 = input.int(title='Linear length', defval=150, minval=1)
offset = 0
calcSlope(src5, len5) =>
sumX = 0.0
sumY = 0.0
sumXSqr = 0.0
sumXY = 0.0
for i = 1 to len5 by 1
val = src5[len5 - i]
per = i + 1.0
sumX += per
sumY += val
sumXSqr += per * per
sumXY += val * per
sumXY
slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
average = sumY / len5
intercept = average - slope * sumX / len5 + slope
[slope, average, intercept]
var float tmp = na
[s, a, i] = calcSlope(src5, len5)
vwap1 = i + s * (len5 - offset)
sdev = ta.stdev(close, len5)
dev = multiplier * sdev
top = vwap1 + dev
bott = vwap1 - dev
//
z1 = vwap1 + dev
x1 = vwap1 - dev
low1 = ta.crossover(close, x1)
high1 = ta.crossunder(close, z1)
plotshape(low1, title='b', text='BUY', color=color.new(color.green, 0), style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.new(color.white, 0)) //plot for buy icon
//plotshape(high1, title='high', text='HIGH', color=color.new(color.green, 0), style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.new(color.white, 0)) //plot for sell icon
/////// Alerts /////
//alertcondition(buy, title='buy')
alertcondition(sell, title='sell')
alertcondition(low1, title='buy')
//alertcondition(high1, title='buy tp')
2024-01-21
1114
글번호 175942
지표
답변완료
문의드립니다
렌코차트식 검색하다 발견한 지표식인데요
주봉에 적용하니까 이상하게 나옵니다 (오류)
그리고 upperline, lowline 등은 아예 표시도 안되네요
수정 좀 부탁합니다
감사합니다
input:renkoSize(0.5),length(10),NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),filename("renko3.txt"),printOK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
if stime >= 180000 or stime < 090000 then{
If index == 0 or (stime == 180000) or (stime > 180000 and stime[1] < 180000) Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then {
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If sTime >= 45500 and stime < 090000 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],black,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 100 then plot5(maV[0],"MidLine");
2024-01-21
1039
글번호 175936
지표
답변완료
문의드립니다
1.
input : obLevel(70);
input : osLevel(30);
input : length(14);
var : src(0),ep(0),auc(0),adc(0),x1(0),ub(0),x2(0),lb(0);
src=close;
ep = 2 * length - 1;
auc = ema( max( src - src[1], 0 ), ep );
adc = ema( max( src[1] - src, 0 ), ep );
x1 = (length - 1) * ( adc * obLevel / (100-obLevel) - auc);
ub = iff( x1 >= 0, src + x1, src + x1 * (100-obLevel)/obLevel );
x2 = (length - 1) * ( adc * osLevel / (100-osLevel) - auc);
lb = iff( x2 >= 0, src + x2, src + x2 * (100-osLevel)/osLevel );
plot1(ub, "Resistance", red);
plot2(lb, "Support", green);
plot3(avg(ub, lb), "RSI Midline",gray);
2.
Input : Period(9),sig(10);
var : Relative(0),signal(0);
Relative = RSI(Period);
signal = ma(Relative,sig);
Plot1(Relative, "RSI");
Plot2(signal, "시그널");
PlotBaseLine1(30, "기준선 30");
PlotBaseLine2(70, "기준선 70");
......................................................................................................
1. 첫번째 시스템식을 구하고자 합니다
상기 1번식에서 plot2의 그린색이 캔들과 만나고 (and로 연결)
2번식에서 rsi가 시그널선을 하향 돌파 했을때 두조건이 모두 충족 되었을때 매도 신호를
둘중 하나라도 이탈 되면 청산신호를
반대로 상기 1번식에서 plot1 레드선이 캔들과 만나고
2번식에서 rsi가 시그널선을 상향 돌파했을때 두조건이 모두 충족되었을때 매수 신호를
둘중 하나라도 이탈되면 청산신호를 해주세요
2. 두번째 이렇게 만들어진 시스템식을 바탕화면에 색깔로 입히고 싶습니다 (이건 지표로 구현해 주세요)
즉 매수신호때는 빨간색 바탕화면으로,매도신호때는 파란색 바탕화면으로
......................................................................................................................................
3. 주챠트 2분봉의 캔들이 2분봉 볼밴하단에 부딪힐때, 데이타2 10분봉 역시 10분봉의 볼밴 하단 수치에 부딪힌다면
그때 주챠트 2분봉 캔들에 검색식으로 빨간색 점을 찍어 주세요
(예를 들어 오전 10시에 주챠트 2분봉 캔들은 주챠트 2분봉 볼밴하단에 부딪히고, 데이타2 10분봉의 캔들이 10분봉 볼밴하단에 부딪히면, 주챠트 10시봉(2분봉)에 빨간색 점을 찍어 주세요)
만약 반대로 주챠트 2분봉의 캔들이 볼밴 상단에 부딪힐때 같은 시각 데이타2 10분봉도 10분봉의 볼밴 상단 수치에 부딪힌다면
그때 그 캔들에 검색식으로 파란색 점을 찍어 주세요
4.
input : P1(7),P2(14),P3(21);
var : R1(0),R2(0),R3(0),TX(0);
R1 = RSI(P1);
R2 = RSI(P2);
R3 = RSI(P3);
Plot1(R1, "RSI1");
Plot2(R2, "RSI2");
Plot3(R3, "RSI3");
PlotBaseLine1(30, "기준선 30");
PlotBaseLine2(50, "기준선 50");
PlotBaseLine3(70, "기준선 70");
PlotBaseLine4(40, "기준선 40");
PlotBaseLine5(60, "기준선 60");
Condition1 = R1 > R2 and R2 > R3;
Condition2 = R1 < R2 and R2 < R3;
if Condition1 == true and Condition1 != Condition1[1] Then
{
TX = Text_New_Self(sDate,sTime,R3,"▲");
Text_SetStyle(TX,2,0);
Text_SetColor(TX,Red);
}
if Condition2 == true and Condition2 != Condition2[1] Then
{
TX = Text_New_Self(sDate,sTime,R3,"▼");
Text_SetStyle(TX,2,1);
Text_SetColor(TX,Blue);
}
상기 4번식을
plot1 rsi1이 기준선 60을 하향돌파하면 매도 신호를
plot1 rsi1이 기준선 40을 상향돌파하면 매수 신호를
나타내는 시스템으로 구현하고 싶습니다
한번에 여러개를 질문 드려 죄송합니다
감사합니다
2024-01-23
1257
글번호 175934
지표