커뮤니티

문의

프로필 이미지
렉쳐
2018-06-17 22:09:29
125
글번호 119799
답변완료
아래수식으로 자동최적화로 수치를 찾고싶은데 어떻게 바꿔야하나요 // 작성자 : 수식지왕 Input: 원계정(100000000) , S1HiPeriod(20) , S1LoPeriod(10) , S2HiPeriod(55) , S2LoPeriod(20) , AtrPeriod(20) , S2비율(50) , N배수(2) ; Var: 명목계정(0), 계정배분완료(False), S1Hi(0), S1Lo(0), S2Hi(0), S2Lo(0), j(0), SumTr(0), DayAtr(0), Unit(0), 진입구분(0), 진입횟수(0), N(0), 추가진입가격(0), 단기돌파무시(False), sumV0(0), sumV1(0), maV0(0), maV1(0), DeadCnt(0), 휩소여부(False); Array : 손절가격[5](0), 진입가격[5](0), 계정크기[5](0), 계정체크[5](0); /*=============================================*/ /* 계정관리 */ /*=============================================*/ If 계정배분완료 == False Then //최초 한번만 실행 { 계정체크[0] = 원계정 * 0.9; //10% 손실나면 계정크기[0] = 원계정 * 0.8; //명목계정은 20% 감소 시켜서 운용 For j = 0 To 3 { 계정체크[j+1] = 계정크기[j] * 0.9; 계정크기[j+1] = 계정크기[j] * 0.8; } 계정배분완료 = True; } If NetProfit() >= 0 Then { 명목계정 = 원계정; } Else { For j = 0 To 4 { If 원계정 + NetProfit() < 계정체크[j] Then //10% 손실나면 { 명목계정 = 계정크기[j]; //명목계정은 20% 감소시켜서 운용 } } } /*=============================================*/ /* 변동성 계산 */ /*=============================================*/ // 분봉에서 일봉의 ATR계산, 전일의 ATR이 산출됨 SumTr = 0; For j = 1 To AtrPeriod { SumTr = SumTr + Max(DayHigh(j)-DayLow(j),Abs(DayClose(j+1)-DayHigh(j)),Abs(DayClose(j+1)-DayLow(j))); } DayAtr = SumTr/AtrPeriod; /*=============================================*/ /* 채널 계산 */ /*=============================================*/ // 분봉에서 일봉의 고,저점 계산, 전일의 고,저점임 S1Hi = 0; S1Lo = 0; S2Hi = 0; S2Lo = 0; For j = 1 To S2HiPeriod { If j <= S1LoPeriod && (S1Lo == 0 || S1Lo > DayLow(j)) Then S1Lo = DayLow(j); If j <= S2LoPeriod && (S2Lo == 0 || S2Lo > DayLow(j)) Then S2Lo = DayLow(j); If j <= S1HiPeriod && S1Hi < DayHigh(j) Then S1Hi = DayHigh(j); If S2Hi < DayHigh(j) Then S2Hi = DayHigh(j); } /*=============================================*/ /* 휩소 판단 */ /*=============================================*/ //이평선 데드카운트가 일정 수 이상일 때 휩소로 판단 sumV0 = 0; sumV1 = 0; For j = 0 To S1HiPeriod - 1 { sumV0 = sumV0 + DayClose(j); sumV1 = sumV1 + DayClose(j+1); } maV0 = sumV0 / S1HiPeriod; maV1 = sumV1 / S1HiPeriod; DeadCnt = 0; For j = 0 To S1HiPeriod - 1 { if maV1 <= DayClose(j+1) && maV0 > DayClose(j) then DeadCnt = DeadCnt + 1; } ############## # 진입식 # ############## /*=============================================*/ /* 시스템 1(S1) : 20일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S1Hi) && 단기돌파무시 == False Then { 진입구분 = 1; N = DayAtr; Unit = int((명목계정 * 0.01)/N); //거래단위 계산 추가진입가격 = S1Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; If DeadCnt >= 4 Then //이평 데드크로스 횟수를 4회 이상일 경우 휩소로 봄 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S1매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S1 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 1 Then { If 진입횟수 == 1 && //CurrentEntries()함수를 써도 되나 단계를 체크하기 위해 별도 변수 사용 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S1매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S1매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S1매수4",OnClose,DEF,int(Unit/4)); } } /*=============================================*/ /* 시스템 2(S2) : 55일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S2Hi) Then { 진입구분 = 2; N = DayAtr; Unit = (명목계정 * 0.01)/N; //거래단위 계산 Unit = int(Unit * S2비율 * 0.01); //S2거래비중 조정 추가진입가격 = S2Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; 단기돌파무시 = False; //단기돌파무시가 True로 설정되었다면 초기화 If DeadCnt >= 4 Then 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S2매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S2 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 2 Then { If 진입횟수 == 1 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S2매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S2매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S2매수4",OnClose,DEF,int(Unit/4)); } } ############## # 청산식 # ############## /*=============================================*/ /* S1 단기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 1 Then { If C < S1Lo Then { If OpenPositionProfit() < 0 Then //이익이 발생했다면 다음번 단기돌파시 진입 무시 { 단기돌파무시 = False; } Else { 단기돌파무시 = True; } 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S1추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; //추가 진입을 막기 위해 초기화 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; 단기돌파무시 = False; //손절포인트를 돌파했다면 다음번 단기돌파 때 진입 ExitLong("S1손절4",OnClose,DEF,"S1매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; //4번 다 진입하지 못하고 손절포인트 만날 수 있으므로 진입횟수 = 2; //각 청산식마다 초기화 손절가격[3] = 0; 진입가격[3] = 0; 단기돌파무시 = False; ExitLong("S1손절3",OnClose,DEF,"S1매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; 단기돌파무시 = False; ExitLong("S1손절2",OnClose,DEF,"S1매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; 단기돌파무시 = False; ExitLong("S1손절1",OnClose,DEF,"S1매수1",DEF); } } /*=============================================*/ /* S2 장기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 2 Then { If C < S2Lo Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S2추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; ExitLong("S2손절4",OnClose,DEF,"S2매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; 진입횟수 = 2; 손절가격[3] = 0; 진입가격[3] = 0; ExitLong("S2손절3",OnClose,DEF,"S2매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; ExitLong("S2손절2",OnClose,DEF,"S2매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; ExitLong("S2손절1",OnClose,DEF,"S2매수1",DEF); } } If DayAtr >= 명목계정 * 0.01 * N배수 Then { ExitLong(); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-06-18 15:42:50

안녕하세요 예스스탁입니다. 변수최적화는 시뮬레이션 차트에서 가능합니다. 시뮬레이션 관련은 아래 링크 참고하시기 바랍니다. https://www.yesstock.com/YesTrader/Manual/YesTrader4.0Help/Simulation_charts.htm 즐거운 하루되세요 > 렉쳐 님이 쓴 글입니다. > 제목 : 문의 > 아래수식으로 자동최적화로 수치를 찾고싶은데 어떻게 바꿔야하나요 // 작성자 : 수식지왕 Input: 원계정(100000000) , S1HiPeriod(20) , S1LoPeriod(10) , S2HiPeriod(55) , S2LoPeriod(20) , AtrPeriod(20) , S2비율(50) , N배수(2) ; Var: 명목계정(0), 계정배분완료(False), S1Hi(0), S1Lo(0), S2Hi(0), S2Lo(0), j(0), SumTr(0), DayAtr(0), Unit(0), 진입구분(0), 진입횟수(0), N(0), 추가진입가격(0), 단기돌파무시(False), sumV0(0), sumV1(0), maV0(0), maV1(0), DeadCnt(0), 휩소여부(False); Array : 손절가격[5](0), 진입가격[5](0), 계정크기[5](0), 계정체크[5](0); /*=============================================*/ /* 계정관리 */ /*=============================================*/ If 계정배분완료 == False Then //최초 한번만 실행 { 계정체크[0] = 원계정 * 0.9; //10% 손실나면 계정크기[0] = 원계정 * 0.8; //명목계정은 20% 감소 시켜서 운용 For j = 0 To 3 { 계정체크[j+1] = 계정크기[j] * 0.9; 계정크기[j+1] = 계정크기[j] * 0.8; } 계정배분완료 = True; } If NetProfit() >= 0 Then { 명목계정 = 원계정; } Else { For j = 0 To 4 { If 원계정 + NetProfit() < 계정체크[j] Then //10% 손실나면 { 명목계정 = 계정크기[j]; //명목계정은 20% 감소시켜서 운용 } } } /*=============================================*/ /* 변동성 계산 */ /*=============================================*/ // 분봉에서 일봉의 ATR계산, 전일의 ATR이 산출됨 SumTr = 0; For j = 1 To AtrPeriod { SumTr = SumTr + Max(DayHigh(j)-DayLow(j),Abs(DayClose(j+1)-DayHigh(j)),Abs(DayClose(j+1)-DayLow(j))); } DayAtr = SumTr/AtrPeriod; /*=============================================*/ /* 채널 계산 */ /*=============================================*/ // 분봉에서 일봉의 고,저점 계산, 전일의 고,저점임 S1Hi = 0; S1Lo = 0; S2Hi = 0; S2Lo = 0; For j = 1 To S2HiPeriod { If j <= S1LoPeriod && (S1Lo == 0 || S1Lo > DayLow(j)) Then S1Lo = DayLow(j); If j <= S2LoPeriod && (S2Lo == 0 || S2Lo > DayLow(j)) Then S2Lo = DayLow(j); If j <= S1HiPeriod && S1Hi < DayHigh(j) Then S1Hi = DayHigh(j); If S2Hi < DayHigh(j) Then S2Hi = DayHigh(j); } /*=============================================*/ /* 휩소 판단 */ /*=============================================*/ //이평선 데드카운트가 일정 수 이상일 때 휩소로 판단 sumV0 = 0; sumV1 = 0; For j = 0 To S1HiPeriod - 1 { sumV0 = sumV0 + DayClose(j); sumV1 = sumV1 + DayClose(j+1); } maV0 = sumV0 / S1HiPeriod; maV1 = sumV1 / S1HiPeriod; DeadCnt = 0; For j = 0 To S1HiPeriod - 1 { if maV1 <= DayClose(j+1) && maV0 > DayClose(j) then DeadCnt = DeadCnt + 1; } ############## # 진입식 # ############## /*=============================================*/ /* 시스템 1(S1) : 20일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S1Hi) && 단기돌파무시 == False Then { 진입구분 = 1; N = DayAtr; Unit = int((명목계정 * 0.01)/N); //거래단위 계산 추가진입가격 = S1Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; If DeadCnt >= 4 Then //이평 데드크로스 횟수를 4회 이상일 경우 휩소로 봄 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S1매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S1 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 1 Then { If 진입횟수 == 1 && //CurrentEntries()함수를 써도 되나 단계를 체크하기 위해 별도 변수 사용 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S1매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S1매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S1매수4",OnClose,DEF,int(Unit/4)); } } /*=============================================*/ /* 시스템 2(S2) : 55일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S2Hi) Then { 진입구분 = 2; N = DayAtr; Unit = (명목계정 * 0.01)/N; //거래단위 계산 Unit = int(Unit * S2비율 * 0.01); //S2거래비중 조정 추가진입가격 = S2Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; 단기돌파무시 = False; //단기돌파무시가 True로 설정되었다면 초기화 If DeadCnt >= 4 Then 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S2매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S2 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 2 Then { If 진입횟수 == 1 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S2매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S2매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S2매수4",OnClose,DEF,int(Unit/4)); } } ############## # 청산식 # ############## /*=============================================*/ /* S1 단기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 1 Then { If C < S1Lo Then { If OpenPositionProfit() < 0 Then //이익이 발생했다면 다음번 단기돌파시 진입 무시 { 단기돌파무시 = False; } Else { 단기돌파무시 = True; } 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S1추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; //추가 진입을 막기 위해 초기화 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; 단기돌파무시 = False; //손절포인트를 돌파했다면 다음번 단기돌파 때 진입 ExitLong("S1손절4",OnClose,DEF,"S1매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; //4번 다 진입하지 못하고 손절포인트 만날 수 있으므로 진입횟수 = 2; //각 청산식마다 초기화 손절가격[3] = 0; 진입가격[3] = 0; 단기돌파무시 = False; ExitLong("S1손절3",OnClose,DEF,"S1매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; 단기돌파무시 = False; ExitLong("S1손절2",OnClose,DEF,"S1매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; 단기돌파무시 = False; ExitLong("S1손절1",OnClose,DEF,"S1매수1",DEF); } } /*=============================================*/ /* S2 장기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 2 Then { If C < S2Lo Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S2추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; ExitLong("S2손절4",OnClose,DEF,"S2매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; 진입횟수 = 2; 손절가격[3] = 0; 진입가격[3] = 0; ExitLong("S2손절3",OnClose,DEF,"S2매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; ExitLong("S2손절2",OnClose,DEF,"S2매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; ExitLong("S2손절1",OnClose,DEF,"S2매수1",DEF); } } If DayAtr >= 명목계정 * 0.01 * N배수 Then { ExitLong(); }