예스스탁
예스스탁 답변
2020-08-14 17:07:19
안녕하세요
예스스탁입니다.
틱차트에서 분봉의 이평은 정확한 계산이 불가능합니다.
랭귀지는 봉의 시고저종가만 이용이 가능한데
분봉의 시간경계가 봉 중간에 위치할 경우가 많아 해당 가격을
추출할 방법이 없습니다.
근사값으로 계산해 보신다면 아래식 이용하시면 됩니다.
이평은 5, 20이평 2개 계산하는 내용으로 작성해 드립니다.
분봉주기는 ntime으로 지정하시고 여러 분봉이면 ntime변경해서
여러번 적용하시면 됩니다.
시스템은 2개 이평 크로스로 작성해 드립니다.
1-1 분봉 단순이평
input : ntime(10),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : sum1(0),sum11(0),sum2(0),sum21(0);
var : mav1(0),mav11(0),mav2(0),mav21(0);
Array : C1[100](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
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 99
{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
if C1[P1-1] > 0 then
{
sum1 = 0;
for cnt = 0 to P1-1
{
sum1 = sum1+C1[cnt];
}
mav1 = sum1/P1;
Plot1(mav1);
}
if C1[P2-1] > 0 then
{
sum2 = 0;
for cnt = 0 to P2-1
{
sum2 = sum2+C1[cnt];
}
mav2 = sum2/P2;
Plot2(mav2);
}
}
1-2 분봉 단순이평 이용 크로스 매매
input : ntime(10),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : sum1(0),sum11(0),sum2(0),sum21(0);
var : mav1(0),mav11(0),mav2(0),mav21(0);
Array : C1[100](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
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 99
{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
if C1[P1-1] > 0 then
{
sum1 = 0;
for cnt = 0 to P1-1
{
sum1 = sum1+C1[cnt];
}
mav1 = sum1/P1;
}
if C1[P2-1] > 0 then
{
sum2 = 0;
for cnt = 0 to P2-1
{
sum2 = sum2+C1[cnt];
}
mav2 = sum2/P2;
}
if mav1 > 0 and mav2 > 0 Then
{
if CrossUp(mav1,mav2) Then
buy();
if CrossDown(mav1,mav2) Then
Sell();
}
}
2 분봉 지수이평
Input : ntime(10),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF1(0);
Var : Ep1(0), JISU1(0), PreJISU1(0);
Var : Ep2(0), JISU2(0), PreJISU2(0);
Ep1 = 2/(P1+1);
Ep2 = 2/(P2+1);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF1 < TF1[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
{
value1 = value1+1;
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
}
if value1 <= 1 then {
JISU1 = C;
JISU2 = C;
}
else{
JISU1 = C * EP1 + PreJISU1 * (1-EP1);
JISU2 = C * EP2 + PreJISU2 * (1-EP2);
}
plot1(JiSu1);
plot2(Jisu2);
}
2-2 분봉 지수이평 이용 크로스 매매
Input : ntime(10),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF1(0);
Var : Ep1(0), JISU1(0), PreJISU1(0);
Var : Ep2(0), JISU2(0), PreJISU2(0);
Ep1 = 2/(P1+1);
Ep2 = 2/(P2+1);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF1 < TF1[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
{
value1 = value1+1;
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
}
if value1 <= 1 then {
JISU1 = C;
JISU2 = C;
}
else{
JISU1 = C * EP1 + PreJISU1 * (1-EP1);
JISU2 = C * EP2 + PreJISU2 * (1-EP2);
}
if JISU1 > 0 and JISU2 > 0 Then
{
if CrossUp(JISU1,JISU2) Then
buy();
if CrossDown(JISU1,JISU2) Then
Sell();
}
}
3-1 분봉 가중이평 지표
input : ntime(10),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : Sum1(0),CSum1(0),wma1(0);
var : Sum2(0),CSum2(0),wma2(0);
Array : CC[100](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
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 99
{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P1-1] > 0 Then
{
Sum1 = 0;
CSum1 = 0;
For cnt = 0 To P1 - 1
{
Sum1 = Sum1 + CC[cnt] * (P1 - cnt);
CSum1 = CSum1 + (P1 - cnt);
}
If CSum1 > 0 Then
WMA1 = Sum1/CSum1;
Else
WMA1 = 0;
Plot1(WMA1);
}
if CC[P2-1] > 0 Then
{
Sum2 = 0;
CSum2 = 0;
For cnt = 0 To P2 - 1
{
Sum2 = Sum2 + CC[cnt] * (P2 - cnt);
CSum2 = CSum2 + P2 - cnt;
}
If CSum2 > 0 Then
WMA2 = Sum2/CSum2;
Else
WMA2 = 0;
Plot2(WMA2);
}
}
3-2 분봉 가중이평 이동 크로스 매매
input : ntime(10),P1(5),P2(20);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : Sum1(0),CSum1(0),wma1(0);
var : Sum2(0),CSum2(0),wma2(0);
Array : CC[100](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
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 99
{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P1-1] > 0 Then
{
Sum1 = 0;
CSum1 = 0;
For cnt = 0 To P1 - 1
{
Sum1 = Sum1 + CC[cnt] * (P1 - cnt);
CSum1 = CSum1 + (P1 - cnt);
}
If CSum1 > 0 Then
WMA1 = Sum1/CSum1;
Else
WMA1 = 0;
}
if CC[P2-1] > 0 Then
{
Sum2 = 0;
CSum2 = 0;
For cnt = 0 To P2 - 1
{
Sum2 = Sum2 + CC[cnt] * (P2 - cnt);
CSum2 = CSum2 + P2 - cnt;
}
If CSum2 > 0 Then
WMA2 = Sum2/CSum2;
Else
WMA2 = 0;
}
if WMA1 > 0 and WMA2 > 0 Then
{
if CrossUp(WMA1,WMA2) Then
buy();
if CrossDown(WMA1,WMA2) Then
Sell();
}
}
즐거운 하루되세요
> swhinc 님이 쓴 글입니다.
> 제목 : 틱차트에 분봉이평
> 틱차트에 1/3/5/10분봉 가중/지수/단순 이평을 표현하는 지표와
시스템에 적용하는 방법 부탁드립니다