커뮤니티

시간 프레임과 지표 문의

프로필 이미지
고를
2022-09-30 15:18:07
797
글번호 162655
답변완료
안녕하세요, 시간 프레임에 대해 궁금한 게 있습니다. 한가지 지표를 두고 여러 시간프레임을 사용할 수 있나요? 각각의 시간에 적용 시키는 방법은 알겠으나 다수의 시간대를 하나의 지표로 보는 방법을 찾지 못하겠습니다. 예를 들어 컨버젼스 전략을 쓴다고 치고 이 전략을 다수의 시간대(예. 15분, 30분, 1시간, 1일)에 적용을 시켜 하나의 지표로 보고 싶습니다. 그리고 alma (Arnaud Legoux moving average)라는 지표가 있는지 궁금합니다. 혹시몰라 파이썬 코드(alma) 첨부합니다. def add_alma(df): alma = pd.DataFrame(columns=["ALMA"]) close = df["close"] size = len(close) def ALMA(data, sigma=6, offset=0.90, size=40): """ Arnaud Legoux Moving Average :param data: data array :param sigma: filter :param offset: responsiveness/smoothness in range [0.0 - 1.0] :param size: window size """ try: m = offset * (size - 1) s = size / sigma sum_ = 0 norm = 0 for i in range(size): coeff = math.exp(- pow(i - m, 2) / 2 * pow(s, 2)) sum_ += data[size - i - 1] * coeff norm += coeff return sum_ / norm except: return math.nan for i in reversed(close.index): if i == 0: subset = list(close)[::-1] else: subset = list(close)[:-i][::-1] alma.loc[size - i - 1] = ALMA(subset) df["ALMA"] = alma return df
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-09-30 16:43:39

안녕하세요 예스스탁입니다. 1 올리신 내용 변환하면 아래와 같습니다. input : size(9),offset(0.85),sigma(6); var : data(0),ii(0),mm(0),ss(0),weight(0),norm(0),sum(0),alma(0); data = close; mm = offset * (size - 1); ss = size / sigma; norm = 0; sum = 0; for ii = 0 to size - 1 { weight = exp(-1 * pow(ii - mm, 2) / (2 * pow(ss, 2))); norm = norm + weight; sum = sum + data[size - ii - 1] * weight; } alma = sum / norm; plot1(alma); 2 하나의 지표식에서 다수 주기를 보고자 하시면 아래식 15분 차트에 적용하시면 됩니다. 15분차트에 적용하시면 30분, 60분, 일봉의 지표값을 계산해서 출력하게 됩니다. 수식에서 타주기 지표 구현의 경우에는 기본차트의 주기보다 배수로 큰 주기만 가능합니다. 랭귀지는 봉의 시고저종가만 사용할 수 있고 봉 내부의 특정시점의 값은 알 수 없습니다. 15분 차트에서 40분봉과 같이 배수가 아닌 주기는 계산할 수 없습니다. input : size(9),offset(0.85),sigma(6); input : 분1(30),분2(60); var : ii(0),mm(0),ss(0); var : weight(0),norm(0),sum(0),alma(0); var : S1(0),D1(0),TM(0),TF1(0),TF2(0); var : weight1(0),norm1(0),sum1(0),alma1(0); var : weight2(0),norm2(0),sum2(0),alma2(0); var : weight3(0),norm3(0),sum3(0),alma3(0); Array : C1[100](0),C2[100](0); mm = offset * (size - 1); ss = size / sigma; #기본차트 alma norm = 0; sum = 0; for ii = 0 to size - 1 { weight = exp(-1 * pow(ii - mm, 2) / (2 * pow(ss, 2))); norm = norm + weight; sum = sum + close[size - ii - 1] * weight; } alma = sum / norm; if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } plot1(alma1,"기본차트"); if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; #타주기 분봉1 alma TF1 = TM%분1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 분1 > 1 and TF1 < TF1[1]) or (Bdate == Bdate[1] and 분1 > 1 and TM >= TM[1]+분1) or (Bdate == Bdate[1] and 분1 == 1 and TM > TM[1]) Then { For ii = 99 DownTo 1 { C1[ii] = C1[ii-1]; } } C1[0] = C; norm1 = 0; sum1 = 0; for ii = 0 to size - 1 { weight1 = exp(-1 * pow(ii - mm, 2) / (2 * pow(ss, 2))); norm1 = norm1 + weight1; sum1 = sum1 + C1[size - ii - 1] * weight1; } alma1 = sum1 / norm1; plot2(alma1,"분1"); #타주기 분봉2 alma TF2 = TM%분2; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 분2 > 1 and TF2 < TF2[1]) or (Bdate == Bdate[1] and 분2 > 1 and TM >= TM[1]+분2) or (Bdate == Bdate[1] and 분2 == 1 and TM > TM[1]) Then { For ii = 99 DownTo 1 { C2[ii] = C2[ii-1]; } } C2[0] = C; norm2 = 0; sum2 = 0; for ii = 0 to size - 1 { weight2 = exp(-1 * pow(ii - mm, 2) / (2 * pow(ss, 2))); norm2 = norm2 + weight2; sum2 = sum2 + C2[size - ii - 1] * weight2; } alma2 = sum2 / norm2; plot3(alma2,"분2"); } if DayClose(Size-1) > 0 Then { norm3 = 0; sum3 = 0; for ii = 0 to size - 1 { weight3 = exp(-1 * pow(ii - mm, 2) / (2 * pow(ss, 2))); norm3 = norm3 + weight3; sum3 = sum3 + DayClose(size - ii - 1) * weight3; } alma3 = sum3 / norm3; plot4(alma3,"일"); } 즐거운 하루되세요 > 고를 님이 쓴 글입니다. > 제목 : 시간 프레임과 지표 문의 > 안녕하세요, 시간 프레임에 대해 궁금한 게 있습니다. 한가지 지표를 두고 여러 시간프레임을 사용할 수 있나요? 각각의 시간에 적용 시키는 방법은 알겠으나 다수의 시간대를 하나의 지표로 보는 방법을 찾지 못하겠습니다. 예를 들어 컨버젼스 전략을 쓴다고 치고 이 전략을 다수의 시간대(예. 15분, 30분, 1시간, 1일)에 적용을 시켜 하나의 지표로 보고 싶습니다. 그리고 alma (Arnaud Legoux moving average)라는 지표가 있는지 궁금합니다. 혹시몰라 파이썬 코드(alma) 첨부합니다. def add_alma(df): alma = pd.DataFrame(columns=["ALMA"]) close = df["close"] size = len(close) def ALMA(data, sigma=6, offset=0.90, size=40): """ Arnaud Legoux Moving Average :param data: data array :param sigma: filter :param offset: responsiveness/smoothness in range [0.0 - 1.0] :param size: window size """ try: m = offset * (size - 1) s = size / sigma sum_ = 0 norm = 0 for i in range(size): coeff = math.exp(- pow(i - m, 2) / 2 * pow(s, 2)) sum_ += data[size - i - 1] * coeff norm += coeff return sum_ / norm except: return math.nan for i in reversed(close.index): if i == 0: subset = list(close)[::-1] else: subset = list(close)[:-i][::-1] alma.loc[size - i - 1] = ALMA(subset) df["ALMA"] = alma return df