(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하면서 채워지는걸까요?