커뮤니티

시스템식 부탁드립니다.

프로필 이미지
종풍화성
2015-11-05 15:12:18
150
글번호 92090
답변완료
안녕하세요.. 일봉참조 3분봉매매를 하다보니 장종료시간대에서는 매수,매도가 잘 이루어지지 않는 경우가 가끔 발생해서 이시간대에서는 신호(매수,매도)가 발생하지 않도록 하고 싶습니다. 다음 시스템식에서 14:42~15:03 이시간에서는 매매(매수,매도)가 이루어지지 않도록 시스템식 부탁드립니다. 항상 답변에 감사드립니다. 즐거운 하루되세요. 감사합니다. ------------------------------------------------------------------------------- input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000); input : 전략식종료일자(20151231); input : 갭하락(5), 시장보정계수(5),일봉이평기간(120),이평보정계수(5); input : P(10), 매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(100); input : 타점보유일수(5); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0),Ecnt(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntrylow(0); var : Period(0),매수1차(0); var : cum1(0),cum2(0),ma1(0),ma2(0); # 일자수 계산 if date != date[1] Then Didx = Didx+1; # 일봉 120이평 계산(전일기준,전전일기준) cum1 = 0; cum2 = 0; for cnt = 1 to 일봉이평기간{ cum1 = cum1+DayClose(cnt); cum2 = cum2+DayClose(cnt+1); } # 전일기준 일봉 120일이평 ma1 = cum1/일봉이평기간; # 전전일기준 일봉 120일이평 ma2 = cum2/일봉이평기간; #기본값은 기간은 P, %는 매수위치1차 Period = P; 매수1차 = 매수위치1차; #갭하락이면 #기간은 기존Period값+시장보정계수 #%는 기존 매수1차값에 + 시장보정계수 if dayopen < DayClose(1)*(1-갭하락/100) Then{ Period = Period + 시장보정계수; 매수1차 = 매수1차 + 시장보정계수; } #이평하락이면 #기간은 기존Period값+이평보정계수 #%는 기존 매수1차값에 + 이평보정계수 if ma1 < ma2 and DayClose(일봉이평기간+1) > 0 Then{ Period = Period + 이평보정계수; 매수1차 = 매수1차 + 이평보정계수; } #당일포함 일봉 Period개의 종가를 누적 sum = 0; for cnt = 0 to Period-1{ sum = sum+DayClose(cnt); } #누적값을 Period로 나누어 평균값 산출 mav = sum/Period; #상단계산 Eup = mav+mav*(매수1차/100); #하단계산 Edn = mav-mav*(매수1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 전략식시작시간 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; if sdate > 전략식종료일자 Then TimeCond = false; #TimeCond가 True가 된 후 if TimeCond == true then{ if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "1차매수" Then Ecnt = Ecnt+1; #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and Ecnt < 전략식진입횟수 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntrylow = L; } #1차매수 발생 후 매수위치2차에 도달하면 매수 if MaxEntries == 1 Then buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100))); #1차매수 발생 후 매수위치3차에 도달하면 매수 if MaxEntries == 2 Then buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100))); #1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true if LatestExitName(0) == "1차매도" then Xcond1 = true; #2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true if LatestExitName(0) == "2차매도" then Xcond2 = true; #Xcond1이 false일때 #진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산 if Xcond1 == false Then exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1); #Xcond2가 false일 #진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산 if Xcond2 == false Then exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100)); #최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가) if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{ #최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산 if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{ Loss = daylow(1); for cnt = 1 to 타점보유일수 { if daylow(cnt) < Loss Then Loss = daylow(cnt); } } #Loss값 이하로 가격하락하면 전량 청산 exitlong("손절",AtStop,Loss); } #최종 매수일 포함 3일경과되면 다음날 시가에 매도 if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then{ exitlong("익절2",AtMarket); } # 1차매도가 발생한 상황 # 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 # if L < LatestEntrylow and Xcond1 == false Then # LatestEntrylow = L; # if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ # exitlong("익절1",AtStop,LatestEntrylow); # } } else{ #매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } }
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2015-11-06 08:52:36

안녕하세요 예스스탁입니다. input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000); input : 전략식종료일자(20151231); input : 갭하락(5), 시장보정계수(5),일봉이평기간(120),이평보정계수(5); input : P(10), 매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(100); input : 타점보유일수(5); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0),Ecnt(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntrylow(0); var : Period(0),매수1차(0); var : cum1(0),cum2(0),ma1(0),ma2(0); # 일자수 계산 if date != date[1] Then Didx = Didx+1; # 일봉 120이평 계산(전일기준,전전일기준) cum1 = 0; cum2 = 0; for cnt = 1 to 일봉이평기간{ cum1 = cum1+DayClose(cnt); cum2 = cum2+DayClose(cnt+1); } # 전일기준 일봉 120일이평 ma1 = cum1/일봉이평기간; # 전전일기준 일봉 120일이평 ma2 = cum2/일봉이평기간; #기본값은 기간은 P, %는 매수위치1차 Period = P; 매수1차 = 매수위치1차; #갭하락이면 #기간은 기존Period값+시장보정계수 #%는 기존 매수1차값에 + 시장보정계수 if dayopen < DayClose(1)*(1-갭하락/100) Then{ Period = Period + 시장보정계수; 매수1차 = 매수1차 + 시장보정계수; } #이평하락이면 #기간은 기존Period값+이평보정계수 #%는 기존 매수1차값에 + 이평보정계수 if ma1 < ma2 and DayClose(일봉이평기간+1) > 0 Then{ Period = Period + 이평보정계수; 매수1차 = 매수1차 + 이평보정계수; } #당일포함 일봉 Period개의 종가를 누적 sum = 0; for cnt = 0 to Period-1{ sum = sum+DayClose(cnt); } #누적값을 Period로 나누어 평균값 산출 mav = sum/Period; #상단계산 Eup = mav+mav*(매수1차/100); #하단계산 Edn = mav-mav*(매수1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 전략식시작시간 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; if sdate > 전략식종료일자 Then TimeCond = false; #TimeCond가 True가 된 후 if TimeCond == true and stime < 144200 then{ if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "1차매수" Then Ecnt = Ecnt+1; #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and Ecnt < 전략식진입횟수 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntrylow = L; } #1차매수 발생 후 매수위치2차에 도달하면 매수 if MaxEntries == 1 Then buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100))); #1차매수 발생 후 매수위치3차에 도달하면 매수 if MaxEntries == 2 Then buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100))); #1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true if LatestExitName(0) == "1차매도" then Xcond1 = true; #2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true if LatestExitName(0) == "2차매도" then Xcond2 = true; #Xcond1이 false일때 #진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산 if Xcond1 == false Then exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1); #Xcond2가 false일 #진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산 if Xcond2 == false Then exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100)); #최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가) if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{ #최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산 if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{ Loss = daylow(1); for cnt = 1 to 타점보유일수 { if daylow(cnt) < Loss Then Loss = daylow(cnt); } } #Loss값 이하로 가격하락하면 전량 청산 exitlong("손절",AtStop,Loss); } #최종 매수일 포함 3일경과되면 다음날 시가에 매도 if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then{ exitlong("익절2",AtMarket); } # 1차매도가 발생한 상황 # 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 # if L < LatestEntrylow and Xcond1 == false Then # LatestEntrylow = L; # if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ # exitlong("익절1",AtStop,LatestEntrylow); # } } else{ #매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } } 즐거운 하루되세요 > 종풍화성 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 안녕하세요.. 일봉참조 3분봉매매를 하다보니 장종료시간대에서는 매수,매도가 잘 이루어지지 않는 경우가 가끔 발생해서 이시간대에서는 신호(매수,매도)가 발생하지 않도록 하고 싶습니다. 다음 시스템식에서 14:42~15:03 이시간에서는 매매(매수,매도)가 이루어지지 않도록 시스템식 부탁드립니다. 항상 답변에 감사드립니다. 즐거운 하루되세요. 감사합니다. ------------------------------------------------------------------------------- input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000); input : 전략식종료일자(20151231); input : 갭하락(5), 시장보정계수(5),일봉이평기간(120),이평보정계수(5); input : P(10), 매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(100); input : 타점보유일수(5); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0),Ecnt(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntrylow(0); var : Period(0),매수1차(0); var : cum1(0),cum2(0),ma1(0),ma2(0); # 일자수 계산 if date != date[1] Then Didx = Didx+1; # 일봉 120이평 계산(전일기준,전전일기준) cum1 = 0; cum2 = 0; for cnt = 1 to 일봉이평기간{ cum1 = cum1+DayClose(cnt); cum2 = cum2+DayClose(cnt+1); } # 전일기준 일봉 120일이평 ma1 = cum1/일봉이평기간; # 전전일기준 일봉 120일이평 ma2 = cum2/일봉이평기간; #기본값은 기간은 P, %는 매수위치1차 Period = P; 매수1차 = 매수위치1차; #갭하락이면 #기간은 기존Period값+시장보정계수 #%는 기존 매수1차값에 + 시장보정계수 if dayopen < DayClose(1)*(1-갭하락/100) Then{ Period = Period + 시장보정계수; 매수1차 = 매수1차 + 시장보정계수; } #이평하락이면 #기간은 기존Period값+이평보정계수 #%는 기존 매수1차값에 + 이평보정계수 if ma1 < ma2 and DayClose(일봉이평기간+1) > 0 Then{ Period = Period + 이평보정계수; 매수1차 = 매수1차 + 이평보정계수; } #당일포함 일봉 Period개의 종가를 누적 sum = 0; for cnt = 0 to Period-1{ sum = sum+DayClose(cnt); } #누적값을 Period로 나누어 평균값 산출 mav = sum/Period; #상단계산 Eup = mav+mav*(매수1차/100); #하단계산 Edn = mav-mav*(매수1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 전략식시작시간 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; if sdate > 전략식종료일자 Then TimeCond = false; #TimeCond가 True가 된 후 if TimeCond == true then{ if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "1차매수" Then Ecnt = Ecnt+1; #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and Ecnt < 전략식진입횟수 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntrylow = L; } #1차매수 발생 후 매수위치2차에 도달하면 매수 if MaxEntries == 1 Then buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100))); #1차매수 발생 후 매수위치3차에 도달하면 매수 if MaxEntries == 2 Then buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100))); #1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true if LatestExitName(0) == "1차매도" then Xcond1 = true; #2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true if LatestExitName(0) == "2차매도" then Xcond2 = true; #Xcond1이 false일때 #진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산 if Xcond1 == false Then exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1); #Xcond2가 false일 #진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산 if Xcond2 == false Then exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100)); #최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가) if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{ #최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산 if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{ Loss = daylow(1); for cnt = 1 to 타점보유일수 { if daylow(cnt) < Loss Then Loss = daylow(cnt); } } #Loss값 이하로 가격하락하면 전량 청산 exitlong("손절",AtStop,Loss); } #최종 매수일 포함 3일경과되면 다음날 시가에 매도 if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then{ exitlong("익절2",AtMarket); } # 1차매도가 발생한 상황 # 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 # if L < LatestEntrylow and Xcond1 == false Then # LatestEntrylow = L; # if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ # exitlong("익절1",AtStop,LatestEntrylow); # } } else{ #매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } }
프로필 이미지

종풍화성

2015-11-06 11:48:24

변경된 시스템식을 적용해 본 결과 그림2)와 같이 나오는데요.. 변경전 시스템식을 적용한 차트 그림1)과 비교했을때 동일한 신호가 나와야 하는데 다르게 나옵니다. 당초와 변경된 시스템을 적용한 차트분석 결과 각날짜별로 14:42분 이후에는 매매신호가 없으므로 없으므로 신호가 동일하게 나와야 하는데 다시한번 검토 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 시스템식 부탁드립니다. > 안녕하세요 예스스탁입니다. input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000); input : 전략식종료일자(20151231); input : 갭하락(5), 시장보정계수(5),일봉이평기간(120),이평보정계수(5); input : P(10), 매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(100); input : 타점보유일수(5); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0),Ecnt(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntrylow(0); var : Period(0),매수1차(0); var : cum1(0),cum2(0),ma1(0),ma2(0); # 일자수 계산 if date != date[1] Then Didx = Didx+1; # 일봉 120이평 계산(전일기준,전전일기준) cum1 = 0; cum2 = 0; for cnt = 1 to 일봉이평기간{ cum1 = cum1+DayClose(cnt); cum2 = cum2+DayClose(cnt+1); } # 전일기준 일봉 120일이평 ma1 = cum1/일봉이평기간; # 전전일기준 일봉 120일이평 ma2 = cum2/일봉이평기간; #기본값은 기간은 P, %는 매수위치1차 Period = P; 매수1차 = 매수위치1차; #갭하락이면 #기간은 기존Period값+시장보정계수 #%는 기존 매수1차값에 + 시장보정계수 if dayopen < DayClose(1)*(1-갭하락/100) Then{ Period = Period + 시장보정계수; 매수1차 = 매수1차 + 시장보정계수; } #이평하락이면 #기간은 기존Period값+이평보정계수 #%는 기존 매수1차값에 + 이평보정계수 if ma1 < ma2 and DayClose(일봉이평기간+1) > 0 Then{ Period = Period + 이평보정계수; 매수1차 = 매수1차 + 이평보정계수; } #당일포함 일봉 Period개의 종가를 누적 sum = 0; for cnt = 0 to Period-1{ sum = sum+DayClose(cnt); } #누적값을 Period로 나누어 평균값 산출 mav = sum/Period; #상단계산 Eup = mav+mav*(매수1차/100); #하단계산 Edn = mav-mav*(매수1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 전략식시작시간 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; if sdate > 전략식종료일자 Then TimeCond = false; #TimeCond가 True가 된 후 if TimeCond == true and stime < 144200 then{ if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "1차매수" Then Ecnt = Ecnt+1; #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and Ecnt < 전략식진입횟수 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntrylow = L; } #1차매수 발생 후 매수위치2차에 도달하면 매수 if MaxEntries == 1 Then buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100))); #1차매수 발생 후 매수위치3차에 도달하면 매수 if MaxEntries == 2 Then buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100))); #1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true if LatestExitName(0) == "1차매도" then Xcond1 = true; #2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true if LatestExitName(0) == "2차매도" then Xcond2 = true; #Xcond1이 false일때 #진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산 if Xcond1 == false Then exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1); #Xcond2가 false일 #진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산 if Xcond2 == false Then exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100)); #최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가) if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{ #최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산 if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{ Loss = daylow(1); for cnt = 1 to 타점보유일수 { if daylow(cnt) < Loss Then Loss = daylow(cnt); } } #Loss값 이하로 가격하락하면 전량 청산 exitlong("손절",AtStop,Loss); } #최종 매수일 포함 3일경과되면 다음날 시가에 매도 if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then{ exitlong("익절2",AtMarket); } # 1차매도가 발생한 상황 # 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 # if L < LatestEntrylow and Xcond1 == false Then # LatestEntrylow = L; # if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ # exitlong("익절1",AtStop,LatestEntrylow); # } } else{ #매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } } 즐거운 하루되세요 > 종풍화성 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 안녕하세요.. 일봉참조 3분봉매매를 하다보니 장종료시간대에서는 매수,매도가 잘 이루어지지 않는 경우가 가끔 발생해서 이시간대에서는 신호(매수,매도)가 발생하지 않도록 하고 싶습니다. 다음 시스템식에서 14:42~15:03 이시간에서는 매매(매수,매도)가 이루어지지 않도록 시스템식 부탁드립니다. 항상 답변에 감사드립니다. 즐거운 하루되세요. 감사합니다. ------------------------------------------------------------------------------- input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000); input : 전략식종료일자(20151231); input : 갭하락(5), 시장보정계수(5),일봉이평기간(120),이평보정계수(5); input : P(10), 매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(100); input : 타점보유일수(5); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0),Ecnt(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntrylow(0); var : Period(0),매수1차(0); var : cum1(0),cum2(0),ma1(0),ma2(0); # 일자수 계산 if date != date[1] Then Didx = Didx+1; # 일봉 120이평 계산(전일기준,전전일기준) cum1 = 0; cum2 = 0; for cnt = 1 to 일봉이평기간{ cum1 = cum1+DayClose(cnt); cum2 = cum2+DayClose(cnt+1); } # 전일기준 일봉 120일이평 ma1 = cum1/일봉이평기간; # 전전일기준 일봉 120일이평 ma2 = cum2/일봉이평기간; #기본값은 기간은 P, %는 매수위치1차 Period = P; 매수1차 = 매수위치1차; #갭하락이면 #기간은 기존Period값+시장보정계수 #%는 기존 매수1차값에 + 시장보정계수 if dayopen < DayClose(1)*(1-갭하락/100) Then{ Period = Period + 시장보정계수; 매수1차 = 매수1차 + 시장보정계수; } #이평하락이면 #기간은 기존Period값+이평보정계수 #%는 기존 매수1차값에 + 이평보정계수 if ma1 < ma2 and DayClose(일봉이평기간+1) > 0 Then{ Period = Period + 이평보정계수; 매수1차 = 매수1차 + 이평보정계수; } #당일포함 일봉 Period개의 종가를 누적 sum = 0; for cnt = 0 to Period-1{ sum = sum+DayClose(cnt); } #누적값을 Period로 나누어 평균값 산출 mav = sum/Period; #상단계산 Eup = mav+mav*(매수1차/100); #하단계산 Edn = mav-mav*(매수1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 전략식시작시간 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; if sdate > 전략식종료일자 Then TimeCond = false; #TimeCond가 True가 된 후 if TimeCond == true then{ if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "1차매수" Then Ecnt = Ecnt+1; #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and Ecnt < 전략식진입횟수 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntrylow = L; } #1차매수 발생 후 매수위치2차에 도달하면 매수 if MaxEntries == 1 Then buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100))); #1차매수 발생 후 매수위치3차에 도달하면 매수 if MaxEntries == 2 Then buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100))); #1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true if LatestExitName(0) == "1차매도" then Xcond1 = true; #2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true if LatestExitName(0) == "2차매도" then Xcond2 = true; #Xcond1이 false일때 #진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산 if Xcond1 == false Then exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1); #Xcond2가 false일 #진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산 if Xcond2 == false Then exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100)); #최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가) if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{ #최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산 if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{ Loss = daylow(1); for cnt = 1 to 타점보유일수 { if daylow(cnt) < Loss Then Loss = daylow(cnt); } } #Loss값 이하로 가격하락하면 전량 청산 exitlong("손절",AtStop,Loss); } #최종 매수일 포함 3일경과되면 다음날 시가에 매도 if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then{ exitlong("익절2",AtMarket); } # 1차매도가 발생한 상황 # 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 # if L < LatestEntrylow and Xcond1 == false Then # LatestEntrylow = L; # if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ # exitlong("익절1",AtStop,LatestEntrylow); # } } else{ #매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } }