커뮤니티

신호타입

프로필 이미지
목포댁
2022-10-18 14:07:53
1284
글번호 163074
답변완료
안녕하십니까 !! 갑자기 추위가 왔네요 감기 조심하세요^^ 항상 도움 주심에 감사합니다. 아래 항목에 의문이 있어 질의 드립니다. 기준: 일봉 주식 질의 1번. 신호타입 OnClose로 예비진입신호가 발생한 수식을 AtStop으로 바꾸었는데, 수식변환이 잘 못 된 것인지 익일 신호로 나오고 있습니다. 또한, 두 개의 신호타입 별로 전체 거래 횟수도 조금 틀리게 나옵니다. 무엇이 잘 못 된 것인지요? 질의 2번. 신호타입 OnClose로 진입시 익일시초가 수신시 시스템 성능보고서에 예비신호가 발생한 날의 종가로 진입하게 되어 있는데, 이것을 익일시초가로 바꿀 수 있는지요? 3번 . 시간이 되면 원격접속을 부탁 드립니다. 바쁘시면 QnA 게시글로 알려주십시요. ### 질의 시스템 수식 # 시스템명 : HA_Trade #------------<백테스팅 시뮬레이션 최적화변수>---------------------# input : 시스템실행구분(0) ; # 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:자동주문, 3:필터링, 4:전진분석) input : 분할화면번호(0) ; # 전략실행차트(가로5, 세로6)의 분할화면번호 #input : 최적화_진입청산구분(4) ; # 최적화_진입/청산구분 , <0:최적화없음>, <진입:4 청산:8>, <진입(필터채택시):5 청산(필터채택시):9> var : 백테스팅기간조건(False), 전진분석기간조건(False), Print기간조건(False), 기간평가일(20081230), 숫자증가(0) ; #기간평가일(20081230)20220929 var : 최적화_진입청산구분(4) ; # 최적화_진입/청산구분 , <0:최적화없음>, <진입:4 청산:8>, <진입(필터채택시):5 청산(필터채택시):9> #======================================================# # 초기화 처리 #---------------전체기간 조건처리----------------------------# 백테스팅기간조건 = 시스템실행구분 == 0 and ( 20030101 <= bDate and bDate <= 20081231 ) ; // 최적화, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석) #백테스팅기간조건 = 시스템실행구분 == 0 and ( 20000101 <= bDate and bDate <= 20220926 ) ; // 최적화, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석) 전진분석기간조건 = 시스템실행구분 == 4 and ( 20000101 <= bDate and bDate <= 20220429 ) ; // 전진분석, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석) If 전진분석기간조건 == True Then 백테스팅기간조건 = False ; If 백테스팅기간조건 == True Then 전진분석기간조건 = False ; Print기간조건 = 백테스팅기간조건 == True or 전진분석기간조건 == True or 시스템실행구분 == 1 or 시스템실행구분 == 2 or 시스템실행구분 == 3; #======================================================# Vars: ha_몸통비율(0), ha_몸통비율_진입(0), ha_몸통비율_청산(0) ; # 20221008 추가 #======================================================# # 출처 : HA_지표_Total.yin #======================================================# # Heikin Ashi Candle 계산식 # input : P0(7) ; var : P0(7) ; Vars: ha_O(0), ha_C(0), ha_H(0), ha_L(0) ; Vars: ha_MAv(0), ha_MAv기울기(0) ; #------------------------------------------------------# ha_O = (ha_O[1] + ha_C[1]) / 2 ; # 시가 = (이전 막대의 시가+이전막대의 종가)/2, 직전HA의 몸통 중간값(절반) If Index == 0 then ha_O = O ; ha_C = (O+H+L+C)/4 ; # 종가 = 캔들의 4median ha_H = MaxList(H, ha_O, ha_C) ; ha_L = MinList(L, ha_O, ha_C) ; ha_MAv = EMA(ha_C, P0) ; ha_MAv기울기 = (ha_MAv[0] - ha_MAv[1]) / ha_MAv[1] ; #======================================================# #======================================================# # HA Candle 머리길이, 꼬리길이, 몸통길이, 전체길이, 매수/도세힘 계산 Vars: ha_전체길이(0), ha_몸통길이(0), ha_머리길이(0), ha_꼬리길이(0) ; # 머리길이, 꼬리길이, 몸통길이, 전체길이 계산 Vars: ha_매수세힘(0), ha_매도세힘(0) ; #미사용변수 Vars: MA_ha전체(0), MA_ha몸통(0), MA_ha머리(0), MA_ha꼬리(0) ; #------------------------------------------------------# ha_전체길이 = ha_H - ha_L ; ha_몸통길이 = MaxList(ha_O, ha_C) - MinList(ha_O, ha_C) ; ha_머리길이 = ha_H - MaxList(ha_O, ha_C) ; ha_꼬리길이 = MinList(ha_O, ha_C) - ha_L ; If ha_O < ha_C Then ha_매수세힘 = ha_H - ha_O ; #미사용변수 If ha_O >= ha_C Then ha_매도세힘 = ha_O - ha_L ; #미사용변수 MA_ha전체 = Ma(ha_전체길이, P0) ; MA_ha몸통 = Ma(ha_몸통길이, P0) ; MA_ha머리 = Ma(ha_머리길이, P0) ; MA_ha꼬리 = Ma(ha_꼬리길이, P0) ; #======================================================# #======================================================# # Four 파라볼릭(주가:Sar,CSar , HA:ha_Sar,ha_CSar)의 구간을 비교하여 같으면 동일 색표시, 틀리면 Yellow #Input : af(0.02), maxAF(0.2); var : af(0.02), maxAF(0.2); Var : SarV(0), CSarV(0), ha_SarV(0), ha_CSarV(0) ; Var : PSar_상승cc(False), PSar_하락cc(False), PSar_횡보cc(False); #------------------------------------------------------# SarV = Sar(af,maxAF); # 주가 High Low Parabolic (S)top (A)nd (R)eversal CSarV = CSar(af,maxAF); # 주가 Close Parabolic (S)top (A)nd (R)eversal ha_SarV = ha_Sar(af,maxAF,ha_O,ha_C,ha_H,ha_L); # HA High Low Parabolic (S)top (A)nd (R)eversal ha_CSarV = ha_CSar(af,maxAF,ha_O,ha_C,ha_H,ha_L); # HA Close Parabolic (S)top (A)nd (R)eversal #나중에 4개 개별조합을 생각해야한다. PSar_상승cc = SarV < C and CSarV < C and ha_SarV < ha_C and ha_CSarV < ha_C ; # 상승추세, Red PSar_하락cc = SarV > C and CSarV > C and ha_SarV > ha_C and ha_CSarV > ha_C ; # 하락추세, Blue PSar_횡보cc = PSar_상승cc == False and PSar_하락cc == False ; # 횡보추세, Yellow #======================================================# #======================================================# # 진입/청산 var : 청산조건(False) , 진입조건(False); var : 추세점수(0) ; Array : FL[1024](False) ; # 필터조건변수, [0]번은 버리고, [1]번부터 [10]번까지 사용 2^10 = 1024 #------------------------------------------------------# # 필터 등록 #필터사용 전략식명: HA_지표_Total.yin #------------------------------------------------------# # 필터 케이스 FL[001] = ha_몸통비율 > 0 ; FL[008] = PSar_상승cc == True ; if MA_ha몸통 < ha_몸통길이 and MA_ha전체 < ha_전체길이 then { if ha_O[0] < ha_C[0] Then ha_몸통비율 = ha_몸통길이 / ha_전체길이 ; # HA양봉 if ha_O[0] > ha_C[0] Then ha_몸통비율 = (ha_몸통길이 / ha_전체길이) * -1 ; # HA음봉 } #------------------------------------------------------# # 진입 신호타입 : (0)OnClose / (1)AtStop input :신호타입(0); #------------------------------------------------------# # OnClose if 신호타입 == 0 Then { 진입조건 = FL[001] == true and FL[008] == true and 0.33 < ha_몸통비율 ; if 진입조건 == True and Print기간조건 == True and MarketPosition == 0 Then { buy("on49") ; # 속성창 비용/수량탭의 고정자산으로 사전입력 관리 } } #------------------------------------------------------# # AtStop var : imsi(0); if 신호타입 == 1 Then { 진입조건 = FL[001] == true and FL[008] == true ; if 0.33 < ha_몸통비율 Then imsi = C; Else imsi = 0; if 진입조건 == True and Print기간조건 == True and MarketPosition == 0 Then { buy("at49", AtStop, imsi) ; } } #------------------------------------------------------# # 청산 #------------------------------------------------------# If marketposition == 1 Then { ExitLong("XL",AtStop,Highest(H,BarsSinceEntry+1)-ATR(14)*2.5); SetStopLoss(5,PercentStop); } If MarketPosition == 0 Then { #무포 손절 Clear SetStopLoss(0, PercentStop); } #======================================================#
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-10-18 16:48:07

> 목포댁 님이 쓴 글입니다. > 제목 : 신호타입 > 안녕하십니까 !! 갑자기 추위가 왔네요 감기 조심하세요^^ 항상 도움 주심에 감사합니다. 아래 항목에 의문이 있어 질의 드립니다. 기준: 일봉 주식 질의 1번. 신호타입 OnClose로 예비진입신호가 발생한 수식을 AtStop으로 바꾸었는데, 수식변환이 잘 못 된 것인지 익일 신호로 나오고 있습니다. 또한, 두 개의 신호타입 별로 전체 거래 횟수도 조금 틀리게 나옵니다. 무엇이 잘 못 된 것인지요? 질의 2번. 신호타입 OnClose로 진입시 익일시초가 수신시 시스템 성능보고서에 예비신호가 발생한 날의 종가로 진입하게 되어 있는데, 이것을 익일시초가로 바꿀 수 있는지요? 3번 . 시간이 되면 원격접속을 부탁 드립니다. 바쁘시면 QnA 게시글로 알려주십시요. ### 질의 시스템 수식 # 시스템명 : HA_Trade #------------<백테스팅 시뮬레이션 최적화변수>---------------------# input : 시스템실행구분(0) ; # 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:자동주문, 3:필터링, 4:전진분석) input : 분할화면번호(0) ; # 전략실행차트(가로5, 세로6)의 분할화면번호 #input : 최적화_진입청산구분(4) ; # 최적화_진입/청산구분 , <0:최적화없음>, <진입:4 청산:8>, <진입(필터채택시):5 청산(필터채택시):9> var : 백테스팅기간조건(False), 전진분석기간조건(False), Print기간조건(False), 기간평가일(20081230), 숫자증가(0) ; #기간평가일(20081230)20220929 var : 최적화_진입청산구분(4) ; # 최적화_진입/청산구분 , <0:최적화없음>, <진입:4 청산:8>, <진입(필터채택시):5 청산(필터채택시):9> #======================================================# # 초기화 처리 #---------------전체기간 조건처리----------------------------# 백테스팅기간조건 = 시스템실행구분 == 0 and ( 20030101 <= bDate and bDate <= 20081231 ) ; // 최적화, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석) #백테스팅기간조건 = 시스템실행구분 == 0 and ( 20000101 <= bDate and bDate <= 20220926 ) ; // 최적화, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석) 전진분석기간조건 = 시스템실행구분 == 4 and ( 20000101 <= bDate and bDate <= 20220429 ) ; // 전진분석, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석) If 전진분석기간조건 == True Then 백테스팅기간조건 = False ; If 백테스팅기간조건 == True Then 전진분석기간조건 = False ; Print기간조건 = 백테스팅기간조건 == True or 전진분석기간조건 == True or 시스템실행구분 == 1 or 시스템실행구분 == 2 or 시스템실행구분 == 3; #======================================================# Vars: ha_몸통비율(0), ha_몸통비율_진입(0), ha_몸통비율_청산(0) ; # 20221008 추가 #======================================================# # 출처 : HA_지표_Total.yin #======================================================# # Heikin Ashi Candle 계산식 # input : P0(7) ; var : P0(7) ; Vars: ha_O(0), ha_C(0), ha_H(0), ha_L(0) ; Vars: ha_MAv(0), ha_MAv기울기(0) ; #------------------------------------------------------# ha_O = (ha_O[1] + ha_C[1]) / 2 ; # 시가 = (이전 막대의 시가+이전막대의 종가)/2, 직전HA의 몸통 중간값(절반) If Index == 0 then ha_O = O ; ha_C = (O+H+L+C)/4 ; # 종가 = 캔들의 4median ha_H = MaxList(H, ha_O, ha_C) ; ha_L = MinList(L, ha_O, ha_C) ; ha_MAv = EMA(ha_C, P0) ; ha_MAv기울기 = (ha_MAv[0] - ha_MAv[1]) / ha_MAv[1] ; #======================================================# #======================================================# # HA Candle 머리길이, 꼬리길이, 몸통길이, 전체길이, 매수/도세힘 계산 Vars: ha_전체길이(0), ha_몸통길이(0), ha_머리길이(0), ha_꼬리길이(0) ; # 머리길이, 꼬리길이, 몸통길이, 전체길이 계산 Vars: ha_매수세힘(0), ha_매도세힘(0) ; #미사용변수 Vars: MA_ha전체(0), MA_ha몸통(0), MA_ha머리(0), MA_ha꼬리(0) ; #------------------------------------------------------# ha_전체길이 = ha_H - ha_L ; ha_몸통길이 = MaxList(ha_O, ha_C) - MinList(ha_O, ha_C) ; ha_머리길이 = ha_H - MaxList(ha_O, ha_C) ; ha_꼬리길이 = MinList(ha_O, ha_C) - ha_L ; If ha_O < ha_C Then ha_매수세힘 = ha_H - ha_O ; #미사용변수 If ha_O >= ha_C Then ha_매도세힘 = ha_O - ha_L ; #미사용변수 MA_ha전체 = Ma(ha_전체길이, P0) ; MA_ha몸통 = Ma(ha_몸통길이, P0) ; MA_ha머리 = Ma(ha_머리길이, P0) ; MA_ha꼬리 = Ma(ha_꼬리길이, P0) ; #======================================================# #======================================================# # Four 파라볼릭(주가:Sar,CSar , HA:ha_Sar,ha_CSar)의 구간을 비교하여 같으면 동일 색표시, 틀리면 Yellow #Input : af(0.02), maxAF(0.2); var : af(0.02), maxAF(0.2); Var : SarV(0), CSarV(0), ha_SarV(0), ha_CSarV(0) ; Var : PSar_상승cc(False), PSar_하락cc(False), PSar_횡보cc(False); #------------------------------------------------------# SarV = Sar(af,maxAF); # 주가 High Low Parabolic (S)top (A)nd (R)eversal CSarV = CSar(af,maxAF); # 주가 Close Parabolic (S)top (A)nd (R)eversal ha_SarV = ha_Sar(af,maxAF,ha_O,ha_C,ha_H,ha_L); # HA High Low Parabolic (S)top (A)nd (R)eversal ha_CSarV = ha_CSar(af,maxAF,ha_O,ha_C,ha_H,ha_L); # HA Close Parabolic (S)top (A)nd (R)eversal #나중에 4개 개별조합을 생각해야한다. PSar_상승cc = SarV < C and CSarV < C and ha_SarV < ha_C and ha_CSarV < ha_C ; # 상승추세, Red PSar_하락cc = SarV > C and CSarV > C and ha_SarV > ha_C and ha_CSarV > ha_C ; # 하락추세, Blue PSar_횡보cc = PSar_상승cc == False and PSar_하락cc == False ; # 횡보추세, Yellow #======================================================# #======================================================# # 진입/청산 var : 청산조건(False) , 진입조건(False); var : 추세점수(0) ; Array : FL[1024](False) ; # 필터조건변수, [0]번은 버리고, [1]번부터 [10]번까지 사용 2^10 = 1024 #------------------------------------------------------# # 필터 등록 #필터사용 전략식명: HA_지표_Total.yin #------------------------------------------------------# # 필터 케이스 FL[001] = ha_몸통비율 > 0 ; FL[008] = PSar_상승cc == True ; if MA_ha몸통 < ha_몸통길이 and MA_ha전체 < ha_전체길이 then { if ha_O[0] < ha_C[0] Then ha_몸통비율 = ha_몸통길이 / ha_전체길이 ; # HA양봉 if ha_O[0] > ha_C[0] Then ha_몸통비율 = (ha_몸통길이 / ha_전체길이) * -1 ; # HA음봉 } #------------------------------------------------------# # 진입 신호타입 : (0)OnClose / (1)AtStop input :신호타입(0); #------------------------------------------------------# # OnClose if 신호타입 == 0 Then { 진입조건 = FL[001] == true and FL[008] == true and 0.33 < ha_몸통비율 ; if 진입조건 == True and Print기간조건 == True and MarketPosition == 0 Then { buy("on49") ; # 속성창 비용/수량탭의 고정자산으로 사전입력 관리 } } #------------------------------------------------------# # AtStop var : imsi(0); if 신호타입 == 1 Then { 진입조건 = FL[001] == true and FL[008] == true ; if 0.33 < ha_몸통비율 Then imsi = C; Else imsi = 0; if 진입조건 == True and Print기간조건 == True and MarketPosition == 0 Then { buy("at49", AtStop, imsi) ; } } #------------------------------------------------------# # 청산 #------------------------------------------------------# If marketposition == 1 Then { ExitLong("XL",AtStop,Highest(H,BarsSinceEntry+1)-ATR(14)*2.5); SetStopLoss(5,PercentStop); } If MarketPosition == 0 Then { #무포 손절 Clear SetStopLoss(0, PercentStop); } #======================================================#