커뮤니티
RSI DMI 지표식 질문입니다
2009-06-18 00:33:36
803
글번호 22890
#1
1분차트
RSI(30) 에서
장시작과 같이 어제의 값에 영향없이 시작하여
31분부터 표현하고싶습니다
즉 장시작 동시에 시가부터 RSI를 계산 하여 31분부터 표현하였으면 좋겠습니다
부팅 또는 리셋 의 개념이라고 보시면 될 것같습니다
그럼
0900 에서 0930은 직선
09031 부터는 RSI 차트가 나오면 되겠습니다
#2
1번과 같은 방식으로
1000 와 동시에 지금까지 그린 RSI 값에 상관없이
1000 부터 1030 까지 계산하여 1031에 30분간 계산했던 RSI 를 표현하고싶습니다
#3
0900 - 0930 계산 0931부터 차트그리고
리셋
1000 - 1030 계산 1031부터 차트그리고
리셋...
이런식입니다....
1100
1200
1300
1400....한시간씩 잘라서 매시간의 30분만 계산된 차틑를 얻고 싶습니다
#4
DMI 차트 또한 #1#2#3 과 같은 방식 으로 얻고 싶습니다
감사합니다
답변 1
예스스탁 예스스탁 답변
2009-06-18 13:25:45
안녕하세요
예스스탁입니다.
1. RSI
Inputs: Length(31);
Variables: Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0),RSIV(0);
if date != date[1] Then{
upavg = 0;
downAvg = 0;
var2 = 0;
}
var1 = TimeToMinutes(stime)%60;
if var1 < var1[1] Then{
upavg = 0;
downAvg = 0;
var2 = 0;
}
var2 = var2+1;
If var2 == Length AND Length > 0 Then Begin
UpSum = 0;
DownSum = 0;
For Counter = 0 To Length - 1 Begin
UpAmt = C[Counter] - C[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
End;
UpAvg = UpSum / Length;
DownAvg = DownSum / Length;
End
Else
If var2 > Length AND Length > 0 Then Begin
UpAmt = C[0] - C[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length;
DownAvg = (DownAvg[1] * (Length - 1) + DownAmt) / Length;
End;
If UpAvg + DownAvg <> 0 Then
RSIv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIv = 0;
plot1(RSIV);
2. DMI
Inputs: Length(31);
Variables: Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0);
Variables: MinusDM14(0),DIPlusv(0),DIMinusv(0);
Variables: DMIP(0), DMIM(0),DMIv(0);
if date != date[1] Then{
TRange = 0;
PlusDM14 = 0;
DIPlusv = 0;
var2 = 0;
DIMinusv = 0;
MinusDM14 = 0;
}
var1 = TimeToMinutes(stime)%60;
if var1 < var1[1] Then{
TRange = 0;
PlusDM14 = 0;
DIPlusv = 0;
var2 = 0;
DIMinusv = 0;
MinusDM14 = 0;
}
var2 = var2+1;
If var2 == Length Then {
MyRange = Length;
DIPlusv = 0;
PlusDM14 = 0;
TRange = 0;
DIMinusv = 0;
MinusDM14 = 0;
For Counter = 0 To MyRange - 1 {
If High[Counter] - High[Counter+1] < 0 Then
PlusDM = 0 ;
Else
PlusDM = High[Counter] - High[Counter+1];
If Low[Counter+1] - Low[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[Counter+1] - Low[Counter];
If MinusDM >= PlusDM Then
PlusDM = 0;
If PlusDM >= MinusDM Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
DIPlusv = 100 * PlusDM14 / TRange;
Else
DIPlusv = 0 ;
If TRange <> 0 Then
DIMinusv = 100 * MinusDM14 / TRange;
Else
DIMinusv = 0;
}
Else
If var2 > Length Then {
If High[0] - High[1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[0] - High[1];
If Low [1] - Low [0] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[1] - Low[0];
If MinusDM >= PlusDM Then
PlusDM = 0;
If PlusDM >= MinusDM Then
MinusDM = 0;
If MyRange > 0 Then Begin
TRange = TRange[1] - (TRange[1] / MyRange) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / MyRange) + MinusDM;
End;
If TRange <> 0 Then
DIPlusv = 100 * PlusDM14 / TRange;
Else
DIPlusv = 0 ;
If TRange <> 0 Then
DIMinusv = 100 * MinusDM14 / TRange;
Else
DIMinusv = 0;
}
DMIP = DIplusv;
DMIM = DiMinusv;
If DMIP + DMIM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DMIP - DMIM) / (DMIP + DMIM);
plot1(DIplusv);
plot2(DiMinusv);
plot3(DMIv);
즐거운 하루되세요
> 파인애플 님이 쓴 글입니다.
> 제목 : RSI DMI 지표식 질문입니다
> #1
1분차트
RSI(30) 에서
장시작과 같이 어제의 값에 영향없이 시작하여
31분부터 표현하고싶습니다
즉 장시작 동시에 시가부터 RSI를 계산 하여 31분부터 표현하였으면 좋겠습니다
부팅 또는 리셋 의 개념이라고 보시면 될 것같습니다
그럼
0900 에서 0930은 직선
09031 부터는 RSI 차트가 나오면 되겠습니다
#2
1번과 같은 방식으로
1000 와 동시에 지금까지 그린 RSI 값에 상관없이
1000 부터 1030 까지 계산하여 1031에 30분간 계산했던 RSI 를 표현하고싶습니다
#3
0900 - 0930 계산 0931부터 차트그리고
리셋
1000 - 1030 계산 1031부터 차트그리고
리셋...
이런식입니다....
1100
1200
1300
1400....한시간씩 잘라서 매시간의 30분만 계산된 차틑를 얻고 싶습니다
#4
DMI 차트 또한 #1#2#3 과 같은 방식 으로 얻고 싶습니다
감사합니다