예스스탁
예스스탁 답변
2019-11-05 15:55:12
안녕하세요
예스스탁입니다.
예스랭귀지에 가격이 별도로 지정하지 않는 함수는
아래와 같이 별도로 풀어서 작성해 사용하셔야 합니다.
1 ATR
Input : Period(14),SigPeriod(9);
var : TH(0),TL(0),TR(0),ATRV(0),ATRsig(0);
TH = max(V,V[1]);
TL = min(V,V[1]);
TR = TH-TL;
ATRv = ma(TR,Period);
ATRsig = WMA(ATRv,SigPeriod);
Plot1(ATRv, "Average True Range");
Plot2(ATRsig, "ATR signal");
2 ADX
input : Length(14);
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);
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;
plot1(ADXV);
plot2(DP);
plot3(DM);
2-1 ATR MACD
Input : Period(14),short(9),long(26),sig(9);
var : TH(0),TL(0),TR(0),ATRV(0),ATRMACD(0),ATRMACDsig(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);
Plot1(ATRMACD, "MACD");
Plot2(ATRMACDsig, "MACD signal");
PlotBaseLine1(0);
2-2 ADX MACD
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);
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);
Plot1(ADXMACD, "MACD");
Plot2(ADXMACDsig, "MACD signal");
PlotBaseLine1(0);
3
input : Period(20);
var : mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0);
Var : ii(0),TLen(0);
#단순
mav1 = ma(C,Period);
#지수
mav2 = ema(C,Period);
#가중
mav3 = wma(C,Period);
#기하
mav4 = 0;
for ii = 0 to Period-1 begin
mav4 = mav4 + log(c[ii]);
end;
mav4 = 2.71828182845904^(mav4/Period);
#조화
mav5 = 1/(accumN(1/c, Period)/Period);
#삼각
TLen = Ceiling((Period + 1) * .5);
mav6 = ma(ma(C, TLen), TLen);
plot1(mav1);
plot2(mav2);
plot3(mav3);
plot4(mav4);
plot5(mav5);
plot6(mav6);
즐거운 하루되세요
> 애널박 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 안녕하십니까. 지난번 답변 감사드립니다.
1. 이번에 ATR, ADX 지표를 선물 가격이 아닌 선물 거래량에 적용해 보고 싶은데,
ATR, ADX 지표의 어느 부분을 거래량으로 수정해야 하는지 알려주시면 감사하겠습니다.
2. 그리고, ATR. ADX 값을 다시 MACD를 보조지표로 구현해 보고 싶은데, MACD의 어느 부분을 수정해야 하는지 알려주시면 감사하겠습니다.
2. 마지막으로, 이동평균선의 이동평균 방식
단순이동평균, 지수이동평균, 가중이동평균, 기하이동평균, 조화이동평균, 삼각이동평균
이 예스트레이더에서는 어떻게 표시되는지도 알려주시면 감사하겠습니다.
------------------
1. ATR 지표 식
Input : Period(14),SigPeriod(9);
var : AvgTrueRange(0),ATRsig(0);
AvgTrueRange = ATR(Period);
ATRsig = WMA(ATR(Period),SigPeriod);
Plot1(AvgTrueRange, "Average True Range");
Plot2(ATRsig, "ATR signal");
2. ADX 지표 식(일부 수정)
input : Period(14),SigPeriod(9);
var : ADXv(0),DP(0),DM(0),ADXsig(0);
ADXv = ADX(Period);
DP = DiPlus(Period);
DM = DiMinus(Period);
ADXsig = Ema(ADX(Period),SigPeriod);
plot1(ADXv,"ADX");
plot2(DP,"+DI");
plot3(DM,"-DI");
Plot4(ADXsig, "ADX signal");
3. MACD
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : value(0) , macdosc(0) ;
value = MACD(shortPeriod, longPeriod);
macdosc = value-ema(value,Period);
Plot1(value, "MACD");
Plot2(ema(value,Period), "MACDSignal");
PlotBaseLine1(0, "기준선1");
감사합니다.
풀어서 쓰는거라 초보가 하기에는 거의 불가능한 것 같습니다.
자세하고도 친절한 답변 감사드립니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다.
>
안녕하세요
예스스탁입니다.
예스랭귀지에 가격이 별도로 지정하지 않는 함수는
아래와 같이 별도로 풀어서 작성해 사용하셔야 합니다.
1 ATR
Input : Period(14),SigPeriod(9);
var : TH(0),TL(0),TR(0),ATRV(0),ATRsig(0);
TH = max(V,V[1]);
TL = min(V,V[1]);
TR = TH-TL;
ATRv = ma(TR,Period);
ATRsig = WMA(ATRv,SigPeriod);
Plot1(ATRv, "Average True Range");
Plot2(ATRsig, "ATR signal");
2 ADX
input : Length(14);
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);
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;
plot1(ADXV);
plot2(DP);
plot3(DM);
2-1 ATR MACD
Input : Period(14),short(9),long(26),sig(9);
var : TH(0),TL(0),TR(0),ATRV(0),ATRMACD(0),ATRMACDsig(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);
Plot1(ATRMACD, "MACD");
Plot2(ATRMACDsig, "MACD signal");
PlotBaseLine1(0);
2-2 ADX MACD
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);
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);
Plot1(ADXMACD, "MACD");
Plot2(ADXMACDsig, "MACD signal");
PlotBaseLine1(0);
3
input : Period(20);
var : mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0);
Var : ii(0),TLen(0);
#단순
mav1 = ma(C,Period);
#지수
mav2 = ema(C,Period);
#가중
mav3 = wma(C,Period);
#기하
mav4 = 0;
for ii = 0 to Period-1 begin
mav4 = mav4 + log(c[ii]);
end;
mav4 = 2.71828182845904^(mav4/Period);
#조화
mav5 = 1/(accumN(1/c, Period)/Period);
#삼각
TLen = Ceiling((Period + 1) * .5);
mav6 = ma(ma(C, TLen), TLen);
plot1(mav1);
plot2(mav2);
plot3(mav3);
plot4(mav4);
plot5(mav5);
plot6(mav6);
즐거운 하루되세요
> 애널박 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 안녕하십니까. 지난번 답변 감사드립니다.
1. 이번에 ATR, ADX 지표를 선물 가격이 아닌 선물 거래량에 적용해 보고 싶은데,
ATR, ADX 지표의 어느 부분을 거래량으로 수정해야 하는지 알려주시면 감사하겠습니다.
2. 그리고, ATR. ADX 값을 다시 MACD를 보조지표로 구현해 보고 싶은데, MACD의 어느 부분을 수정해야 하는지 알려주시면 감사하겠습니다.
2. 마지막으로, 이동평균선의 이동평균 방식
단순이동평균, 지수이동평균, 가중이동평균, 기하이동평균, 조화이동평균, 삼각이동평균
이 예스트레이더에서는 어떻게 표시되는지도 알려주시면 감사하겠습니다.
------------------
1. ATR 지표 식
Input : Period(14),SigPeriod(9);
var : AvgTrueRange(0),ATRsig(0);
AvgTrueRange = ATR(Period);
ATRsig = WMA(ATR(Period),SigPeriod);
Plot1(AvgTrueRange, "Average True Range");
Plot2(ATRsig, "ATR signal");
2. ADX 지표 식(일부 수정)
input : Period(14),SigPeriod(9);
var : ADXv(0),DP(0),DM(0),ADXsig(0);
ADXv = ADX(Period);
DP = DiPlus(Period);
DM = DiMinus(Period);
ADXsig = Ema(ADX(Period),SigPeriod);
plot1(ADXv,"ADX");
plot2(DP,"+DI");
plot3(DM,"-DI");
Plot4(ADXsig, "ADX signal");
3. MACD
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : value(0) , macdosc(0) ;
value = MACD(shortPeriod, longPeriod);
macdosc = value-ema(value,Period);
Plot1(value, "MACD");
Plot2(ema(value,Period), "MACDSignal");
PlotBaseLine1(0, "기준선1");
감사합니다.