Search
Duplicate
📝

Impulse System 분봉

구분
수식예제
관련 함수
Bdate
TimeToMinutes
Ema
MACD_OSC
상품
공통
태그
Impulse System 분봉
Impulse System
임펄스시스템
임펄스
멀티타임프레임
상위주기
모멘텀
데이트레이딩
다중주기

지표설명

Impulse System은 본래 일봉에 적용하는 전략으로 알려져 있으나, 이 예제 코드는 분봉 차트에서 상위 주기의 분봉 값과 비교하여 신호를 발생시키는 다중 시간대(Multi-Timeframe, MTF) 전략입니다.
전략의 핵심은 참고분봉(예: 30분봉)으로 설정된 상위 주기의 추세현재 차트(예: 5분봉)의 추세완벽하게 정렬되는 시점을 포착하는 것입니다. 코드는 Bdate (영업일) 및 TimeToMinutes (시간) 함수를 사용하여, 상위 주기의 EMA(13) 값(TFema)과 MACD Oscillator(12,26,9) 값(TFMACDO)을 현재 봉에서 시뮬레이션합니다.
매수 진입: 상위 주기의 13-EMA와 MACD Oscillator가 모두 1봉 전보다 상승하고, 동시에 현재 차트의 13-EMA와 MACD Oscillator도 모두 1봉 전보다 상승할 때, 즉 두 시간대의 추세가 모두 상승으로 정렬되면 매수(Buy)합니다.
매도 진입: 반대로, 상위 주기와 현재 주기의 13-EMA 및 MACD Oscillator가 모두 1봉 전보다 하락할 때, 즉 두 시간대의 추세가 모두 하락으로 정렬되면 매도(Sell)합니다.

활용예시

Input : 참고분봉(30),Period(13),short(12),long(26),sig(9); Var : S1(0),D1(0),TM(0),TF(0),Didx(0); Var : TFEP(0),TFEP1(0),TFEP2(0),TFEP3(0); var : TFema(0),preTFema(0); Var : TFJISU1(0),TFJISU2(0),PreTFJISU1(0),PreTFJISU2(0); Var : TFMACDV(0),TFMACDS(0),TFMACDo(0); Var : PreTFMACDV(0),PreTFMACDS(0),PreTFMACDo(0); var : Emav(0),MACDO(0); var : Bcond(False),Scond(False); //지수이평 평활계수 TFEP = 2/(Period+1); // MACD에 사용할 지수이평 평활계수 TFEP1 = 2/(short+1); TFEP2 = 2/(long+1); TFEP3 = 2/(sig+1); // 새로운 영업일이 시작하면 시작시간(S1)과 날짜(D1)를 초기화 if Bdate != Bdate[1] Then { //첫봉의 stime을 분단위로 변환 S1 = TimeToMinutes(stime); //첫봉의 날짜를 저장 D1 = sdate; } // D1에 날짜가 저장된 이후(영업일 변경이 되는 봉이 발생 후에) if D1 > 0 then { //같은 날짜인지 판단하여 영업일 변경이후 경과분(TM)계산 if sdate == D1 Then TM = TimeToMinutes(stime)-S1;//첫봉과 동일날짜이면 첫봉부터 경과분계산 Else TM = TimeToMinutes(stime)+1440-S1;//다음날이면 24시간(1440분)을 더해서 보정 //영업일 변경이후 경과분을 분주기로 나누어 나머지를 구함 TF = TM%참고분봉; //새로운 영업일이 시작하거나 새로운 분이 시작되면 if Bdate != Bdate[1] or (Bdate == Bdate[1] and 참고분봉 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 참고분봉 > 1 and TM >= TM[1]+참고분봉) or (Bdate == Bdate[1] and 참고분봉 == 1 and TM > TM[1]) Then { Didx = Didx + 1; PreTFema = TFema[1]; PreTFJISU1 = TFJISU1[1]; PreTFJISU2 = TFJISU2[1]; PreTFMACDV = TFMACDV[1]; PreTFMACDS = TFMACDS[1]; PreTFMACDO = TFMACDO[1]; } if Didx <= 1 then { TFema = c; TFJISU1 = C; TFJISU2 = C; TFMACDV = TFJISU1-TFJISU2; TFMACDS = TFMACDV; TFMACDO = TFMACDV-TFMACDS; } else { TFema = C * TFEP + PreTFema * (1-TFEP); ; TFJISU1 = C * TFEP1 + PreTFJISU1 * (1-TFEP1); TFJISU2 = C * TFEP2 + PreTFJISU2 * (1-TFEP2); TFMACDV = TFJISU1-TFJISU2; TFMACDS = TFMACDV * TFEP3 + PreTFMACDS * (1-TFEP3); TFMACDO = TFMACDV-TFMACDS; } } Emav = Ema(C,Period); MACDO = MACD_OSC(short,long,sig); # 매수진입 //주봉과 일봉 지수이평과 MACD오실레이터가 동시상승이면 Bcond는 true 아니면 false Bcond = TFema > PreTFema and TFMACDO > PreTFMACDO and emav > emav[1] and MACDO > MACDO[1]; //주봉과 일봉 지수이평과 MACD오실레이터가 동시하락이면 Scond는 true 아니면 false Scond = TFema < PreTFema and TFMACDO < PreTFMACDO and emav < emav[1] and MACDO < MACDO[1]; //Bcond가 False에서 true로 변경되면 매수진입 If Bcond == true and Bcond[1] == False Then buy(); //Scond가 False에서 true로 변경되면 매도진입 If Scond == true and Scond[1] == False Then Sell();
JavaScript
복사