커뮤니티

이런 지표 구현이 가능할까요 ?

프로필 이미지
newsat
2023-04-23 18:23:27
914
글번호 168420
답변완료
다음과 같은 지표 구현이 가능할까요 ? L이 n기간 이동평균선 * a, 라고 했을 때 지난 n일간 L 위에 있는 면적이 n일간의 면적(n일간의 고저가 합계) 대비 일정 %가 되게 하는 a값을 구하고 싶습니다. 예를 들어 지난 20 이평선에 얼마를 곱했을 때 20일간의 주가 중 L선 위에 있는 영역이 전체 주가 영역의 5% 이하가 될 수 있는가? (그 중 0.1 단위기준으로 가장 작은 a값: 1.2는 5%가 넘고 1.3부터 5% 이하면 1.3) for, while을 이용해서 다음처럼 코드를 만들어봤는데 먹통이네요 input: len(20); var: line(0), sum(0), aboveArea(0), lastPercent(0), k(0), breakWhile(0); var1 = 10; breakWhile = 0; While breakWhile < 1 { line = ema(c, len) * ( 1 + var1 / 100); sum = 0; aboveArea = 0; lastPercent = 0; For Var2 = 0 to len-1 { sum = sum + h[Var2] - l[Var2]; aboveArea = aboveArea + max(0, h[Var2] - line[Var2]); } Var3 = aboveArea / Sum; if lastPercent >= 0.025 and Var3 <= 0.025 Then breakWhile = 1; Else lastPercent = Var3; var1 = var1 + 10; } if lastPercent - 0.025 <= 0.025 - Var3 Then k = var1 - 10; Else k = var1; Plot1(ema(c, len) * (1 + k / 100), "U", Red, 4);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-04-24 16:07:10

안녕하세요 예스스탁입니다. 수식에 무한루프에 빠지는 부분이 있어 수정해 드립니다. lastPercent는 매번 0으로 시작하는데 조건내용에는 그값을 lastPercent >= 0.025 and Var3 <= 0.025로 지정되어 조건성립이 되지 않습니다. 관련 조건은 제외해 드립니다. 지표함수 경우 루프문이 아닌 밖에서 계산하게 하시고 그 값을 가져와 루프문에서는 %만 적용이 되게 하셔야 합니다. input: len(20); var : Emav(0); var: line(0), sum(0), aboveArea(0), lastPercent(0), k(0), breakWhile(0); line = ema(c, len); var1 = 10; breakWhile = 0; if CurrentBar >= 1 Then { While breakWhile < 1 { sum = 0; aboveArea = 0; lastPercent = 0; For Var2 = 0 to len-1 { sum = sum + h[Var2] - l[Var2]; aboveArea = aboveArea + max(0, h[Var2] - line[Var2] * ( 1 + var1 / 100)); } Var3 = aboveArea / Sum; if Var3 <= 0.025 Then breakWhile = 1; var1 = var1 + 10; } if lastPercent - 0.025 <= 0.025 - Var3 Then k = var1 - 10; Else k = var1; Plot1(ema(c, len) * (1 + k / 100), "U", Red, 4); } 즐거운 하루되세요 > newsat 님이 쓴 글입니다. > 제목 : 이런 지표 구현이 가능할까요 ? > 다음과 같은 지표 구현이 가능할까요 ? L이 n기간 이동평균선 * a, 라고 했을 때 지난 n일간 L 위에 있는 면적이 n일간의 면적(n일간의 고저가 합계) 대비 일정 %가 되게 하는 a값을 구하고 싶습니다. 예를 들어 지난 20 이평선에 얼마를 곱했을 때 20일간의 주가 중 L선 위에 있는 영역이 전체 주가 영역의 5% 이하가 될 수 있는가? (그 중 0.1 단위기준으로 가장 작은 a값: 1.2는 5%가 넘고 1.3부터 5% 이하면 1.3) for, while을 이용해서 다음처럼 코드를 만들어봤는데 먹통이네요 input: len(20); var: line(0), sum(0), aboveArea(0), lastPercent(0), k(0), breakWhile(0); var1 = 10; breakWhile = 0; While breakWhile < 1 { line = ema(c, len) * ( 1 + var1 / 100); sum = 0; aboveArea = 0; lastPercent = 0; For Var2 = 0 to len-1 { sum = sum + h[Var2] - l[Var2]; aboveArea = aboveArea + max(0, h[Var2] - line[Var2]); } Var3 = aboveArea / Sum; if lastPercent >= 0.025 and Var3 <= 0.025 Then breakWhile = 1; Else lastPercent = Var3; var1 = var1 + 10; } if lastPercent - 0.025 <= 0.025 - Var3 Then k = var1 - 10; Else k = var1; Plot1(ema(c, len) * (1 + k / 100), "U", Red, 4);