안녕하세요! 메뉴얼에 나온 것에 대해 이해가 안 가서 질문 드립니다.
배열에 대한 설명 부분인데요,
Hval이라는 배열에 for 루프로 하는 예시가 있는데
이해가 안 가는 두가지 포인트가 있습니다.
1. 메뉴얼에는
Hval[0] =H을 한 후에
For 루프 안에서
Hval[cnt+1] = Hval[cnt][1]였나요?
그런식으로 하는데
예스트레이더를 처음 봤지만 그냥 일반 코더인 사람을
가정하면
예로 Hval[0]에는 H라는, 1분봉이 메뉴얼의 가정이니
현재 1분봉의 고가값, 값 즉 그냥 "숫자"가 있을 거라고
생각하는데
저 위의 식에서는
cnt가 1인 경우 가정을 해보면
Hval[0][1]을 다시 Hval[1]에 대입합니다.
근데 우리같은 범용 프로그래밍 랭귀지에 익숙한 사고에서는
Hval[0]은 "데이터 타입"은 숫자인데 다시 [0]뒤에 [1]을 붙였습니다.이에 대해 예스트레이더 메뉴얼에
설명이 필요한데 없네요..
추론을 하면 저 H라는 것의 특성이 사실은 그럼 배열이기도 하고 어떤 때는 그냥 숫자값이 대입되기도 한다 를
우리는 추론이 가능한데 정확한 설명이 메뉴얼에 없으니
상당히 혼란스럽습니다...
즉 Hval[0]에 다시 [1]을 붙이는 것으로 보아 애초에 Hval에 대입한 H라는 놈의 정체는
어떤 때는 숫자값, 다시 저렇게 assign 즉 대입연산 시에는 다시 배열처럼 다룰수도 있다는 건데요..
설명을 자세히 해주실수 있는지요? 그리고
관계자분들께 이를 메뉴얼에 반영해주셨으면 합니다.
사실 다른 분들도 이는 헷갈릴만하다고 생각이 드네요.
이는 데이터 타입에 대한 궁금증이고 또한
[1]을 붙인 것도 이유가 헷갈립니다.
이렇기 되면 60분이 지난 시점에 현재 설정 분봉을 1분봉으로 가정한다면 1분이 지났을 때 현재 1분 전 고가봉인데
Hval에는 60분이라는 시간 단위의 최고가를 저장하는 게 용도로 쓰려고 만든 것인데 정작 저장되는 것은 1분 전의 고가이니 1시간 전의 60분 최고가가 저장되는게 아닌 1분 전 고가가 저장되는게 아닌가요? 헷갈려서 제가 논리적으로 건너 뛰어 생각못한 것이 있는 듯한데 설명 도움주시면 감사하겠습니다 ^^
2. 또한 궁금한 것은
저 예제에서 한칸씩 밀리기 한다는 말에 for loop로직이
상식적으로 납득이 안되는 점입니다.
그런 모양의 for loop는
당연히 맨 처음 넣은 값이 x라면
N+1번째 인덱스의 요소에 N번째 값 x를 넣으면
그냥 모든 값이 그 x값으로 되는 로직이고
예스트레이더는 어떤 다른 메커니즘이있어 이걸 막는듯한데
그런 설명이 없네요..
상식적으로 c언어나 파이썬등의 array나 list를 생각하면.예시의 for loop은 좀 이해가 더 안갑니다.
예시의 for 루프는 단지 한칸씩 새로운 고가 갱신때마다
한칸씩만 밀리게 하는게 목적 아닌지요?(제가 잘 맞게 판단한 건지요?)
그렇다면 하나씩 그 전 데이터를 한칸씩 뒤로 미는
알고리즘일텐데
저 for 루프를 돌리면
일반 프로그래밍 상식상으로는 인덱스 1부터 9까지
순서로 하면
1부터 9가 다 같은 값이 되지 않나요?
근데 예스트레이더가 인덱스 숫자가 작은 순서가 맨 마지막이니 for loop의 인덱스를 반대로 한 셈이 되어
맞는 건지요 ㅠㅠ?
예스트레이더의 인덱스가 역순(인덱스가 숫자가 크면 더 그 전 봉값인)이기에 많이 헷갈립니다
언제나 예스트레이더 잘 쓰고 있으며 더욱 잘 쓰고 싶어
미뤄온 질문 심화해서 드립니다:)
긴 글 읽어주셔서 감사드립니다.
예스트레이더 초보 코더에게 도움 잘 부탁드립니다
답변 2
예스스탁
예스스탁 답변
2023-04-03 13:19:06
안녕하세요
예스스탁입니다.
1
예스랭귀지는 차트기반의 언어입니다.
수식이 차트에 적용되면 차트 첫봉부터 현재봉으로 오면서 값을 계산하고 저장하며
현재시점에서 과거봉의 데이터나 변수값을 가져와서 사용할 수 있게 되어 있습니다.
이전봉의 값을 가져올때는 []안에 봉수를 지정합니다.
모든 데이터, 함수, 변수뒤에 마지막[]은 이전봉 참조를 지칭하게 됩니다.
현재봉인 [0]은 생략이 가능합니다.
2
var : AA(0);
AA = ma(C,20);
일반변수가 위와 같은 경우 AA에는 매봉 20이평의 값을 저장이 되며
이전봉의 값을 가져올때 뒤에 []을 붙이고 봉수를 지정합니다.
AA나 AA[0]은 현재봉 값, AA[1]은 1봉전의 20이평, AA[2]는 2봉전의 20이평값과 같이 가져와 사용 할수 있습니다.
3
배열변수도 마찬가지입니다.
Array : Hval[10](0);
Hval[0][0]은 0번방 현재봉값
Hval[1][0]은 1번방 현재봉값
Hval[2][0]는 2번방 현재봉값입니다.
Hval[0][1]은 0번방 1봉전값
Hval[1][1]은 1번방 1봉전값
Hval[2][1]는 2번방 1봉전값입니다.
위와 같이 각 배열방 뒤에 []를 붙이고 이전봉의 값을 가져와 사용할 수 있습니다.
Hval[0] = h;
for count = 1 to 9
{
Hval[count] = Hval[count][1];//[1]은 한봉전을 의미합니다.
}
위 내용은
우선 0번방에 현재봉 고가를 저장하고
Hval[1]에는 Hval[0]의 1봉전값을 가져와 저장
Hval[2]에는 Hval[1]의 1봉전값을 가져와 저장
.....
Hval[9]에는 Hval[8]의 1봉전값을 가져와 저장한 식입니다.
for문에 앞서[0]번방에 값을 먼저 저장했으므로
[1]~[9]번방은 이전봉에 작성된 값을 가져와 저장한 것입니다.
물론 위식을 아래와 같이 작성될수도 있습니다.
먼저 옮기고 나중에 0번방에 값을 저장하게 하셔도 됩니다.
for count = 9 downto 1
{
Hval[count] = Hval[count-1];
}
Hval[0] = h;
즐거운 하루되세요
> nirvana 님이 쓴 글입니다.
> 제목 : 메뉴얼의 배열 예제 설명
> 안녕하세요! 메뉴얼에 나온 것에 대해 이해가 안 가서 질문 드립니다.
배열에 대한 설명 부분인데요,
Hval이라는 배열에 for 루프로 하는 예시가 있는데
이해가 안 가는 두가지 포인트가 있습니다.
1. 메뉴얼에는
Hval[0] =H을 한 후에
For 루프 안에서
Hval[cnt+1] = Hval[cnt][1]였나요?
그런식으로 하는데
예스트레이더를 처음 봤지만 그냥 일반 코더인 사람을
가정하면
예로 Hval[0]에는 H라는, 1분봉이 메뉴얼의 가정이니
현재 1분봉의 고가값, 값 즉 그냥 "숫자"가 있을 거라고
생각하는데
저 위의 식에서는
cnt가 1인 경우 가정을 해보면
Hval[0][1]을 다시 Hval[1]에 대입합니다.
근데 우리같은 범용 프로그래밍 랭귀지에 익숙한 사고에서는
Hval[0]은 "데이터 타입"은 숫자인데 다시 [0]뒤에 [1]을 붙였습니다.이에 대해 예스트레이더 메뉴얼에
설명이 필요한데 없네요..
추론을 하면 저 H라는 것의 특성이 사실은 그럼 배열이기도 하고 어떤 때는 그냥 숫자값이 대입되기도 한다 를
우리는 추론이 가능한데 정확한 설명이 메뉴얼에 없으니
상당히 혼란스럽습니다...
즉 Hval[0]에 다시 [1]을 붙이는 것으로 보아 애초에 Hval에 대입한 H라는 놈의 정체는
어떤 때는 숫자값, 다시 저렇게 assign 즉 대입연산 시에는 다시 배열처럼 다룰수도 있다는 건데요..
설명을 자세히 해주실수 있는지요? 그리고
관계자분들께 이를 메뉴얼에 반영해주셨으면 합니다.
사실 다른 분들도 이는 헷갈릴만하다고 생각이 드네요.
이는 데이터 타입에 대한 궁금증이고 또한
[1]을 붙인 것도 이유가 헷갈립니다.
이렇기 되면 60분이 지난 시점에 현재 설정 분봉을 1분봉으로 가정한다면 1분이 지났을 때 현재 1분 전 고가봉인데
Hval에는 60분이라는 시간 단위의 최고가를 저장하는 게 용도로 쓰려고 만든 것인데 정작 저장되는 것은 1분 전의 고가이니 1시간 전의 60분 최고가가 저장되는게 아닌 1분 전 고가가 저장되는게 아닌가요? 헷갈려서 제가 논리적으로 건너 뛰어 생각못한 것이 있는 듯한데 설명 도움주시면 감사하겠습니다 ^^
2. 또한 궁금한 것은
저 예제에서 한칸씩 밀리기 한다는 말에 for loop로직이
상식적으로 납득이 안되는 점입니다.
그런 모양의 for loop는
당연히 맨 처음 넣은 값이 x라면
N+1번째 인덱스의 요소에 N번째 값 x를 넣으면
그냥 모든 값이 그 x값으로 되는 로직이고
예스트레이더는 어떤 다른 메커니즘이있어 이걸 막는듯한데
그런 설명이 없네요..
상식적으로 c언어나 파이썬등의 array나 list를 생각하면.예시의 for loop은 좀 이해가 더 안갑니다.
예시의 for 루프는 단지 한칸씩 새로운 고가 갱신때마다
한칸씩만 밀리게 하는게 목적 아닌지요?(제가 잘 맞게 판단한 건지요?)
그렇다면 하나씩 그 전 데이터를 한칸씩 뒤로 미는
알고리즘일텐데
저 for 루프를 돌리면
일반 프로그래밍 상식상으로는 인덱스 1부터 9까지
순서로 하면
1부터 9가 다 같은 값이 되지 않나요?
근데 예스트레이더가 인덱스 숫자가 작은 순서가 맨 마지막이니 for loop의 인덱스를 반대로 한 셈이 되어
맞는 건지요 ㅠㅠ?
예스트레이더의 인덱스가 역순(인덱스가 숫자가 크면 더 그 전 봉값인)이기에 많이 헷갈립니다
언제나 예스트레이더 잘 쓰고 있으며 더욱 잘 쓰고 싶어
미뤄온 질문 심화해서 드립니다:)
긴 글 읽어주셔서 감사드립니다.
예스트레이더 초보 코더에게 도움 잘 부탁드립니다
nirvana
2023-04-13 09:16:17
답변 감사드립니다!!
근데 저는 어떤 원리에서 저게 되는지 궁금합니다
즉
원래 다른 파이썬이나 c에서는
저렇게 for 루프에서
그 다음 인덱스에 대입하면 그 전의 데이터가
지워지잖아요? 근데 예스트레이더는 어떤 원리기에
안 지워지고 저런 식으로 대입되는지요?
예로들면 파이썬에서는
For i in xx:
식으로 하고 저 배열 예제 처럼 하면
그 전의 인덱스 값으로, 즉 예로 a[cnt-1][1]이
1이었고 a[cnt]에 대입한다면 모든 그 후의 인덱스가
다 같은 값이 되잖아요? 예스트레이더는 어떻게
저게 그렇지 않고 되는지요? 애초에
저 스크립트가 한 시점에서만 돌고 나머지 봉 데이터가
불변이라 그런걸까요? 제가 놓친 디테일이 있는건지요?
메커니즘이 궁금합니다
언제나 상세한 답변 감사드립니다!!
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 메뉴얼의 배열 예제 설명
>
안녕하세요
예스스탁입니다.
1
예스랭귀지는 차트기반의 언어입니다.
수식이 차트에 적용되면 차트 첫봉부터 현재봉으로 오면서 값을 계산하고 저장하며
현재시점에서 과거봉의 데이터나 변수값을 가져와서 사용할 수 있게 되어 있습니다.
이전봉의 값을 가져올때는 []안에 봉수를 지정합니다.
모든 데이터, 함수, 변수뒤에 마지막[]은 이전봉 참조를 지칭하게 됩니다.
현재봉인 [0]은 생략이 가능합니다.
2
var : AA(0);
AA = ma(C,20);
일반변수가 위와 같은 경우 AA에는 매봉 20이평의 값을 저장이 되며
이전봉의 값을 가져올때 뒤에 []을 붙이고 봉수를 지정합니다.
AA나 AA[0]은 현재봉 값, AA[1]은 1봉전의 20이평, AA[2]는 2봉전의 20이평값과 같이 가져와 사용 할수 있습니다.
3
배열변수도 마찬가지입니다.
Array : Hval[10](0);
Hval[0][0]은 0번방 현재봉값
Hval[1][0]은 1번방 현재봉값
Hval[2][0]는 2번방 현재봉값입니다.
Hval[0][1]은 0번방 1봉전값
Hval[1][1]은 1번방 1봉전값
Hval[2][1]는 2번방 1봉전값입니다.
위와 같이 각 배열방 뒤에 []를 붙이고 이전봉의 값을 가져와 사용할 수 있습니다.
Hval[0] = h;
for count = 1 to 9
{
Hval[count] = Hval[count][1];//[1]은 한봉전을 의미합니다.
}
위 내용은
우선 0번방에 현재봉 고가를 저장하고
Hval[1]에는 Hval[0]의 1봉전값을 가져와 저장
Hval[2]에는 Hval[1]의 1봉전값을 가져와 저장
.....
Hval[9]에는 Hval[8]의 1봉전값을 가져와 저장한 식입니다.
for문에 앞서[0]번방에 값을 먼저 저장했으므로
[1]~[9]번방은 이전봉에 작성된 값을 가져와 저장한 것입니다.
물론 위식을 아래와 같이 작성될수도 있습니다.
먼저 옮기고 나중에 0번방에 값을 저장하게 하셔도 됩니다.
for count = 9 downto 1
{
Hval[count] = Hval[count-1];
}
Hval[0] = h;
즐거운 하루되세요
> nirvana 님이 쓴 글입니다.
> 제목 : 메뉴얼의 배열 예제 설명
> 안녕하세요! 메뉴얼에 나온 것에 대해 이해가 안 가서 질문 드립니다.
배열에 대한 설명 부분인데요,
Hval이라는 배열에 for 루프로 하는 예시가 있는데
이해가 안 가는 두가지 포인트가 있습니다.
1. 메뉴얼에는
Hval[0] =H을 한 후에
For 루프 안에서
Hval[cnt+1] = Hval[cnt][1]였나요?
그런식으로 하는데
예스트레이더를 처음 봤지만 그냥 일반 코더인 사람을
가정하면
예로 Hval[0]에는 H라는, 1분봉이 메뉴얼의 가정이니
현재 1분봉의 고가값, 값 즉 그냥 "숫자"가 있을 거라고
생각하는데
저 위의 식에서는
cnt가 1인 경우 가정을 해보면
Hval[0][1]을 다시 Hval[1]에 대입합니다.
근데 우리같은 범용 프로그래밍 랭귀지에 익숙한 사고에서는
Hval[0]은 "데이터 타입"은 숫자인데 다시 [0]뒤에 [1]을 붙였습니다.이에 대해 예스트레이더 메뉴얼에
설명이 필요한데 없네요..
추론을 하면 저 H라는 것의 특성이 사실은 그럼 배열이기도 하고 어떤 때는 그냥 숫자값이 대입되기도 한다 를
우리는 추론이 가능한데 정확한 설명이 메뉴얼에 없으니
상당히 혼란스럽습니다...
즉 Hval[0]에 다시 [1]을 붙이는 것으로 보아 애초에 Hval에 대입한 H라는 놈의 정체는
어떤 때는 숫자값, 다시 저렇게 assign 즉 대입연산 시에는 다시 배열처럼 다룰수도 있다는 건데요..
설명을 자세히 해주실수 있는지요? 그리고
관계자분들께 이를 메뉴얼에 반영해주셨으면 합니다.
사실 다른 분들도 이는 헷갈릴만하다고 생각이 드네요.
이는 데이터 타입에 대한 궁금증이고 또한
[1]을 붙인 것도 이유가 헷갈립니다.
이렇기 되면 60분이 지난 시점에 현재 설정 분봉을 1분봉으로 가정한다면 1분이 지났을 때 현재 1분 전 고가봉인데
Hval에는 60분이라는 시간 단위의 최고가를 저장하는 게 용도로 쓰려고 만든 것인데 정작 저장되는 것은 1분 전의 고가이니 1시간 전의 60분 최고가가 저장되는게 아닌 1분 전 고가가 저장되는게 아닌가요? 헷갈려서 제가 논리적으로 건너 뛰어 생각못한 것이 있는 듯한데 설명 도움주시면 감사하겠습니다 ^^
2. 또한 궁금한 것은
저 예제에서 한칸씩 밀리기 한다는 말에 for loop로직이
상식적으로 납득이 안되는 점입니다.
그런 모양의 for loop는
당연히 맨 처음 넣은 값이 x라면
N+1번째 인덱스의 요소에 N번째 값 x를 넣으면
그냥 모든 값이 그 x값으로 되는 로직이고
예스트레이더는 어떤 다른 메커니즘이있어 이걸 막는듯한데
그런 설명이 없네요..
상식적으로 c언어나 파이썬등의 array나 list를 생각하면.예시의 for loop은 좀 이해가 더 안갑니다.
예시의 for 루프는 단지 한칸씩 새로운 고가 갱신때마다
한칸씩만 밀리게 하는게 목적 아닌지요?(제가 잘 맞게 판단한 건지요?)
그렇다면 하나씩 그 전 데이터를 한칸씩 뒤로 미는
알고리즘일텐데
저 for 루프를 돌리면
일반 프로그래밍 상식상으로는 인덱스 1부터 9까지
순서로 하면
1부터 9가 다 같은 값이 되지 않나요?
근데 예스트레이더가 인덱스 숫자가 작은 순서가 맨 마지막이니 for loop의 인덱스를 반대로 한 셈이 되어
맞는 건지요 ㅠㅠ?
예스트레이더의 인덱스가 역순(인덱스가 숫자가 크면 더 그 전 봉값인)이기에 많이 헷갈립니다
언제나 예스트레이더 잘 쓰고 있으며 더욱 잘 쓰고 싶어
미뤄온 질문 심화해서 드립니다:)
긴 글 읽어주셔서 감사드립니다.
예스트레이더 초보 코더에게 도움 잘 부탁드립니다