장기 이동평균선 돌파시 매수 및 분할매도 스크립트 예제

이평선 돌파시 매수 및 분할매도 스크립트 예제

5일 이동평균선이 20일선을 돌파시 매수하고 1%, 2%, 4% 분할매도하고, 장마감시 1%이상이면 전량 매도 예제
아래 예제는 아래와 같은 내용을 설명하기 위한 스크립트입니다.

  • 매수시간 및 매도시간을 설정하고 시간대에 따른 매매
  • 5일 이평선이 20이평선을 돌파하면 매수
  • 매수시 양봉이냐 음봉이냐에 따라 매수가격을 지정해서 매수
  • 1%, 2% 4% 분할매도 구현
  • 매매신호 함수인 Post에서 주문가격 옵션 사용
  • 비중계산:1 옵션으로 종목별 매수한도금액 대비 비중계산
  • 주문 미체결시 20초간 경과 후에는 주문취소. 재주문 옵션을 0으로 줘서 주문취소후에도 신호가 나오면 재주문됨.
  • 주문체결내역 데이터에서 주문기록 이용하는 예

//------------------------------------------------------------------------------------
var 현재시간 = DateTime.Now.TimeOfDay;

var 매수시간_장중 = 현재시간 >= TimeSpan.Parse("09:10:00") && 현재시간 <= TimeSpan.Parse("15:10:00");
var 장마감 = 현재시간 > TimeSpan.Parse("15:21:00");
var 매도시간_장중 = 현재시간 >= TimeSpan.Parse("09:00:00") && 현재시간 <= TimeSpan.Parse("15:20:00");

if (매수시간_장중)
{
    // 5일선이 20일선 돌파시 매수
    var _매수_0 = N분봉_0봉전.종가 > N분봉_0봉전.MA_단기;
    var _매수_1 = N분봉_0봉전.MA_단기 > N분봉_0봉전.MA_장기;
    var _매수_2 = N분봉_1봉전.MA_단기 > N분봉_1봉전.MA_장기;
    var _매수_3 = N분봉_2봉전.MA_단기 < N분봉_2봉전.MA_장기;
    var _매수_4 = N분봉_3봉전.MA_단기 < N분봉_3봉전.MA_장기;
    var _매수_5 = N분봉_4봉전.MA_단기 < N분봉_4봉전.MA_장기;

    var _매수_6 = N분봉_0봉전.체결강도 > N분봉_1봉전.체결강도;
    var _매수_7 = N분봉_1봉전.체결강도 > N분봉_2봉전.체결강도;
    var _매수_8 = N분봉_0봉전.체결강도 >= 100;

    if (_매수_0 && _매수_2 && _매수_3 && _매수_4 && _매수_5 && _매수_6 && _매수_7 && _매수_8)
    {
        var _매수가격 = 0;
    
        //양봉일경우,
        if (N분봉_1봉전.시가 <= N분봉_1봉전.종가)
            _매수가격 = (int)Math.Min(N분봉_1봉전.종가, N분봉_0봉전.종가);
        else
            _매수가격 = (int)Math.Min(N분봉_1봉전.시가, N분봉_0봉전.종가);
    
        Post(매수, 100, 0, 주문가격:_매수가격, 유지:60, 재주문:0, 메시지:"이평돌파");
    }
}

// 1, 2, 4, 종가 매도
if (매도시간_장중)
{
    var 마지막매도주문 = 탐색종목.체결내역.FirstOrDefault(w=>w.주문구분 == "매도" || w.주문구분 == "매도정정");
    
    if (탐색종목.평가손익율 >= 4.0)
    {
        //매도3        
        if (마지막매도주문 == null)    
            Post(매도, 75, 0, 비중계산:1, 유지:20, 재주문:0, 메시지:"4% 매도");    
        else
        {
            if (마지막매도주문.주문평가손익율 >= 2.0 && 마지막매도주문.주문평가손익율 < 4.0)
                Post(매도, 25, 0, 비중계산:1, 유지:20, 재주문:0, 메시지:"4% 매도");
        }
    }
    else if (탐색종목.평가손익율 >= 2.0 && 탐색종목.평가손익율 < 4.0)
    {
        //매도2
        if (마지막매도주문 == null)    
            Post(매도, 50, 0, 비중계산:1, 유지:20, 재주문:0, 메시지:"2% 매도");    
        else
        {
            if (마지막매도주문.주문평가손익율 >= 1.0 && 마지막매도주문.주문평가손익율 < 2.0)
                Post(매도, 25, 0, 비중계산:1, 유지:20, 재주문:0, 메시지:"2% 매도");
        }
    }
    else if (탐색종목.평가손익율 >= 1.0 && 탐색종목.평가손익율 < 2.0)
    {
        //매도1
        if (마지막매도주문 == null)    
            Post(매도, 25, 0, 비중계산:1, 유지:20, 재주문:0, 메시지:"1% 매도");    
    
    } else if (탐색종목.평가손익율 < -2.0)
    {
        //전량 손절
        Post(매도, 100, 0, 유지:20, 재주문:0, 메시지:"-2% 손절");    
    }
}

if(장마감)
    if (탐색종목.평가손익율 >= 1.0)
        Post(매도, 100, 100, 메시지:"장마감 전량 매도");
   

댓글