커뮤니티
문의
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();
}
이전글