커뮤니티
문의 (DATA1)
2013-11-21 16:00:21
230
글번호 69681
1. 맨 아래내용은 어제 답변주신 내용입니다. 모든 부분을 이해한 것이 아니기에 확인차원에서 재질문 드립니다.
제가 이해한 부분입니다.
* DATA1을 기입하지 않으면 디폴트로 DATA1을 가리키는 것은 아니라는 점...
* DATA1에서의 데이타(이평선, 봉 등)만을 이용할 경우에는 DATA1을 모두 기입해주는 것이 명확하고 처리하는 속도?에서 이점을 얻을 수 있다는 점
* DATA1에서 DATA2의 참조데이타를 이용할 경우에는 반드시 참조할 데이타를 명시해야함
VARS: A(0);
A = DATA2(AA) + DATA3(M1 / M2 * 100);
위와 같이 해줘야함.
여기서
VARS: A(0); 인지 VARS: A(0, DATA1); 인지는 헷갈립니다.
제가 이해한 부분이 정확한지 다시한번 봐주시고 조언주시면 감사드리겠습니다.
2. 3분봉에서 일봉을 표시하기 위해 사용했던것인데 DATA1인 1분봉에서 표시하게끔해주고 싶습니다. 변환부탁드립니다.
VARS: M5DP(5), M13DP(13), M20DP(20);
VARS: M5D(0, DATA2), M13D(0, DATA2), M20D(0, DATA2);
VARS: M5D.SUM(0, DATA2), M13D.SUM(0, DATA2), M20D.SUM(0, DATA2), CNT(0);
ARRAY: CC[100](0, DATA2);
//----------------------------------------------------------------------------------------------------------------------------------------------------------
if ( DATA2(Date <> Date[1]) ) Then
{
for CNT = 0 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
CC[0] = DATA2(C);
M5D.SUM = 0; M13D.SUM = 0; M20D.SUM = 0;
for CNT = 0 to M20DP - 1
{
if ( (CNT < M5DP) AND (CC[M5DP - 1] > 0) ) Then M5D.SUM = M5D.SUM + CC[CNT];
if ( (CNT < M13DP) AND (CC[M13DP - 1] > 0) ) Then M13D.SUM = M13D.SUM + CC[CNT];
if ( (CNT < M20DP) AND (CC[M20DP - 1] > 0) ) Then M20D.SUM = M20D.SUM + CC[CNT];
}
M5D = (M5D.SUM / M5DP);
M13D = (M13D.SUM / M13DP);
M20D = (M20D.SUM / M20DP);
Plot21(M5D, "M5D", RGB(0,255,0), DEF, 1);
Plot22(M13D, "M13D", RGB(0,255,255), DEF, 1);
Plot23(M20D, "M20D", RGB(255,102,204), DEF, 1);
3. 10분후에만 작동하게 끔 해주려고 합니다. 아래식 맞는건지요??
장시작후 10분후에도 M1과 M2가 역배열되었는데도 Buy 진입이 되는 것을 확인할 수 있었습니다.
VARS: PreD.TM(0, DATA1);
VARS: PreD.Q1(FALSE, DATA1);
if DATA1(Date <> Date[1]) then
{
PreD.TM = DATA1(TimeToMinutes(stime));
PreD.Q1 = FALSE;
}
if ( (TimeToMinutes(stime) >= PreD.TM + 10) AND (M1 > M2) ) then
{ PreD.Q1 = TRUE; }
............
if (PreD.Q1 == TRUE) then buy();
아래 문장에서 DATA1을 삭제시 어떻게 달라지나요?
PreD.TM = DATA1(TimeToMinutes(stime));
금일도 질문이 다소 많은데 부탁드리겠습니다.
늘 감사드립니다.
-------------------------------------------------------------------------
답변주신 내용
-------------------------------------------------------------------------
수식에서 참조데이터를 사용하는 경우
if DATA1(Date <> Date[1]) then
{
실행문
}
은 data1로 지정을 했으므로 if문이 data1봉만 기준으로 계산이 되는데
if Date <> Date[1] then
위와 같이 작성하시면 차트의 있는 봉이 완성이 될때마다
if문이 구동이 되어 조건만족여부를 따져 만족하면
하위의 실행문들이 수행되므로 중복으로 계산이 됩니다.
마찬가지로
DATA1(TMA(gCLOSE, MP1));
와 같이 작성하시면 해당 함수를 계산하는 봉을 data1의봉수로만 따지게 되는데
TMA(gCLOSE, MP1);
와 같이 있으면 참조데이터를 포함해서 봉수를 산정하게 됩니다.
참조데이터를 이용하는 식을 만드실때는 해당 조건문 혹은 함수가
따라가야 하는 데이터가 어떤데이터인지 명시해 주셔야 합니다.
답변 1
예스스탁 예스스탁 답변
2013-11-21 16:34:42
안녕하세요
예스스탁입니다.
1.
* DATA1을 기입하지 않으면 디폴트로 DATA1을 가리키는 것은 아니라는 점...
* DATA1에서의 데이타(이평선, 봉 등)만을 이용할 경우에는 DATA1을 모두 기입해주는 것이 명확하고 처리하는 속도?에서 이점을 얻을 수 있다는 점
* DATA1에서 DATA2의 참조데이타를 이용할 경우에는 반드시 참조할 데이타를 명시해야함
예 이해하신 내용이 정확합니다.
2.
수식의 내용은 동일합니다.
수식에 사용된 모든 data2를 data1로만 변경하시면 됩니다.
VARS: M5DP(5), M13DP(13), M20DP(20);
VARS: M5D(0, data1), M13D(0, data1), M20D(0, data1);
VARS: M5D.SUM(0, data1), M13D.SUM(0, data1), M20D.SUM(0, data1), CNT(0);
ARRAY: CC[100](0, data1);
//----------------------------------------------------------------------------------------------------------------------------------------------------------
if ( data1(Date <> Date[1]) ) Then
{
for CNT = 0 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
CC[0] = data1(C);
M5D.SUM = 0; M13D.SUM = 0; M20D.SUM = 0;
for CNT = 0 to M20DP - 1
{
if ( (CNT < M5DP) AND (CC[M5DP - 1] > 0) ) Then M5D.SUM = M5D.SUM + CC[CNT];
if ( (CNT < M13DP) AND (CC[M13DP - 1] > 0) ) Then M13D.SUM = M13D.SUM + CC[CNT];
if ( (CNT < M20DP) AND (CC[M20DP - 1] > 0) ) Then M20D.SUM = M20D.SUM + CC[CNT];
}
M5D = (M5D.SUM / M5DP);
M13D = (M13D.SUM / M13DP);
M20D = (M20D.SUM / M20DP);
Plot21(M5D, "M5D", RGB(0,255,0), DEF, 1);
Plot22(M13D, "M13D", RGB(0,255,255), DEF, 1);
Plot23(M20D, "M20D", RGB(255,102,204), DEF, 1);
3.
작성하신 식은
장시작 10분 후에 정배열이 한번이라도 있으면
장끝까지 계속 true입니다.
장시작후 10분이 경과하면 true로 만들고
true인 상태에서 m1 >m2보다 크면 매수하게 식을 작성하셔야 합니다.
VARS: PreD.TM(0, DATA1),m1(0,data1),m2(0,data1);
VARS: PreD.Q1(FALSE, DATA1);
m1 = data1(ma(c,5));
m2 = data1(ma(c,10));
if DATA1(Date <> Date[1]) then
{
PreD.TM = DATA1(TimeToMinutes(stime));
PreD.Q1 = FALSE;
}
if ( (TimeToMinutes(stime) >= PreD.TM + 10) ) then
{ PreD.Q1 = TRUE; }
#............
if (PreD.Q1 == TRUE AND (M1 > M2) ) then buy();
즐거운 하루되세요
> TRF 님이 쓴 글입니다.
> 제목 : 문의 (DATA1)
> 1. 맨 아래내용은 어제 답변주신 내용입니다. 모든 부분을 이해한 것이 아니기에 확인차원에서 재질문 드립니다.
제가 이해한 부분입니다.
* DATA1을 기입하지 않으면 디폴트로 DATA1을 가리키는 것은 아니라는 점...
* DATA1에서의 데이타(이평선, 봉 등)만을 이용할 경우에는 DATA1을 모두 기입해주는 것이 명확하고 처리하는 속도?에서 이점을 얻을 수 있다는 점
* DATA1에서 DATA2의 참조데이타를 이용할 경우에는 반드시 참조할 데이타를 명시해야함
VARS: A(0);
A = DATA2(AA) + DATA3(M1 / M2 * 100);
위와 같이 해줘야함.
여기서
VARS: A(0); 인지 VARS: A(0, DATA1); 인지는 헷갈립니다.
제가 이해한 부분이 정확한지 다시한번 봐주시고 조언주시면 감사드리겠습니다.
2. 3분봉에서 일봉을 표시하기 위해 사용했던것인데 DATA1인 1분봉에서 표시하게끔해주고 싶습니다. 변환부탁드립니다.
VARS: M5DP(5), M13DP(13), M20DP(20);
VARS: M5D(0, DATA2), M13D(0, DATA2), M20D(0, DATA2);
VARS: M5D.SUM(0, DATA2), M13D.SUM(0, DATA2), M20D.SUM(0, DATA2), CNT(0);
ARRAY: CC[100](0, DATA2);
//----------------------------------------------------------------------------------------------------------------------------------------------------------
if ( DATA2(Date <> Date[1]) ) Then
{
for CNT = 0 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
CC[0] = DATA2(C);
M5D.SUM = 0; M13D.SUM = 0; M20D.SUM = 0;
for CNT = 0 to M20DP - 1
{
if ( (CNT < M5DP) AND (CC[M5DP - 1] > 0) ) Then M5D.SUM = M5D.SUM + CC[CNT];
if ( (CNT < M13DP) AND (CC[M13DP - 1] > 0) ) Then M13D.SUM = M13D.SUM + CC[CNT];
if ( (CNT < M20DP) AND (CC[M20DP - 1] > 0) ) Then M20D.SUM = M20D.SUM + CC[CNT];
}
M5D = (M5D.SUM / M5DP);
M13D = (M13D.SUM / M13DP);
M20D = (M20D.SUM / M20DP);
Plot21(M5D, "M5D", RGB(0,255,0), DEF, 1);
Plot22(M13D, "M13D", RGB(0,255,255), DEF, 1);
Plot23(M20D, "M20D", RGB(255,102,204), DEF, 1);
3. 10분후에만 작동하게 끔 해주려고 합니다. 아래식 맞는건지요??
장시작후 10분후에도 M1과 M2가 역배열되었는데도 Buy 진입이 되는 것을 확인할 수 있었습니다.
VARS: PreD.TM(0, DATA1);
VARS: PreD.Q1(FALSE, DATA1);
if DATA1(Date <> Date[1]) then
{
PreD.TM = DATA1(TimeToMinutes(stime));
PreD.Q1 = FALSE;
}
if ( (TimeToMinutes(stime) >= PreD.TM + 10) AND (M1 > M2) ) then
{ PreD.Q1 = TRUE; }
............
if (PreD.Q1 == TRUE) then buy();
아래 문장에서 DATA1을 삭제시 어떻게 달라지나요?
PreD.TM = DATA1(TimeToMinutes(stime));
금일도 질문이 다소 많은데 부탁드리겠습니다.
늘 감사드립니다.
-------------------------------------------------------------------------
답변주신 내용
-------------------------------------------------------------------------
수식에서 참조데이터를 사용하는 경우
if DATA1(Date <> Date[1]) then
{
실행문
}
은 data1로 지정을 했으므로 if문이 data1봉만 기준으로 계산이 되는데
if Date <> Date[1] then
위와 같이 작성하시면 차트의 있는 봉이 완성이 될때마다
if문이 구동이 되어 조건만족여부를 따져 만족하면
하위의 실행문들이 수행되므로 중복으로 계산이 됩니다.
마찬가지로
DATA1(TMA(gCLOSE, MP1));
와 같이 작성하시면 해당 함수를 계산하는 봉을 data1의봉수로만 따지게 되는데
TMA(gCLOSE, MP1);
와 같이 있으면 참조데이터를 포함해서 봉수를 산정하게 됩니다.
참조데이터를 이용하는 식을 만드실때는 해당 조건문 혹은 함수가
따라가야 하는 데이터가 어떤데이터인지 명시해 주셔야 합니다.