커뮤니티
답변 주신 글에 대한 재 질문
2012-04-25 15:56:54
391
글번호 50492
안녕하세요..
아래 원문 글에 대한 답변 주신거 같이 적었습니다.
확인을 해보니.. 숫자를 직접 적으면 제대로 작동을 하는데 for 문 내에서 변수로 할당을 하면 작동이상이 있네요..
아래 예에서 보면 for 루프 내에서 모든 값을 찍어 보면 v_cnt를 사용하나 안하나 값을 정상적으로 찍힙니다. 그런데 crossup 이 CrossUP(v_rsi[v_cnt], 50) 는 안먹고 CrossUP(v_rsi[3], 50) 은 먹네요.. ㅡㅡ;;
추가 실험으로 for 문 안에서 v_cnt_tmp로 하나 더 선언하고 v_cnt_tmp = v_cnt 한 다음에 CrossUP(v_rsi[v_cnt_tmp], 50)로 실험해 보니 이경우는 무조건 true가 나옵니다. ㅡㅡ
이거 방법이 없을까요?
var: v_cnt(0), v_rsi(0);
v_cnt =3;
v_rsi = RSI[14];
for v_cnt = 3 to 15
{
MessageLog("test: %.f / %.2f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",v_cnt, v_rsi[v_cnt]);
If CrossUP(v_rsi[v_cnt], 50) Then
MessageLog("v_cnt: %.f / %.f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",V_CNT, v_rsi[v_cnt]);
If CrossUP(v_rsi[3], 50) Then
MessageLog("no v_cnt: %.f / %.f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",V_CNT, v_rsi[v_cnt]);
}
--------------------------------------------------------
안녕하세요
예스스탁입니다.
해당 내용을 몇개 종목의 차트에 적용해 모두 살펴 보았지만
잘못 발생하는 봉이 없습니다.
골든크로스후 3봉후에 신호가 정상적으로 발생합니다.
적용 시스템
var : v_rsi(0);
v_rsi = RSI(14);
if CrossUP( v_rsi[3], 50) Then
buy();
if CrossDown( v_rsi[3], 50) Then
ExitLong();
적용 지표
var : v_rsi(0);
v_rsi = RSI(14);
plot1(V_rsi);
PlotBaseLine1(50);
지표와 같이 적용 후 확인해 보신후에
이상이 있는 신호를 캡쳐하셔서 그림을 올려주시기 바랍니다.
즐거운 하루되세요
> WT_nazilo75 님이 쓴 글입니다.
> 제목 : 수식 질문
> Crossup 함수를 사용해서 아래와 같이 과거 지표에 적용을 하였더니 제대로 작동을 안하는거 같습니다.
v_rsi = RSI(14);
CrossUP( v_rsi[3], 50)
//3봉전의 rsi가 50을 초과 돌파 하면
위와 같이 하면 CrossUP 내부에서 v_rsi[4] 의 값과 v_rsi[3] 의 값이 비교 되어야 할터인데 아마도 v_rsi[1]과 비교 하는거 같네요..
과거 데이터 에도 먹히게 하려면 어찌 해야 할까요? CrossUP을 풀어서 적용을 해야 할거 같은데 가이드 부탁드립니다.
답변 1
예스스탁 예스스탁 답변
2012-04-26 10:14:25
안녕하세요
예스스탁입니다.
최초 식 적용시 수식을 스캔하게 되는데
CrossUP(v_rsi[3], 50)로 작성할 경우 3봉전의 값을 사용하므로
내부적으로 3봉전의 값을 사용할 수 있도록 준비를 하지만
If CrossUP(v_rsi[v_cnt], 50) Then 와 같은 경우 최초 식 스캔시에는
단지 이전봉의 값이 V_cnt라는 것만 인지가 되고 몇봉전인지는 인지가 되지 않습니다.
이전봉의 값을 사용할 준비를 하지 않은상태에서 이전봉을 값을 가져오게 하므로
정확한 값이 리턴되지 않습니다.
for문에서 함수나 조건식의 이전봉의 값을 루프를 돌리실 경우
해당 함수나 조건을 내부변수로 처리하신 후
해당 내부변수의 이전값을 참조하도록 식을 작성하셔야 합니다.
var: v_cnt(0), v_rsi(0),cond(false);
v_cnt =3;
v_rsi = RSI(14);
cond = crossup(V_rsi,50);
for v_cnt = 3 to 15
{
MessageLog("test: %.f / %.2f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",v_cnt, v_rsi[v_cnt]);
If cond == true Then
MessageLog("v_cnt: %.f / %.f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",V_CNT, v_rsi[v_cnt]);
If CrossUP(v_rsi[3], 50) Then
MessageLog("no v_cnt: %.f / %.f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",V_CNT, v_rsi[v_cnt]);
}
즐거운 하루되세요
> WT_nazilo75 님이 쓴 글입니다.
> 제목 : 답변 주신 글에 대한 재 질문
> 안녕하세요..
아래 원문 글에 대한 답변 주신거 같이 적었습니다.
확인을 해보니.. 숫자를 직접 적으면 제대로 작동을 하는데 for 문 내에서 변수로 할당을 하면 작동이상이 있네요..
아래 예에서 보면 for 루프 내에서 모든 값을 찍어 보면 v_cnt를 사용하나 안하나 값을 정상적으로 찍힙니다. 그런데 crossup 이 CrossUP(v_rsi[v_cnt], 50) 는 안먹고 CrossUP(v_rsi[3], 50) 은 먹네요.. ㅡㅡ;;
추가 실험으로 for 문 안에서 v_cnt_tmp로 하나 더 선언하고 v_cnt_tmp = v_cnt 한 다음에 CrossUP(v_rsi[v_cnt_tmp], 50)로 실험해 보니 이경우는 무조건 true가 나옵니다. ㅡㅡ
이거 방법이 없을까요?
var: v_cnt(0), v_rsi(0);
v_cnt =3;
v_rsi = RSI[14];
for v_cnt = 3 to 15
{
MessageLog("test: %.f / %.2f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",v_cnt, v_rsi[v_cnt]);
If CrossUP(v_rsi[v_cnt], 50) Then
MessageLog("v_cnt: %.f / %.f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",V_CNT, v_rsi[v_cnt]);
If CrossUP(v_rsi[3], 50) Then
MessageLog("no v_cnt: %.f / %.f / %.f / %.2f / %.2f / %.2f / %.2f / %.2f",V_CNT, v_rsi[v_cnt]);
}
--------------------------------------------------------
안녕하세요
예스스탁입니다.
해당 내용을 몇개 종목의 차트에 적용해 모두 살펴 보았지만
잘못 발생하는 봉이 없습니다.
골든크로스후 3봉후에 신호가 정상적으로 발생합니다.
적용 시스템
var : v_rsi(0);
v_rsi = RSI(14);
if CrossUP( v_rsi[3], 50) Then
buy();
if CrossDown( v_rsi[3], 50) Then
ExitLong();
적용 지표
var : v_rsi(0);
v_rsi = RSI(14);
plot1(V_rsi);
PlotBaseLine1(50);
지표와 같이 적용 후 확인해 보신후에
이상이 있는 신호를 캡쳐하셔서 그림을 올려주시기 바랍니다.
즐거운 하루되세요
> WT_nazilo75 님이 쓴 글입니다.
> 제목 : 수식 질문
> Crossup 함수를 사용해서 아래와 같이 과거 지표에 적용을 하였더니 제대로 작동을 안하는거 같습니다.
v_rsi = RSI(14);
CrossUP( v_rsi[3], 50)
//3봉전의 rsi가 50을 초과 돌파 하면
위와 같이 하면 CrossUP 내부에서 v_rsi[4] 의 값과 v_rsi[3] 의 값이 비교 되어야 할터인데 아마도 v_rsi[1]과 비교 하는거 같네요..
과거 데이터 에도 먹히게 하려면 어찌 해야 할까요? CrossUP을 풀어서 적용을 해야 할거 같은데 가이드 부탁드립니다.
이전글