안녕하세요
예스스탁입니다.
1
랭귀지는 완성된 봉의 값만 사용이 가능합니다.
참조데이터가 일봉이면 당일봉값을 사용이 불가합니다.
당일 값을 사용하기 위해서는
수식으로 기본종목데이터를 이용해서 일봉 RSI와 MACD 오실레이터를 계산해서 해야 합니다.
참조데이터 사용해서는 해결이 되지 않습니다.
2
올리신 내용에서 점수나 R값이 언제 다른 값으로 초기화 되는지 알수 없습니다.
해당 부분은 직접 처리하시기 바랍니다.
사용하는 지표들이 과거봉수에 따라 현재값이 다릅니다.
차트에 최대한 많은 봉을 조회하고 적용하셔여 합니다.
3
Input : Length(3);
Input : short(12),long(26),signal(9);
var : cnt(0),SigSum(0),count2(0),RSIsig(0);
Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0);
var : idx(0), PreUpAvg(0), preDownAvg(0),sum(0),sig(0);
Array : C1[100](0),RSIV[100](Nan);
var : Didx(0),dEP1(0),dEP2(0),dEP3(0);
Var : dJISU1(0),dJISU2(0),PredJISU1(0),PredJISU2(0);
var : dMACDv(0),dMACDs(0),PredMACDv(0),PredMACDs(0);
var : MACDo(0),R(0);
Array : dMACDo[100](Nan);
dEp1 = 2/(short+1);
dEp2 = 2/(long+1);
dEp3 = 2/(signal+1);
if Bdate != Bdate[1] Then
{
for cnt = 99 DownTo 1
{
C1[cnt] = C1[cnt-1];
RSIV[cnt] = RSIV[cnt-1];
dMACDo[cnt] = dMACDo[cnt-1];
}
PreUpAvg = UpAvg[1];
preDownAvg = DownAvg[1];
PredJISU1 = dJISU1[1];
PredJISU2 = dJISU2[1];
PredMACDv = dMACDv[1];
PredMACDs = dMACDs[1];
idx = idx + 1;
}
C1[0] = C;
If idx == Length+2 Then
{
UpSum = 0;
DownSum = 0;
For Counter = 0 To Length - 1
{
UpAmt = C1[Counter] - C1[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
}
UpAvg = UpSum / Length;
DownAvg = DownSum / Length;
}
If idx > Length+2 Then
{
UpAmt = C1[0] - C1[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpAvg = (PreUpAvg * (Length - 1) + UpAmt) / Length;
DownAvg = (preDownAvg * (Length - 1) + DownAmt) / Length;
}
If UpAvg + DownAvg <> 0 Then
RSIv[0] = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIv[0] = 0;
if idx <= 1 then
{
dJISU1 = C;
dJISU2 = C;
dMACDV = dJISU1-dJISU2;
dMACDS = dMACDV;
dMACDO[0] = dMACDV-dMACDS;
}
else
{
dJISU1 = C * dEP1 + PredJISU1 * (1-dEP1);
dJISU2 = C * dEP2 + PredJISU2 * (1-dEP2);
dMACDV = dJISU1-dJISU2;
dMACDS = dMACDV * dEP3 + dMACDS[1] * (1-dEP3);
dMACDO[0] = dMACDV-dMACDS;
}
var1 = 0;
if RSIv[0] >= 20 and min(RSIv[1],RSIv[2],RSIv[3]) <= 10 Then
var1 = 1;
if dMACDO[2] < dMACDO[1] and dMACDO[1] < dMACDO[0] Then
var1 = 0.5;
if var1 == 1.5 Then
R = 2;
Else
R = 0;
MACDO = MACD_OSC(short,long,signal);
if R == 2 and CrossUp(MACDo,0) Then
Buy();
즐거운 하루되세요