해외선물에서 사용하려고 합니다.(크루드오일, 유로)
Var : ma5(0), ma20(0), ma530(0), ma2030(0);
//3분주기 데이타
ma5 = MA(C, 5);
ma20 = MA(C, 20);
//30분주기 데이타
ma530 = MA(Data2(C),5);
ma2030 = MA(Data2(C), 20);
MessageLog("ma5 :%.2f, ma20 : %.2f, ma530 : %.2f, ma2030 : %.2f", ma5 , ma20 , ma530 , ma2030 );
위와같이 작성하여 디버깅을 해보면, 3분데이타는 5이평 및 20이평값이 신호오는대로 수치가 정확하게 나옵니다. 그런데 30분데이타는 5이평 및 20이평값이 고정값으로 나옵니다.
어떻게 구현해야 하나요? 항상 도움주심에 감사드립니다.
답변 1
예스스탁
예스스탁 답변
2020-03-31 11:47:42
안녕하세요
예스스탁입니다.
이전일에 답변드린부분과 같이 랭귀지는 완성된봉의 값만 사용합니다.
미완성봉의 값은 사용이 가능하지 않습니다.
30분봉의 현재봉값을 이용하기 위해서는 3분차트 자체에서 30분봉의 이동평균을 계산해 사용하셔야 합니다.
아래식 참고하시기 바랍니다.
input : ntime(30),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : ma5(0),ma20(0);
var : sum1(0),sum2(0),ma530(0),ma2030(0);
Array : C1[50](0);
ma5 = MA(C, P1);
ma20 = MA(C, P2);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
#10(ntime)봉 이평 계산
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and ntime > 1 and TM >= TM[1]+ntime) or
(Bdate == Bdate[1] and ntime == 1 and TM > TM[1]) Then
{
for cnt = 1 to 49
{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
if C1[P2-1] > 0 then
{
sum1 = 0;
sum2 = 0;
for cnt = 0 to P2-1
{
if cnt < P1 Then
{
sum1 = sum1+C1[cnt];
}
if cnt < P2 Then
{
sum2 = sum2+C1[cnt];
}
}
ma530 = sum1/P1;
ma2030 = sum2/P2;
}
}
즐거운 하루되세요
> tadd 님이 쓴 글입니다.
> 제목 : 주기가 다른 5이평, 20이평값 구하기
> 해외선물에서 사용하려고 합니다.(크루드오일, 유로)
Var : ma5(0), ma20(0), ma530(0), ma2030(0);
//3분주기 데이타
ma5 = MA(C, 5);
ma20 = MA(C, 20);
//30분주기 데이타
ma530 = MA(Data2(C),5);
ma2030 = MA(Data2(C), 20);
MessageLog("ma5 :%.2f, ma20 : %.2f, ma530 : %.2f, ma2030 : %.2f", ma5 , ma20 , ma530 , ma2030 );
위와같이 작성하여 디버깅을 해보면, 3분데이타는 5이평 및 20이평값이 신호오는대로 수치가 정확하게 나옵니다. 그런데 30분데이타는 5이평 및 20이평값이 고정값으로 나옵니다.
어떻게 구현해야 하나요? 항상 도움주심에 감사드립니다.