답변완료
수식 부탁드립니다.
Function HullMA(price, length)
Vars: wma1(0), wma2(0), diff(0), sqrtLen(0), result(0);
wma1 = WAverage(price, length / 2);
wma2 = WAverage(price, length);
diff = 2 * wma1 - wma2;
sqrtLen = MaxList(1, SquareRoot(length));
result = WAverage(diff, sqrtLen);
HullMA = result;
End;
Inputs:
max_length(50),
accel_multiplier(5.0),
tbl_(true),
lookback_period(100),
candle(true),
collen(100),
up_col(RGB(0,255,0)),
dn_col(RGB(255,0,0)),
up_hist_col(RGB(130,255,195)),
up_hist_col_(RGB(0,255,0)),
dn_hist_col(RGB(255,0,0)),
dn_hist_col_(RGB(247,140,140)),
start_date(20200101),
timer("From start");
Vars:
counts_diff(0), max_abs_counts_diff(0), counts_diff_norm(0), dyn_length(0), dyn_ema(0),
trend(0), bullsrc(0), bearsrc(0), x1(-1), y1(0), posx(0), speed(0), cx(0), ox(0), start_time(0),
prev_counts_diff(0), delta_counts_diff(0), max_delta_counts_diff(0), accel_factor(0),
isStartTime(false), isFromStart(false), barIdx(0), bearish_change(0), bearish_t(0),
bullish_change(0), bullish_t(0), trendspeed(0),
colour(0), fillColor(0), min_speed(0), max_speed(0), normalized_speed(0), speedGradient1(0),
rma0(0), rma1(0), i(0);
// 1. 동적 길이 및 가속도 계산
counts_diff = Close;
max_abs_counts_diff = Highest(AbsValue(counts_diff), 200);
If max_abs_counts_diff <> 0 Then
counts_diff_norm = (counts_diff + max_abs_counts_diff) / (2 * max_abs_counts_diff);
Else
counts_diff_norm = 0;
dyn_length = 5 + counts_diff_norm * (max_length - 5);
prev_counts_diff = counts_diff[1];
delta_counts_diff = AbsValue(counts_diff - prev_counts_diff);
max_delta_counts_diff = Highest(delta_counts_diff, 200);
If max_delta_counts_diff = 0 Then
max_delta_counts_diff = 1;
accel_factor = delta_counts_diff / max_delta_counts_diff;
// 2. 동적 EMA (간단화: EMA 사용)
cx = EMA(Close, 10);
ox = EMA(Open, 10);
// 3. 트렌드, 시그널 소스
trend = cx; // 실제 dyn_ema를 구현하려면 별도 로직 필요
bullsrc = Close;
bearsrc = Close;
// 4. 시간 조건
start_time = DateToJulian(start_date);
isStartTime = (DateToJulian(Date) > start_time);
isFromStart = (timer = "From start");
// 5. 첫 값 할당
If (x1 = -1) and (isStartTime or isFromStart) Then
Begin
x1 = CurrentBar;
y1 = ox;
End;
barIdx = CurrentBar;
// 6. 트렌드 방향 및 스피드 계산
If (isStartTime or isFromStart) Then
Begin
If (bullsrc > trend) and (bullsrc[1] <= trend) Then
Begin
bearish_change = Lowest(speed, barIdx - x1);
bearish_t = barIdx - x1;
x1 = barIdx;
y1 = bullsrc;
posx = 1;
speed = cx - ox;
End;
If (bearsrc < trend) and (bearsrc[1] >= trend) Then
Begin
bullish_change = Highest(speed, barIdx - x1);
bullish_t = barIdx - x1;
x1 = barIdx;
y1 = bearsrc;
posx = -1;
speed = cx - ox;
End;
End;
speed = speed + cx - ox;
// 7. 트렌드 스피드 (HullMA)
trendspeed = HullMA(speed, 5);
// 8. 색상 결정
If WAverage(Close, 2) > trend Then
colour = up_col
Else
colour = dn_col;
// 9. 동적 트렌드 플롯
Plot1(trend, "Dynamic Trend", colour);
// 10. 보조 플롯 (숨김)
Plot2(XAverage((High + Low) / 2, 50), "RMA HL2");
// 11. 속도 정규화 및 그라데이션
min_speed = Lowest(speed, collen);
max_speed = Highest(speed, collen);
If (max_speed - min_speed) <> 0 Then
normalized_speed = (speed - min_speed) / (max_speed - min_speed)
Else
normalized_speed = 0;
If speed < 0 Then
speedGradient1 = dn_hist_col
Else
speedGradient1 = up_hist_col;
// 12. 트렌드 스피드 플롯
If (isStartTime or isFromStart) Then
Plot3(trendspeed, "Trend Speed", speedGradient1);
// 13. 캔들 색상 적용 (PaintBar 사용)
If candle Then
PaintBar(Open, High, Low, Close, speedGradient1);
// 14. (테이블, 통계 등은 Print로 대체 가능)
====================================================================
ai 이용해서 코드를 작성해보고 있는데
이 코드 실제 작동여부를 떠나서
첫줄에 함수명 문법에러가 나는데... 이유를 모르겠습니다. ㅠ
2025-06-25
277
글번호 192055
지표
답변완료
지표 변환 부탁드립니다.
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © LuxAlgo
//@version=5
indicator("FVG Trailing Stop [LuxAlgo]", shorttitle = "LuxAlgo - FVG Trailing Stop", overlay = true)
//---------------------------------------------------------------------------------------------------------------------}
//User Inputs
//---------------------------------------------------------------------------------------------------------------------{
fvgLen = input.int(5, minval = 1, title = "Unmitigated FVG Lookback")
smoothLen = input.int(9, minval = 1, title = "Smoothing Length")
ts2Tog = input.bool(false, title = "Reset on Cross")
bullColor = input.color(#089981, title = " Bullish Color", inline = "bull", group = "Style")
bearColor = input.color(#f23645, title = "Bearish Color", inline = "bear", group = "Style")
bullFillColor = input.color(color.new(#089981, 80), title = "", inline = "bull", group = "Style")
bearFillColor = input.color(color.new(#f23645, 80), title = "", inline = "bear", group = "Style")
//---------------------------------------------------------------------------------------------------------------------}
//Functions
//---------------------------------------------------------------------------------------------------------------------{
fz(_val,_standin) => _val > 0 ? _val : _standin
//---------------------------------------------------------------------------------------------------------------------}
//FVG Level Arrays
//---------------------------------------------------------------------------------------------------------------------{
var bull_lvls = array.new<float>(0)
var bear_lvls = array.new<float>(0)
//---------------------------------------------------------------------------------------------------------------------}
//Calculations
//---------------------------------------------------------------------------------------------------------------------{
//FVG Detection
if low > high[2] and close[1] > high[2]
bull_lvls.push(high[2])
if high < low[2] and close[1] < low[2]
bear_lvls.push(low[2])
//Array Size Management
if bull_lvls.size() > fvgLen
bull_lvls.shift()
if bear_lvls.size() > fvgLen
bear_lvls.shift()
//FVG Mitigation Detection
if bull_lvls.size() > 0
for i = bull_lvls.size()-1 to 0
if close < bull_lvls.get(i)
bull_lvls.remove(i)
if bear_lvls.size() > 0
for i = bear_lvls.size()-1 to 0
if close > bear_lvls.get(i)
bear_lvls.remove(i)
//Bars to calc SMAs
bull_bs = fz(ta.barssince(not na(bull_lvls.avg())),1)
bear_bs = fz(ta.barssince(not na(bear_lvls.avg())),1)
//Progressive SMAs
csum = ta.cum(close)
//Calc starts at 1 when FVG array is empty and Maxes out at Smoothing Length
bull_sma = (csum - csum[math.min(bull_bs,smoothLen)]) / math.min(bull_bs,smoothLen)
bear_sma = (csum - csum[math.min(bear_bs,smoothLen)]) / math.min(bear_bs,smoothLen)
//Displayed Extreme Values
bull_disp = ta.sma(nz(bull_lvls.avg(),bull_sma),smoothLen)
bear_disp = ta.sma(nz(bear_lvls.avg(),bear_sma),smoothLen)
var int dir = 0
if close > bear_disp
dir := -1
if close < bull_disp
dir := 1
//Actual TS
var int os = na
var float ts = na
float sr_crossings = na
os := close > bear_disp ? 1 : close < bull_disp ? -1 : os
ts := os > os[1] ? bull_disp : os < os[1] ? bear_disp : os == 1 ? math.max(bull_disp, ts) : math.min(bear_disp, ts)
if ts2Tog
if os == 1
if close < ts
sr_crossings := ts, ts := na
else if close > bear_disp and na(ts)
ts := bull_disp
else if os == -1
if close > ts
sr_crossings := ts, ts := na
else if close < bull_disp and na(ts)
ts := bear_disp
//---------------------------------------------------------------------------------------------------------------------}
//Display
//---------------------------------------------------------------------------------------------------------------------{
ts_color = os != os[1] ? na : os == 1 ? bullColor : bearColor
plot_upper = plot((not na(ts) or not na(ts[1])) and os == -1 ? bear_disp : na, 'Upper'
, color.new(bearColor, 50)
, style = plot.style_linebr)
plot_lower = plot((not na(ts) or not na(ts[1])) and os == 1 ? bull_disp : na, 'Lower'
, color.new(bullColor, 50)
, style = plot.style_linebr)
plot_upper_ts = plot((not na(ts) or not na(ts[1])) and os == -1 ? nz(ts,ts[1]) : na, 'Upper Trailing Stop'
, color = bearColor
, style = plot.style_linebr)
plot_lower_ts = plot((not na(ts) or not na(ts[1])) and os == 1 ? nz(ts,ts[1]) : na, 'Lower Trailing Stop'
, color = bullColor
, style = plot.style_linebr)
plot(os != os[1] ? ts : na, 'Trend Changes'
, color = os == 1 ? bullColor : bearColor
, style = plot.style_circles
, linewidth = 1)
plot(sr_crossings, 'Crossings'
, color = ts_color
, style = plot.style_circles
, linewidth = 3)
fill(plot_lower_ts, plot_lower
, (not na(ts) or not na(ts[1])) and os == 1 ? nz(ts,ts[1]) : na
, bull_disp
, bullFillColor
, color.new(chart.bg_color, 100))
fill(plot_upper, plot_upper_ts
, bear_disp
, (not na(ts) or not na(ts[1])) and os == -1 ? nz(ts,ts[1]) : na
, color.new(chart.bg_color, 100)
, bearFillColor)
//---------------------------------------------------------------------------------------------------------------------}
2025-06-24
322
글번호 192052
지표
답변완료
부탁드립니다.
아래 지표에서 signal 70통과시 분홍색 30통과시 파랑색으로 70과 30사이는 그냥 하얀바탕으로 강세약세 지표 부탁드립니다.
input : length(14);
input : smoType1(3); #1:EMA, 2:SMA, 3:RMA, 4TMA
input : arsiCss(silver);
input : autoCss(true);
//Signal Line
input : smooth(14);
input : smoType2(1);#1EMA, 2SMA, 3RMA, 4TMA
input : signalCss(Orange);
//OB/OS Style
input : obValue(75);
input : obCss(Green);
input : obAreaCss(LightGreen);
input : osValue(25);
input : osCss(Red);
input : osAreaCss(LightRed);
var : src(0);
var : upper(0),lower(0),r(0);
var : d(0),diff(0),alpha(0),num(0),den(0),arsi(0),signal(0),a(0),tx(0);
src = close;
upper = highest(src, length);
lower = lowest(src, length);
r = upper - lower;
d = src - src[1];
diff = iff(upper > upper[1] , r , iff(lower < lower[1] , -r , d));
if smoType1 == 1 Then
{
num = ema(diff, length);
den = ema(abs(diff), length);
}
if smoType1 == 2 Then
{
num = ma(diff, length);
den = ma(abs(diff), length);
}
if smoType1 == 3 Then
{
alpha = 1/length;
num = iff(isnan(num[1]) == true, ma(diff, length) , alpha * diff + (1 - alpha) * iff(isnan(num[1])==true,0,num[1]));
den = iff(isnan(den[1]) == true, ma(abs(diff), length) , alpha * abs(diff) + (1 - alpha) * iff(isnan(den[1])==true,0,den[1]));
}
if smoType1 == 4 Then
{
num = ma(ma(diff, length),length);
den = ma(ma(abs(diff), length), length);
}
arsi = num / den * 50 + 50;
if smoType2 == 1 Then
{
signal = ema(arsi, smooth);
}
if smoType2 == 2 Then
{
signal = ma(arsi, smooth);
}
if smoType2 == 3 Then
{
a = 1/smooth;
signal = iff(isnan(signal[1]) == true, ma(arsi, length) , a * arsi + (1 - a) * iff(isnan(signal[1])==true,0,signal[1]));
}
if smoType2 == 4 Then
{
signal = ma(arsi, smooth);
}
plot1(arsi, "Ultimate RSI",IFf(arsi > obValue , obCss , IFF(arsi < osValue , osCss ,IFf( autoCss , Black , arsiCss))));
plot2(signal, "Signal Line", signalCss);
PlotBaseLine1(obValue, "Overbought");
PlotBaseLine2(50, "Midline");
PlotBaseLine3(osValue, "Oversold");
PlotBaseLine4(25, "25",Gray);
PlotBaseLine5(30, "30",Gray);
PlotBaseLine6(35, "35",Gray);
PlotBaseLine7(40, "40",Gray);
PlotBaseLine8(45, "45",Gray);
PlotBaseLine9(55, "55",Gray);
PlotBaseLine10(60, "60",Gray);
PlotBaseLine11(65, "65",Gray);
PlotBaseLine12(70, "70",Gray);
PlotBaseLine13(75, "75",Gray);
var : tx1(0),tx2(0);
var : tl1(0),tl2(0),box1(0);
var : tl3(0),tl4(0),box2(0);
if CrossUp(signal,50) Then
{
tx1 = Text_New(sDate,sTime,L,"●");
Text_SetColor(tx1,rgb(255, 0, 127));
Text_SetStyle(tx1,2,0);
Text_SetSize(tx1,30);
tx2 = Text_New_Self(sDate,sTime,50,"●");
Text_SetColor(tx2,rgb(255, 0, 127));
Text_SetStyle(tx2,2,0);
Text_SetSize(tx2,16);
TL_Delete(tl1);
TL_Delete(tl2);
var1 = l;
var2 = c;
tl1 = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1);
tl2 = TL_New(sDate,sTime,var2,NextBarSdate,NextBarStime,var2);
TL_SetColor(tl1,LightGray);
TL_SetColor(tl2,LightGray);
Box_Delete(box1);
box1 = Box_new(sDate,sTime,var1,NextBarSdate,NextBarStime,var2);
Box_SetColor(box1,Red);
Box_SetFill(box1,true);
}
Else
{
TL_SetEnd(tl1,NextBarSdate,NextBarStime,var1);
TL_SetEnd(tl2,NextBarSdate,NextBarStime,var2);
box_SetEnd(box1,NextBarSdate,NextBarStime,var2);
}
if CrossDown(signal,50) Then
{
tx1 = Text_New(sDate,sTime,H,"●");
Text_SetColor(tx1,rgb(0, 145, 255));
Text_SetStyle(tx1,2,1);
Text_SetSize(tx1,30);
tx2 = Text_New_Self(sDate,sTime,50,"●");
Text_SetColor(tx2,rgb(0, 145, 255));
Text_SetStyle(tx2,2,1);
Text_SetSize(tx2,16);
TL_Delete(tl3);
TL_Delete(tl4);
var3 = h;
var4 = c;
tl3 = TL_New(sDate,sTime,var3,NextBarSdate,NextBarStime,var3);
tl4 = TL_New(sDate,sTime,var4,NextBarSdate,NextBarStime,var4);
TL_SetColor(tl3,LightGray);
TL_SetColor(tl4,LightGray);
Box_Delete(box2);
box2 = Box_new(sDate,sTime,var3,NextBarSdate,NextBarStime,var4);
Box_SetColor(box2,rgb(0, 255, 255));
Box_SetFill(box2,true);
}
Else
{
TL_SetEnd(tl3,NextBarSdate,NextBarStime,var3);
TL_SetEnd(tl4,NextBarSdate,NextBarStime,var4);
box_SetEnd(box2,NextBarSdate,NextBarStime,var4);
}
if CrossUp(signal,75) Then
{
tx1 = Text_New(sDate,sTime,L,"◈");
Text_SetColor(tx1,Red);
Text_SetStyle(tx1,2,0);
Text_SetSize(tx1,25);
tx2 = Text_New_Self(sDate,sTime,50,"◈");
Text_SetColor(tx2,Red);
Text_SetStyle(tx2,2,0);
Text_SetSize(tx2,20);
}
if CrossDown(signal,25) Then
{
tx1 = Text_New(sDate,sTime,H,"◈");
Text_SetColor(tx1,rgb(34, 0, 204));
Text_SetStyle(tx1,2,1);
Text_SetSize(tx1,25);
tx2 = Text_New_Self(sDate,sTime,50,"◈");
Text_SetColor(tx2,Blue);
Text_SetStyle(tx2,2,1);
Text_SetSize(tx2,20);
}
if CrossUp(signal,70) Then
{
tx1 = Text_New(sDate,sTime,L,"◈");
Text_SetColor(tx1,Red);
Text_SetStyle(tx1,2,0);
Text_SetSize(tx1,25);
tx2 = Text_New_Self(sDate,sTime,50,"◈");
Text_SetColor(tx2,Red);
Text_SetStyle(tx2,2,0);
Text_SetSize(tx2,20);
}
if CrossDown(signal,30) Then
{
tx1 = Text_New(sDate,sTime,H,"◈");
Text_SetColor(tx1,rgb(34, 0, 204));
Text_SetStyle(tx1,2,1);
Text_SetSize(tx1,25);
tx2 = Text_New_Self(sDate,sTime,50,"◈");
Text_SetColor(tx2,Blue);
Text_SetStyle(tx2,2,1);
Text_SetSize(tx2,20);
}
var : slv(0),sld(0),slt(0),slv1(0),sld1(0),slt1(0);
var : plv(0),pld(0),plt(0),plv1(0),pld1(0),plt1(0);
var : dtl1(0),dtl2(0);
if CrossDown(signal,20) Then
{
slv = signal;
sld = sDate;
slt = sTime;
slv1 = slv[1];
sld1 = sld[1];
slt1 = slt[1];
plv = l;
pld = sDate;
plt = sTime;
plv1 = plv[1];
pld1 = pld[1];
plt1 = plt[1];
}
0선 기준으로 통과시 화살표 표시 ↑ ↓ 부탁드립니다.
input : short(10),long(100);
var : macdv(0),tx(0);
macdv = macd(short,long);
Plot1(macdv);
PlotBaseLine1(0);
if CrossUp(macdv,0) Then
{
tx = Text_New(sDate,sTime,macdv,"▲");
Text_SetColor(tx,Red);
Text_SetSize(tx,20);
}
2025-06-24
292
글번호 192049
지표
답변완료
검토부탁드립니다.
1분봉에서 종가상승통계를 보는데
마지막 최고값과 최저값이 나오지 않고 0 으로 표시됩니다.
최고값과 최저값을 나올수 있도록 검토부탁드립니다.
감사합니다.
var : 종가상승통계(0); 종가상승통계= CountIF(c>c[1], 20); plot1(종가상승통계, "종가상승통계", red);
var : 종가상승통계2(0); 종가상승통계2= CountIF(c>c[2], 30); plot2(종가상승통계2, "종가상승통계2", red);
var : 종가상승통계3(0); 종가상승통계3= CountIF(c>c[3], 40); plot3(종가상승통계3, "종가상승통계3", red);
var : 종가상승통계4(0); 종가상승통계4= CountIF(c>c[4], 60); plot4(종가상승통계4, "종가상승통계4", red);
var : 종가상승통계5(0); 종가상승통계5= CountIF(c>c[5], 80); plot5(종가상승통계5, "종가상승통계5", red);
var : 종가상승통계6(0); 종가상승통계6= CountIF(c>c[6], 120); plot6(종가상승통계6, "종가상승통계6", red);
var : 종가상승통계7(0); 종가상승통계7= CountIF(c>c[7], 160); plot7(종가상승통계7, "종가상승통계7", red);
var : 종가상승통계8(0); 종가상승통계8= CountIF(c>c[8], 200); plot8(종가상승통계8, "종가상승통계8", red);
var : 종가상승통계9(0); 종가상승통계9= CountIF(c>c[9], 240); plot9(종가상승통계9, "종가상승통계9", red);
var : 종가상승통계10(0); 종가상승통계10= CountIF(c>c[10], 300); plot10(종가상승통계10, "종가상승통계10", red);
var : 최고값(0);max(종가상승통계,종가상승통계2,종가상승통계3,종가상승통계4,종가상승통계5,종가상승통계6,종가상승통계7,종가상승통계8,종가상승통계9,종가상승통계10); plot11(최고값, "최고값", yellow);
var : 최저값(0);min(종가상승통계,종가상승통계2,종가상승통계3,종가상승통계4,종가상승통계5,종가상승통계6,종가상승통계7,종가상승통계8,종가상승통계9,종가상승통계10); plot12(최저값, "최저값", black);
2025-06-24
225
글번호 192048
지표