예스스탁
예스스탁 답변
2024-05-28 08:58:26
안녕하세요
예스스탁입니다.
input : Length(20),Mult(1.5);
input : ADX_Length(50),P1(6),P2(12);
input : Take_Profit(500),Stop_Loss(500);
var : Price(0),Basis(0),StdDev(0),upper(0),lower(0);
var : TR(0),DirectionalMovementPlus(0),DirectionalMovementMinus(0);
var : SmoothedTrueRange(0),SmoothedDirectionalMovementPlus(0),SmoothedDirectionalMovementMinus(0);
var : DIP(0),DIM(0),DX(0),SmoothedADX1(0),SmoothedADX2(0);
input : lengthMA(34),lengthSignal(9);
var : src(0),hi(0),lo(0),Ema1(0),Ema2(0),mi(0);
var : md(0),sb(0),sh(0),mdc(0);
var : S1(0),S2(0),T(0);
Price = close;
Basis = ma(Price, Length);
StdDev = Mult * std(Price, Length);
Upper = Basis + StdDev;
Lower = Basis - StdDev;
TR = max(max(high-low, abs(high-close[1])), abs(low-close[1]));
DirectionalMovementPlus = iff(high-high[1] > low[1]-low , max(high-high[1], 0) , 0);
DirectionalMovementMinus = iff(low[1]-low > high-high[1] , max(low[1]-low, 0) , 0);
SmoothedTrueRange = SmoothedTrueRange - (SmoothedTrueRange/ADX_Length) + TR;
SmoothedDirectionalMovementPlus = SmoothedDirectionalMovementPlus - (SmoothedDirectionalMovementPlus/ADX_Length) + DirectionalMovementPlus;
SmoothedDirectionalMovementMinus = SmoothedDirectionalMovementMinus - (SmoothedDirectionalMovementMinus/ADX_Length) + DirectionalMovementMinus;
DIP = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100;
DIM = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100;
DX = abs(DIP - DIM) / (DIP + DIM)*100;
SmoothedADX1 = ema(DX, P1);
SmoothedADX2 = ema(DX, P2);
Condition1 = CrossUp(Price, Lower) and SmoothedADX1 < SmoothedADX2;
Condition2 = CrossDown(Price, Upper) and SmoothedADX1 < SmoothedADX2;
src = (h+l+c)/3;
hi = IFF(IsNan(hi[1]) == true, ma(high,lengthMA), hi[1]*(lengthMA-1)+high)/lengthMA;
lo = IFF(IsNan(lo[1]) == true, ma(low,lengthMA), lo[1]*(lengthMA-1)+low)/lengthMA;
ema1 = ema(src, lengthMA);
ema2 = ema(ema1, lengthMA);
mi = ema1+(ema1-ema2);
md = IFf((mi>hi), (mi-hi) , IFf((mi<lo) , (mi - lo) , 0));
sb = ma(md, lengthSignal);
sh = md-sb;
mdc = iff(src>mi,iff(src>hi,lime,green),iff(src<lo,red,orange));
if S1 <= 0 and Condition1 == true Then
S1 = 1;
if S1 >= 0 and Condition2 == true Then
S1 = -1;
if S2 <= 0 and CrossUp(sb,0) or CrossUp(sb,md) Then
S2 = 1;
if S2 >= 0 and CrossDown(sb,0) or CrossDown(sb,md) Then
S2 = -1;
T = S1+S2;
if T != T[1] Then
{
if T == 2 Then
Buy();
if T == 0 and T[1] == 2 then
ExitLong();
if T == -2 Then
Sell();
if T == 0 and T[1] == -2 then
ExitShort();
}
SetStopProfittarget(Take_Profit,PointStop);
SetStopLoss(Stop_Loss,PointStop);
즐거운 하루되세요
> cjfdk 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 수고 많으십니다
2가지 시스템의 교집합 신호를 부탁드립니다
1번 시스템
input : Length(20),Mult(1.5);
input : ADX_Length(50),P1(6),P2(12);
input : Take_Profit(500),Stop_Loss(500);
var : Price(0),Basis(0),StdDev(0),upper(0),lower(0);
var : TR(0),DirectionalMovementPlus(0),DirectionalMovementMinus(0);
var : SmoothedTrueRange(0),SmoothedDirectionalMovementPlus(0),SmoothedDirectionalMovementMinus(0);
var : DIP(0),DIM(0),DX(0),SmoothedADX1(0),SmoothedADX2(0);
Price = close;
Basis = ma(Price, Length);
StdDev = Mult * std(Price, Length);
Upper = Basis + StdDev;
Lower = Basis - StdDev;
TR = max(max(high-low, abs(high-close[1])), abs(low-close[1]));
DirectionalMovementPlus = iff(high-high[1] > low[1]-low , max(high-high[1], 0) , 0);
DirectionalMovementMinus = iff(low[1]-low > high-high[1] , max(low[1]-low, 0) , 0);
SmoothedTrueRange = SmoothedTrueRange - (SmoothedTrueRange/ADX_Length) + TR;
SmoothedDirectionalMovementPlus = SmoothedDirectionalMovementPlus - (SmoothedDirectionalMovementPlus/ADX_Length) + DirectionalMovementPlus;
SmoothedDirectionalMovementMinus = SmoothedDirectionalMovementMinus - (SmoothedDirectionalMovementMinus/ADX_Length) + DirectionalMovementMinus;
DIP = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100;
DIM = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100;
DX = abs(DIP - DIM) / (DIP + DIM)*100;
SmoothedADX1 = ema(DX, P1);
SmoothedADX2 = ema(DX, P2);
Condition1 = CrossUp(Price, Lower) and SmoothedADX1 < SmoothedADX2;
Condition2 = CrossDown(Price, Upper) and SmoothedADX1 < SmoothedADX2;
if Condition1 == true Then
Buy();
if Condition2 == true Then
Sell();
SetStopProfittarget(Take_Profit,PointStop);
SetStopLoss(Stop_Loss,PointStop
2번 시스템
input : lengthMA(34),lengthSignal(9);
var : src(0),hi(0),lo(0),Ema1(0),Ema2(0),mi(0);
var : md(0),sb(0),sh(0),mdc(0);
/*calc_smma(src, len) =>
smma=na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len
smma
calc_zlema(src, length) =>
ema1=ema(src, length)
ema2=ema(ema1, length)
d=ema1-ema2
ema1+d
*/
src = (h+l+c)/3;
hi = IFF(IsNan(hi[1]) == true, ma(high,lengthMA), hi[1]*(lengthMA-1)+high)/lengthMA;
lo = IFF(IsNan(lo[1]) == true, ma(low,lengthMA), lo[1]*(lengthMA-1)+low)/lengthMA;
ema1 = ema(src, lengthMA);
ema2 = ema(ema1, lengthMA);
mi = ema1+(ema1-ema2);
md = IFf((mi>hi), (mi-hi) , IFf((mi<lo) , (mi - lo) , 0));
sb = ma(md, lengthSignal);
sh = md-sb;
mdc = iff(src>mi,iff(src>hi,lime,green),iff(src<lo,red,orange));
/*plot1(0,"MidLine",Gray);
plot2(md,"ImpulseMACD",mdc);#속성에서 막대
plot3(sh,"ImpulseHisto",Blue); #속성에서 막대
plot4(sb,"ImpulseMACDCDSignal",Maroon);*/
if CrossUp(sb,0) or CrossUp(sb,md) Then
Buy();
if CrossDown(sb,0) or CrossDown(sb,md) Then
sell()
위 2가지 시스템중
1번 시스템이 매수면 +1점 매도면 -1점
2번 시스템이 매수면 +1점 매도면 -1점
이렇게 두 시스템에 점수를 주어 두 시스템의
합이 +2점이면 매수 0점이면 모두청산 -2점이면 매도
이런 수식을 부탁드립니다
항상 감사드립니다