커뮤니티
부탁드립니다.
2015-07-24 07:27:12
109
글번호 88848
안녕하세요.
프로그램 초보라 몇번을 봐도 이해가 안되어서
아래코딩 설명 좀 부탁드립니다.
=================================================================
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
var : UpTL_chk(false),DnTL_chk(false);
Array:valArr[20](0),barArr[20](0),turnPntArr[20](""); ## 어디에 사용하는 변수인지??
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 19 { ## 왜 20개 이죠? 기간이 12인데?
barArr[j] = barArr[j] + 1;
}
// 고점조건 = 현재 봉의 고가가 기간최고가이면서 최고가 갱신되었을 때;
// 저점조건 = 현재 봉의 저가가 기간최저가이면서 최저가 갱신되었을 때;
// 고점,저점조건 만족시 현재 봉의 고[저]가를 변수에 저장
Condition1 = Highest(H,length) == H and lastHiVal <> H;
Condition2 = Lowest(L,length) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
// 전환점구분 null값으로 초기화;
// if 고점조건, 저점조건 동시 만족시 {
// if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점;
// else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점;
// else if 고점조건 만족하면 전환점구분 = 고점;
// else if 저점조건 만족하면 전환점구분 = 저점;
turnPntBit = "";
If Condition1 and Condition2 Then {
If turnPntArr[1] == "Hi" Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
// if 전환점구분에 값이 있을 때만 then 아래 실행, 없으면 통과
// if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then
// 배열값들을 이전값으로 Move;
If turnPntBit == "Hi" or turnPntBit == "Lo" Then {
If turnPntBit <> turnPntArr[1] Then {
for j = 18 downto 1 { ## 왜 18개 이죠?
valArr[j+1] = valArr[j]; ## 어떤값들이 들어가는지요?
barArr[j+1] = barArr[j]; ## 어떤값들이 들어가는지요?
turnPntArr[j+1] = turnPntArr[j]; ## 여기에는 어떤값이 들어가는지요?
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or ## turnPntArr[1]는 어떤 값을 의미하는지요?
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or ## 어떤값이 들어 있는지요?
(turnPntBit == "Lo" and valArr[1] > L))) Then {
// 값 배열에는 고점 또는 저점을 대입;
// 봉개수 배열에는 0값 대입;
// 전환점 배열에 전환점구분값을 대입;
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit; ## turnPntArr[1] 어떤값이 들어가 있는지 모르겠어요?
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
##turnPntArr[1][1] 랑 turnPntArr[1][0] 이 뭔지 어떤값이 들어가 있는지 모르겠어요
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
## TL 추세선 그리는 함수인데..매뉴얼을 봐도 전혀 모르겠네여요..
}
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
# 진입 체크
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
If turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Lo" Then ## turnPntArr[1][1] 와 turnPntArr[1][0] 여기에는 어떤값이 들어가 있나요?
var1 = valArr[2]; ## valArr[2] 에는 어떤값이 들어가 있나요?
if turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Hi" Then
var2 = valArr[2];
# 매수진입
IF turnPntArr[1][0] == "Hi" and C > var1 then {
buy("buy") ;
}
# 매도진입
IF turnPntArr[1][0] == "Lo" and C < var2 then {
sell("sell") ;
}
# 매수청산
IF Marketposition == 1 and turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Lo" Then {
ExitLong("BX1");
}
# 매도청산
IF Marketposition == -1 and turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Hi" Then {
ExitShort("SX1");
}
##### 당일청산 #####
if stime == 050000 or (stime > 055000 and stime[1] < 050000) then { # 포지션 청산
exitlong("BDF");
exitshort("SDF");
}
전체적으로 글로 설명해 주시기 어렵겠지만 최대한 설명 좀 부탁드립니다.
그리고 ## 문의된 곳 집중적으로 설명 부탁드립니다.
번거롭게 해드려 죄송합니다.
감사합니다.
답변 1
예스스탁 예스스탁 답변
2015-07-24 13:32:03
안녕하세요
예스스탁입니다.
수식에 모두 주석으로 설명을 붙여드리기는 어렵습니다.
몇가지만 추려서 답변을 드립니다.
1.
For j = 0 To 19 { ## 왜 20개 이죠? 기간이 12인데?
barArr[j] = barArr[j] + 1;
for j = 18 downto 1 { ## 왜 18개 이죠?
valArr[j+1] = valArr[j]; ## 어떤값들이 들어가는지요?
배열변수를 보시면 0번방에서 19번방 까지 총 20개의 방을 가지는 것으로 선언이 되어 있습니다.
즉 해당수식 작성자가 각 값을 저장하는데 총 20개 정도만 저장해서 사용하겠다는 것입니다.
length하고는 관련이 없습니다. length는 단지 최고가와 최저가를 계산할때 봉수일 뿐입니다.
아래 for문에 18이라고 되어 있지만
저장하는 내용에 보시면 valArr[j+1] = valArr[j];와 같이 +1이 되어 있습니다.
j에 18이 저장되면 valArr[19]번방에 valArr[18]방방을 가져와 저장한다는 내용입니다.
2.
해당식은 고점이나 저점이 발생하면
valArr 배열에 그 값을 저장하고
고점/저점 발생 후 봉수는 barArr배열에
고점인지 저점인지 파악하는 텍스트는 turnPntArr 배열변수에 저장합니다.
새로운 고점이나 저점이 발생하면
valArr[1]
barArr[1]
turnPntArr[1]
에 그 값을 저장하고
그 이전에 발생한 것은
기존에 valArr[1]에 저장된 값은 valArr[2]로 넘기고
기존에 valArr[2]에 저장된 값은 valArr[3]로 넘기고
기존에 valArr[3]에 저장된 값은 valArr[4]로 넘기고
...
기존에 valArr[18]에 저장된 값은 valArr[19]로 넘겨서 저정하게 됩니다.
다른 배열변수도 같습니다.
3
각 배열방에 어떤 값이 저정되는지는 가장최근에 고점이 발생했는지 저점이 발생했는지에 따라 다릅니다.
고점-저점-고점-저점순으로 반복저장이 되는데
가장 최근 저점이 발생했으면 각 배열변수[2]는 직전 고점이 발생했을때의 값이고
가장 최근 저점이 발생했으면 각 배열변수[1]은 직전 저점이 발생했을때의 값입니다.
4
추세선 함수와 관련된 내용은 하나 하나 설명드리기 어렵습니다.
새로운 고점이나 저점이 발생하면
추세선을 새로 그리는데 barArr[2]전 봉부터 barArr[1]봉전까지 그리게 됩니다.
상승 추세선이 그려지고 고가가 상승하면 해당 고가까지 추세선은 연장합니다.
하락 추세선이 그려지고 저가가 하락하면 해당 저가까지 추세선은 연장합니다.
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 부탁드립니다.
> 안녕하세요.
프로그램 초보라 몇번을 봐도 이해가 안되어서
아래코딩 설명 좀 부탁드립니다.
=================================================================
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
var : UpTL_chk(false),DnTL_chk(false);
Array:valArr[20](0),barArr[20](0),turnPntArr[20](""); ## 어디에 사용하는 변수인지??
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 19 { ## 왜 20개 이죠? 기간이 12인데?
barArr[j] = barArr[j] + 1;
}
// 고점조건 = 현재 봉의 고가가 기간최고가이면서 최고가 갱신되었을 때;
// 저점조건 = 현재 봉의 저가가 기간최저가이면서 최저가 갱신되었을 때;
// 고점,저점조건 만족시 현재 봉의 고[저]가를 변수에 저장
Condition1 = Highest(H,length) == H and lastHiVal <> H;
Condition2 = Lowest(L,length) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
// 전환점구분 null값으로 초기화;
// if 고점조건, 저점조건 동시 만족시 {
// if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점;
// else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점;
// else if 고점조건 만족하면 전환점구분 = 고점;
// else if 저점조건 만족하면 전환점구분 = 저점;
turnPntBit = "";
If Condition1 and Condition2 Then {
If turnPntArr[1] == "Hi" Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
// if 전환점구분에 값이 있을 때만 then 아래 실행, 없으면 통과
// if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then
// 배열값들을 이전값으로 Move;
If turnPntBit == "Hi" or turnPntBit == "Lo" Then {
If turnPntBit <> turnPntArr[1] Then {
for j = 18 downto 1 { ## 왜 18개 이죠?
valArr[j+1] = valArr[j]; ## 어떤값들이 들어가는지요?
barArr[j+1] = barArr[j]; ## 어떤값들이 들어가는지요?
turnPntArr[j+1] = turnPntArr[j]; ## 여기에는 어떤값이 들어가는지요?
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or ## turnPntArr[1]는 어떤 값을 의미하는지요?
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or ## 어떤값이 들어 있는지요?
(turnPntBit == "Lo" and valArr[1] > L))) Then {
// 값 배열에는 고점 또는 저점을 대입;
// 봉개수 배열에는 0값 대입;
// 전환점 배열에 전환점구분값을 대입;
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit; ## turnPntArr[1] 어떤값이 들어가 있는지 모르겠어요?
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
##turnPntArr[1][1] 랑 turnPntArr[1][0] 이 뭔지 어떤값이 들어가 있는지 모르겠어요
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
## TL 추세선 그리는 함수인데..매뉴얼을 봐도 전혀 모르겠네여요..
}
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
# 진입 체크
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
If turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Lo" Then ## turnPntArr[1][1] 와 turnPntArr[1][0] 여기에는 어떤값이 들어가 있나요?
var1 = valArr[2]; ## valArr[2] 에는 어떤값이 들어가 있나요?
if turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Hi" Then
var2 = valArr[2];
# 매수진입
IF turnPntArr[1][0] == "Hi" and C > var1 then {
buy("buy") ;
}
# 매도진입
IF turnPntArr[1][0] == "Lo" and C < var2 then {
sell("sell") ;
}
# 매수청산
IF Marketposition == 1 and turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Lo" Then {
ExitLong("BX1");
}
# 매도청산
IF Marketposition == -1 and turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Hi" Then {
ExitShort("SX1");
}
##### 당일청산 #####
if stime == 050000 or (stime > 055000 and stime[1] < 050000) then { # 포지션 청산
exitlong("BDF");
exitshort("SDF");
}
전체적으로 글로 설명해 주시기 어렵겠지만 최대한 설명 좀 부탁드립니다.
그리고 ## 문의된 곳 집중적으로 설명 부탁드립니다.
번거롭게 해드려 죄송합니다.
감사합니다.