커뮤니티
확인부탁드립니다.
2015-06-09 04:38:05
121
글번호 86961
아래내용은 2011년 3월경에 수##왕 님의 글입니다. 그당시 for문 안에서의 문제가 지금은 해결된건지 알고싶습니다.(배열안에 for문이 적용된거였습니다)
===============================================================
본론으로 들어가기에 앞서 몇가지 팁부터 설명드리겠습니다.
예스랭귀지 에디터의 오류로 보아야 할 지 모르겠지만 CrossUP()이나 CrossDown()등의 내장 함수가 For문 안에서 제대로 계산되지 않는 문제도 발견되었습니다.
Highest(), Lowest() 처럼 가장 많이 사용하는 함수도 For문안에서 틀린 값이 나오는 바람에 원인 찾느라 무지 애먹었습니다.
예제에서는 Highest(), Lowest() 함수를 다루지 않기 때문에 먼저 해결 방법을 제시해드립니다.
아래 수식은 Swing파동선 로직의 일부입니다.
If Highest(H,left)[right+1] <= H[right] && H[right] > Highest(H,right) &&
Lowest(L,left)[right+1] >= L[right] && L[right] < Lowest(L,right) Then
{
구분 = Iff(고Bar[1]>저Bar[1],고점,저점);
}
위 원본 수식에서 left와 right가 입력변수이며 이것의 최적 변수값을 찾는게 목적이므로 다음처럼 수정해야 할 겁니다.
For n = 1 to 100
{
left = int((n-1)/10)%10+5; //변수 값의 범위를 5~14로 봄
right = (n-1)%10+5; //변수 값의 범위를 5~14로 봄
If Highest(H,left)[right+1] <= H[right] && H[right] > Highest(H,right) &&
Lowest(L,left)[right+1] >= L[right] && L[right] < Lowest(L,right) Then
{
구분[n] = Iff(고Bar[n*10+1]>저Bar[n*10+1],고점,저점);
}
}
디버그 모드로 검증해보면 left 값이나 right값이 정상적으로 산출되었음에도 Highest(H,left)[right+1] 값이 틀리게 나옵니다.
For문안에서 문제가 되는 것으로 보이며 아래처럼 For문 실행 전에 Highest값을 미리 산출해 놓는 겁니다.
For j = 3 To 19 //아래의 메인 for문을 수행하기 전에 배열에다 미리 값을 계산
{
Hst[j] = Highest(H,j);
Lst[j] = Lowest(L,j);
}
For n = 1 to 100
{
left = int((n-1)/10)%10+5; //변수 값의 범위를 5~14로 봄
right = (n-1)%10+5; //변수 값의 범위를 5~14로 봄
If Hst[left][right+1] <= H[right] && H[right] > Hst[right] &&
Lst[left][right+1] >= L[right] && L[right] < Lst[right] Then
{
구분[n] = Iff(고Bar[n*10+1]>저Bar[n*10+1],고점,저점);
}
}
요렇게 하면 값이 정상적으로 나옵니다.
답변 1
예스스탁 예스스탁 답변
2015-06-09 11:46:01
안녕하세요
예스스탁입니다.
해당 부분은 랭귀지의 오류가 아닙니다.
현재도 해당글과 같이 동작을 합니다.
오류가 아니므로 따로 수정된 부분은 없습니다.
이전값을 사용하기 위해서는 해당 값이
매봉 값이 있어야 현재봉에서 몇봉전 값을 가져올수 있는데
이전봉에 계산을 해서 매봉 값을 저장하지 않은 상태에서
특정시점에 이전봉의 값을 가져오라고 수식을 작성하기 때문에
값이 리턴되지 않는 것입니다.
즉 특정시점에서 특정함수의 이전봉의 값을 가져와 사용하기 위해서는
특정함수가 매봉 값을 계산하고 있어야 합니다.
즐거운 하루되세요
> 9단 님이 쓴 글입니다.
> 제목 : 확인부탁드립니다.
> 아래내용은 2011년 3월경에 수##왕 님의 글입니다. 그당시 for문 안에서의 문제가 지금은 해결된건지 알고싶습니다.(배열안에 for문이 적용된거였습니다)
===============================================================
본론으로 들어가기에 앞서 몇가지 팁부터 설명드리겠습니다.
예스랭귀지 에디터의 오류로 보아야 할 지 모르겠지만 CrossUP()이나 CrossDown()등의 내장 함수가 For문 안에서 제대로 계산되지 않는 문제도 발견되었습니다.
Highest(), Lowest() 처럼 가장 많이 사용하는 함수도 For문안에서 틀린 값이 나오는 바람에 원인 찾느라 무지 애먹었습니다.
예제에서는 Highest(), Lowest() 함수를 다루지 않기 때문에 먼저 해결 방법을 제시해드립니다.
아래 수식은 Swing파동선 로직의 일부입니다.
If Highest(H,left)[right+1] <= H[right] && H[right] > Highest(H,right) &&
Lowest(L,left)[right+1] >= L[right] && L[right] < Lowest(L,right) Then
{
구분 = Iff(고Bar[1]>저Bar[1],고점,저점);
}
위 원본 수식에서 left와 right가 입력변수이며 이것의 최적 변수값을 찾는게 목적이므로 다음처럼 수정해야 할 겁니다.
For n = 1 to 100
{
left = int((n-1)/10)%10+5; //변수 값의 범위를 5~14로 봄
right = (n-1)%10+5; //변수 값의 범위를 5~14로 봄
If Highest(H,left)[right+1] <= H[right] && H[right] > Highest(H,right) &&
Lowest(L,left)[right+1] >= L[right] && L[right] < Lowest(L,right) Then
{
구분[n] = Iff(고Bar[n*10+1]>저Bar[n*10+1],고점,저점);
}
}
디버그 모드로 검증해보면 left 값이나 right값이 정상적으로 산출되었음에도 Highest(H,left)[right+1] 값이 틀리게 나옵니다.
For문안에서 문제가 되는 것으로 보이며 아래처럼 For문 실행 전에 Highest값을 미리 산출해 놓는 겁니다.
For j = 3 To 19 //아래의 메인 for문을 수행하기 전에 배열에다 미리 값을 계산
{
Hst[j] = Highest(H,j);
Lst[j] = Lowest(L,j);
}
For n = 1 to 100
{
left = int((n-1)/10)%10+5; //변수 값의 범위를 5~14로 봄
right = (n-1)%10+5; //변수 값의 범위를 5~14로 봄
If Hst[left][right+1] <= H[right] && H[right] > Hst[right] &&
Lst[left][right+1] >= L[right] && L[right] < Lst[right] Then
{
구분[n] = Iff(고Bar[n*10+1]>저Bar[n*10+1],고점,저점);
}
}
요렇게 하면 값이 정상적으로 나옵니다.