(포트폴리오)세트단위 손절율에 도달하면 종목 골라서 손절하는 예제
시스템 트레이딩에서 가장 어려운 것중의 하나가 손절인것 같습니다. 개별 종목별로 손절을 설정하면 생각보다 많은 종목이 손절됩니다. 그리고 손절되면 여지없이 반등하는것을 보게 되는데.. 그럴때마다 손절방법이 잘못된건가 하는 생각이 드는데요...
아래 예제는 세트단위로 손절을 하는 방법이 들어 있습니다. 세트단위로 묶어서 -5% 이하로 손익율이 떨어지게 되면 손절할 종목을 골라서 손절하는 방법입니다.
//------------------------------------------------------------------------------------------------
var 현재시간 = DateTime.Now.TimeOfDay;
var 매수시간_장중 = 현재시간 >= TimeSpan.Parse("09:10:00") && 현재시간 <= TimeSpan.Parse("15:10:00");
var 매수시간_장마감 = 현재시간 > TimeSpan.Parse("15:21:00");
var 매도시간_장마감 = 현재시간 > TimeSpan.Parse("15:10:00");
var 매도시간_장중 = 현재시간 >= TimeSpan.Parse("09:10:00") && 현재시간 <= TimeSpan.Parse("15:20:00");
if(매수시간_장중)
{
// 매수조건
//10분봉
//10분봉기준 이동평균20선 상승 추세 유지일때 매수
var 이동평균상승추세 = N분봉_0봉전.MA_장기 > N분봉_1봉전.MA_장기 && N분봉_1봉전.MA_장기 >= N분봉_2봉전.MA_장기;
// 10분봉기준, 종가가 5이평 위에 위치.
var 단기이평돌파 = N분봉_0봉전.종가 > N분봉_0봉전.MA_단기;
var 저점상승 = 단분봉_0봉전.저가 > 단분봉_1봉전.저가 && 단분봉_1봉전.저가 > 단분봉_2봉전.저가;
if (이동평균상승추세 && 단기이평돌파 && 저점상승)
Post(매수, 100, 0, 유지:20, 재주문:0, 메시지:"20이평상승 중 종가 5이평 위에 위치");
}
if (매수시간_장마감)
{
// 조건식편입상태로 오래있던 종목 우선순위로 매수
var 매수대상종목 = 탐색종목리스트.Where(w=>w.매수상태 == "탐색" && w.세트번호 == 탐색종목.세트번호 && w.등락율 >= 1.0 && w.등락율 < 15.0 && w.누적거래량 > 50000).OrderByDescending(w=>w.차트_1분.Count(z=>z.조건식편입)).FirstOrDefault();
if (매수대상종목 != null)
if (탐색종목.종목코드 == 매수대상종목.종목코드)
Post(매수,100,100, 메시지:"종가매수");
}
if (매도시간_장마감)
{
if(탐색종목.세트.수익률 < -5.0)
{
var 손절종목 = 탐색종목리스트.Where(w=>w.세트번호 == 탐색종목.세트번호 && w.검증모드 == 탐색종목.검증모드).MinBy(w=>w.평가손익율).FirstOrDefault();
if (손절종목 != null)
if (일봉_0봉전.DIPlus < 일봉_0봉전.DIMinus && 일봉_0봉전.ADX >= 20)
Post(매도,100, 0, 유지:20, 메시지:"DI+, DI- 하향돌파");
}
if (탐색종목.평가손익율 > 1.0)
Post(매도,100,100,메시지:"1% 익절"+탐색종목.종목명);
}
// 고점대비 2% 하락시 매도
if (탐색종목.평가손익율 > 2.0)
if (탐색종목.최고평가손익율 - 탐색종목.평가손익율 > 2.0)
Post(매도,100, -1, 유지:20, 재주문:0, 메시지:"최고손익율 대비 -2% 하락 매도"+탐색종목.종목명);
아래 예제는 세트단위로 손절을 하는 방법이 들어 있습니다. 세트단위로 묶어서 -5% 이하로 손익율이 떨어지게 되면 손절할 종목을 골라서 손절하는 방법입니다.
//------------------------------------------------------------------------------------------------
var 현재시간 = DateTime.Now.TimeOfDay;
var 매수시간_장중 = 현재시간 >= TimeSpan.Parse("09:10:00") && 현재시간 <= TimeSpan.Parse("15:10:00");
var 매수시간_장마감 = 현재시간 > TimeSpan.Parse("15:21:00");
var 매도시간_장마감 = 현재시간 > TimeSpan.Parse("15:10:00");
var 매도시간_장중 = 현재시간 >= TimeSpan.Parse("09:10:00") && 현재시간 <= TimeSpan.Parse("15:20:00");
if(매수시간_장중)
{
// 매수조건
//10분봉
//10분봉기준 이동평균20선 상승 추세 유지일때 매수
var 이동평균상승추세 = N분봉_0봉전.MA_장기 > N분봉_1봉전.MA_장기 && N분봉_1봉전.MA_장기 >= N분봉_2봉전.MA_장기;
// 10분봉기준, 종가가 5이평 위에 위치.
var 단기이평돌파 = N분봉_0봉전.종가 > N분봉_0봉전.MA_단기;
var 저점상승 = 단분봉_0봉전.저가 > 단분봉_1봉전.저가 && 단분봉_1봉전.저가 > 단분봉_2봉전.저가;
if (이동평균상승추세 && 단기이평돌파 && 저점상승)
Post(매수, 100, 0, 유지:20, 재주문:0, 메시지:"20이평상승 중 종가 5이평 위에 위치");
}
if (매수시간_장마감)
{
// 조건식편입상태로 오래있던 종목 우선순위로 매수
var 매수대상종목 = 탐색종목리스트.Where(w=>w.매수상태 == "탐색" && w.세트번호 == 탐색종목.세트번호 && w.등락율 >= 1.0 && w.등락율 < 15.0 && w.누적거래량 > 50000).OrderByDescending(w=>w.차트_1분.Count(z=>z.조건식편입)).FirstOrDefault();
if (매수대상종목 != null)
if (탐색종목.종목코드 == 매수대상종목.종목코드)
Post(매수,100,100, 메시지:"종가매수");
}
if (매도시간_장마감)
{
if(탐색종목.세트.수익률 < -5.0)
{
var 손절종목 = 탐색종목리스트.Where(w=>w.세트번호 == 탐색종목.세트번호 && w.검증모드 == 탐색종목.검증모드).MinBy(w=>w.평가손익율).FirstOrDefault();
if (손절종목 != null)
if (일봉_0봉전.DIPlus < 일봉_0봉전.DIMinus && 일봉_0봉전.ADX >= 20)
Post(매도,100, 0, 유지:20, 메시지:"DI+, DI- 하향돌파");
}
if (탐색종목.평가손익율 > 1.0)
Post(매도,100,100,메시지:"1% 익절"+탐색종목.종목명);
}
// 고점대비 2% 하락시 매도
if (탐색종목.평가손익율 > 2.0)
if (탐색종목.최고평가손익율 - 탐색종목.평가손익율 > 2.0)
Post(매도,100, -1, 유지:20, 재주문:0, 메시지:"최고손익율 대비 -2% 하락 매도"+탐색종목.종목명);
댓글
댓글 쓰기