커뮤니티

지표 시그널 재진입 제한

프로필 이미지
기사단장
2020-05-21 07:57:29
1336
글번호 139041
답변완료
안녕하세요. 항상 도와주셔서 감사드립니다. 지표가 특정기준 이하일 경우 매수하는 로직을 사용할 경우 지표가 계속해서 횡보할 경우 매수매도를 반복하는 것을 제한하기 위해, 지표가 이전에 시그널이 나온 값보다 더 작을 경우에만 추가 매수를 하는 로직을 짜고싶습니다. [예: 이격도가 95이하일 때 매수하는 조건일 경우 아래와 같이 매수합니다] 93(1차매수), 95, 94, 93, 92(2차매수;93보다 작으므로) 이격도 95 이하일때는 value1에 값을 저장한 후 value1과 최근 이격도값을 비교하여 작은경우에만 value1을 저장하였으나 매매가 작동하지 않습니다. 아래 최대한 고민해봤는데 도와주시면 감사하겠습니다. 만약 컨셉이 잘못&#46124;다면 새로 작성해주셔도 감사하겠습니다. #1분봉에서 사용하였습니다. DParity = Disparity(Period); //이격도 if Dparity <= 95 and Dparity < value1 Then { #해당봉의 이격도 값 저장 value1 = Dparity; } else { #하락이 끝나면 Value1 초기화 if Dparity > 95 Then Value1 = Dparity; } # 이격도가 95이하이면서 이전 이격도 값보다 작은 후 상승 전환하는 경우만 매수 If accumN(iff(Dparity<= 95,1,0),2)>=1 //95를 잠깐 들어갔다 crossup하는경우도 매수하기위해 and accumN(iff(Dparity<value1,1,0),2)>=1 //위와 마찬가지 사유로 accumN사용 and Dparity[1]<Dparity[0] //위조건이 있은 후 이격도가 상승전환 한 경우만 매수 Buy("상한매수",Atmarket,DEF,floor(Deposit/C)); if marketposition==1 and Dparity[1]>Dparity[0] then //이격도가 하락전환하면 바로 매도 exitlong("매도",AtMarket,DEF,"",currentcontracts/2); 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-05-21 11:24:56

안녕하세요 예스스탁입니다. if MarketPosition == 1 then { if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then value1 = DParity[BarsSinceEntry]; } 위와 같이 작성하시면 가장 최근 진입신호봉의 이격도값을 value1변수에 저장할수 있습니다. 이격도가 95이하이면서 이전 이격도 값보다 작은 후 상승 전환하는 경우만 추가매수이므로 아래와 같이 작성하시면 됩니다. input : Period(20); var : T(0),DParity(0); DParity = Disparity(Period); //이격도 #이격도 상승부터 다음 하락전까지는 1 if DParity > DParity[1] Then T = 1; #이격도 하락부터 다음 상승전까지는 -1 if DParity < DParity[1] Then T = -1; if MarketPosition == 1 then { if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then value1 = DParity[BarsSinceEntry]; if DParity <= 95 and T == 1 and T != T[1] and (value1 == 0 or (value1 > 0 and DParity < value1)) Then Buy("추가매수",Atmarket,DEF,floor(Deposit/C)); } 즐거운 하루되세요 > 기사단장 님이 쓴 글입니다. > 제목 : 지표 시그널 재진입 제한 > 안녕하세요. 항상 도와주셔서 감사드립니다. 지표가 특정기준 이하일 경우 매수하는 로직을 사용할 경우 지표가 계속해서 횡보할 경우 매수매도를 반복하는 것을 제한하기 위해, 지표가 이전에 시그널이 나온 값보다 더 작을 경우에만 추가 매수를 하는 로직을 짜고싶습니다. [예: 이격도가 95이하일 때 매수하는 조건일 경우 아래와 같이 매수합니다] 93(1차매수), 95, 94, 93, 92(2차매수;93보다 작으므로) 이격도 95 이하일때는 value1에 값을 저장한 후 value1과 최근 이격도값을 비교하여 작은경우에만 value1을 저장하였으나 매매가 작동하지 않습니다. 아래 최대한 고민해봤는데 도와주시면 감사하겠습니다. 만약 컨셉이 잘못됬다면 새로 작성해주셔도 감사하겠습니다. #1분봉에서 사용하였습니다. DParity = Disparity(Period); //이격도 if Dparity <= 95 and Dparity < value1 Then { #해당봉의 이격도 값 저장 value1 = Dparity; } else { #하락이 끝나면 Value1 초기화 if Dparity > 95 Then Value1 = Dparity; } # 이격도가 95이하이면서 이전 이격도 값보다 작은 후 상승 전환하는 경우만 매수 If accumN(iff(Dparity<= 95,1,0),2)>=1 //95를 잠깐 들어갔다 crossup하는경우도 매수하기위해 and accumN(iff(Dparity<value1,1,0),2)>=1 //위와 마찬가지 사유로 accumN사용 and Dparity[1]<Dparity[0] //위조건이 있은 후 이격도가 상승전환 한 경우만 매수 Buy("상한매수",Atmarket,DEF,floor(Deposit/C)); if marketposition==1 and Dparity[1]>Dparity[0] then //이격도가 하락전환하면 바로 매도 exitlong("매도",AtMarket,DEF,"",currentcontracts/2); 감사합니다.