커뮤니티

예스 랭기지에서 배열의 의미

프로필 이미지
quantk
2020-09-02 15:12:29
701
글번호 142020
답변완료
(1) input : Period(20); var : mav(0),t(0); mav = ma(C,period); if mav >= mav[1] Then t = 1; if mav < mav[1] Then t = -1; if t==1 and t!=t[1] Then Buy(); if t==-1 and t!=t[1] Then Sell(); 여기서 제가 궁금한 점은 mav 라는 변수를 array 로 저장을 안했음에도 불구하고 array 처럼 변수가 자동으로 저장되는 원리가 궁금합니다. mav = ma(C,period); 여기서 mav가 배열처럼 작동하기위해서는 mav[1] =mav[0] #최근의 mav 변수를 전 칸으로 이동시키는 작업 mav[0] = ma(C,period) 이런식으로 최근 값을 한칸씩 shift를 해줘야될것 같은데 예스랭기지에선 이런작업이 필요없이 mav = ma(C,period); 이 코드 한줄이면 알아서 mav가 배열이 되며 최근값을 [0]에 채워주는것 같은데 이렇게 작동한다면 array의 개념이 필요없는거 아닌가요? 아니면 제가 잘못 이해한 걸까요? 아니면 만약 3분봉에 적용시킨다고 가정했을때 봉이 끝날때까지 자동으로 for문처럼 돌면서 mav 가 append하면서 채워지는걸까요?
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2020-09-03 14:32:36

안녕하세요 예스스탁입니다. 1 예스랭귀지에서는 변수를 만들면 새로운 봉이 생기면 자동으로 이전값 참조를 위해 한칸씩 쉬프트 해주게 됩니다. var : mav(0); 차트기반언어에서는 일반변수라고 지칭하지만 내부적으로는 자동으로 쉬프트를 해주는 배열변수가 만들어진다고 보시면 됩니다. 이는 차트기반의 시스템 트레이딩 프로그램에서는 일반적으로 동일합니다. 2 예스랭귀지에서 배열변수는 하나의 변수이름으로 공간을 분할해서 한봉에 여러개의 값을 저장하고자 할때 사용합니다. 한봉전 2봉전으로 이전값을 가져오는 상황이 아니고 특정시점에 값을 저장해 최근 만족시점, 그전 만족시점으로 값을 저장하고자 할 때 사용합니다. var : mav(0),cnt(0); Array : VV[10](0); mav = ma(C,20); if CrossUp(c,mav) Then { VV[0] = C; For cnt = 1 to 9 { VV[cnt] = VV[cnt-1][1]; } } vv[0]에는 최근 크로스업시점의 종가 vv[1]에는 그전 크로스업시점의 종가 vv[2]에는 전전 크로스업시점의 종가 순으로 값을 저장 물론 배열변수도 봉마다 자동으로 쉬프트를 해주어 [1],[2],[3]으로 이전봉의 값을 가져올 수 있습니다. vv[0][0] 현재봉기준 vv[0]에 저장된값 vv[0][1] 한봉전기준 vv[0]에 저장된값 vv[0][2] 두봉전기준 vv[0]에 저장된값 vv[1][0] 현재봉기준 vv[1]에 저장된값 vv[1][1] 한봉전기준 vv[1]에 저장된값 vv[1][2] 두봉전기준 vv[1]에 저장된값 즐거운 하루되세요 > quantk 님이 쓴 글입니다. > 제목 : 예스 랭기지에서 배열의 의미 > (1) input : Period(20); var : mav(0),t(0); mav = ma(C,period); if mav >= mav[1] Then t = 1; if mav < mav[1] Then t = -1; if t==1 and t!=t[1] Then Buy(); if t==-1 and t!=t[1] Then Sell(); 여기서 제가 궁금한 점은 mav 라는 변수를 array 로 저장을 안했음에도 불구하고 array 처럼 변수가 자동으로 저장되는 원리가 궁금합니다. mav = ma(C,period); 여기서 mav가 배열처럼 작동하기위해서는 mav[1] =mav[0] #최근의 mav 변수를 전 칸으로 이동시키는 작업 mav[0] = ma(C,period) 이런식으로 최근 값을 한칸씩 shift를 해줘야될것 같은데 예스랭기지에선 이런작업이 필요없이 mav = ma(C,period); 이 코드 한줄이면 알아서 mav가 배열이 되며 최근값을 [0]에 채워주는것 같은데 이렇게 작동한다면 array의 개념이 필요없는거 아닌가요? 아니면 제가 잘못 이해한 걸까요? 아니면 만약 3분봉에 적용시킨다고 가정했을때 봉이 끝날때까지 자동으로 for문처럼 돌면서 mav 가 append하면서 채워지는걸까요?
프로필 이미지

quantk

2020-09-03 22:20:57

if CrossUp(c,mav) Then { VV[0] = C; For cnt = 1 to 9 { VV[cnt] = VV[cnt-1][1]; } } 음 그럼 여기서 VV[cnt] = VV[cnt-1][1]; 어떤 시점을 의미하는건 배열의 (V[i][j]) 뒤에칸인 j를 의미하는거고 저코드는 사실 풀어서 보면 VV[cnt][0] = VV[cnt-1][1]; 이코드와 같은 의미이고 [0] 인 현재시점에 직전 시점의 최근 크로스인 VV[1][0](현재시점에서의 직전 크로스) = VV[0][1] (직전 시점의 최근크로스) VV[2][0] = VV[1][1] . . . . 이런식으로 생각해도 될까요? 보통 프로그래밍언어에선 배열의 앞부분이 Key 로 쓰이던데 예스에선 배열의 뒷부분이 시점의 key value 인것 같아서 조금 생소하네요 ㅠㅠ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 예스 랭기지에서 배열의 의미 > 안녕하세요 예스스탁입니다. 1 예스랭귀지에서는 변수를 만들면 새로운 봉이 생기면 자동으로 이전값 참조를 위해 한칸씩 쉬프트 해주게 됩니다. var : mav(0); 차트기반언어에서는 일반변수라고 지칭하지만 내부적으로는 자동으로 쉬프트를 해주는 배열변수가 만들어진다고 보시면 됩니다. 이는 차트기반의 시스템 트레이딩 프로그램에서는 일반적으로 동일합니다. 2 예스랭귀지에서 배열변수는 하나의 변수이름으로 공간을 분할해서 한봉에 여러개의 값을 저장하고자 할때 사용합니다. 한봉전 2봉전으로 이전값을 가져오는 상황이 아니고 특정시점에 값을 저장해 최근 만족시점, 그전 만족시점으로 값을 저장하고자 할 때 사용합니다. var : mav(0),cnt(0); Array : VV[10](0); mav = ma(C,20); if CrossUp(c,mav) Then { VV[0] = C; For cnt = 1 to 9 { VV[cnt] = VV[cnt-1][1]; } } vv[0]에는 최근 크로스업시점의 종가 vv[1]에는 그전 크로스업시점의 종가 vv[2]에는 전전 크로스업시점의 종가 순으로 값을 저장 물론 배열변수도 봉마다 자동으로 쉬프트를 해주어 [1],[2],[3]으로 이전봉의 값을 가져올 수 있습니다. vv[0][0] 현재봉기준 vv[0]에 저장된값 vv[0][1] 한봉전기준 vv[0]에 저장된값 vv[0][2] 두봉전기준 vv[0]에 저장된값 vv[1][0] 현재봉기준 vv[1]에 저장된값 vv[1][1] 한봉전기준 vv[1]에 저장된값 vv[1][2] 두봉전기준 vv[1]에 저장된값 즐거운 하루되세요 > quantk 님이 쓴 글입니다. > 제목 : 예스 랭기지에서 배열의 의미 > (1) input : Period(20); var : mav(0),t(0); mav = ma(C,period); if mav >= mav[1] Then t = 1; if mav < mav[1] Then t = -1; if t==1 and t!=t[1] Then Buy(); if t==-1 and t!=t[1] Then Sell(); 여기서 제가 궁금한 점은 mav 라는 변수를 array 로 저장을 안했음에도 불구하고 array 처럼 변수가 자동으로 저장되는 원리가 궁금합니다. mav = ma(C,period); 여기서 mav가 배열처럼 작동하기위해서는 mav[1] =mav[0] #최근의 mav 변수를 전 칸으로 이동시키는 작업 mav[0] = ma(C,period) 이런식으로 최근 값을 한칸씩 shift를 해줘야될것 같은데 예스랭기지에선 이런작업이 필요없이 mav = ma(C,period); 이 코드 한줄이면 알아서 mav가 배열이 되며 최근값을 [0]에 채워주는것 같은데 이렇게 작동한다면 array의 개념이 필요없는거 아닌가요? 아니면 제가 잘못 이해한 걸까요? 아니면 만약 3분봉에 적용시킨다고 가정했을때 봉이 끝날때까지 자동으로 for문처럼 돌면서 mav 가 append하면서 채워지는걸까요?