커뮤니티
수식 문의 드립니다.
2011-06-13 23:27:46
709
글번호 39723
안녕하세요. 수고 많으십니다.
교육용으로 수식을 하나 구해서 공부하고 있는데 초보가 이해 하기 힘든 부분이 많아서 도움을 요청 드립니다.
수식은 첨부하였고, 수식에 주석으로 질문부분을 넣어놨습니다. 로그 찍어가면서 공부는 하고 있는데 이해가 안되는 부분이 많아서 도움을 부탁 드립니다.
감사합니다.
- 1. 40024_수식.txt (0.01 MB)
답변 1
예스스탁 예스스탁 답변
2011-06-14 14:03:21
안녕하세요
예스스탁입니다.
/******************************************************************************
Description: Multi-entry Strategy for Education.
Provided By: Lucille 2010/02/09
*******************************************************************************/
/*************************** Declaration **************************************/
Vars : tf(5), firstBar(0), dayIdx(0);
Vars : mPos(0), buyCnt(0), sellCnt(0), bseIdx(0), ehh(0), ell(0), ehc(0), elc(0);
Arrays: bSetup[10](false), sSetup[10](false), cSetup[10](false);
Arrays: trTime[10](false);
Arrays: rangeD[10](0);
Arrays: r1[2](0), r2[2](0), pp[2](0), s1[2](0), s2[2](0);
Vars : stretch(0), vma(0);
/*************************** Initialization ***********************************/
if CurrentBar<=0 || (CurrentBar>0 && Date>Date[1]) then {
firstBar = CurrentBar;
buyCnt = 0;
sellCnt = 0;
}
dayIdx = CurrentBar - firstBar;
mPos = MarketPosition(0);
if mPos==1 && mPos<>mPos[1] then
buyCnt = buyCnt + 1;
if mPos==-1 && mPos<>mPos[1] then
sellCnt = sellCnt + 1;
bseIdx = BarsSinceEntry(0);
ehh = Highest(h, bseIdx+1);
ell = Lowest(l, bseIdx+1);
ehc = Highest(c, bseIdx+1);
elc = Lowest(c, bseIdx+1);
/*질문 : 아래 for문이 의미하는것?*/
#--> 과거 1일전부터 10일전까지의 봉의 길이를 저장하는 내용입니다.
#rangeD[1] 에는 1일전 봉길이, rangeD[2]에는 2일전 봉길이 순으로 과거 10일치를 저장한 것입니다.
for value1=1 to 10 {
rangeD[value1] = DayHigh(value1)-DayLow(value1);
}
/*질문 : 아래 수식은 피봇 구하는것 같은데 기존에 알고 있는 피봇 수식과 틀린것 같습니다. 수식 설명 부탁 드립니다.*/
#일반피봇은 전일의 고저종을 평균하여 피봇을 만드는데 아래식은 종가에 가중치를 두어 고저종종의 평균값을 피봇으로 만든계산식입니다.
#지지 저항은 계산식은 동일합니다. 기준이 되는 피봇의 값이 조금 다른 식입니다.
pp[1] = (DayHigh(1)+DayLow(1)+DayClose(1)*2)/4;
r1[1] = 2*pp[1] - DayLow(1);
s1[1] = 2*pp[1] - DayHigh(1);
r2[1] = pp[1] + (r1[1] - s1[1]);
s2[1] = pp[1] - (r1[1] - s1[1]);
if DayOpen(0)>DayClose(1) then
pp[2] = (DayHigh(1)+DayClose(1)+2*DayLow(1))/2;
else
if DayOpen(0)<DayClose(1) then
pp[2] = (2*DayHigh(1)+DayClose(1)+DayLow(1))/2;
else
pp[2] = (DayHigh(1)+2*DayClose(1)+DayLow(1))/2;
r1[2] = pp[2] - DayLow(1);
s1[2] = pp[2] - DayHigh(1);
vma = Ma(c,260);
/*************************** Set-up********************************************/
/*질문 : 아래 수식이 의미하는 내용 120, 300의 숫자 의미??*/
#분단위를 뜻합니다. 120을 5(아마 차트주기일 것입니다.)로 나누면 24봉
#사용하는 차트주기에서 지정한 분단위를 봉수로 표현하는 것입니다.
trTime[1] = dayIdx<=(120/tf); #당일 봉수가 24개봉 이하
trTime[2] = dayIdx<=(300/tf); #당일 봉수가 60개봉 이하
trTime[3] = dayIdx<=(180/tf); #당일 봉수가 36개봉 이하
trTime[4] = dayIdx<=(180/tf); #당일 봉수가 36개봉 이하
trTime[5] = dayIdx<=(300/tf); #당일 봉수가 60개봉 이하
trTime[6] = dayIdx==3; #당일 3번째봉
/*질문 : 아래 수식이 의미하는 내용*/
cSetup[1] = (buyCnt+sellCnt)<2 && trTime[1]==true; #매수진입횟수+매도진입횟수가 2 미만이고 당일 봉수가 24개봉 이하
cSetup[2] = (buyCnt+sellCnt)<2 && trTime[2]==true; #매수진입횟수+매도진입횟수가 2 미만이고 당일 봉수가 60개봉 이하
cSetup[3] = (buyCnt+sellCnt)<1 && trTime[3]==true; #매수진입횟수+매도진입횟수가 1 미만이고 당일 봉수가 36개봉 이하
cSetup[4] = (buyCnt+sellCnt)<1 && trTime[4]==true; #매수진입횟수+매도진입횟수가 1 미만이고 당일 봉수가 36개봉 이하
cSetup[5] = (buyCnt+sellCnt)<1 && trTime[5]==true; #매수진입횟수+매도진입횟수가 1 미만이고 당일 봉수가 60개봉 이하
cSetup[6] = (buyCnt+sellCnt)<1 && trTime[6]==true; #매수진입횟수+매도진입횟수가 1 미만이고 당일 3번째봉
# 종가가중 피봇 : 리버스 허용
bSetup[1] = Bids>Asks*1.5 && c>r2[1];
sSetup[1] = Bids<Asks/1.5 && c<s2[1];
bSetup[2] = Bids>Asks && DayLow<s1[1] && CrossUp(c,s1[1]);
sSetup[2] = Bids<Asks && DayHigh>r1[1] && CrossDown(c,r1[1]);
# 디마크 : 리버스 불허
stretch = (DayHigh(1)-DayLow(1))/3;
bSetup[3] = c>(DayOpen + stretch) && DayOpen>r1[2];
sSetup[3] = c<(DayOpen - stretch) && DayOpen<s1[2];
bSetup[4] = DayOpen<s1[2] && c>s1[2] && DayLow>(DayOpen - stretch) && h<DayHigh;
sSetup[4] = DayOpen>r1[2] && c<r1[2] && DayHigh<(DayOpen + stretch) && l>DayLow;
# 이평 돌파
bSetup[5] = (DayOpen<vma && c>vma[1]);
sSetup[5] = (DayOpen>vma && c<vma[1]);
# 갭필
bSetup[6] = DayOpen<DayClose(1)*0.99 && Bids>Asks*1.5 && c>DayOpen;
sSetup[6] = DayOpen>DayClose(1)*1.01 && Bids<Asks/1.5 && c<DayOpen;
/*************************** Entry ********************************************/
if cSetup[1] then {
if bSetup[1] then Buy("3.2.le");
if sSetup[1] then Sell("3.2.se");
}
if cSetup[2] then {
if bSetup[2] then Buy("4.1.le");
if sSetup[2] then Sell("4.1.se");
}
if cSetup[3] then {
if bSetup[3] then Buy("3.0.le");
if sSetup[3] then Sell("3.0.se");
}
if cSetup[4] then {
if bSetup[4] then Buy("4.0.le");
if sSetup[4] then Sell("4.0.se");
}
if cSetup[5] then {
if bSetup[5] then Buy("2.0.le");
if sSetup[5] then Sell("2.0.se");
}
if cSetup[6] then {
if bSetup[6] then Buy("6.0.le");
if sSetup[6] then Sell("6.0.se");
}
/*************************** Exit ********************************************/
/*아래 수식에 대한 설명 부탁 드립니다.*/
if mPos==1 && (EntryName != "6.0.le" && EntryName != "6.0.se") then { #매수포지션 진입상태이고 진입명이 6.0.le나 6.0.se이 아니면
if c<(ehc-ATR(20)*3.5) Then ExitLong("7.0.lx1"); #종가가 진입이후 최고가-atr(20)*3.5보다 작으면 청산
if c<EntryPrice*0.99 Then ExitLong("7.0.lx2"); #종가가 진입가-1%보다 작으면 청산
if ehc>(EntryPrice+ATR(20)*4) Then #진입이후의 최고가가 진입가+ATR(20)*4보다 크면
ExitLong("7.0.lx3", AtStop, EntryPrice+ATR(20));#진입가+ATR(20)까지 시세가 떨어지면 청산
}
if mPos==-1 && (EntryName != "6.0.le" && EntryName != "6.0.se") then { #매도포지션 진입상태이고 진입명이 6.0.le나 6.0.se이 아니면
if c>(elc+ATR(20)*3.5) Then ExitShort("7.0.sx1"); #종가가 진입이후 최저가+atr(20)*3.5보다 크면 청산
if c>EntryPrice*1.01 Then ExitShort("7.0.sx2");#종가가 진입가+1%보다 크면 청산
if elc<(EntryPrice-ATR(20)*4) Then #진입이후의 최저가가 진입가-ATR(20)*4보다 작으면
ExitShort("7.0.sx3", AtStop, EntryPrice-ATR(20)); #진입가-ATR(20)까지 시세가 올라가면 청산
}
/*************************** Common trailer ***********************************/
/*아래 수식에 대한 설명 부탁 드립니다. 특히 intPortion(DayClose(1)*1.1/.05+0.00001)*.05)-.05*2) 부분 수식을 이해 못하겠습니다.*/
# (intPortion(DayClose(1)*1.1/.05+0.00001)*.05)은 선물의 상한가를 나타냅니다.
# (intPortion(DayClose(1)*1.1/.05+0.00001)*.05)-EntryPrice를 뺀값을 목표수익값으로 설정했다는 것은
# 선물이 상한가를 가면 청산하는 것인데
# 선물상한가에 -.05*2을 하면 선물상한가에서 두틱 낮은 값을 의미합니다.
# 즉 시세가 상승하여 선물 상한가 근처(두틱낮은가격)까지 올라가면 매수청산한다는 내용입니다.
# 매도는 반대입니다.
if mPos==1 then {
SetStopProfitTarget(
((intPortion(DayClose(1)*1.1/.05+0.00001)*.05)-.05*2)-EntryPrice,PointStop);
}
if mPos==-1 then {
SetStopProfitTarget(
EntryPrice-((DayClose(1)-intPortion(DayClose(1)*0.1/.05)*.05)+.05*2),PointStop);
}
SetStopEndofday();
/*************************** FIN **********************************************/
즐거운 하루되세요
> HI_YHYANG 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 안녕하세요. 수고 많으십니다.
교육용으로 수식을 하나 구해서 공부하고 있는데 초보가 이해 하기 힘든 부분이 많아서 도움을 요청 드립니다.
수식은 첨부하였고, 수식에 주석으로 질문부분을 넣어놨습니다. 로그 찍어가면서 공부는 하고 있는데 이해가 안되는 부분이 많아서 도움을 부탁 드립니다.
감사합니다.
다음글
이전글