아래는 이전질문코드에 답을 주신건데
1분봉이나 5분봉에서
length값을 240으로 늘리면 값이 0으로 나오는데 length값을 늘렸을 경우에도
값이 제대로 나오게 할 수 있는 방법이 있을까요?
Inputs: length(55);
var : x(0),y(0),halfLength(0),sqrtLength(0),ii(0);
var : sum(0),Csum(0),sum1(0),csum1(0),sum2(0),csum2(0);
var : WMA1(0),WMA2(0),diff1(0),hma1(0);
var : sum5(0),Csum5(0),sum51(0),csum51(0),sum52(0),csum52(0);
var : WMA51(0),WMA52(0),diff5(0),hma2(0);
var : prev_hma1(0),prev_hma2(0),vol_sum(0),level(0),shift_col(0);
var : reversal_dn_signal(0),reversal_up_signal(0);;
halfLength = IntPortion(length / 2);
sqrtLength = IntPortion(Sqrt(length));
if Bdate != Bdate[1] Then
{
prev_hma1 = hma1[1];
prev_hma2 = hma2[1];
}
Sum = 0;
CSum = 0;
Sum5 = 0;
CSum5 = 0;
For x = 0 to sqrtLength-1
{
Sum1 = 0;
CSum1 = 0;
Sum2 = 0;
CSum2 = 0;
Sum51 = 0;
CSum51 = 0;
Sum52 = 0;
CSum52 = 0;
ii = 0;
For y = x+0 to x+length-1
{
if ii < halfLength Then
{
Sum1= Sum1 + DayClose(y) * (halfLength - ii);
CSum1 = CSum1 + halfLength - ii;
Sum51 = Sum51 + DayClose(y+5) * (halfLength - ii);
CSum51 = CSum51 + halfLength - ii;
}
if ii < Length Then
{
Sum2= Sum2 + DayClose(y) * (Length - ii);
CSum2 = CSum2 + Length - ii;
Sum52 = Sum52 + DayClose(y+5) * (Length - ii);
CSum52 = CSum52 + Length - ii;
}
ii = ii+1;
}
WMA1 = Sum1 / CSum1;
WMA2 = Sum2 / CSum2;
diff1 = 2 * wma1 - wma2;
Sum = Sum + diff1 * (sqrtLength - x);
CSum = CSum + sqrtLength - x;
WMA51 = Sum51 / CSum51;
WMA52 = Sum52 / CSum52;
diff5 = 2 * wma51 - wma52;
Sum5 = Sum5 + diff5 * (sqrtLength - x);
CSum5 = CSum5 + sqrtLength - x;
}
hma1 = sum/Csum;
hma2 = sum5/Csum5;
vol_sum = DayVolume(2) + dayVolume(0) + DayVolume(0);
IF NextBarBdate != Bdate Then
{
if (prev_hma1 <= prev_hma2) and (hma1 > hma2) then
begin
level = DayLow;
end
else if (prev_hma1 >= prev_hma2) and (hma1 < hma2) then
begin
level = DayHigh;
end
else
begin
level = level[1];
end;
// 바 색상 숫자 (1=Up, 0=Down)
if DayClose < level then
begin
shift_col = 0;
end
else
begin
shift_col = 1;
end;
// 반전 신호 조건
reversal_dn_signal = 0;
reversal_up_signal = 0;
if (dayHigh(2) < level) and (DayHigh < level) and (DayHigh(1) > level) then
reversal_dn_signal = 1;
if (dayLow(2) > level) and (dayLow(1) < level) and (DayLow > level) then
reversal_up_signal = 1;
}
// 결과 플롯
Plot1(level, "Market Level");
답변 1
예스스탁
예스스탁 답변
2025-07-21 13:22:30
안녕하세요
예스스탁입니다.
문의하신 내용은 가능하지 않습니다.
차트에 일간데이터는 차트 첫봉기준 약 +99일 정도만 제공됩니다.
그 이상을 요구하는 내용은 수식으로 구현이 되지 않습니다.
도움을 드리지 못해 죄송합니다.
즐거운 하루되세요
> 허밍스타 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
> 아래는 이전질문코드에 답을 주신건데
1분봉이나 5분봉에서
length값을 240으로 늘리면 값이 0으로 나오는데 length값을 늘렸을 경우에도
값이 제대로 나오게 할 수 있는 방법이 있을까요?
Inputs: length(55);
var : x(0),y(0),halfLength(0),sqrtLength(0),ii(0);
var : sum(0),Csum(0),sum1(0),csum1(0),sum2(0),csum2(0);
var : WMA1(0),WMA2(0),diff1(0),hma1(0);
var : sum5(0),Csum5(0),sum51(0),csum51(0),sum52(0),csum52(0);
var : WMA51(0),WMA52(0),diff5(0),hma2(0);
var : prev_hma1(0),prev_hma2(0),vol_sum(0),level(0),shift_col(0);
var : reversal_dn_signal(0),reversal_up_signal(0);;
halfLength = IntPortion(length / 2);
sqrtLength = IntPortion(Sqrt(length));
if Bdate != Bdate[1] Then
{
prev_hma1 = hma1[1];
prev_hma2 = hma2[1];
}
Sum = 0;
CSum = 0;
Sum5 = 0;
CSum5 = 0;
For x = 0 to sqrtLength-1
{
Sum1 = 0;
CSum1 = 0;
Sum2 = 0;
CSum2 = 0;
Sum51 = 0;
CSum51 = 0;
Sum52 = 0;
CSum52 = 0;
ii = 0;
For y = x+0 to x+length-1
{
if ii < halfLength Then
{
Sum1= Sum1 + DayClose(y) * (halfLength - ii);
CSum1 = CSum1 + halfLength - ii;
Sum51 = Sum51 + DayClose(y+5) * (halfLength - ii);
CSum51 = CSum51 + halfLength - ii;
}
if ii < Length Then
{
Sum2= Sum2 + DayClose(y) * (Length - ii);
CSum2 = CSum2 + Length - ii;
Sum52 = Sum52 + DayClose(y+5) * (Length - ii);
CSum52 = CSum52 + Length - ii;
}
ii = ii+1;
}
WMA1 = Sum1 / CSum1;
WMA2 = Sum2 / CSum2;
diff1 = 2 * wma1 - wma2;
Sum = Sum + diff1 * (sqrtLength - x);
CSum = CSum + sqrtLength - x;
WMA51 = Sum51 / CSum51;
WMA52 = Sum52 / CSum52;
diff5 = 2 * wma51 - wma52;
Sum5 = Sum5 + diff5 * (sqrtLength - x);
CSum5 = CSum5 + sqrtLength - x;
}
hma1 = sum/Csum;
hma2 = sum5/Csum5;
vol_sum = DayVolume(2) + dayVolume(0) + DayVolume(0);
IF NextBarBdate != Bdate Then
{
if (prev_hma1 <= prev_hma2) and (hma1 > hma2) then
begin
level = DayLow;
end
else if (prev_hma1 >= prev_hma2) and (hma1 < hma2) then
begin
level = DayHigh;
end
else
begin
level = level[1];
end;
// 바 색상 숫자 (1=Up, 0=Down)
if DayClose < level then
begin
shift_col = 0;
end
else
begin
shift_col = 1;
end;
// 반전 신호 조건
reversal_dn_signal = 0;
reversal_up_signal = 0;
if (dayHigh(2) < level) and (DayHigh < level) and (DayHigh(1) > level) then
reversal_dn_signal = 1;
if (dayLow(2) > level) and (dayLow(1) < level) and (DayLow > level) then
reversal_up_signal = 1;
}
// 결과 플롯
Plot1(level, "Market Level");