커뮤니티

60분봉을 1분봉으로 쪼개기

프로필 이미지
마인드마스터
2017-11-06 00:09:11
179
글번호 113905
답변완료
해외선물 60분봉 전략을 1분봉 전략으로 바꿔볼려고 합니다. 진입은 60분 캔들의 완성시점을 기준으로 하지만, 청산 및 손절은 1분봉에 대응하기 위해서 입니다. 예를 들어, 60분봉 기준 전략이 아래와 같다면 var1=dayopen; If C>var1 and O<=var1 and O[1]<C and O[2]<C Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if C <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >=2 then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } 배열변수를 사용해야 될거 같아서 매뉴얼을 아무리 봐도 제가 원하는 형태가 안되네요. 60분 봉을 1분단위로(또는 5분,10분등) 쪼개서 1시간에 60개의 캔들이 나오면 마지막 60번째 캔들( 매시간 59분에 시작하는 캔들) 의 종가를 Cvalue 와 같은 변수명으로 사용해서 60분 전략의 ‘C’ 처럼 사용하고 60개의 캔들중 가장 고가를 Hvalue 와 같은 변수명으로 사용하려고 합니다. 그러면 60분봉의 C = 1분봉 60개 묶음의 종가 Cvalue 60분봉의 O = 1분봉 60개 묶음의 시가 Ovalue 60분봉의 H = 1분봉 60개 묶음의 고가 Hvalue 60분봉의 L = 1분봉 60개 묶음의 저가 Lvalue 이렇게 같아지겠죠. 이렇게 변수설정 해주시면 정말 감사하겠습니다. 이런형태가 많이 나올 것 같고, 전략설정에 유용할거 같은데 잘 안됩니다. 도와주세요 ㅠㅠ 결론적으로 아래와 같은 방식으로 1분봉 전략을 사용 하고 싶습니다. var1=dayopen; If Cvalue>var1 and Ovalue <=var1 and Ovalue [1]<Cvalue and Ovalue[2]<Cvalue Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if Cvalue <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >= 120(이렇게 하면되나요?) then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); }
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2017-11-06 17:18:31

안녕하세요 예스스탁입니다. 아래 수식 참고하시기 바랍니다. 분봉차트에서 60분봉 시고저종 계산해서 사용한 수식입니다. var : S1(0),D1(0),TM(0),TF(0),cnt(0),TM1(0),TF1(0); Array : Ovalue[10](0),Hvalue[10](0),Lvalue[10](0),Cvalue[10](0); if Bdate != Bdate[1] Then{ S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then{ if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%60; if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{ Ovalue[0] = O; Hvalue[0] = H; Lvalue[0] = L; for cnt = 1 to 9{ Ovalue[cnt] = Ovalue[cnt-1][1]; Hvalue[cnt] = Hvalue[cnt-1][1]; Lvalue[cnt] = Lvalue[cnt-1][1]; Cvalue[cnt] = Cvalue[cnt-1][1]; } } if H > Hvalue[0] Then Hvalue[0] = H; if L < Lvalue[0] Then Lvalue[0] = L; Cvalue[0] = C; if sdate == D1 Then TM1 = TimeToMinutes(NextBarStime)-S1; Else TM1 = TimeToMinutes(NextBarStime)+1440-S1; TF1 = TM1%60; var1=dayopen; if (NextBarSdate > sdate) or (NextBarSdate == Sdate and TF1 < TF1) then { If Cvalue[0] > var1 and Ovalue[0]<=var1 and Ovalue[1] < Cvalue[0] and Ovalue[2] < Cvalue[0] Then Condition1 = true; Else Condition1 = false; } if Condition1 == true Then buy("시가매수", atlimit ,var1); if MarketPosition == 1 then { if C < entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C > entryprice and TM >= TM[BarsSinceEntry]+120 then //진입이후 120분 이상 경과 exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } } 즐거운 하루되세요 > 마인드마스터 님이 쓴 글입니다. > 제목 : 60분봉을 1분봉으로 쪼개기 > 해외선물 60분봉 전략을 1분봉 전략으로 바꿔볼려고 합니다. 진입은 60분 캔들의 완성시점을 기준으로 하지만, 청산 및 손절은 1분봉에 대응하기 위해서 입니다. 예를 들어, 60분봉 기준 전략이 아래와 같다면 var1=dayopen; If C>var1 and O<=var1 and O[1]<C and O[2]<C Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if C <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >=2 then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } 배열변수를 사용해야 될거 같아서 매뉴얼을 아무리 봐도 제가 원하는 형태가 안되네요. 60분 봉을 1분단위로(또는 5분,10분등) 쪼개서 1시간에 60개의 캔들이 나오면 마지막 60번째 캔들( 매시간 59분에 시작하는 캔들) 의 종가를 Cvalue 와 같은 변수명으로 사용해서 60분 전략의 ‘C’ 처럼 사용하고 60개의 캔들중 가장 고가를 Hvalue 와 같은 변수명으로 사용하려고 합니다. 그러면 60분봉의 C = 1분봉 60개 묶음의 종가 Cvalue 60분봉의 O = 1분봉 60개 묶음의 시가 Ovalue 60분봉의 H = 1분봉 60개 묶음의 고가 Hvalue 60분봉의 L = 1분봉 60개 묶음의 저가 Lvalue 이렇게 같아지겠죠. 이렇게 변수설정 해주시면 정말 감사하겠습니다. 이런형태가 많이 나올 것 같고, 전략설정에 유용할거 같은데 잘 안됩니다. 도와주세요 ㅠㅠ 결론적으로 아래와 같은 방식으로 1분봉 전략을 사용 하고 싶습니다. var1=dayopen; If Cvalue>var1 and Ovalue <=var1 and Ovalue [1]<Cvalue and Ovalue[2]<Cvalue Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if Cvalue <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >= 120(이렇게 하면되나요?) then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); }
프로필 이미지

마인드마스터

2017-11-06 16:51:57

감사합니다. 선언되지 않은 이름 'nextbarstime', 'nextbarstime'이 사용되었다는 오류가 뜹니다. 그리고 옆에 조금만 수식에 관한 해설을 달아주시면 공부에 도움이 될거 같습니다. 잘 이해 안되는 부분이 많네요. 제가 응용하려고 해도 수식을 온전히 이해하기가 어렵네요. 한번더 부탁드릴게요 ^^ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 60분봉을 1분봉으로 쪼개기 > 안녕하세요 예스스탁입니다. 아래 수식 참고하시기 바랍니다. 분봉차트에서 60분봉 시고저종 계산해서 사용한 수식입니다. var : S1(0),D1(0),TM(0),TF(0),cnt(0),TM1(0),TF1(0); Array : Ovalue[10](0),Hvalue[10](0),Lvalue[10](0),Cvalue[10](0); if Bdate != Bdate[1] Then{ S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then{ if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%60; if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{ Ovalue[0] = O; Hvalue[0] = H; Lvalue[0] = L; } if H > Hvalue[0] Then Hvalue[0] = H; if L < Lvalue[0] Then Lvalue[0] = L; Cvalue[0] = C; if sdate == D1 Then TM1 = TimeToMinutes(NextBarStime)-S1; Else TM1 = TimeToMinutes(NextBarStime)+1440-S1; TF1 = TM1%60; var1=dayopen; if (NextBarSdate > sdate) or (NextBarSdate == Sdate and TF1 < TF1) then { If Cvalue[0] > var1 and Ovalue[0]<=var1 and Ovalue[1] < Cvalue[0] and Ovalue[2] < Cvalue[0] Then Condition1 = false; Else Condition1 = false; } if Condition1 == true Then buy("시가매수", atlimit ,var1); if MarketPosition == 1 then { if C < entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C > entryprice and TM >= TM[BarsSinceEntry]+120 then //진입이후 120분 이상 경과 exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } } 즐거운 하루되세요 > 마인드마스터 님이 쓴 글입니다. > 제목 : 60분봉을 1분봉으로 쪼개기 > 해외선물 60분봉 전략을 1분봉 전략으로 바꿔볼려고 합니다. 진입은 60분 캔들의 완성시점을 기준으로 하지만, 청산 및 손절은 1분봉에 대응하기 위해서 입니다. 예를 들어, 60분봉 기준 전략이 아래와 같다면 var1=dayopen; If C>var1 and O<=var1 and O[1]<C and O[2]<C Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if C <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >=2 then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } 배열변수를 사용해야 될거 같아서 매뉴얼을 아무리 봐도 제가 원하는 형태가 안되네요. 60분 봉을 1분단위로(또는 5분,10분등) 쪼개서 1시간에 60개의 캔들이 나오면 마지막 60번째 캔들( 매시간 59분에 시작하는 캔들) 의 종가를 Cvalue 와 같은 변수명으로 사용해서 60분 전략의 ‘C’ 처럼 사용하고 60개의 캔들중 가장 고가를 Hvalue 와 같은 변수명으로 사용하려고 합니다. 그러면 60분봉의 C = 1분봉 60개 묶음의 종가 Cvalue 60분봉의 O = 1분봉 60개 묶음의 시가 Ovalue 60분봉의 H = 1분봉 60개 묶음의 고가 Hvalue 60분봉의 L = 1분봉 60개 묶음의 저가 Lvalue 이렇게 같아지겠죠. 이렇게 변수설정 해주시면 정말 감사하겠습니다. 이런형태가 많이 나올 것 같고, 전략설정에 유용할거 같은데 잘 안됩니다. 도와주세요 ㅠㅠ 결론적으로 아래와 같은 방식으로 1분봉 전략을 사용 하고 싶습니다. var1=dayopen; If Cvalue>var1 and Ovalue <=var1 and Ovalue [1]<Cvalue and Ovalue[2]<Cvalue Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if Cvalue <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >= 120(이렇게 하면되나요?) then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); }
프로필 이미지

예스스탁 예스스탁 답변

2017-11-06 17:18:04

안녕하세요 예스스탁입니다. 해외선물용 프로그램을 사용하고 계산것 같습니다. 해외선물용 프로그램에는 nextbarstime함수가 제공되고 있지 않습니다. 해당수식은 1분봉에서 60분봉의 값을 계산하는 부분이고 기존수식에서는 nextbarstime로 60분봉 완성을 체크했는데 해외선물은 해당함수가 없어 60분봉 완성시점을 체크하기 어렵습니다. 매시간 59분봉으로 지정해 드립니다. 만약 해당 종목이 거래가 많이 없어 매시 59분봉이 없으면 해당 60분봉은 체크를 하지 못합니다. 해당 부분은 따로 수식적으로 방법이 없습니다. 참고하시기 바랍니다. var : S1(0),D1(0),TM(0),TF(0),cnt(0),TM1(0),TF1(0); Array : Ovalue[10](0),Hvalue[10](0),Lvalue[10](0),Cvalue[10](0); #영업일 변경 if Bdate != Bdate[1] Then{ S1 = TimeToMinutes(stime);//변경시점의 9시 이후 경과된 분 저장 D1 = sdate; //날짜저장 } #날짜저장후(차트상 최초 영업일 변경후부터) if D1 > 0 then{ #영업일 변경시간을 기준으로 현재 경과된 분수를 계산 #영업일 변경시간이 07시이면 s1는 420 #현재 10시이면 600-420 = 180분 #현재 20시이면 1200-420 = 780분 #현재 03시이면 180+1440-420 = 1200분 if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; #영업일변경이후 경과된 분수를 60으로 나누어 나머지를 구함 #1분봉에서 아래와 같이 반복적으로 나머지값을 가지게 됨 #[0,1,2,~,58,59],[0,1,2,~,58,59],[0,1,2,~,58,59],.... #그러므로 TF가 전봉보다 작아지는 봉이 새로운 60분봉이 시작되는 봉임 TF = TM%60; #새로운 60분봉 시작 #각 배열변수 [0]번방에는 초기값 지정 #각 배열변수의 각 방에 저장된 값을 다음방으로 이동 #기존 [0]번방은 [1]번방으로, 기존[1]번방값은 [2]번방으로.... if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{ Ovalue[0] = O; Hvalue[0] = H; Lvalue[0] = L; for cnt = 1 to 9{ Ovalue[cnt] = Ovalue[cnt-1][1]; Hvalue[cnt] = Hvalue[cnt-1][1]; Lvalue[cnt] = Lvalue[cnt-1][1]; Cvalue[cnt] = Cvalue[cnt-1][1]; } } #Hvalue[0]보다 큰 고가가 출력하면 값갱신 if H > Hvalue[0] Then Hvalue[0] = H; #Lvalue[0]보다 작은 저가가 출력하면 값갱신 if L < Lvalue[0] Then Lvalue[0] = L; #Cvalue[0]는 매봉종가 Cvalue[0] = C; var1=dayopen; # if (TF == 59) then { If Cvalue[0] > var1 and Ovalue[0]<=var1 and Ovalue[1] < Cvalue[0] and Ovalue[2] < Cvalue[0] Then Condition1 = true; Else Condition1 = false; } if Condition1 == true Then buy("시가매수", atlimit ,var1); if MarketPosition == 1 then { if C < entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C > entryprice and TM >= TM[BarsSinceEntry]+120 then //진입이후 120분 이상 경과 exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } } 즐거운 하루되세요 > 마인드마스터 님이 쓴 글입니다. > 제목 : 감사합니다. 그런데 오류가 있네요. > 감사합니다. 선언되지 않은 이름 'nextbarstime', 'nextbarstime'이 사용되었다는 오류가 뜹니다. 그리고 옆에 조금만 수식에 관한 해설을 달아주시면 공부에 도움이 될거 같습니다. 잘 이해 안되는 부분이 많네요. 제가 응용하려고 해도 수식을 온전히 이해하기가 어렵네요. 한번더 부탁드릴게요 ^^ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 60분봉을 1분봉으로 쪼개기 > 안녕하세요 예스스탁입니다. 아래 수식 참고하시기 바랍니다. 분봉차트에서 60분봉 시고저종 계산해서 사용한 수식입니다. var : S1(0),D1(0),TM(0),TF(0),cnt(0),TM1(0),TF1(0); Array : Ovalue[10](0),Hvalue[10](0),Lvalue[10](0),Cvalue[10](0); if Bdate != Bdate[1] Then{ S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then{ if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%60; if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{ Ovalue[0] = O; Hvalue[0] = H; Lvalue[0] = L; } if H > Hvalue[0] Then Hvalue[0] = H; if L < Lvalue[0] Then Lvalue[0] = L; Cvalue[0] = C; if sdate == D1 Then TM1 = TimeToMinutes(NextBarStime)-S1; Else TM1 = TimeToMinutes(NextBarStime)+1440-S1; TF1 = TM1%60; var1=dayopen; if (NextBarSdate > sdate) or (NextBarSdate == Sdate and TF1 < TF1) then { If Cvalue[0] > var1 and Ovalue[0]<=var1 and Ovalue[1] < Cvalue[0] and Ovalue[2] < Cvalue[0] Then Condition1 = false; Else Condition1 = false; } if Condition1 == true Then buy("시가매수", atlimit ,var1); if MarketPosition == 1 then { if C < entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C > entryprice and TM >= TM[BarsSinceEntry]+120 then //진입이후 120분 이상 경과 exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } } 즐거운 하루되세요 > 마인드마스터 님이 쓴 글입니다. > 제목 : 60분봉을 1분봉으로 쪼개기 > 해외선물 60분봉 전략을 1분봉 전략으로 바꿔볼려고 합니다. 진입은 60분 캔들의 완성시점을 기준으로 하지만, 청산 및 손절은 1분봉에 대응하기 위해서 입니다. 예를 들어, 60분봉 기준 전략이 아래와 같다면 var1=dayopen; If C>var1 and O<=var1 and O[1]<C and O[2]<C Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if C <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >=2 then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); } 배열변수를 사용해야 될거 같아서 매뉴얼을 아무리 봐도 제가 원하는 형태가 안되네요. 60분 봉을 1분단위로(또는 5분,10분등) 쪼개서 1시간에 60개의 캔들이 나오면 마지막 60번째 캔들( 매시간 59분에 시작하는 캔들) 의 종가를 Cvalue 와 같은 변수명으로 사용해서 60분 전략의 ‘C’ 처럼 사용하고 60개의 캔들중 가장 고가를 Hvalue 와 같은 변수명으로 사용하려고 합니다. 그러면 60분봉의 C = 1분봉 60개 묶음의 종가 Cvalue 60분봉의 O = 1분봉 60개 묶음의 시가 Ovalue 60분봉의 H = 1분봉 60개 묶음의 고가 Hvalue 60분봉의 L = 1분봉 60개 묶음의 저가 Lvalue 이렇게 같아지겠죠. 이렇게 변수설정 해주시면 정말 감사하겠습니다. 이런형태가 많이 나올 것 같고, 전략설정에 유용할거 같은데 잘 안됩니다. 도와주세요 ㅠㅠ 결론적으로 아래와 같은 방식으로 1분봉 전략을 사용 하고 싶습니다. var1=dayopen; If Cvalue>var1 and Ovalue <=var1 and Ovalue [1]<Cvalue and Ovalue[2]<Cvalue Then buy(“시가매수” , atlimit ,var1); if MarketPosition == 1 then { if Cvalue <entryprice then ExitLong ("본절청산",AtLimit,entryprice); if C> entryprice and BarsSinceEntry >= 120(이렇게 하면되나요?) then exitlong("매수익절",AtLimit,entryprice+PriceScale*100); }