커뮤니티

수식 수정부탁합니다

프로필 이미지
뱅어돔
2013-04-18 03:54:42
179
글번호 62193
답변완료
알려주신 수식으로 작성했는데 원하는 데로 진입이 제대로 안되고 엉망입니다. 이곳저곳에서 참고하여 작성하니 형편없습니다. 1차진입과 청산후 조건이 맞으면 재진입하고 싶습니다. 수식작성을 검토하시고 유치원생이라 생각하고 주석좀 달아주세요. 특히 청산식에 있는 ATR(20)*3 이부분 설명부탁합니다 정확한 용도를 알고 싶어요 1차진입에서 장시작후 매수와 매도조건을 비교해서 먼저 나오는 조건에 따라 진입을 하면 (예를들면 매수조건이 맞아서 매수하면 매도조건 카운트는 없어지는 건가요?) 계속 카운터가 되는 것 같아서, 제가 원하는 것은 매수나 매도 진입시점부터 다시 청산을 위한 조건을 카운트 하는 것인데.....가능한지요? 신호중에 당일오후3시 청산이 안되고 다음날 시초가에 청산되는 봉이 있는데 그건 왜그런지요? 주문이 많아서 죄송하고 감사합니다. var : cnt(0),count(0),피봇(0),저항1(0),저항2(0),지지1(0),지지2(0); 피봇=(DayHigh(1)+DayLow(1)+DayClose(1))/3;; 저항1=2*피봇-DayLow(1); 저항2=피봇+DayHigh(1)-DayLow(1); 지지1=2*피봇-DayHigh(1); 지지2=피봇-DayHigh(1)+DayLow(1); #진입횟수 - 주석부탁합니다 count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count = count+1; } if date != date[1] Then{ Condition1 = false; var1 = 0; var2 = 0; } if Condition1 == false Then{ Condition1 = true; var1 = 0; } ##1차진입 if Count ==0 then{ if Condition1 == true then{ if (C[1]<O[1] or (C==O and C>=C[1])) and (C>O and V>V[1]) Then{ var1 = var1+1; if var1 == 3 Then buy("BA"); } } if (C[1]>O[1]or (C==O and C<=C[1])) and (C<O and V>V[1]) Then{ var2 = var2+1; if var2 == 3 Then Sell("SA"); } } ## 진입청산 Var3=Highest(H,BarsSinceEntry+1); Var4=Lowest(L,BarsSinceEntry+1); If IsEntryName("BA") or IsEntryName("SA") Then { ExitLong("EL",AtStop,Var3-ATR(20)*3); ExitShort("ES",AtStop,Var4+ATR(20)*3); } # 재진입 (이식이 맞는지요?) if count ==1 then{ Condition1 = false; var1 = 0; var2 = 0;} if Condition1 == true then{ if (C[1]<O[1] or (C==O and C>=C[1])) and (C>O and V>V[1]) Then{ var1 = var1+1; if var1 == 1 and CrossUp(H,저항2) or CrossUp(C,저항1)or CrossUp(C,피봇) or CrossUp(C,지지1)or CrossUp(C,지지2) Then Buy("상B");} if (C[1]>O[1]or (C==O and C<=C[1])) and (C<O and V>V[1]) Then{ var2 = var2+1; if var2 ==1 and CrossDown(H,저항2) or CrossDown(C,저항1)or CrossDown(C,피봇) or CrossDown(C,지지1)or CrossDown(C,지지2) Then sell ("하S");} } ## 진입청산 Var3=Highest(H,BarsSinceEntry+1); Var4=Lowest(L,BarsSinceEntry+1); If IsEntryName("상B") or IsEntryName("하S") Then { ExitLong("ELP",AtStop,Var3-ATR(20)*4); ExitShort("ESP",AtStop,Var4+ATR(20)*4); } SetStopEndofday(150000);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-04-18 14:08:27

안녕하세요 예스스탁입니다. 1. 구현하고자 하는 시스템의 내용을 진입과 추가진입의 내용을 세분화해서 글로 올려주시기 바랍니다. 올려주신 식으로는 식안에 변수사용이 어떤내용인지 파악이 힘들어수정하기가 어렵습니다. 2. 아래는 당일 진입횟수를 카운트 하는 내용입니다. 최근의 11개(0~11)의 진입의 날짜(EntryDate(cnt))를 불러와서 오늘 현재의 날짜(sdate)와 비교해 같은 것이 몇개인지를 계산하는 것입니다. count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count = count+1; } 3. ## 진입청산 Var3=Highest(H,BarsSinceEntry+1); Var4=Lowest(L,BarsSinceEntry+1); If IsEntryName("상B") or IsEntryName("하S") Then { ExitLong("ELP",AtStop,Var3-ATR(20)*4); ExitShort("ESP",AtStop,Var4+ATR(20)*4); } 위식은 ATR추적청산이라는이름으로 많이 사용되는 식입니다. 매수진입 이후의 최고가에서 특정값만큼 가격이 하락하면 청산하고 매도진입 이후의 최저가에서 특정값만큼 가격이 상승하면 청산하는 식입니다. 이때 특정값의 산정을 ATR이라는 기술적지표를 이용하게 되는데 ATR은 간단히 설명하면 N개봉동안의 봉의 길이의 평균이라고 보시면 됩니다. 최근의 변동성을 나타냅니다. 즉 매수진입이후에 가격이 상승해서 진입이후의 최고가를 만들고 이후 하락하면 그 최고가에서 최근 20개봉의 평균봉길이의 3배만큼 하락하면 그 때 매수포지션을 청산한다는 식입니다. ATR값이 크면(최근 변동성이 큼) 감소폭도 크게 잡고 ATR값이 작으면(최근 변공성이 작음) 감소폭도 작게 잡아서 청산하기 위한 식입니다. (ATR의 자세한 설명은 기술적지표관련 서적등을 참고하시기 바랍니다.) 3. 15시에 당일청산이 되지 않으시면 15시 이후의 봉이 없어 다른 청산으로 청산이 된 경우일수도 있고 혹은 강제청산이 봉완성시 일경우 15시가 포함된 봉이 완성시에 주문이 나가게 되므로 다음날 시초가에 주문이 나갈수도 있습니다. 즐거운 하루되세요 > 뱅어돔 님이 쓴 글입니다. > 제목 : 수식 수정부탁합니다 > 알려주신 수식으로 작성했는데 원하는 데로 진입이 제대로 안되고 엉망입니다. 이곳저곳에서 참고하여 작성하니 형편없습니다. 1차진입과 청산후 조건이 맞으면 재진입하고 싶습니다. 수식작성을 검토하시고 유치원생이라 생각하고 주석좀 달아주세요. 특히 청산식에 있는 ATR(20)*3 이부분 설명부탁합니다 정확한 용도를 알고 싶어요 1차진입에서 장시작후 매수와 매도조건을 비교해서 먼저 나오는 조건에 따라 진입을 하면 (예를들면 매수조건이 맞아서 매수하면 매도조건 카운트는 없어지는 건가요?) 계속 카운터가 되는 것 같아서, 제가 원하는 것은 매수나 매도 진입시점부터 다시 청산을 위한 조건을 카운트 하는 것인데.....가능한지요? 신호중에 당일오후3시 청산이 안되고 다음날 시초가에 청산되는 봉이 있는데 그건 왜그런지요? 주문이 많아서 죄송하고 감사합니다. var : cnt(0),count(0),피봇(0),저항1(0),저항2(0),지지1(0),지지2(0); 피봇=(DayHigh(1)+DayLow(1)+DayClose(1))/3;; 저항1=2*피봇-DayLow(1); 저항2=피봇+DayHigh(1)-DayLow(1); 지지1=2*피봇-DayHigh(1); 지지2=피봇-DayHigh(1)+DayLow(1); #진입횟수 - 주석부탁합니다 count = 0; for cnt = 0 to 10{ if sdate == EntryDate(cnt) Then count = count+1; } if date != date[1] Then{ Condition1 = false; var1 = 0; var2 = 0; } if Condition1 == false Then{ Condition1 = true; var1 = 0; } ##1차진입 if Count ==0 then{ if Condition1 == true then{ if (C[1]<O[1] or (C==O and C>=C[1])) and (C>O and V>V[1]) Then{ var1 = var1+1; if var1 == 3 Then buy("BA"); } } if (C[1]>O[1]or (C==O and C<=C[1])) and (C<O and V>V[1]) Then{ var2 = var2+1; if var2 == 3 Then Sell("SA"); } } ## 진입청산 Var3=Highest(H,BarsSinceEntry+1); Var4=Lowest(L,BarsSinceEntry+1); If IsEntryName("BA") or IsEntryName("SA") Then { ExitLong("EL",AtStop,Var3-ATR(20)*3); ExitShort("ES",AtStop,Var4+ATR(20)*3); } # 재진입 (이식이 맞는지요?) if count ==1 then{ Condition1 = false; var1 = 0; var2 = 0;} if Condition1 == true then{ if (C[1]<O[1] or (C==O and C>=C[1])) and (C>O and V>V[1]) Then{ var1 = var1+1; if var1 == 1 and CrossUp(H,저항2) or CrossUp(C,저항1)or CrossUp(C,피봇) or CrossUp(C,지지1)or CrossUp(C,지지2) Then Buy("상B");} if (C[1]>O[1]or (C==O and C<=C[1])) and (C<O and V>V[1]) Then{ var2 = var2+1; if var2 ==1 and CrossDown(H,저항2) or CrossDown(C,저항1)or CrossDown(C,피봇) or CrossDown(C,지지1)or CrossDown(C,지지2) Then sell ("하S");} } ## 진입청산 Var3=Highest(H,BarsSinceEntry+1); Var4=Lowest(L,BarsSinceEntry+1); If IsEntryName("상B") or IsEntryName("하S") Then { ExitLong("ELP",AtStop,Var3-ATR(20)*4); ExitShort("ESP",AtStop,Var4+ATR(20)*4); } SetStopEndofday(150000);