커뮤니티
수정 부탁드립니다.
2025-12-11 10:51:36
112
글번호 228874
참조차트는 일봉이고 기본차트는 60분봉입니다.
1..일봉상 최근 3일 동안
RSI(3) 값 중 최저값이 10 이하였던 적이 있다.
그리고 당일봉상 RSI(3) 값이 20 이상으로 회복하였다. 이조건을 충족하면 1.0을 부여한다.
2..일봉상 macd 오실레이터 값이 os[2] < os[1] < os[0] (3일연속상승)하면 0.5점을 부여한다.
1과2조건을 만족하여 1.5점 부여하면 국면을 R=2+전환하고 , 60분차트상 macd 오실레이터가 양봉전환하면 1계약 매수진입한다. 식 좀 부탁드립니다. 항상 감사드립니다.
답변 2
예스스탁
2025-12-12 12:49:06
관리자님에 의해 삭제된 답변입니다.
예스스탁 예스스탁 답변
2025-12-12 13:12:49
안녕하세요
예스스탁입니다.
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();
즐거운 하루되세요
다음글
이전글