커뮤니티
문의 드립니다.
2015-08-24 23:00:02
115
글번호 89791
항상 도움 주셔서 감사합니다.
지그재그 관하여
지난번에 문의 드려 답변 받은 내용입니다.
시스템 매수 진입 및 매도 진입 그리고 청산이 이해가 되지 않아서요.
설명 좀 부탁드립니다.
--------------------------------------------------------------
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
Array:valArr[20](0),barArr[20](0),turnPntArr[20]("");
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 19 {
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 {
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or
(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;
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
if turnPntArr[1][0] == "Lo" Then{
var1 = 1;
var2 = valArr[2];
}
Else{
var1 = -1;
var3 = valArr[2];
}
}
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
#------------------------------------------------
# 아래 진입 청산 부분이 이해가 안됩니다.
#------------------------------------------------
if MarketPosition <= 0 and H < var2 Then # 현재 H보다 전 고점이 큰 경우 매수??
# 현재 H가 전 고점보다 큰경우 매수 아닌가요?
buy("b",AtStop,var2); # var2에 들어간 값은 고점인가요?
if MarketPosition >= 0 and L > var3 Then # 현재 L보다 전 저점이 작은 경우 매도??
# 현재 L가 전 저점보다 작은경우 매도 아닌가요?
sell("s",AtStop,var3); # var3에 들어간 값은 저점인가요?
if MarketPosition == 1 and var1 == -1 and var1 != var1[1] Then
# 현재 var1 의 값과 이전 var1의 값이 다르면 매수청산?
# 그런데 var1 = -1은 무슨 의미인가요? var1 = -1이 맞나요?
exitlong("bx");
if MarketPosition == -1 and var1 == -1 and var1 != var1[1] Then
# 현재 var1 의 값과 이전 var1의 값이 다르면 매도청산?
# 그런데 var1 = -1은 무슨 의미인가요? var1 = -1이 맞나요?
ExitShort("sx");
현재 저점이면 valArr[1]에는 저점값이 저장되고 valArr[2]에는 이전(valArr[1]) 고점의 값이 이전되나요?
현재 고점이면 valArr[1]에는 고점값이 저장되고 valArr[2]에는 이전(valArr[1]) 저점의 값이 이전되나요?
답변 1
예스스탁 예스스탁 답변
2015-08-25 11:43:26
안녕하세요
예스스탁입니다.
buy와 sell에 사용된 신호타입이 Atstop입니다.
신호에 사용되는 타입은 수식을 독해하시기 전에
도움말등을 통해서 충분히 숙지를 하셔야 합니다.
onclose는 if문 만족봉의 종가에 신호를 표시하고 리포트의 가격도 해당 종가를 적어주는 타입니다.
atmarket은 if문 만족봉의 다음봉 시가에 신호를 표시하고 리포트의 가격도 다음봉 시가를 적어주는 타입니다.
atstop은
매수주문(Buy,Exitshort)의 경우 봉완성시에 atstop뒤에 적은 가격을 셋팅하고
다음봉이 해당 가격 이상의 시세가 발생하면 즉시 신호가 발생하는 타입니다.
매도주문(Sell,Exitlong)의 경우 봉완성시에 atstop뒤에 적은 가격을 셋팅하고
다음봉이 해당 가격 이하의 시세가 발생하면 즉시 신호가 발생하는 타입니다.
atlimit은 atstop과 감시하는 방향이 반대입니다.
매수주문(Buy,Exitshort)의 경우 봉완성시에 atlimit뒤에 적은 가격을 셋팅하고
다음봉이 해당 가격 이하의 시세가 발생하면 즉시 신호가 발생하는 타입니다.
매도주문(Sell,Exitlong)의 경우 봉완성시에 atlimit뒤에 적은 가격을 셋팅하고
다음봉이 해당 가격 이상의 시세가 발생하면 즉시 신호가 발생하는 타입니다.
올리신 식에서는 진입식에 atstop이 사용되었습니다.
if MarketPosition <= 0 and H < var2 Then
buy("b",AtStop,var2);
현재봉 고가가 var2(전고점)보다 작은 상태에서
다음봉 미완성시 var2(점고점)보다 크거나 같은 시세가 발생하면 매수진입한다는 식입니다.
if문으로 H < var2라는 조건을 준것은
시세가 온전히 var2아래에 있다가 상승해서 var2를 건드릴때 신호가 발생하게 하기 위함입니다.
즉 crossup을 봉미완성시에 즉시 나오게 구현한 것입니다.
매도진입쪽도 마찬가지 입니다.
if MarketPosition >= 0 and L > var3 Then
ell("s",AtStop,var3);
현재봉 저가가 var3(전저점)보다 큰 상태에서
다음봉 미완성시 var3(점저점)보다 작거나 같은 시세가 발생하면 매도진입한다는 식입니다.
마찬가지로 if문으로 L > var3이라는 조건을 준것은
시세가 온전히 var3 위에 있다가 하락해서 var3을 건드릴때 신호가 발생하게 하기 위함입니다.
crossdown을 봉미완성시에 즉시 나오게 구현한 것입니다.
수식에서 var1은 추세의 방향입니다.
if MarketPosition == 1 and var1 == -1 and var1 != var1[1] Then
exitlong("bx");
현재봉은 -1인데 현재봉값과 1봉전값이 다르다는 것은
추세의 바향이 현재봉에서 하락으로 변경된것을 의미합니다.
매수진입후에 추세가 변경이되면 첫봉에 매수포지션을 청산하라는 식입니다.
if MarketPosition == -1 and var1 == 1 and var1 != var1[1] Then
ExitShort("sx");
매수청산은 var1값이 잘못지정됐습니다.
var1 == 1입니다. 매도진입후에 추세가 상승으로 변경되면 청산하라는 내용입니다.
현재 저점이면 valArr[1]에는 저점값이 저장되고 valArr[2]에는 이전(valArr[1]) 고점의 값이 이전되나요?
현재 고점이면 valArr[1]에는 고점값이 저장되고 valArr[2]에는 이전(valArr[1]) 저점의 값이 이전되나요?
위 말씀하신 내용이 맞습니다.
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 항상 도움 주셔서 감사합니다.
지그재그 관하여
지난번에 문의 드려 답변 받은 내용입니다.
시스템 매수 진입 및 매도 진입 그리고 청산이 이해가 되지 않아서요.
설명 좀 부탁드립니다.
--------------------------------------------------------------
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
Array:valArr[20](0),barArr[20](0),turnPntArr[20]("");
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 19 {
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 {
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or
(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;
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
if turnPntArr[1][0] == "Lo" Then{
var1 = 1;
var2 = valArr[2];
}
Else{
var1 = -1;
var3 = valArr[2];
}
}
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
#------------------------------------------------
# 아래 진입 청산 부분이 이해가 안됩니다.
#------------------------------------------------
if MarketPosition <= 0 and H < var2 Then # 현재 H보다 전 고점이 큰 경우 매수??
# 현재 H가 전 고점보다 큰경우 매수 아닌가요?
buy("b",AtStop,var2); # var2에 들어간 값은 고점인가요?
if MarketPosition >= 0 and L > var3 Then # 현재 L보다 전 저점이 작은 경우 매도??
# 현재 L가 전 저점보다 작은경우 매도 아닌가요?
sell("s",AtStop,var3); # var3에 들어간 값은 저점인가요?
if MarketPosition == 1 and var1 == -1 and var1 != var1[1] Then
# 현재 var1 의 값과 이전 var1의 값이 다르면 매수청산?
# 그런데 var1 = -1은 무슨 의미인가요? var1 = -1이 맞나요?
exitlong("bx");
if MarketPosition == -1 and var1 == -1 and var1 != var1[1] Then
# 현재 var1 의 값과 이전 var1의 값이 다르면 매도청산?
# 그런데 var1 = -1은 무슨 의미인가요? var1 = -1이 맞나요?
ExitShort("sx");
현재 저점이면 valArr[1]에는 저점값이 저장되고 valArr[2]에는 이전(valArr[1]) 고점의 값이 이전되나요?
현재 고점이면 valArr[1]에는 고점값이 저장되고 valArr[2]에는 이전(valArr[1]) 저점의 값이 이전되나요?
다음글
이전글