예스스탁
예스스탁 답변
2019-11-05 16:47:24
안녕하세요
예스스탁입니다.
수식안에서 그래프종류는 설정할수 없습니다.'
오실레이터는 속성에서 막대그래프로 지정하시면 됩니다.
0이상은 빨간색, 아래는 파란색으로 처리했습니다.
1
Input : Period(14),short(9),long(26),sig(9);
var : TH(0),TL(0),TR(0),ATRV(0),ATRMACD(0),ATRMACDsig(0),ATRMACDosc(0);
TH = max(V,V[1]);
TL = min(V,V[1]);
TR = TH-TL;
ATRv = ma(TR,Period);
ATRMACD = ma(ATRV,short)-ma(ATRV,long);
ATRMACDsig = ma(ATRMACD,sig);
ATRMACDosc = ATRMACD-ATRMACDsig;
Plot1(ATRMACD, "MACD");
Plot2(ATRMACDsig, "MACD signal");
Plot3(ATRMACDosc, "MACD osc",iff(ATRMACDosc>0,RED,BLUE));
PlotBaseLine1(0);
2
input : Length(14),short(12),long(26),sig(9);
Var : Counter(0), TRange(0);
var : PlusDM(0), MinusDM(0), MinusDM14(0),PlusDM14(0);
var : DM(0),DP(0),DMIv(0),CummDMI(0), Return(0),adxv(0);
var : TH(0),TL(0),TR(0),ATRV(0),ADXMACD(0),ADXMACDsig(0),ADXMACDosc(0);
if CurrentBar >= 1 then
{
TH = max(V,V[1]);
TL = min(V,V[1]);
TR = TH-TL;
ATRv = ma(TR,Length);
}
If CurrentBar == 1 Then
{
DM = 0;
DP = 0;
MinusDM14 = 0;
PlusDM14 = 0;
TRange = 0;
For Counter = 0 To Length-1
{
If V[Counter] - V[Counter+1] < 0 Then
PlusDM = 0 ;
Else
PlusDM = V[Counter] - V[Counter + 1];
If V[Counter + 1] - V[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = V[Counter + 1] - V[Counter];
TRange = TRange + ATRv[Counter];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
MinusDM14 = MinusDM14 + MinusDM;
PlusDM14 = PlusDM14 + PlusDM;
}
If TRange <> 0 Then
DM = 100 * MinusDM14 / TRange;
Else
DM = 0;
If TRange <> 0 Then
DP = 100 * PlusDM14 / TRange;
Else
DP = 0 ;
}
Else
If CurrentBar > 1 Then {
If V[0] - V[1] < 0 Then
PlusDM = 0;
Else
PlusDM = V[0] - V[1];
If V[1] - V [0] < 0 Then
MinusDM = 0 ;
Else
MinusDM = V[1] - V[0] ;
var1 = PlusDM;
var2 = MinusDM;
If PlusDM >= var2 Then
MinusDM = 0 ;
If var2 >= PlusDM Then
PlusDM = 0;
If Length > 0 Then
{
TRange = TRange[1] - (TRange[1] / Length) + ATRv;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Length) + MinusDM;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Length) + PlusDM;
}
If TRange <> 0 Then
DM = 100 * MinusDM14 / TRange;
Else
DM = 0;
If TRange <> 0 Then
DP = 100 * PlusDM14 / TRange;
Else
DP = 0 ;
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
}
Return = 0;
If CurrentBar >= 1 Then
{
If CurrentBar < Length Then
{
CummDMI = 0;
for Counter = 0 To CurrentBar - 1
{
CummDMI = CummDMI + DMIV[Counter];
}
Return = CummDMI / CurrentBar;
}
Else
Return = (ADXv * (Length - 1) + DMIv) / Length;
}
ADXv = Return;
ADXMACD = ma(ADXv,short)-ma(ADXV,long);
ADXMACDsig = ma(ADXMACD,sig);
ADXMACDosc = ADXMACD-ADXMACDsig;
Plot1(ADXMACD, "MACD");
Plot2(ADXMACDsig, "MACD signal");
Plot3(ADXMACDosc, "MACD osc",iff(ADXMACDosc>0,RED,BLUE));
PlotBaseLine1(0);
즐거운 하루되세요
> 애널박 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 이전에 친절한 답변 감사드립니다. macd 지표에서 oscillator 지표도 함께 여쭤봐야 하는데, 잊어서 다시 문의드립니다.
ATR 값으로 아래 macd oscillator 지표를 그려보았으면 합니다.
< 예스스탁 macd 오실레이터 >
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : MACDv(0), MACDsig(0),macdosc(0) ;
MACDv = MACD(shortPeriod, longPeriod);
MACDsig = ema(MACDv,Period);
macdosc = MACDv-ema(MACDv,Period);
if macdosc > 0 then
{
plot1(macdosc, "MACDOscillator+");
Plot2(0, "MACDOscillator-");
}
else
{
Plot1(0, "MACDOscillator+");
Plot2(macdosc, "MACDOscillator-");
}
Plot3(MACDv, "MACD");
Plot4(MACDsig, "MACDSignal");
PlotBaseLine1(0, "기준선1");
감사합니다.