첨부 이미지
그림1
그림2
안녕하세요?
예스트레이더(32) 와 예스트레이더(64)가 동일한 수식을 다르게 계산합니다.
예스트레이더(64)가 맞게 계산하고 있구요.
예스트레이더(32)의 수식계산이 맞는지 확인부탁드립니다.
아래는 테스트 지표식입니다.
Vars : SumTP(0), Cnt(0),TP(0) ;
If BarIndex == 1 then ClearDebug;
SumTP = 0;
value1 = 10 ;
For Cnt = 1 to 5
{
SumTP = SumTP + AverageFC(10, cnt);
TP = SumTP / 5;
}
plot1(tp);
messageLog("value1 %2.f, sumtp %2.f, tp %2.f", value1,sumtp,tp);
답변 1
예스스탁
예스스탁 답변
2022-01-11 14:06:43
안녕하세요
예스스탁입니다.
1
64비트의 값이 맞습니다.
2
Sum = Sum + Price - Price[Length];
If Length > 0 Then
AverageFC = Sum / Length;
Else
AverageFC = 0;
위 내용은 averageFC 계산식의 일부 내용입니다.
예를들어 5이평을 계산할 경우
직전봉기준 누적값에 현재봉값을 더하고 5봉전의 값을 빼서
현재 누적값을 산정하고 5로 나누어 평균값을 리턴하게 됩니다.
즉 averagefc함수는 지정한 값으로 값을 누적하고
새로운 봉이 생기면 가장 마지막기간값을 빼고 현재봉값을 더해서 평균을 합니다.
일반적으로 average함수가 매봉 for루프를 돌아 n개봉 값을 가져와 평균을 하는데
속도를 올리기위해 다른방식으로 계산을 하는함수가 averagefc입니다.
ma함수는 계산방식은 average와 같은데 속도향상을 위해 내장으로 되어 있는 함수입니다.
함수의 기간값을 변동기간으로 지정하면
값누적과 지정한 이전봉의 값을 가져올만큼 데이타를 저장하지 않은상태에서 이전봉의 값이 호출되서
정상적이지 않은 값이 리턴되게 됩니다.
동일한 단순이평함수 중 ma나 average함수는
현재봉에서 과거봉을 호출해서 계산을 합니다.
averagefc만 그 계산방식의 문제로 연산에 오류가 발생하는데
64비트에서는 좀더 많은 메모리를 사용할 수 있어 해당 부분이 개선된 것입니다.
Vars : SumTP(0), Cnt(0),TP(0) ;
SumTP = 0;
value1 = 10 ;
For Cnt = 1 to 5
{
SumTP = SumTP + Average(10, cnt);
TP = SumTP / 5;
}
plot1(tp);
Vars : SumTP(0), Cnt(0),TP(0) ;
SumTP = 0;
value1 = 10 ;
For Cnt = 1 to 5
{
SumTP = SumTP + ma(10, cnt);
TP = SumTP / 5;
}
plot1(tp);
3
수식작성시에 함수의 기간값을 변동적으로 가져가면
계산방법에 따라 오류가 발생할 수 있습니다.
즐거운 하루되세요
> 오토원 님이 쓴 글입니다.
> 제목 : 수식계산이 맞는지 확인해 주세요.
> 안녕하세요?
예스트레이더(32) 와 예스트레이더(64)가 동일한 수식을 다르게 계산합니다.
예스트레이더(64)가 맞게 계산하고 있구요.
예스트레이더(32)의 수식계산이 맞는지 확인부탁드립니다.
아래는 테스트 지표식입니다.
Vars : SumTP(0), Cnt(0),TP(0) ;
If BarIndex == 1 then ClearDebug;
SumTP = 0;
value1 = 10 ;
For Cnt = 1 to 5
{
SumTP = SumTP + AverageFC(10, cnt);
TP = SumTP / 5;
}
plot1(tp);
messageLog("value1 %2.f, sumtp %2.f, tp %2.f", value1,sumtp,tp);