다음과 같은 지표 구현이 가능할까요 ?
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);