커뮤니티

문의

프로필 이미지
jesten77
2021-10-26 22:40:15
753
글번호 153176
답변완료
74432 값 대입에서 문의합니다 1]초기값- HH 와 LL 에서 값을 대입할수있는 변수나 배열의 요소,입력변수, 입력변수 배열의 요소가 와야합니다 1]예제가 있었으면 합니다. ----------------------------------------------------------- 2]6분봉 왼쪽의 10번째봉사이에서에서(1~10사이)가장높은 봉의 고가 돌파시 매수신호/즉시매수 3]30분봉 왼쪽의 10번째에 해당하는 봉의 고가 돌파시 매수신호/즉시매수 4]6분봉의 왼쪽 10~1사이의 최고가돌파와 30분의 10번째 해당하는 봉의 고가 돌파가 동시에 만족할때 6분에서 매수신호/즉시매수. 5]6분봉의 왼쪽 10~1사이의 최저가돌파와 30분의 10번째 해당하는 봉의 저가 돌파가 동시에 만족할때 6분에서 매도신호/즉시매도. *6분봉에서 먼저 매수 매도 신호가 나와 있고 후에 30분봉에서 매수 매도 신호가 나오면 그때 매수 매도가 들어가는 경우, 30분봉에서 매수 매도 신호가 나와 있는 상태에서 6분봉 조건에 따라 6분봉에서 매수 매도 신호가 나오면 그때 매수 매도가 들어가는 경우, 비슷한 시간이나 동시에 6분봉과 30분봉에 매수 매도 신호가 나와서 들어가는 경우가 있을 수 있습니다. 어떤 경우의 수든 같은 방향으로 매수 매도 신호가 6분봉과 30분봉에 같이 나올 때 매수 매도 진입하길 원합니다. 감사합니다~~
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-10-27 10:51:04

안녕하세요 예스스탁입니다. 1 "값을 대입할수있는 변수나 배열의 요소,입력변수, 입력변수 배열의 요소가 와야합니다" 위 내용은 변수에 대한 선언이 되어 있지 않거나 배열변수로 선언하고 수식에서 배열요소를 지정하지 않으면 발생합니다. 아래식 검증하면 LL이 선언되지 않아 에러메세지가 발생합니다. var : HH(0);#일반변수 선언 HH = H; LL = L; #--> 선언필요 아래식 검증하면 LL은 배열변수로 선언되었지만 수식안에서 배열요소 지정없이 사용하면 에러메세지 발생합니다. Array : LL[10](0);#배열변수 선언 LL = L; #LL[0] = L;과 같이 배열요소 지정필요 2 input : ntime1(6),ntime2(30),n(10); input : StartTime(222500),EndTime(010000); input : 익절틱수(50),손절틱수(50); var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0),HH(0),LL(0); var : Tcond(false),BE1(False),BE2(False),SE1(False),SE2(False); Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0); #지정한 종료시간 이후의 첫봉일때 Tcond는 False if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; #지정한 시작시간 이후의 첫봉일때 Tcond는 true if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then Tcond = true; #영업일 변경 첫봉 if Bdate != Bdate[1] Then { #S1에 시간을 분으로 환산한 값을 저장 S1 = TimeToMinutes(stime); #D1에 날짜저장 D1 = sdate; } #D1의 값이 0보다 크고 if D1 > 0 then { #현재봉날짜가 D1하고 같으면 #현재봉의 분환산값에서 S1을 빼서 TM에 저장 #현재봉 날짜가 D1하고 다르면 (영업일 변경 후 다음날 새벽) #현재봉의 분환산값에 1440분을 더하고 S1을 빼서 TM에 저장 if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; #TM을 6으로 나누고 나머지값 저장 TF1 = TM%ntime1; #TM을 30으로 나누고 나머지값 저장 TF2 = TM%ntime2; #6분봉 시작하는 첫봉 if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or (Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or (Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then { #고가저장 H1[0] = H; #저가저장 L1[0] = L; #과거 6분구간 최고/최저값을 배열변수의 다음 공간으로 이동 For cnt = 1 to 49 { H1[cnt] = H1[cnt-1][1]; L1[cnt] = L1[cnt-1][1]; } } #현재봉의 고가가 6분구간 최고가보다 크면 구간최고가를 현재봉의 고가로 변경 if H1[0] > 0 and H > H1[0] Then H1[0] = H; #현재봉의 저가가 6분구간 최저가보다 작으면 구간최저가를 현재봉의 저가로 변경 if L1[0] > 0 and L < L1[0] Then L1[0] = L; #ntime1구간 n개의 최고가/최저가 계산 #초기값 HH = 0; LL = 0; if H1[n] > 0 and L1[n] > 0 Then { #1~N까지 루프 For cnt = 1 to N { #HH가 0이거나 HH에 0보다 큰값이 저장되어 있고 H1[cnt]가 HH보다 크면 #HH를 H1[cnt]값으로 변경 if HH == 0 or (HH > 0 and H1[cnt] > HH) Then HH = H1[cnt]; #LL이 0이거나 LL이 0보다 큰값이 저장되어 있고 L1[cnt]가 LL보다 작으면 #LL를 L1[cnt]값으로 변경 if LL == 0 or (LL > 0 and L1[cnt] < LL) Then LL = L1[cnt]; } } #30분봉 시작하는 첫봉 if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or (Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or (Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then { #고가저장 H2[0] = H; #저가저장 L2[0] = L; #과거 30분구간 최고/최저값을 배열변수의 다음 공간으로 이동 For cnt = 1 to 49 { H2[cnt] = H2[cnt-1][1]; L2[cnt] = L2[cnt-1][1]; } #30분 기준으로 각 조건만족여부를 저장하는 변수 false 초기화 BE1 = False; BE2 = False; SE1 = False; SE2 = False; } #현재봉의 고가가 6분구간 최고가보다 크면 구간최고가를 현재봉의 고가로 변경 if H2[0] > 0 and H > H2[0] Then H2[0] = H; #현재봉의 저가가 6분구간 최저가보다 작으면 구간최저가를 현재봉의 저가로 변경 if L2[0] > 0 and L < L2[0] Then L2[0] = L; #지정한 시간사이이고 if Tcond == true Then { #6분봉 1~n사이 가장최고값 돌파시 즉시 매수 if MarketPosition <= 0 and HH > 0 Then Buy("b1",AtStop,HH+PriceScale*1); #30분봉 N봉전 고가 돌파시 즉시 매수 if MarketPosition <= 0 and H2[n] > 0 Then Buy("b2",AtStop,H2[n]+PriceScale*1); #6분봉 1~n사이 최저값 이탈시 즉시 매도 if MarketPosition >= 0 and LL > 0 Then Sell("s1",AtStop,LL-PriceScale*1); #30분봉 N봉전 저가 이탈시 즉시 매도 if MarketPosition >= 0 and L2[n] > 0 Then Sell("s2",AtStop,L2[n]-PriceScale*1); #현재 무포지션이거나 매도포지션이고 HH와 h2의 n봉전 값이 0이상이면(사용할값의 계산이 모두된 상태) #HH와 H2[n]중 큰값을 셋팅하고 다음봉에서 해당값보다 1틱이싱 높은 시세가 발생하면 매수 if MarketPosition <= 0 and HH > 0 and H2[n] > 0 Then Buy("b3",AtStop,max(HH,H2[n])+PriceScale*1); #현재 무포지션이거나 매수포지션이고 LL, L2의 n봉전 값이 0이상이면(사용할값의 계산이 모두된 상태) #LL와 L2[n]중 작은값을 셋팅하고 다음봉에서 해당값보다 1틱이싱 낮은 시세가 발생하면 매도 if MarketPosition >= 0 and L1[n] > 0 and L2[n] > 0 Then Sell("s3",AtStop,min(LL,L2[n])-PriceScale*1); #고가가 6분 1~n사이 최고가보다 크면 BE1은 true if H >= HH+PriceScale*1 Then BE1 = true; #고가가 30분 n봉전 고가보다 크면 BE2는 true if H >= H2[n]+PriceScale*1 Then BE2 = true; #저가가 6분 1~n사이 최저가보다 작으면 SE1은 true if L <= LL-PriceScale*1 Then SE1 = true; #저가가 30분 n봉전 저가보다 작으면 SE2는 true if L <= H2[n]+PriceScale*1 Then SE2 = true; #BE1은 true이고 BE2는 False일때 30분 n봉전고가보다 큰 시세 발생하면 즉시매수 if BE1 == true and BE2 == False Then Buy("b41",AtStop,H2[n]+PriceScale*1); #BE1은 false이고 BE2는 true일때 6분 1~n사이 최고가보다 큰 시세 발생하면 즉시매수 if BE1 == False and BE2 == true Then Buy("b42",AtStop,HH+PriceScale*1); #SE1은 true이고 SE2는 False일때 30분 n봉전저가보다 작은 시세 발생하면 즉시매도 if SE1 == true and SE2 == False Then Sell("s41",AtStop,L2[n]-PriceScale*1); #SE1은 false이고 SE2는 true일때 6분 1~n사이 최저가보다 작은 시세 발생하면 즉시매도 if SE1 == False and SE2 == true Then Sell("s42",AtStop,LL+PriceScale*1); } } #익절 SetStopProfittarget(PriceScale*익절틱수,PointStop); #손절 SetStopLoss(PriceScale*손절틱수,PointStop); #Endtime에 당일청산 IF Endtime > starttime Then SetStopEndofday(Endtime); Else { if sDate != sDate[1] Then SetStopEndofday(Endtime); } if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { IF Endtime <= starttime Then { SetStopEndofday(0); } } 3 input : ntime1(6),ntime2(30),n(10); input : StartTime(222500),EndTime(010000); input : 익절틱수(50),손절틱수(50); var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0),HH(0),LL(0); var : Tcond(false),BE1(False),BE2(False),SE1(False),SE2(False); Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0); #지정한 종료시간 이후의 첫봉일때 Tcond는 False if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; #지정한 시작시간 이후의 첫봉일때 Tcond는 true if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then Tcond = true; #영업일 변경 첫봉 if Bdate != Bdate[1] Then { #S1에 시간을 분으로 환산한 값을 저장 S1 = TimeToMinutes(stime); #D1에 날짜저장 D1 = sdate; } #D1의 값이 0보다 크고 if D1 > 0 then { #현재봉날짜가 D1하고 같으면 #현재봉의 분환산값에서 S1을 빼서 TM에 저장 #현재봉 날짜가 D1하고 다르면 (영업일 변경 후 다음날 새벽) #현재봉의 분환산값에 1440분을 더하고 S1을 빼서 TM에 저장 if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; #TM을 6으로 나누고 나머지값 저장 TF1 = TM%ntime1; #TM을 30으로 나누고 나머지값 저장 TF2 = TM%ntime2; #6분봉 시작하는 첫봉 if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or (Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or (Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then { #고가저장 H1[0] = H; #저가저장 L1[0] = L; #과거 6분구간 최고/최저값을 배열변수의 다음 공간으로 이동 For cnt = 1 to 49 { H1[cnt] = H1[cnt-1][1]; L1[cnt] = L1[cnt-1][1]; } } #현재봉의 고가가 6분구간 최고가보다 크면 구간최고가를 현재봉의 고가로 변경 if H1[0] > 0 and H > H1[0] Then H1[0] = H; #현재봉의 저가가 6분구간 최저가보다 작으면 구간최저가를 현재봉의 저가로 변경 if L1[0] > 0 and L < L1[0] Then L1[0] = L; #ntime1구간 n개의 최고가/최저가 계산 #초기값 HH = 0; LL = 0; if H1[n] > 0 and L1[n] > 0 Then { #1~N까지 루프 For cnt = 1 to N { #HH가 0이거나 HH에 0보다 큰값이 저장되어 있고 H1[cnt]가 HH보다 크면 #HH를 H1[cnt]값으로 변경 if HH == 0 or (HH > 0 and H1[cnt] > HH) Then HH = H1[cnt]; #LL이 0이거나 LL이 0보다 큰값이 저장되어 있고 L1[cnt]가 LL보다 작으면 #LL를 L1[cnt]값으로 변경 if LL == 0 or (LL > 0 and L1[cnt] < LL) Then LL = L1[cnt]; } } #30분봉 시작하는 첫봉 if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or (Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or (Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then { #고가저장 H2[0] = H; #저가저장 L2[0] = L; #과거 30분구간 최고/최저값을 배열변수의 다음 공간으로 이동 For cnt = 1 to 49 { H2[cnt] = H2[cnt-1][1]; L2[cnt] = L2[cnt-1][1]; } #30분 기준으로 각 조건만족여부를 저장하는 변수 false 초기화 BE1 = False; BE2 = False; SE1 = False; SE2 = False; } #현재봉의 고가가 6분구간 최고가보다 크면 구간최고가를 현재봉의 고가로 변경 if H2[0] > 0 and H > H2[0] Then H2[0] = H; #현재봉의 저가가 6분구간 최저가보다 작으면 구간최저가를 현재봉의 저가로 변경 if L2[0] > 0 and L < L2[0] Then L2[0] = L; #지정한 시간사이이고 if Tcond == true Then { #6분봉 1~n사이 가장최고값 돌파시 매수 if MarketPosition <= 0 and HH > 0 and C > HH+PriceScale*1 Then Buy("b1"); #30분봉 N봉전 고가 돌파시 매수 if MarketPosition <= 0 and H2[n] > 0 and C > H2[n]+PriceScale*1 Then Buy("b2"); #6분봉 1~n사이 최저값 이탈시 매도 if MarketPosition >= 0 and LL > 0 and C < LL-PriceScale*1 Then Sell("s1"); #30분봉 N봉전 저가 이탈시 매도 if MarketPosition >= 0 and L2[n] > 0 and C < L2[n]-PriceScale*1 Then Sell("s2"); #현재 무포지션이거나 매도포지션이고 종가가 2개의 값보다 동시에 크면 매수 if MarketPosition <= 0 and HH > 0 and H2[n] > 0 and C > max(HH,H2[n])+PriceScale*1 Then Buy("b3"); #현재 무포지션이거나 매도포지션이고 종가가 2개의 값보다 동시에 크면 매수 if MarketPosition >= 0 and L1[n] > 0 and L2[n] > 0 and C < min(LL,L2[n])-PriceScale*1 Then Sell("s3"); #종가가 6분 1~n사이 최고가보다 크면 BE1은 true if C >= HH+PriceScale*1 Then BE1 = true; #종가가 30분 n봉전 고가보다 크면 BE2는 true if C >= H2[n]+PriceScale*1 Then { BE2 = true; } #종가가 6분 1~n사이 최저가보다 작으면 SE1은 true if C <= LL-PriceScale*1 Then SE1 = true; #종가가 30분 n봉전 저가보다 작으면 SE2는 true if C <= H2[n]+PriceScale*1 Then SE2 = true; #BE1와 BE2가 동시만족이 되면 매수 if BE1 == true and BE2 == true and (BE1[1] == False or BE2[1] == False) Then Buy("b4"); #SE1과 BE2가 동시만족이 되면 매도 if SE1 == true and SE2 == true and (SE1[1] == true or SE2 == False) Then Sell("s4"); } } #익절 SetStopProfittarget(PriceScale*익절틱수,PointStop); #손절 SetStopLoss(PriceScale*손절틱수,PointStop); #Endtime에 당일청산 IF Endtime > starttime Then SetStopEndofday(Endtime); Else { if sDate != sDate[1] Then SetStopEndofday(Endtime); } if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { IF Endtime <= starttime Then { SetStopEndofday(0); } } 즐거운 하루되세요 > jesten77 님이 쓴 글입니다. > 제목 : 문의 > 74432 값 대입에서 문의합니다 1]초기값- HH 와 LL 에서 값을 대입할수있는 변수나 배열의 요소,입력변수, 입력변수 배열의 요소가 와야합니다 1]예제가 있었으면 합니다. ----------------------------------------------------------- 2]6분봉 왼쪽의 10번째봉사이에서에서(1~10사이)가장높은 봉의 고가 돌파시 매수신호/즉시매수 3]30분봉 왼쪽의 10번째에 해당하는 봉의 고가 돌파시 매수신호/즉시매수 4]6분봉의 왼쪽 10~1사이의 최고가돌파와 30분의 10번째 해당하는 봉의 고가 돌파가 동시에 만족할때 6분에서 매수신호/즉시매수. 5]6분봉의 왼쪽 10~1사이의 최저가돌파와 30분의 10번째 해당하는 봉의 저가 돌파가 동시에 만족할때 6분에서 매도신호/즉시매도. *6분봉에서 먼저 매수 매도 신호가 나와 있고 후에 30분봉에서 매수 매도 신호가 나오면 그때 매수 매도가 들어가는 경우, 30분봉에서 매수 매도 신호가 나와 있는 상태에서 6분봉 조건에 따라 6분봉에서 매수 매도 신호가 나오면 그때 매수 매도가 들어가는 경우, 비슷한 시간이나 동시에 6분봉과 30분봉에 매수 매도 신호가 나와서 들어가는 경우가 있을 수 있습니다. 어떤 경우의 수든 같은 방향으로 매수 매도 신호가 6분봉과 30분봉에 같이 나올 때 매수 매도 진입하길 원합니다. 감사합니다~~