커뮤니티
수식설명 좀 달아줄수 있으시나요?
2011-02-24 18:17:52
926
글번호 36070
안녕하세요? 바쁘실텐데.. 문의 드립니다.
이 로직은 박상우 팀장님께서 STAD클럽 로직을 예스로 변환시켜서 공개해주신
로직인데요. 하나하나 뜯어보면서 알아볼라구 하는데...
넘 막히는 점이 많아서요. 아래처럼 문장하나마다 설명을 좀 달아주실시 있나요?
공부하는데 많은 도움이 될거 같습니다. 부탁드립니다.
/*
[STAD_02] Advance Decline Divergence
1. 설정
연결선물 5분봉, 당일청산
수수료 0.006%, 슬리피지 0.025pt
2. 전략내용
//역추세 추종형
진입1
가격은 신저가 형성하고 AD지표는 신고가 형성할때 매수
가격은 신고가 형성하고 AD지표는 신저가 형성할때 매도
진입2
가격이 신저가 형성할때 AD지표가 신저가 형성이 없으면 그 시점의 고가와 인덱스를 저장한 후
두봉 이내에 해당 고가를 상향돌파하면 매수
가격이 신고가 형성할때 AD지표가 신고가 형성이 없으면 그 시점의 저가와 인덱스를 저장한 후
두봉 이내에 해당 저가를 하향이탈하면 매도
청산
진입봉 저가(고가)로부터 추적청산
3. 외부변수
Len : Accumulation Distribution 지표의 지수이평을 구하기 위한 기간 값
P : 최저가와 최고가를 구하기 위한 기간 값
Div : 저(고)가 추적청산을 위한 분할 값
Mult : 추적청산을 위한 진입시점의 저가에서 차감하기 위한 AR(averge range)이평의 승수
*/
# 외부입력변수 할당
Inputs: Len(5), P(60), DiV(25), mult(5);
#내부입력변수 할당
vars: MP(0), stopprice(0), Move(0);
If High - Low <> 0 then
Move = ema( (C - O) / (H - L) * V, len);
# 고가와 저가와 차이가 0이 아니면 즉 봉 값의 변화가 있으면, move란 수치내부변수에= 이동평균 (고가-시가) / (고가-저가) X 이동평균 X 5에 저장한다.
If Low < lowest( low, P )[1] and Move > highest( Move, P)[1] then
Buy("B2",onclose, def,1);
# 만약 저가가 바로전 봉의 P기간중의 저가중의 최저가보다 크면, AD값이 전 봉의 P기간중의 AD값중 가장 높은 값보다 더 높으면
# 종가에 매수한다.
# ? ("B2",onclose, def,1)에서 DEF,1이 의미하는 바는 무엇인가요?
If High > Highest( High, P )[1] and Move < Lowest( Move, P)[1] then
Sell("S2",onclose, def,1);
# 만약 고가가 바로전 봉의 P기간중의 고가중의 최고가보다 크면, AD값이 전 봉의 P기간중의 AD값중 가장 낮은 값보다 더 높으면
# 종가에 매도한다.
If Low < Lowest( Low , P )[1] and MRO(Move < lowest( Move , P )[1],20,1) == -1 then {
var1= h;
var2 = index;
}
# 만약 저가가 P기간중의 최저가보다 작고,
# 내부변수 VAR1에 고가를 할당하고
# 내부변수 VAR2에 인덱스에 봉의 번호를 저장한다? 무슨뜻이죠?
If High > Highest( High, P )[1] AND MRO(Move > Highest( Move, P)[1],20,1) == -1 then {
var3 = L;
var2 = index;
}
if index - var2 < 2 then {
if CrossUp(C, var1) and C > dayOpen then buy();
if CrossDown(C, var3) and C < dayOpen then sell();
}
mp = marketposition;
if MP == 1 and MP[1] <> 1 then Begin
StopPrice = low - ma(range,4)*mult;
end;
StopPrice = High + ma(range,4)*mult;
if MP == -1 and MP[1] <> -1 then begin
end;
If MP == 1 then begin
exitlong ("ExitLong", atstop,stopprice );
stopprice = stopprice +( low-stopprice )/Div;
end;
If MP == -1 then begin
exitshort ("Exitshort", atstop,stopprice);
stopprice = stopprice - (stopprice-high)/Div;
end;
setstopendofday(150400);
# 당일 15시04분에 종가청산 한다. 당일청산 원칙
답변 1
예스스탁 예스스탁 답변
2011-02-24 18:54:23
안녕하세요
예스스탁입니다.
기본적은 전략의 개념은 첨부하신 수식의 상단에 있습니다.
각 수식아래에 주석을 붙여드립니다.
# 외부입력변수 할당
Inputs: Len(5), P(60), DiV(25), mult(5);
#내부입력변수 할당
vars: MP(0), stopprice(0), Move(0);
If High - Low <> 0 then
Move = ema( (C - O) / (H - L) * V, len);
# 고가와 저가와 차이가 0이 아니면 즉 봉 값의 변화가 있으면, move란 수치내부변수에= 이동평균 (고가-시가) / (고가-저가) X 이동평균 X 5에 저장한다.
If Low < lowest( low, P )[1] and Move > highest( Move, P)[1] then
Buy("B2",onclose, def,1);
# 만약 저가가 바로전 봉의 P기간중의 저가중의 최저가보다 크면, Move값이 전 봉의 P기간중의 Move값 중 가장 높은 값보다 더 높으면
# 종가에 매수한다.
# def는 default의 약어 입니다. 신호가격을 설정하지 않는다는 의미입니다.
# 시스템은 onclose,atmarkt,atstop,atlimit 4개의 타입이 있습니다. 그중 onclose와 AtMarket은 신호가격을 입력하는 타입이 아니므로 onclose,def로 작성됩니다.
# atstop,atlimit만이 def 대신에 가격조건을 설정하셔야 합니다. buy("b",AtStop,dayopen+1,1); 시초가+1이상의 시세형성시 1계약 매수
# 자세한 내용은 랭귀지 도움말을 참고하시기 바랍니다.
If High > Highest( High, P )[1] and Move < Lowest( Move, P)[1] then
Sell("S2",onclose, def,1);
# 만약 고가가 바로전 봉의 P기간중의 고가중의 최고가보다 크면, Move값이 전 봉의 P기간중의 Move값중 가장 낮은 값보다 더 작으면
# 종가에 매도한다.
If Low < Lowest( Low , P )[1] and MRO(Move < lowest( Move , P )[1],20,1) == -1 then {
var1= h;
var2 = index;
}
#1
# 만약 저가가 전봉기준 P기간 중의 최저가보다 작고, 20개봉안에 Move값이 최저가를 기록한 적이 없다면
# 내부변수 VAR1에 고가를 할당하고
# 내부변수 VAR2에 인덱스에 봉의 번호를 저장한다
If High > Highest( High, P )[1] AND MRO(Move > Highest( Move, P)[1],20,1) == -1 then {
var3 = L;
var2 = index;
}
#2
# 만약 고가가 전봉기준 P기간 중의 최고가보다 크고, 20개봉안에 Move값이 최고가를 기록한 적이 없다면
# 내부변수 VAR1에 고가를 할당하고
# 내부변수 VAR2에 인덱스에 봉의 번호를 저장한다
if index - var2 < 2 then {
if CrossUp(C, var1) and C > dayOpen then buy();
if CrossDown(C, var3) and C < dayOpen then sell();
}
#현재봉이 #1 혹은 #2 조건만족 시점에서 2개봉이상 경과하지 않고
#종가가 var1값을 상향하고 시초가보다 크면 매수
#종가가 var2값을 하향하고 시초가보다 작으면 매도
mp = marketposition;
#mp에 marketposition(포지션의 상태값) 저장 매수 : 1, 매도 : -1, 무포지션 : 0
if MP == 1 and MP[1] <> 1 then Begin
StopPrice = low - ma(range,4)*mult;
end;
#식상 불필요한 내용입니다.
# StopPrice에 최근 4개봉의 range의 평균값에 mult값을 곱한값을 저장
stopPrice = High + ma(range,4)*mult;
if MP == -1 and MP[1] <> -1 then begin
end;
# 식상 불필요한 내용입니다.
If MP == 1 then begin
exitlong ("ExitLong", atstop,stopprice );
stopprice = stopprice +( low-stopprice )/Div;
end;
#매수포지션이면
#stopprice보다 낮은 시세시 청산
#청산조건에 맞지않으면 stopprice에 (해당봉의 저가와 stopprice의 차이)를 25로 나눈값만큼 추가
#즉 현재봉에 stopprice보나 낮은 시세가 들어오지 않으면 (해당봉의 저가와 stopprice의 차이)를 25로 나눈값만큼을
#추가하여 다음봉의 stopprice로 잡음(즉 진입이후에 봉갯수가 늘어날때마다 청산라인이 조금씩 올라가게 됨)
If MP == -1 then begin
exitshort ("Exitshort", atstop,stopprice);
stopprice = stopprice - (stopprice-high)/Div;
end;
#매도포지션이면
#stopprice보다 높은 시세시 청산
#청산조건에 맞지않으면 stopprice에 (stopprice와 해당봉의 저가 차이)를 25로 나눈값만큼 차감함.
#즉 현재봉에 stopprice보나 높은 시세가 들어오지 않으면 (stopprice와 해당봉의 저가 차이)를 25로 나눈값만큼을
#감하여 다음봉의 stopprice로 잡음(즉 진입이후에 봉갯수가 늘어날때마다 청산라인이 조금씩 내려가게 됨)
setstopendofday(150400);
# 당일 15시04분에 종가청산 한다. 당일청산 원칙
즐거운 하루되세요
> 도시군인 님이 쓴 글입니다.
> 제목 : 수식설명 좀 달아줄수 있으시나요?
> 안녕하세요? 바쁘실텐데.. 문의 드립니다.
이 로직은 박상우 팀장님께서 STAD클럽 로직을 예스로 변환시켜서 공개해주신
로직인데요. 하나하나 뜯어보면서 알아볼라구 하는데...
넘 막히는 점이 많아서요. 아래처럼 문장하나마다 설명을 좀 달아주실시 있나요?
공부하는데 많은 도움이 될거 같습니다. 부탁드립니다.
/*
[STAD_02] Advance Decline Divergence
1. 설정
연결선물 5분봉, 당일청산
수수료 0.006%, 슬리피지 0.025pt
2. 전략내용
//역추세 추종형
진입1
가격은 신저가 형성하고 AD지표는 신고가 형성할때 매수
가격은 신고가 형성하고 AD지표는 신저가 형성할때 매도
진입2
가격이 신저가 형성할때 AD지표가 신저가 형성이 없으면 그 시점의 고가와 인덱스를 저장한 후
두봉 이내에 해당 고가를 상향돌파하면 매수
가격이 신고가 형성할때 AD지표가 신고가 형성이 없으면 그 시점의 저가와 인덱스를 저장한 후
두봉 이내에 해당 저가를 하향이탈하면 매도
청산
진입봉 저가(고가)로부터 추적청산
3. 외부변수
Len : Accumulation Distribution 지표의 지수이평을 구하기 위한 기간 값
P : 최저가와 최고가를 구하기 위한 기간 값
Div : 저(고)가 추적청산을 위한 분할 값
Mult : 추적청산을 위한 진입시점의 저가에서 차감하기 위한 AR(averge range)이평의 승수
*/
# 외부입력변수 할당
Inputs: Len(5), P(60), DiV(25), mult(5);
#내부입력변수 할당
vars: MP(0), stopprice(0), Move(0);
If High - Low <> 0 then
Move = ema( (C - O) / (H - L) * V, len);
# 고가와 저가와 차이가 0이 아니면 즉 봉 값의 변화가 있으면, move란 수치내부변수에= 이동평균 (고가-시가) / (고가-저가) X 이동평균 X 5에 저장한다.
If Low < lowest( low, P )[1] and Move > highest( Move, P)[1] then
Buy("B2",onclose, def,1);
# 만약 저가가 바로전 봉의 P기간중의 저가중의 최저가보다 크면, AD값이 전 봉의 P기간중의 AD값중 가장 높은 값보다 더 높으면
# 종가에 매수한다.
# ? ("B2",onclose, def,1)에서 DEF,1이 의미하는 바는 무엇인가요?
If High > Highest( High, P )[1] and Move < Lowest( Move, P)[1] then
Sell("S2",onclose, def,1);
# 만약 고가가 바로전 봉의 P기간중의 고가중의 최고가보다 크면, AD값이 전 봉의 P기간중의 AD값중 가장 낮은 값보다 더 높으면
# 종가에 매도한다.
If Low < Lowest( Low , P )[1] and MRO(Move < lowest( Move , P )[1],20,1) == -1 then {
var1= h;
var2 = index;
}
# 만약 저가가 P기간중의 최저가보다 작고,
# 내부변수 VAR1에 고가를 할당하고
# 내부변수 VAR2에 인덱스에 봉의 번호를 저장한다? 무슨뜻이죠?
If High > Highest( High, P )[1] AND MRO(Move > Highest( Move, P)[1],20,1) == -1 then {
var3 = L;
var2 = index;
}
if index - var2 < 2 then {
if CrossUp(C, var1) and C > dayOpen then buy();
if CrossDown(C, var3) and C < dayOpen then sell();
}
mp = marketposition;
if MP == 1 and MP[1] <> 1 then Begin
StopPrice = low - ma(range,4)*mult;
end;
StopPrice = High + ma(range,4)*mult;
if MP == -1 and MP[1] <> -1 then begin
end;
If MP == 1 then begin
exitlong ("ExitLong", atstop,stopprice );
stopprice = stopprice +( low-stopprice )/Div;
end;
If MP == -1 then begin
exitshort ("Exitshort", atstop,stopprice);
stopprice = stopprice - (stopprice-high)/Div;
end;
setstopendofday(150400);
# 당일 15시04분에 종가청산 한다. 당일청산 원칙