예스스탁
예스스탁 답변
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분봉에 같이 나올 때 매수 매도 진입하길 원합니다.
감사합니다~~