예스스탁
예스스탁 답변
2007-07-06 17:08:54
안녕하세요. 예스스탁입니다.
랭귀지에서 조건문 안에 들어가 있는 함수도 조건문이 만족하지 않은경우에도
함수는 호출이 되어 계산이 되어야 하는 함수가 있습니다. 예를 들어 Ma()함수같은
경우 조건이 만족하지 않은경우 함수가 실행되지 않으면 계산이 실행되지않은
봉의 값이 이동평균 계산에서 빠져 다른 결과를 가져오므로 계산이 되어야 합니다.
사용자 님께서 문의 하신 부분은 호출버그가 아닙니다..
감사합니다. 행복한 하루 되세요.
> 원하는만큼 님이 쓴 글입니다.
> 제목 : 3.1 함수호출에 관한 문의 및 기타사항들
> 3.1 베타에 관한 몇가지 의문사항에 관해 문의 및 건의 드리고자합니다.
지표에서 DayIndex()==0 인 경우만 함수를 호출하고자 다음과 같은 프로그램을 작성하였으나 DayIndex가 0 이 아닌 경우도 함수를 호출하는데 버그(지표의 경우는 봉의 데이터가 바뀌는 순간 동작되는 것으로 알고 있음, 함수는 지표, 강조 또는 시스템에서 호출할때만 동작되어야하는데 현재는 한번 호출된 함수가 지표처럼 데이터의 변화 발생시 호출되는 것 같음->함수의 호출 버그)인지 아니면 제가 함수호출에 관해서 이해를 못하고 있는지 궁금합니다. 만약 함수호출버그라면 글쎄요..
(FFF함수를 두번 호출한 이유는 TS의 경우 함수호출시 스택구성이 특이해서 여기에서도 그런가 확인하기 위해서..)
또한 Print 문과 MessageLog문의 결과가 다른 이유도 궁금합니다(2.3. 결과 참조).
건의 사항으로는
첫째 : 챠트생성시 조회건수를 "봉" 과 "일"로 구분하면 어쩔가 합니다. 시뮬레이션 부분에서는 상당히 과거 데이터를 참조할 수 있는데 챠트에서는 5000으로 제한해 놓았더군요. 서버에 큰 부하가 안걸린다면 제한을 해제하는 것이 어쩔가 합니다. 2000년에 만들어진 TS에서도 1분봉으로 10년데이터를 참조할 수 있게 되어 "일"로 조회가능하더군요. 물론 TS는 과거 데이터를 클라이언트에 저장하고 있어서 그러긴 합니다만.
둘째 : MessageLog창의 Cell의 다중선택 속성을 on으로 했으면 합니다. MessageLog 창의 결과를 다른 사람과 결과에 대한 정보공유시 선택 복사가 안되어 있어 상당히 불편함을 느낍니다.
셋째 : 욕심부분입니다.. 검증시간의 단축(엄청 걸리네요), Trend Line, 출력기반의 Debugging->Trace 기반, 외부모듈 링크
1. 프로그램 소스( 첨부합니다.)
지표 소스
var : vv(0);
if( DayIndex() == 0 ) then {
Print("IDHBPTest.txt", "---------------%f ", vv);
FFF(1, vv);
Print("IDHBPTest.txt", "---------------%f ", vv);
FFF(2, vv);
Print("IDHBPTest.txt", "---------------%f ", vv);
Print("IDHBPTest.txt", "--------------------------- ");
}
FFF 함수
inputs : id(Numeric), aa(NumericRef);
Print("IDHBPTest.txt", " %2.0f 번째 호출 DayIndex : %f aa : %2.0f aa+1 : %2.0f", id, DayIndex(), aa, aa=aa+1 );
FFF = 0;
2. 결과
2007-03-02 13:00:00 ---------------------------
2007-03-02 14:00:00 1 번째 호출 DayIndex : 1.000000 aa : 2 aa+1 : 3
2007-03-02 14:00:00 2 번째 호출 DayIndex : 1.000000 aa : 3 aa+1 : 4
2007-03-02 15:00:00 1 번째 호출 DayIndex : 2.000000 aa : 4 aa+1 : 5
2007-03-02 15:00:00 2 번째 호출 DayIndex : 2.000000 aa : 5 aa+1 : 6
2007-03-05 09:00:00 ---------------6.000000
2007-03-05 09:00:00 1 번째 호출 DayIndex : 0.000000 aa : 6 aa+1 : 7
2007-03-05 09:00:00 ---------------7.000000
2007-03-05 09:00:00 2 번째 호출 DayIndex : 0.000000 aa : 7 aa+1 : 8
2007-03-05 09:00:00 ---------------8.000000
2007-03-05 09:00:00 ---------------------------
2007-03-05 10:00:00 1 번째 호출 DayIndex : 1.000000 aa : 8 aa+1 : 9
2007-03-05 10:00:00 2 번째 호출 DayIndex : 1.000000 aa : 9 aa+1 : 10
2007-03-05 11:00:00 1 번째 호출 DayIndex : 2.000000 aa : 10 aa+1 : 11
2007-03-05 11:00:00 2 번째 호출 DayIndex : 2.000000 aa : 11 aa+1 : 12
2007-03-05 12:00:00 1 번째 호출 DayIndex : 3.000000 aa : 12 aa+1 : 13
2007-03-05 12:00:00 2 번째 호출 DayIndex : 3.000000 aa : 13 aa+1 : 14
2007-03-05 13:00:00 1 번째 호출 DayIndex : 4.000000 aa : 14 aa+1 : 15
2007-03-05 13:00:00 2 번째 호출 DayIndex : 4.000000 aa : 15 aa+1 : 16
2007-03-05 14:00:00 1 번째 호출 DayIndex : 5.000000 aa : 16 aa+1 : 17
2007-03-05 14:00:00 2 번째 호출 DayIndex : 5.000000 aa : 17 aa+1 : 18
2007-03-05 15:00:00 1 번째 호출 DayIndex : 6.000000 aa : 18 aa+1 : 19
2007-03-05 15:00:00 2 번째 호출 DayIndex : 6.000000 aa : 19 aa+1 : 20
2007-03-06 09:00:00 ---------------20.000000
2007-03-06 09:00:00 1 번째 호출 DayIndex : 0.000000 aa : 20 aa+1 : 21
2007-03-06 09:00:00 ---------------21.000000
2007-03-06 09:00:00 2 번째 호출 DayIndex : 0.000000 aa : 21 aa+1 : 22
2007-03-06 09:00:00 ---------------22.000000
2007-03-06 09:00:00 ---------------------------
3. MessageLog의 결과
- 첨부파일 및 제일 위쪽 그림 참조 바람
원하는만큼
2007-07-06 17:23:13
답변감사합니다.
함수중에는 봉마다 호출하는 경우와 특정봉에만 호출되는 경우가 있는데 당근 지표는 봉마다 처리하는 부분이 들어가고 함수는 그외에도 특정경우만 처리하는 경우가 있다고 봅니다.
또한 일반적인 언어에서도 당연히 호출했을때만 호출되고요 TS에서도 확인한바로는 사용자 함수는 호출했을때만 동작하게 되었있습니다.
Yes3.1은 함수에 call by value 와 call by Ref를 지원하는 것으로 알고 있고요
call by value는 답변하신 것처럼 해도 큰 문제가 없다고 생각되지만 제가 보낸 예제를 보셔서 알겟지만 call by ref로 호출할 경우 함수가 많은 제약을 갖을수 밖에 없습니다.
Ref 계열의 함수 파라메터를 만들어놓고 제약을 건다는것이 상식적을 납득이 안가네요.
TS와 컨버젼 가능하게 만드실려면 아마도 사용자 함수는 호출했을때만 동작해야한다고 봅니다.
한번 Yes 3.1 개선 팀들과 상의후 답변 부탁드립니다.
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 3.1 함수호출에 관한 문의 및 기타사항들(수정입니다)
> 안녕하세요. 예스스탁입니다.
랭귀지에서 조건문 안에 들어가 있는 함수도 조건문이 만족하지 않은경우에도
함수는 호출이 되어 계산이 되어야 하는 함수가 있습니다. 예를 들어 Ma()함수같은
경우 조건이 만족하지 않은경우 함수가 실행되지 않으면 계산이 실행되지않은
봉의 값이 이동평균 계산에서 빠져 다른 결과를 가져오므로 계산이 되어야 합니다.
사용자 님께서 문의 하신 부분은 호출버그가 아닙니다..
감사합니다. 행복한 하루 되세요.
> 원하는만큼 님이 쓴 글입니다.
> 제목 : 3.1 함수호출에 관한 문의 및 기타사항들
> 3.1 베타에 관한 몇가지 의문사항에 관해 문의 및 건의 드리고자합니다.
지표에서 DayIndex()==0 인 경우만 함수를 호출하고자 다음과 같은 프로그램을 작성하였으나 DayIndex가 0 이 아닌 경우도 함수를 호출하는데 버그(지표의 경우는 봉의 데이터가 바뀌는 순간 동작되는 것으로 알고 있음, 함수는 지표, 강조 또는 시스템에서 호출할때만 동작되어야하는데 현재는 한번 호출된 함수가 지표처럼 데이터의 변화 발생시 호출되는 것 같음->함수의 호출 버그)인지 아니면 제가 함수호출에 관해서 이해를 못하고 있는지 궁금합니다. 만약 함수호출버그라면 글쎄요..
(FFF함수를 두번 호출한 이유는 TS의 경우 함수호출시 스택구성이 특이해서 여기에서도 그런가 확인하기 위해서..)
또한 Print 문과 MessageLog문의 결과가 다른 이유도 궁금합니다(2.3. 결과 참조).
건의 사항으로는
첫째 : 챠트생성시 조회건수를 "봉" 과 "일"로 구분하면 어쩔가 합니다. 시뮬레이션 부분에서는 상당히 과거 데이터를 참조할 수 있는데 챠트에서는 5000으로 제한해 놓았더군요. 서버에 큰 부하가 안걸린다면 제한을 해제하는 것이 어쩔가 합니다. 2000년에 만들어진 TS에서도 1분봉으로 10년데이터를 참조할 수 있게 되어 "일"로 조회가능하더군요. 물론 TS는 과거 데이터를 클라이언트에 저장하고 있어서 그러긴 합니다만.
둘째 : MessageLog창의 Cell의 다중선택 속성을 on으로 했으면 합니다. MessageLog 창의 결과를 다른 사람과 결과에 대한 정보공유시 선택 복사가 안되어 있어 상당히 불편함을 느낍니다.
셋째 : 욕심부분입니다.. 검증시간의 단축(엄청 걸리네요), Trend Line, 출력기반의 Debugging->Trace 기반, 외부모듈 링크
1. 프로그램 소스( 첨부합니다.)
지표 소스
var : vv(0);
if( DayIndex() == 0 ) then {
Print("IDHBPTest.txt", "---------------%f ", vv);
FFF(1, vv);
Print("IDHBPTest.txt", "---------------%f ", vv);
FFF(2, vv);
Print("IDHBPTest.txt", "---------------%f ", vv);
Print("IDHBPTest.txt", "--------------------------- ");
}
FFF 함수
inputs : id(Numeric), aa(NumericRef);
Print("IDHBPTest.txt", " %2.0f 번째 호출 DayIndex : %f aa : %2.0f aa+1 : %2.0f", id, DayIndex(), aa, aa=aa+1 );
FFF = 0;
2. 결과
2007-03-02 13:00:00 ---------------------------
2007-03-02 14:00:00 1 번째 호출 DayIndex : 1.000000 aa : 2 aa+1 : 3
2007-03-02 14:00:00 2 번째 호출 DayIndex : 1.000000 aa : 3 aa+1 : 4
2007-03-02 15:00:00 1 번째 호출 DayIndex : 2.000000 aa : 4 aa+1 : 5
2007-03-02 15:00:00 2 번째 호출 DayIndex : 2.000000 aa : 5 aa+1 : 6
2007-03-05 09:00:00 ---------------6.000000
2007-03-05 09:00:00 1 번째 호출 DayIndex : 0.000000 aa : 6 aa+1 : 7
2007-03-05 09:00:00 ---------------7.000000
2007-03-05 09:00:00 2 번째 호출 DayIndex : 0.000000 aa : 7 aa+1 : 8
2007-03-05 09:00:00 ---------------8.000000
2007-03-05 09:00:00 ---------------------------
2007-03-05 10:00:00 1 번째 호출 DayIndex : 1.000000 aa : 8 aa+1 : 9
2007-03-05 10:00:00 2 번째 호출 DayIndex : 1.000000 aa : 9 aa+1 : 10
2007-03-05 11:00:00 1 번째 호출 DayIndex : 2.000000 aa : 10 aa+1 : 11
2007-03-05 11:00:00 2 번째 호출 DayIndex : 2.000000 aa : 11 aa+1 : 12
2007-03-05 12:00:00 1 번째 호출 DayIndex : 3.000000 aa : 12 aa+1 : 13
2007-03-05 12:00:00 2 번째 호출 DayIndex : 3.000000 aa : 13 aa+1 : 14
2007-03-05 13:00:00 1 번째 호출 DayIndex : 4.000000 aa : 14 aa+1 : 15
2007-03-05 13:00:00 2 번째 호출 DayIndex : 4.000000 aa : 15 aa+1 : 16
2007-03-05 14:00:00 1 번째 호출 DayIndex : 5.000000 aa : 16 aa+1 : 17
2007-03-05 14:00:00 2 번째 호출 DayIndex : 5.000000 aa : 17 aa+1 : 18
2007-03-05 15:00:00 1 번째 호출 DayIndex : 6.000000 aa : 18 aa+1 : 19
2007-03-05 15:00:00 2 번째 호출 DayIndex : 6.000000 aa : 19 aa+1 : 20
2007-03-06 09:00:00 ---------------20.000000
2007-03-06 09:00:00 1 번째 호출 DayIndex : 0.000000 aa : 20 aa+1 : 21
2007-03-06 09:00:00 ---------------21.000000
2007-03-06 09:00:00 2 번째 호출 DayIndex : 0.000000 aa : 21 aa+1 : 22
2007-03-06 09:00:00 ---------------22.000000
2007-03-06 09:00:00 ---------------------------
3. MessageLog의 결과
- 첨부파일 및 제일 위쪽 그림 참조 바람
예스스탁
예스스탁 답변
2007-07-12 14:09:07
안녕하세요
예스스탁입니다.
YesLanguage에서 함수를 호출하는 원칙에 대해 말씀 드리겠습니다.
일반언어와 YesLanguage는 호출하는 방식이 다릅니다.
일반언어에서는 전체 로직이 한번 수행되지만 YesLanguage는 매 봉마다 반복적으로
수행되며 이전 봉의 결과가 다음 봉의 수행결과에 영향을 주기때문에 함수계산의
연속성을 유지해야 합니다.
따라서 어떤 함수는 호출조건이 만족하지 않아도 매번 호출되어야 하고 어떤 함수는
호출되지 않아도 됩니다.
예를 들어 ma(c,period)같은 함수는 매번 호출되고, sin(30),pie() 같은 함수는 호출조건이
만족 할 때만 호출됩니다.
Ma(c,period)함수는 매 봉마다의 c값을 내부적으로 호출을 통하여 유지해야 하기 때문에
반드시 호출 되어야 하고 sin()함수는 그럴 필요가 없는 경우 입니다.
사용자 함수는 Ma()함수와 같이 매 봉마다 호출되는데 그 이유도 마찬가지 입니다.
물론 사용자 함수도 반드시 호출 될 필요가 없을 수도 있지만 그것은 로직에 따라
다르기 때문에 YesLanguage에서는 반드시 호출되게 처리 되었습니다.
다만 사용자 함수가 매번 호출 된다 하여도 그 결과값이 주 로직에 영향을 주지 않게
처리하기 때문에 실제 로직의 흐름은 유지 됩니다.
Ex)
If c > o then {
Var1 = UserFunc(high);
} else {
Var1 = UserFunc(low);
}
위의 식에서 c > o 조건에 따라 UserFunc()라는 함수가 한번은 조건 만족에 따라호출되고, 다른 한번은 조건 만족되지 않았을 때 호출 됩니다.
이때 조건이 만족되지 않았을 때 호출된 함수의 결과값은 Var1에 할당 되지 않습니다.
TS의 EasyLanguage의 경우도 내부적으로 YesLanugae와 크게 다르지 않으리라 판단됩니다.
다만 Print(),Messagelog() 함수를 통한 확인은 정확하지 않을 수 있습니다.
YesLanguage는 Print(),Messagelog() 함수가 항상 호출 될 때 결과를 만들지만
EsayLanguage에서는 정상 호출이 아닐때에는 출력을 처리 하지 않을 수 있습니다.
더 자세한 내용을 원하시면 전화주시기 바랍니다.
02-3453-1060
즐거운 하루되세요
> 원하는만큼 님이 쓴 글입니다.
> 제목 : Re : Re : 함수는 호출했을때만 동작해야한다고 생각합니다.
> 답변감사합니다.
함수중에는 봉마다 호출하는 경우와 특정봉에만 호출되는 경우가 있는데 당근 지표는 봉마다 처리하는 부분이 들어가고 함수는 그외에도 특정경우만 처리하는 경우가 있다고 봅니다.
또한 일반적인 언어에서도 당연히 호출했을때만 호출되고요 TS에서도 확인한바로는 사용자 함수는 호출했을때만 동작하게 되었있습니다.
Yes3.1은 함수에 call by value 와 call by Ref를 지원하는 것으로 알고 있고요
call by value는 답변하신 것처럼 해도 큰 문제가 없다고 생각되지만 제가 보낸 예제를 보셔서 알겟지만 call by ref로 호출할 경우 함수가 많은 제약을 갖을수 밖에 없습니다.
Ref 계열의 함수 파라메터를 만들어놓고 제약을 건다는것이 상식적을 납득이 안가네요.
TS와 컨버젼 가능하게 만드실려면 아마도 사용자 함수는 호출했을때만 동작해야한다고 봅니다.
한번 Yes 3.1 개선 팀들과 상의후 답변 부탁드립니다.
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 3.1 함수호출에 관한 문의 및 기타사항들(수정입니다)
> 안녕하세요. 예스스탁입니다.
랭귀지에서 조건문 안에 들어가 있는 함수도 조건문이 만족하지 않은경우에도
함수는 호출이 되어 계산이 되어야 하는 함수가 있습니다. 예를 들어 Ma()함수같은
경우 조건이 만족하지 않은경우 함수가 실행되지 않으면 계산이 실행되지않은
봉의 값이 이동평균 계산에서 빠져 다른 결과를 가져오므로 계산이 되어야 합니다.
사용자 님께서 문의 하신 부분은 호출버그가 아닙니다..
감사합니다. 행복한 하루 되세요.
> 원하는만큼 님이 쓴 글입니다.
> 제목 : 3.1 함수호출에 관한 문의 및 기타사항들
> 3.1 베타에 관한 몇가지 의문사항에 관해 문의 및 건의 드리고자합니다.
지표에서 DayIndex()==0 인 경우만 함수를 호출하고자 다음과 같은 프로그램을 작성하였으나 DayIndex가 0 이 아닌 경우도 함수를 호출하는데 버그(지표의 경우는 봉의 데이터가 바뀌는 순간 동작되는 것으로 알고 있음, 함수는 지표, 강조 또는 시스템에서 호출할때만 동작되어야하는데 현재는 한번 호출된 함수가 지표처럼 데이터의 변화 발생시 호출되는 것 같음->함수의 호출 버그)인지 아니면 제가 함수호출에 관해서 이해를 못하고 있는지 궁금합니다. 만약 함수호출버그라면 글쎄요..
(FFF함수를 두번 호출한 이유는 TS의 경우 함수호출시 스택구성이 특이해서 여기에서도 그런가 확인하기 위해서..)
또한 Print 문과 MessageLog문의 결과가 다른 이유도 궁금합니다(2.3. 결과 참조).
건의 사항으로는
첫째 : 챠트생성시 조회건수를 "봉" 과 "일"로 구분하면 어쩔가 합니다. 시뮬레이션 부분에서는 상당히 과거 데이터를 참조할 수 있는데 챠트에서는 5000으로 제한해 놓았더군요. 서버에 큰 부하가 안걸린다면 제한을 해제하는 것이 어쩔가 합니다. 2000년에 만들어진 TS에서도 1분봉으로 10년데이터를 참조할 수 있게 되어 "일"로 조회가능하더군요. 물론 TS는 과거 데이터를 클라이언트에 저장하고 있어서 그러긴 합니다만.
둘째 : MessageLog창의 Cell의 다중선택 속성을 on으로 했으면 합니다. MessageLog 창의 결과를 다른 사람과 결과에 대한 정보공유시 선택 복사가 안되어 있어 상당히 불편함을 느낍니다.
셋째 : 욕심부분입니다.. 검증시간의 단축(엄청 걸리네요), Trend Line, 출력기반의 Debugging->Trace 기반, 외부모듈 링크
1. 프로그램 소스( 첨부합니다.)
지표 소스
var : vv(0);
if( DayIndex() == 0 ) then {
Print("IDHBPTest.txt", "---------------%f ", vv);
FFF(1, vv);
Print("IDHBPTest.txt", "---------------%f ", vv);
FFF(2, vv);
Print("IDHBPTest.txt", "---------------%f ", vv);
Print("IDHBPTest.txt", "--------------------------- ");
}
FFF 함수
inputs : id(Numeric), aa(NumericRef);
Print("IDHBPTest.txt", " %2.0f 번째 호출 DayIndex : %f aa : %2.0f aa+1 : %2.0f", id, DayIndex(), aa, aa=aa+1 );
FFF = 0;
2. 결과
2007-03-02 13:00:00 ---------------------------
2007-03-02 14:00:00 1 번째 호출 DayIndex : 1.000000 aa : 2 aa+1 : 3
2007-03-02 14:00:00 2 번째 호출 DayIndex : 1.000000 aa : 3 aa+1 : 4
2007-03-02 15:00:00 1 번째 호출 DayIndex : 2.000000 aa : 4 aa+1 : 5
2007-03-02 15:00:00 2 번째 호출 DayIndex : 2.000000 aa : 5 aa+1 : 6
2007-03-05 09:00:00 ---------------6.000000
2007-03-05 09:00:00 1 번째 호출 DayIndex : 0.000000 aa : 6 aa+1 : 7
2007-03-05 09:00:00 ---------------7.000000
2007-03-05 09:00:00 2 번째 호출 DayIndex : 0.000000 aa : 7 aa+1 : 8
2007-03-05 09:00:00 ---------------8.000000
2007-03-05 09:00:00 ---------------------------
2007-03-05 10:00:00 1 번째 호출 DayIndex : 1.000000 aa : 8 aa+1 : 9
2007-03-05 10:00:00 2 번째 호출 DayIndex : 1.000000 aa : 9 aa+1 : 10
2007-03-05 11:00:00 1 번째 호출 DayIndex : 2.000000 aa : 10 aa+1 : 11
2007-03-05 11:00:00 2 번째 호출 DayIndex : 2.000000 aa : 11 aa+1 : 12
2007-03-05 12:00:00 1 번째 호출 DayIndex : 3.000000 aa : 12 aa+1 : 13
2007-03-05 12:00:00 2 번째 호출 DayIndex : 3.000000 aa : 13 aa+1 : 14
2007-03-05 13:00:00 1 번째 호출 DayIndex : 4.000000 aa : 14 aa+1 : 15
2007-03-05 13:00:00 2 번째 호출 DayIndex : 4.000000 aa : 15 aa+1 : 16
2007-03-05 14:00:00 1 번째 호출 DayIndex : 5.000000 aa : 16 aa+1 : 17
2007-03-05 14:00:00 2 번째 호출 DayIndex : 5.000000 aa : 17 aa+1 : 18
2007-03-05 15:00:00 1 번째 호출 DayIndex : 6.000000 aa : 18 aa+1 : 19
2007-03-05 15:00:00 2 번째 호출 DayIndex : 6.000000 aa : 19 aa+1 : 20
2007-03-06 09:00:00 ---------------20.000000
2007-03-06 09:00:00 1 번째 호출 DayIndex : 0.000000 aa : 20 aa+1 : 21
2007-03-06 09:00:00 ---------------21.000000
2007-03-06 09:00:00 2 번째 호출 DayIndex : 0.000000 aa : 21 aa+1 : 22
2007-03-06 09:00:00 ---------------22.000000
2007-03-06 09:00:00 ---------------------------
3. MessageLog의 결과
- 첨부파일 및 제일 위쪽 그림 참조 바람