커뮤니티

지표연구

프로필 이미지
불스아이
2024-05-18 18:09:33
934
글번호 179676
답변완료
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
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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