커뮤니티

44590번글 관련 - 시스템식 수정 부탁드립니다.

프로필 이미지
종풍화성
2015-10-22 10:38:59
153
글번호 91568
답변완료

첨부 이미지

요구한 시스템식에 감사드리고 시스템식에 주석처리해 주신점 더더욱 감사드립니다. 아래와 같이 몇명 수정건과 추가사항을 검토후 시스템식 수정 부탁드립니다. 1. 진입횟수 오류에 대한 문제 - 수정건 1) 일봉과 분봉차트를 보면 4월 22일 1차매수후 1차매도가 이루어 지고 3일이상 횡보하여 1차매수당시~3일동안의 최저가를 이탈하여 29일 "익절"처리되어 매수된 물량이 모두 처리되어 "0인 상태로 여기까지 정상입니다. 2) 이후 6월 1일 1차매수가 부근에서 신호가 발생되어야 하는데 신호가 잡히질 않습니다. 3) 변수설정에서 전략식진입횟수(10)이고 피라미딩 설정에서 다른진입 신호만 허용에 체크되었습니다. 4) 검토후 수정 부탁드립니다. 2. "익절" 내용관련 설명 및 수정건 1) 44590번글 중에 익절에 대해 다음과 같은 답변을 주셨습니다. ----------------------------------------------------------------------------- "익절내용중 1차매수당시 최저점 등 매수당시 최저점이 어떤 값인지 정확치 않아 매수당시 그날의 최저가로 지정했습니다." ----------------------------------------- 2) 제가 설명이 다소 부족해서 다시 설명 드리자면 매수당시의 최저점이 매수당시 그날의 최저가가 아니라 각각의 매수후 "타점보유일수" 동안의 최저가입니다. 3) 정리하면... 각각의 매수후 1차매도만 이루어 지고 하락시 매수당시부터 보유일수 동안의 최저점을 이탈하면 익절 예: 1차매수 --> 1차매도만 발생하고 --> 하락하여 1차매수당시~보유일수 동안의 최저점을 이탈하면 익절 1차매수+2차매수 --> 1차매도만 발생하고 --> 하락하여 2차매수당시~보유일수 동안의 최저점을 이탈하면 익절 1차매수+2차매수+3차매수 --> 1차매도만 발생하고 --> 하락하여 3차매수당시~보유일수 동안의 최저점을 이탈하면 익절 3. "익절"에 대해 시스템식 추가건 44590번글의 4.손절기준의 1)항과 비슷한 개념으로... ----- 44590번글의 4.1)항은 다음과 같습니다. 참고해 주세요.. ------------------------------- ㅣ 4. 손절기준 ㅣ 1) 각각의 매수위치에서 매수후 타점보유일수 만큼 경과하면 해당보유일수 동안의 저점이탈시 손절 ㅣ 예: 1차매수시 "타점보유일수(3)" 인 경우 1차매수후 매수일 포함 3일동안 해당수익이 발생하지 못해 ㅣ 1차매도가 이루어지지 않았을 경우 3일동안의 최저점을 이탈시 손절 ㅣ 또한 같은 경우로 1차매수+2차매수가 되었을때 최종2차매수후 3일동안 1차매도가 이루어지지 않을 ㅣ 경우 최종 2차매수후 3일동안의 최저점을 이탈시 손절 ㅣ 1차매수+2차매수+3차매수가 되었을때 최종3차매수후 3일동안 1차매도도 이루어 지지않았을 경우 ㅣ 최종 3차매수후 3일동안으 최저점을 이탈시 손절 ---------------------------------------------------------------------------------------- 1) 각각의 매수위치에서 매수후 매수일 포함 타점보유일수 동안 1차매도(수익)가 발생하지 않을 경우 즉, 횡보할 경우 타점보유일수 다음날 시가에 익절 2) 예 : 1차매수후 "타점보유일수(3)" 동안 "1차매도"가 발생하지 않을 경우 타점보유일수+1일의 시가에 매도 1차매수+2차매수후 "타점보유일수" 동안 "1차매도"가 발생하지 않을 경우 다음날 시가에 매도 1차매수+2차매수+3차매수후 "타점보유일수"동안 "1차매도"가 발생하지 않을 경우 다음날 시가에 매도 3) 매도가 된 경우 차트에 "익절"로 표시 부탁드립니다. 4. 진입시간 오류에 관한 수정건 그림4)와 같이 진입시간을 10:00로 설정했는데 3분봉 두번째 봉에서 신호가 잡히네요.. 이것도 검토후 수정 부탁드립니다. 즐거운 하루되세요. 이전의 시스템식은 다음과 같습니다. -------------------------------------------------------------------------------------- input : 전략식시작일자(20150422), 전략식시작시간(090000), 전략총매수금액(2000); # 금액은 만원단위 input : P(10),매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(10); input : 타점보유일수(3); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntryDlow(0); #일자수 계산 if date != date[1] Then Didx = Didx+1; #당일포함 일봉 P개의 종가를 누적 sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } #누적값을 P로 나누어 평균값 산출 mav = sum/P; #상단 Eup = mav+mav*(매수위치1차/100); #하단 Edn = mav-mav*(매수위치1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 090000 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; #TimeCond가 True가 된 후 if TimeCond == true then{ #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and TotalTrades == 0 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntryDlow = daylow; } #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); } #1차매도가 발생한 상황 #가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ exitlong("익절",AtStop,LatestEntryDlow); } } else{#매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } } -----------------------------------------------------------------------------------------
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-10-23 09:45:35

안녕하세요 예스스탁입니다. 1차매수가 지정한 값 이하이면 무조건 신호가 발생합니다. 청산후 다음봉의 시세가 1차매수가격이하이면 신호가 발생할수 있습니다. input : 전략식시작일자(20150422), 전략식시작시간(090000), 전략총매수금액(2000); # 금액은 만원단위 input : P(10),매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(10); input : 타점보유일수(3); 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); #일자수 계산 if date != date[1] Then Didx = Didx+1; #당일포함 일봉 P개의 종가를 누적 sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } #누적값을 P로 나누어 평균값 산출 mav = sum/P; #상단 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; #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; } } 즐거운 하루되세요 > 종풍화성 님이 쓴 글입니다. > 제목 : 44590번글 관련 - 시스템식 수정 부탁드립니다. > 요구한 시스템식에 감사드리고 시스템식에 주석처리해 주신점 더더욱 감사드립니다. 아래와 같이 몇명 수정건과 추가사항을 검토후 시스템식 수정 부탁드립니다. 1. 진입횟수 오류에 대한 문제 - 수정건 1) 일봉과 분봉차트를 보면 4월 22일 1차매수후 1차매도가 이루어 지고 3일이상 횡보하여 1차매수당시~3일동안의 최저가를 이탈하여 29일 "익절"처리되어 매수된 물량이 모두 처리되어 "0인 상태로 여기까지 정상입니다. 2) 이후 6월 1일 1차매수가 부근에서 신호가 발생되어야 하는데 신호가 잡히질 않습니다. 3) 변수설정에서 전략식진입횟수(10)이고 피라미딩 설정에서 다른진입 신호만 허용에 체크되었습니다. 4) 검토후 수정 부탁드립니다. 2. "익절" 내용관련 설명 및 수정건 1) 44590번글 중에 익절에 대해 다음과 같은 답변을 주셨습니다. ----------------------------------------------------------------------------- "익절내용중 1차매수당시 최저점 등 매수당시 최저점이 어떤 값인지 정확치 않아 매수당시 그날의 최저가로 지정했습니다." ----------------------------------------- 2) 제가 설명이 다소 부족해서 다시 설명 드리자면 매수당시의 최저점이 매수당시 그날의 최저가가 아니라 각각의 매수후 "타점보유일수" 동안의 최저가입니다. 3) 정리하면... 각각의 매수후 1차매도만 이루어 지고 하락시 매수당시부터 보유일수 동안의 최저점을 이탈하면 익절 예: 1차매수 --> 1차매도만 발생하고 --> 하락하여 1차매수당시~보유일수 동안의 최저점을 이탈하면 익절 1차매수+2차매수 --> 1차매도만 발생하고 --> 하락하여 2차매수당시~보유일수 동안의 최저점을 이탈하면 익절 1차매수+2차매수+3차매수 --> 1차매도만 발생하고 --> 하락하여 3차매수당시~보유일수 동안의 최저점을 이탈하면 익절 3. "익절"에 대해 시스템식 추가건 44590번글의 4.손절기준의 1)항과 비슷한 개념으로... ----- 44590번글의 4.1)항은 다음과 같습니다. 참고해 주세요.. ------------------------------- ㅣ 4. 손절기준 ㅣ 1) 각각의 매수위치에서 매수후 타점보유일수 만큼 경과하면 해당보유일수 동안의 저점이탈시 손절 ㅣ 예: 1차매수시 "타점보유일수(3)" 인 경우 1차매수후 매수일 포함 3일동안 해당수익이 발생하지 못해 ㅣ 1차매도가 이루어지지 않았을 경우 3일동안의 최저점을 이탈시 손절 ㅣ 또한 같은 경우로 1차매수+2차매수가 되었을때 최종2차매수후 3일동안 1차매도가 이루어지지 않을 ㅣ 경우 최종 2차매수후 3일동안의 최저점을 이탈시 손절 ㅣ 1차매수+2차매수+3차매수가 되었을때 최종3차매수후 3일동안 1차매도도 이루어 지지않았을 경우 ㅣ 최종 3차매수후 3일동안으 최저점을 이탈시 손절 ---------------------------------------------------------------------------------------- 1) 각각의 매수위치에서 매수후 매수일 포함 타점보유일수 동안 1차매도(수익)가 발생하지 않을 경우 즉, 횡보할 경우 타점보유일수 다음날 시가에 익절 2) 예 : 1차매수후 "타점보유일수(3)" 동안 "1차매도"가 발생하지 않을 경우 타점보유일수+1일의 시가에 매도 1차매수+2차매수후 "타점보유일수" 동안 "1차매도"가 발생하지 않을 경우 다음날 시가에 매도 1차매수+2차매수+3차매수후 "타점보유일수"동안 "1차매도"가 발생하지 않을 경우 다음날 시가에 매도 3) 매도가 된 경우 차트에 "익절"로 표시 부탁드립니다. 4. 진입시간 오류에 관한 수정건 그림4)와 같이 진입시간을 10:00로 설정했는데 3분봉 두번째 봉에서 신호가 잡히네요.. 이것도 검토후 수정 부탁드립니다. 즐거운 하루되세요. 이전의 시스템식은 다음과 같습니다. -------------------------------------------------------------------------------------- input : 전략식시작일자(20150422), 전략식시작시간(090000), 전략총매수금액(2000); # 금액은 만원단위 input : P(10),매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(10); input : 타점보유일수(3); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntryDlow(0); #일자수 계산 if date != date[1] Then Didx = Didx+1; #당일포함 일봉 P개의 종가를 누적 sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } #누적값을 P로 나누어 평균값 산출 mav = sum/P; #상단 Eup = mav+mav*(매수위치1차/100); #하단 Edn = mav-mav*(매수위치1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 090000 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; #TimeCond가 True가 된 후 if TimeCond == true then{ #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and TotalTrades == 0 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntryDlow = daylow; } #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); } #1차매도가 발생한 상황 #가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ exitlong("익절",AtStop,LatestEntryDlow); } } else{#매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } } -----------------------------------------------------------------------------------------