예스스탁
예스스탁 답변
2024-05-20 13:01:46
안녕하세요
예스스탁입니다.
내용이 판단되지 않아 Inertia 지표식 올려드립니다.
아래식 참고하시기 바랍니다.
input : stdevLength(10); #Standard Deviation Length
input : rviSmoothLength(20); #RVI Smoothing Length
input : smoothLength(20);#nertia Smoothing Length
var : stdev1(0),upSum1(0),downSum1(0),rviOriginal1(0);
var : stdev2(0),upSum2(0),downSum2(0),rviOriginal2(0);
var : rvi(0),inertia(0),inertiaColor(0);
stdev1 = std(h, stdevLength);
upSum1 = ema(iff(h-h[1] >= 0,stdev1,0), rviSmoothLength);
downSum1 = ema(iff(h-h[1] >= 0,0,stdev1), rviSmoothLength);
rviOriginal1 = 100 * upSum1 / (upSum1 + downSum1);
stdev2 = std(l, stdevLength);
upSum2 = ema(iff(l-l[1] >= 0,stdev2,0), rviSmoothLength);
downSum2 = ema(iff(l-l[1] >= 0,0,stdev2), rviSmoothLength);
rviOriginal2 = 100 * upSum2 / (upSum2 + downSum2);
rvi = avg(rviOriginal1,rviOriginal2);
inertia = lrl(rvi, smoothLength);
inertiaColor = iff(inertia > 50 ,blue , red);
plot1(inertia,"Inertia", inertiaColor);
PlotBaseLine1(30, "Middle Level");
즐거운 하루되세요
> 불스아이 님이 쓴 글입니다.
> 제목 : 지표연구
> input : n(20), period(20);
var:rvi(0);
var1 = ma(iff(c<=c[1],Std(c,10),0),n);
Var2 = ma(iff(c>c[1],Std(c,10),0),n);
var3 = ma(iff(c<c[1],Std(c,10),0),n);
rvi = iff(var1 == 0,100,(100-(100/(1+(Var2 /Var3)))));
var float[] inertia = na(array.new_float(0));
for i = period to (size - 1);
y = array.new_float(period, na)
valid_data = true
for j = 0 to (period - 1);
if na(rvi[i - j])
valid_data := false
break
array.set(y, j, rvi[i - j])
if valid_data;
sumX = 0.0
sumY = 0.0
sumXY = 0.0
sumX2 = 0.0
for j = 0 to (period - 1);
x = j
value = array.get(y, j)
sumX += x
sumY += value
sumXY += x * value
sumX2 += x * x
coef = (period * sumXY - sumX * sumY) / (period * sumX2 - sumX * sumX)
array.push(inertia, coef * 100)
else
array.push(inertia, na)
plot1(inertia, color=color.blue, title="Inertia");
//지표식을 만들었는데요 오류 수정 부탁합니다!!
//python 함수식입니다
def calculate_inertia(rvi, period):
X = np.arange(len(rvi)).reshape(-1, 1)
inertia = []
for i in range(period, len(rvi)):
y = rvi[i-period:i]
if len(y) == period and not np.isnan(y).any(): # 데이터 포인트가 충분하고 NaN이 없는지 확인
model = LinearRegression().fit(X[:period], y)
inertia.append(model.coef_[0]*100) # 회귀선의 기울기를 추가, # 회귀선의 기울기에 100을 곱하여 추가
else:
inertia.append(np.nan)
return inertia