커뮤니티
100봉내 양봉 50개가 한번이라도 있는 종목 검색
2012-03-10 12:17:50
381
글번호 48516
********** 식1 **********
var1 = ma(c,5);
var2 = ma(c,20);
if index == 0 Then
Condition1 = false;
if Condition2 == true and countif( C > O, 100) >= 50 then
if crossup(var1,var2) Then
Condition1 = true;
if Condition1 == true Then
find(1);
********** 식2 **********
var1 = ma(c,5);
var2 = ma(c,20);
if index == 0 Then {
Condition1 = false;
Condition2 = true; // 최초 조건 만족시 한번만 if 실행되게
}
if Condition2 == true and countif( C > O, 100) >= 50 then
if crossup(var1,var2) Then {
Condition1 = true;
Condition2 = False;
}
if LastBarOnChart == 1 and Condition1 == true Then
find(1);
질문1)
실행속도가 향상되는지 알아보기 위해 식1을 식2로 변경해서 테스트해 보았는데 실행속도 향상은 없었습니다.
a) 조건을 판단하는 if문을 최초 조건만족할때 단 한번만 실행되게 해서 실행속도 향상(Condition2 사용).
b) find를 매번 실행하지않고 마지막봉에서 한번만 실행하여 실행속도 향상(LastBarOnChart).
실행속도와는 무관한가요?
=========================================================
아래 링크된 두개의 답변은 삭제해 주시면 감사하겠습니다.
아래에 두개의 답변을 정리해 놓은 것이니 답변해 주실 내용이 아닙니다
https://www.yesstock.com/Board/Search_View.asp?db=board100036&num=48741&pageno=1&startpage=1&Kind=1&keyfield=Subject&keyword=종 목 &Ext=0
https://www.yesstock.com/Board/Search_View.asp?db=board100036&num=48792&pageno=1&startpage=1&Kind=1&keyfield=Subject&keyword=종 목 &Ext=0
########################################################################
################
두번째 질문 내용
################
var1 = ma(c,5);
var2 = ma(c,20);
if countif( C > O, 100) >= 1 then // A
if crossup(var1,var2) Then // B
find(1);
If countif( v>v[1], 100) >= 1 Then // C
find(1);
=================================================
질문1) countif는 100봉, 속성은 200봉으로 설정하면 검색기간은 100봉? 200봉?
(질문) 실행순서1
100봉전 실행 : var1 --> var2 --> A실행 --> 음봉이면 --> B건너뜀 --> C실행(1회)
99봉전 실행 : var1 --> var2 --> A실행 --> 음봉이면 --> B건너뜀 --> C실행(1회)
98봉전 실행 : var1 --> var2 --> A실행 --> 양봉이면 --> B실행(1회) --> C실행(1회)
여기부터는 양봉 음봉 상관없이 A를 무조건 실행(양봉 1개 이상의 조건이 충족되므로)
97봉전 실행 : var1 --> var2 --> A실행 --> B실행(1회) --> C실행(1회)
.....생략.....
현재봉 실행 : var1 --> var2 --> A실행 --> B실행(1회) --> C실행(1회)
실행순서2
계산에 필요한 var1, var2, 양봉갯수, v 값을 구하기 위해 먼저 100개봉을 실행해서 값을 구해 놓은 뒤에,
포인터가 현재봉에 위치한 상태에서 방금 구해 놓은 값을 계산하면서 처리하는 방식
질문2) "실행순서1"처럼 실행되는 것으로 알고 있는데 잘못 알고 있나요?
질문3) 실행순서1처럼 매 봉으로 이동할때마다 var1 --> C를 반복하면서 처리하나요?
질문4) 총실행횟수는 A=100번, B=98번(처음 음봉 두번 미실행), C=100번 실행되는게 맞는지요?
질문5)
if countif( C > O, 100) >= 1 then // A
if countif(crossup(var1,var2), 100 >= 1 Then // B
find(1);
A만 countif문을 사용한것과 A와 B 모두 countif문을 사용한것은 처리횟수가 동일한가요?
======================================================
var1 = ma(c,5);
var2 = ma(c,20);
if crossup(var1,var2) Then // B
find(1);
질문6) 이 식을 실행해 보면 속성창에서 봉을 설정안하든, 100개로 설정하든, 300개로 설정하든 상관없이
맨마지막 봉에서 골든크로스가 발생한 종목만 검색이 됩니다.
중간에서 골든크로스가 발생한 종목도 검색되게 할려면 countif문을 사용하는 방법외에 다른 방법은 없나요?
################
두번째 답변 내용
################
안녕하세요
예스스탁입니다.
1.
200봉입니다.
2.
실행순서1과 같이 동작합니다.
3.
예 매봉 var1 --> C방향으로 계산합니다.
4.
시스템 랭귀지는 모든 수식의 내용을 읽어 들어갑니다.
상단의 if문이 false라도 하단의 내용은 계산하게 되므로
계산횟수는 모두 동일합니다.
5.
계산의 횟수가 다릅니다.
a만 countif하면 A는 최근 100개 봉의 종가와 시가를 불러와 양봉인 횟수를 계산하고
B는 현재봉의 상태만 계산하게 되므로 101회이고
A와 B모두 countif이면 A 100번 B도 100번이므로 총 200회가 계산됩니다.
6.
if crossup(var1,var2) Then
는 현재봉이 골든크로스인 중목을 나타냅니다.
이전에 몇개봉안에 발생한 적이 있다를 표현하시려면 countif를 이용하셔야 합니다.
########################################################################
################
첫번째 질문 내용
################
(a) 100개의 봉중에서,,,
(양봉 and 골든크로스)가 1개이상 존재하면 찾아라
(b) 100개의 봉중에서,,,
현재거래량이 직전거래량보다 많은것이 1개이상 존재하면 찾아라
var1 = ma(c,5);
var2 = ma(c,20);
if countif( C > O, 100) >= 1 then // A
if crossup(var1,var2) Then // B
find(1);
If countif( v>v[1], 100) >= 1 Then // C
find(1);
==================================================
질문1) if문이 실행되면서 var1과 var2 값이 계속 바뀌어야 되는데 여기선 차트의 맨 마지막 봉의 이동평균값 하나만 저장되나요? (countif문으로 제어가 안되므로)
질문2) (a)와 (b)중 한가지라도 만족하면 해당 종목이 검색되나요?
실행순서
㉠ 맨처음 var1=100, var2=120 실행
㉡ 그 다음 A 실행
질문3) 100봉전부터 99봉전, 98봉전 순서대로 100번 루트를 돌면서 양봉을 전부 찾아 놓은 후 B를 실행하나요?
아니면 양봉을 찾으면 B를 실행하고, 다시 A를 실행하다 양봉을 찾으면 B를 실행하고, A와 B를 왔다갔다하면서 처리하나요?
질문4) B에서 var1과 var2는 계속 바뀌어야 되는데, var1=100과 var2=120 값만 변하지 않고 처리가 끝날때까지 사용되나요?
㉢ C 실행
질문5) A와 B가 모두 완전히 끝난후에 C를 100번 실행하나요?
아니면 A와 C를 왔다갔다 하면서 처리하나요?
질문6) var1 = ma(c,5)부터 C까지(처음부터 끝까지) 여러번 왔다갔다 하지 않고 원샷에 끝나나요?
질문7) 이 수식을 실행하면 잘못된 결과가 나오나요?
################
첫번째 답변 내용
################
안녕하세요
예스스탁입니다.
종목검색도 차트에 적용되는 것과 마찬가지로 수식이 계산됩니다.
종목검색식은 속성화면에서 검색에 필요한 봉갯수를 따로 지정하시면
해당 봉갯수만큼 차트를 띄워놓구 적용하신 것과 같고
특별히 지정하지 않으면 종목검색시 해당 수식에 필요한 최소 봉갯수를 먼저 계산하여
검색에 필요한 봉갯수가 가령 200개로 계산되면 조회건수 200봉으로 한 차트에 적용하신 것과 같습니다
자동으로 계산되는 부분은 실제 수식에서 필요한 봉갯수보다 작게 산정될수 있으므로
되도록 직접 입력해 사용하셔야 합니다.
산정한 봉갯수에서
첫봉부터 마지막 봉쪽으로 수식을 계산하면서 오고 마지막봉에서
지정한 조건이 만족한 종목을 리스트에 보여주게 됩니다.
그러므로 각변수의 이전값이 모두 존재 하며
find함수안에 1과 같은 숫자대신에 var1[1]등오로 지정하시면
현재봉의 전봉의 값을 결과값으로 표시해 주는 것을 확인하실 수 있습니다.
작성하신 식에서 countif는 루프문(for문)을 사용한것과 같은 함수이므로
첫번째봉부터 현재봉쪽으로 오면서 매봉 봉당 100번의 루프를 돌면서
이전봉의 값을 불러와 계산하고 이평이 골든인지 확인하면서
현재봉쪽으로 진행되게 되고 최종 현재봉이 지정한 조건들에 모두 만족하면
해당 종목은 결과리스트에 표시가 됩니다.
1)
맨마지막봉만 계산이 되면 이전봉의 값이 없으므로 골든인지 데드인지 알수가 없습니다.
위 설명대로 이전봉부터 계산되서 오게 됩니다.
2)
A와 B는 아래와 같이 작성된 것과 같습니다.
countif( C > O, 100) >= 1 and crossup(var1,var2)
2개조건이 동시충족되는 종목이 검색됩니다.
작성하신 식은 A+B 또는 C가 만족한 종목을 찾는 식입니다.
3)
수식상에 계산의 순서는 항상 위부터 아래이며
중간에 상위로 돌아가지 않습니다(최근 100개봉동안 양봉갯수 구한 후 이평골드조건 계산)
var1 완료 --> var2완료 --> A완료 --> B완료 --> find --> C완료 --> find
4)
var1,var2는 위 설명과 같이 매봉 값이 변합니다.
5)
3) 내용 참고하시기 바랍니다.
6)
예 아래쪽으로는 수식계산이 진행됩니다.
7)
작성하신 수식은 최근 100개봉중 양봉이 하나이상이고 현재봉은 골든크로스인 종목을 찾는 식입니다.
해당내용이시면 수식에 잘못된 부분은 없습니다.
만약 양봉이고 골든크로스가 난봉이 최근 100개중 1개 이상이라는 조건이면
아래와 같이 수정하셔야 합니다.
var1 = ma(c,5);
var2 = ma(c,20);
if countif( C > O and crossup(var1,var2), 100) >= 1 Then
find(1);
If countif( v>v[1], 100) >= 1 Then // C
find(1);
########################################################################
답변 2
예스스탁 예스스탁 답변
2012-03-05 11:25:15
안녕하세요
예스스탁입니다.
1.
봉마다 수식의 첫줄부터 마지막 줄까지 반복적 읽어 내려 가므로
2개의 식의 실행속도의 차이는 없습니다.
이전에 답변드린 부분과 같이 수식은 if조건중 하나가 만족하지 않아도
나머지를 모두 읽어 내려가게 됩니다.
2.
find는 현재봉(마지막봉)에서 if로 지정된 조건이 만족하면 해당 종목을 리스트해주게 되므로
LastBarOnChart 사용이 의미가 없습니다.
3
링크하신 내용은 삭제처리했습니다.
즐거운 하루되세요
> 행복충전 님이 쓴 글입니다.
> 제목 : 종 목 검 색
> ********** 식1 **********
var1 = ma(c,5);
var2 = ma(c,20);
if index == 0 Then
Condition1 = false;
if Condition2 == true and countif( C > O, 100) >= 50 then
if crossup(var1,var2) Then
Condition1 = true;
if Condition1 == true Then
find(1);
********** 식2 **********
var1 = ma(c,5);
var2 = ma(c,20);
if index == 0 Then {
Condition1 = false;
Condition2 = true; // 최초 조건 만족시 한번만 if 실행되게
}
if Condition2 == true and countif( C > O, 100) >= 50 then
if crossup(var1,var2) Then {
Condition1 = true;
Condition2 = False;
}
if LastBarOnChart == 1 and Condition1 == true Then
find(1);
질문1)
실행속도가 향상되는지 알아보기 위해 식1을 식2로 변경해서 테스트해 보았는데 실행속도 향상은 없었습니다.
a) 조건을 판단하는 if문을 최초 조건만족할때 단 한번만 실행되게 해서 실행속도 향상(Condition2 사용).
b) find를 매번 실행하지않고 마지막봉에서 한번만 실행하여 실행속도 향상(LastBarOnChart).
실행속도와는 무관한가요?
=========================================================
아래 링크된 두개의 답변은 삭제해 주시면 감사하겠습니다.
아래에 두개의 답변을 정리해 놓은 것이니 답변해 주실 내용이 아닙니다
https://www.yesstock.com/Board/Search_View.asp?db=board100036&num=48741&pageno=1&startpage=1&Kind=1&keyfield=Subject&keyword=종 목 &Ext=0
https://www.yesstock.com/Board/Search_View.asp?db=board100036&num=48792&pageno=1&startpage=1&Kind=1&keyfield=Subject&keyword=종 목 &Ext=0
########################################################################
################
두번째 질문 내용
################
var1 = ma(c,5);
var2 = ma(c,20);
if countif( C > O, 100) >= 1 then // A
if crossup(var1,var2) Then // B
find(1);
If countif( v>v[1], 100) >= 1 Then // C
find(1);
=================================================
질문1) countif는 100봉, 속성은 200봉으로 설정하면 검색기간은 100봉? 200봉?
(질문) 실행순서1
100봉전 실행 : var1 --> var2 --> A실행 --> 음봉이면 --> B건너뜀 --> C실행(1회)
99봉전 실행 : var1 --> var2 --> A실행 --> 음봉이면 --> B건너뜀 --> C실행(1회)
98봉전 실행 : var1 --> var2 --> A실행 --> 양봉이면 --> B실행(1회) --> C실행(1회)
여기부터는 양봉 음봉 상관없이 A를 무조건 실행(양봉 1개 이상의 조건이 충족되므로)
97봉전 실행 : var1 --> var2 --> A실행 --> B실행(1회) --> C실행(1회)
.....생략.....
현재봉 실행 : var1 --> var2 --> A실행 --> B실행(1회) --> C실행(1회)
실행순서2
계산에 필요한 var1, var2, 양봉갯수, v 값을 구하기 위해 먼저 100개봉을 실행해서 값을 구해 놓은 뒤에,
포인터가 현재봉에 위치한 상태에서 방금 구해 놓은 값을 계산하면서 처리하는 방식
질문2) "실행순서1"처럼 실행되는 것으로 알고 있는데 잘못 알고 있나요?
질문3) 실행순서1처럼 매 봉으로 이동할때마다 var1 --> C를 반복하면서 처리하나요?
질문4) 총실행횟수는 A=100번, B=98번(처음 음봉 두번 미실행), C=100번 실행되는게 맞는지요?
질문5)
if countif( C > O, 100) >= 1 then // A
if countif(crossup(var1,var2), 100 >= 1 Then // B
find(1);
A만 countif문을 사용한것과 A와 B 모두 countif문을 사용한것은 처리횟수가 동일한가요?
======================================================
var1 = ma(c,5);
var2 = ma(c,20);
if crossup(var1,var2) Then // B
find(1);
질문6) 이 식을 실행해 보면 속성창에서 봉을 설정안하든, 100개로 설정하든, 300개로 설정하든 상관없이
맨마지막 봉에서 골든크로스가 발생한 종목만 검색이 됩니다.
중간에서 골든크로스가 발생한 종목도 검색되게 할려면 countif문을 사용하는 방법외에 다른 방법은 없나요?
################
두번째 답변 내용
################
안녕하세요
예스스탁입니다.
1.
200봉입니다.
2.
실행순서1과 같이 동작합니다.
3.
예 매봉 var1 --> C방향으로 계산합니다.
4.
시스템 랭귀지는 모든 수식의 내용을 읽어 들어갑니다.
상단의 if문이 false라도 하단의 내용은 계산하게 되므로
계산횟수는 모두 동일합니다.
5.
계산의 횟수가 다릅니다.
a만 countif하면 A는 최근 100개 봉의 종가와 시가를 불러와 양봉인 횟수를 계산하고
B는 현재봉의 상태만 계산하게 되므로 101회이고
A와 B모두 countif이면 A 100번 B도 100번이므로 총 200회가 계산됩니다.
6.
if crossup(var1,var2) Then
는 현재봉이 골든크로스인 중목을 나타냅니다.
이전에 몇개봉안에 발생한 적이 있다를 표현하시려면 countif를 이용하셔야 합니다.
########################################################################
################
첫번째 질문 내용
################
(a) 100개의 봉중에서,,,
(양봉 and 골든크로스)가 1개이상 존재하면 찾아라
(b) 100개의 봉중에서,,,
현재거래량이 직전거래량보다 많은것이 1개이상 존재하면 찾아라
var1 = ma(c,5);
var2 = ma(c,20);
if countif( C > O, 100) >= 1 then // A
if crossup(var1,var2) Then // B
find(1);
If countif( v>v[1], 100) >= 1 Then // C
find(1);
==================================================
질문1) if문이 실행되면서 var1과 var2 값이 계속 바뀌어야 되는데 여기선 차트의 맨 마지막 봉의 이동평균값 하나만 저장되나요? (countif문으로 제어가 안되므로)
질문2) (a)와 (b)중 한가지라도 만족하면 해당 종목이 검색되나요?
실행순서
㉠ 맨처음 var1=100, var2=120 실행
㉡ 그 다음 A 실행
질문3) 100봉전부터 99봉전, 98봉전 순서대로 100번 루트를 돌면서 양봉을 전부 찾아 놓은 후 B를 실행하나요?
아니면 양봉을 찾으면 B를 실행하고, 다시 A를 실행하다 양봉을 찾으면 B를 실행하고, A와 B를 왔다갔다하면서 처리하나요?
질문4) B에서 var1과 var2는 계속 바뀌어야 되는데, var1=100과 var2=120 값만 변하지 않고 처리가 끝날때까지 사용되나요?
㉢ C 실행
질문5) A와 B가 모두 완전히 끝난후에 C를 100번 실행하나요?
아니면 A와 C를 왔다갔다 하면서 처리하나요?
질문6) var1 = ma(c,5)부터 C까지(처음부터 끝까지) 여러번 왔다갔다 하지 않고 원샷에 끝나나요?
질문7) 이 수식을 실행하면 잘못된 결과가 나오나요?
################
첫번째 답변 내용
################
안녕하세요
예스스탁입니다.
종목검색도 차트에 적용되는 것과 마찬가지로 수식이 계산됩니다.
종목검색식은 속성화면에서 검색에 필요한 봉갯수를 따로 지정하시면
해당 봉갯수만큼 차트를 띄워놓구 적용하신 것과 같고
특별히 지정하지 않으면 종목검색시 해당 수식에 필요한 최소 봉갯수를 먼저 계산하여
검색에 필요한 봉갯수가 가령 200개로 계산되면 조회건수 200봉으로 한 차트에 적용하신 것과 같습니다
자동으로 계산되는 부분은 실제 수식에서 필요한 봉갯수보다 작게 산정될수 있으므로
되도록 직접 입력해 사용하셔야 합니다.
산정한 봉갯수에서
첫봉부터 마지막 봉쪽으로 수식을 계산하면서 오고 마지막봉에서
지정한 조건이 만족한 종목을 리스트에 보여주게 됩니다.
그러므로 각변수의 이전값이 모두 존재 하며
find함수안에 1과 같은 숫자대신에 var1[1]등오로 지정하시면
현재봉의 전봉의 값을 결과값으로 표시해 주는 것을 확인하실 수 있습니다.
작성하신 식에서 countif는 루프문(for문)을 사용한것과 같은 함수이므로
첫번째봉부터 현재봉쪽으로 오면서 매봉 봉당 100번의 루프를 돌면서
이전봉의 값을 불러와 계산하고 이평이 골든인지 확인하면서
현재봉쪽으로 진행되게 되고 최종 현재봉이 지정한 조건들에 모두 만족하면
해당 종목은 결과리스트에 표시가 됩니다.
1)
맨마지막봉만 계산이 되면 이전봉의 값이 없으므로 골든인지 데드인지 알수가 없습니다.
위 설명대로 이전봉부터 계산되서 오게 됩니다.
2)
A와 B는 아래와 같이 작성된 것과 같습니다.
countif( C > O, 100) >= 1 and crossup(var1,var2)
2개조건이 동시충족되는 종목이 검색됩니다.
작성하신 식은 A+B 또는 C가 만족한 종목을 찾는 식입니다.
3)
수식상에 계산의 순서는 항상 위부터 아래이며
중간에 상위로 돌아가지 않습니다(최근 100개봉동안 양봉갯수 구한 후 이평골드조건 계산)
var1 완료 --> var2완료 --> A완료 --> B완료 --> find --> C완료 --> find
4)
var1,var2는 위 설명과 같이 매봉 값이 변합니다.
5)
3) 내용 참고하시기 바랍니다.
6)
예 아래쪽으로는 수식계산이 진행됩니다.
7)
작성하신 수식은 최근 100개봉중 양봉이 하나이상이고 현재봉은 골든크로스인 종목을 찾는 식입니다.
해당내용이시면 수식에 잘못된 부분은 없습니다.
만약 양봉이고 골든크로스가 난봉이 최근 100개중 1개 이상이라는 조건이면
아래와 같이 수정하셔야 합니다.
var1 = ma(c,5);
var2 = ma(c,20);
if countif( C > O and crossup(var1,var2), 100) >= 1 Then
find(1);
If countif( v>v[1], 100) >= 1 Then // C
find(1);
########################################################################
행복충전
2012-03-05 15:51:33
행복충전 님에 의해 삭제된 답변입니다.