예스스탁
예스스탁 답변
2025-07-23 11:26:47
안녕하세요
예스스탁입니다.
1
input : period1(11),multiplier1(3);
input : period2(22),multiplier2(3);
input : period3(33),multiplier3(3);
var : src(0);
var : AtrV1(0),upperBand1(0),lowerBand1(0), prevLowerBand1(0), prevUpperBand1(0);
var : prevSuperTrend1(0), direction1(0),alpha1(0),source1(0),SuperTrend1(C);
var : AtrV2(0),upperBand2(0),lowerBand2(0), prevLowerBand2(0), prevUpperBand2(0);
var : prevSuperTrend2(0), direction2(0),alpha2(0),source2(0),SuperTrend2(C);
var : AtrV3(0),upperBand3(0),lowerBand3(0), prevLowerBand3(0), prevUpperBand3(0);
var : prevSuperTrend3(0), direction3(0),alpha3(0),source3(0),SuperTrend3(C);
var : A(0),A1(0),A2(0),B(0),B1(0),B2(0);
src = (H+L)/2;
if CurrentBar > 1 Then
{
alpha1 = 1 / period1 ;
source1 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV1 = alpha1 * source1 + (1 - alpha1) * ATrV1[1]; //지수가중이평방식
upperBand1 = src + multiplier1 * AtrV1;
lowerBand1 = src - multiplier1 * AtrV1;
prevLowerBand1 = lowerBand1[1];
prevUpperBand1 = upperBand1[1];
if lowerBand1 > prevLowerBand1 or close[1] < prevLowerBand1 Then
lowerBand1 = lowerBand1;
Else
lowerBand1 = prevLowerBand1;
if upperBand1 < prevUpperBand1 or close[1] > prevUpperBand1 Then
upperBand1 = upperBand1;
Else
upperBand1 = prevUpperBand1;
if C > UpperBand1 Then
direction1 = 1;
if C < LowerBand1 Then
direction1 = -1;
if direction1 == 1 Then
SuperTrend1 = lowerband1;
Else
SuperTrend1 = upperband1;
alpha2 = 1 / period2 ;
source2 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV2 = alpha2 * source2 + (1 - alpha2) * ATrV2[1]; //지수가중이평방식
upperBand2 = src + multiplier2 * AtrV2;
lowerBand2 = src - multiplier2 * AtrV2;
prevLowerBand2 = lowerBand2[1];
prevUpperBand2 = upperBand2[1];
if lowerBand2 > prevLowerBand2 or close[1] < prevLowerBand2 Then
lowerBand2 = lowerBand2;
Else
lowerBand2 = prevLowerBand2;
if upperBand2 < prevUpperBand2 or close[1] > prevUpperBand2 Then
upperBand2 = upperBand2;
Else
upperBand2 = prevUpperBand2;
if C > UpperBand2 Then
direction2 = 1;
if C < LowerBand2 Then
direction2 = -1;
if direction2 == 1 Then
SuperTrend2 = lowerband2;
Else
SuperTrend2 = upperband2;
alpha3 = 1 / period3 ;
source3 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV3 = alpha3 * source3 + (1 - alpha3) * ATrV3[1]; //지수가중이평방식
upperBand3 = src + multiplier3 * AtrV3;
lowerBand3 = src - multiplier3 * AtrV3;
prevLowerBand3 = lowerBand3[1];
prevUpperBand3 = upperBand3[1];
if lowerBand3 > prevLowerBand3 or close[1] < prevLowerBand3 Then
lowerBand3 = lowerBand3;
Else
lowerBand3 = prevLowerBand3;
if upperBand3 < prevUpperBand3 or close[1] > prevUpperBand3 Then
upperBand3 = upperBand3;
Else
upperBand3 = prevUpperBand3;
if C > UpperBand3 Then
direction3 = 1;
if C < LowerBand3 Then
direction3 = -1;
if direction3 == 1 Then
SuperTrend3 = lowerband3;
Else
SuperTrend3 = upperband3;
if MarketPosition <= 0 and direction1 == 1 and direction1 == 1 and direction3 == 1 Then
Buy();
if MarketPosition == 1 and (direction1 == -1 or direction1 == -1 or direction3 == -1) Then
ExitLong();
if MarketPosition >= 0 and direction1 == -1 and direction1 == -1 and direction3 == -1 Then
Sell();
if MarketPosition == -1 and (direction1 == 1 or direction1 == 1 or direction3 == 1) Then
ExitShort();
}
2
input : period1(11),multiplier1(3);
input : period2(22),multiplier2(3);
input : period3(33),multiplier3(3);
var : src(0);
var : AtrV1(0),upperBand1(0),lowerBand1(0), prevLowerBand1(0), prevUpperBand1(0);
var : prevSuperTrend1(0), direction1(0),alpha1(0),source1(0),SuperTrend1(C);
var : AtrV2(0),upperBand2(0),lowerBand2(0), prevLowerBand2(0), prevUpperBand2(0);
var : prevSuperTrend2(0), direction2(0),alpha2(0),source2(0),SuperTrend2(C);
var : AtrV3(0),upperBand3(0),lowerBand3(0), prevLowerBand3(0), prevUpperBand3(0);
var : prevSuperTrend3(0), direction3(0),alpha3(0),source3(0),SuperTrend3(C);
var : A(0),A1(0),A2(0),B(0),B1(0),B2(0);
var : 기준선(0), 전환선(0),선행스팬1(0), 선행스팬2(0);
전환선 = (Highest(High, 9) + Lowest(Low, 9)) / 2;
기준선 = (Highest(High, 26) + Lowest(Low, 26)) / 2;
선행스팬1 = (전환선[25] + 기준선[25]) / 2 ;
선행스팬2 = (Highest(High, 52)[25] + Lowest(Low, 52)[25]) / 2;
src = (H+L)/2;
if CurrentBar > 1 Then
{
alpha1 = 1 / period1 ;
source1 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV1 = alpha1 * source1 + (1 - alpha1) * ATrV1[1]; //지수가중이평방식
upperBand1 = src + multiplier1 * AtrV1;
lowerBand1 = src - multiplier1 * AtrV1;
prevLowerBand1 = lowerBand1[1];
prevUpperBand1 = upperBand1[1];
if lowerBand1 > prevLowerBand1 or close[1] < prevLowerBand1 Then
lowerBand1 = lowerBand1;
Else
lowerBand1 = prevLowerBand1;
if upperBand1 < prevUpperBand1 or close[1] > prevUpperBand1 Then
upperBand1 = upperBand1;
Else
upperBand1 = prevUpperBand1;
if C > UpperBand1 Then
direction1 = 1;
if C < LowerBand1 Then
direction1 = -1;
if direction1 == 1 Then
SuperTrend1 = lowerband1;
Else
SuperTrend1 = upperband1;
alpha2 = 1 / period2 ;
source2 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV2 = alpha2 * source2 + (1 - alpha2) * ATrV2[1]; //지수가중이평방식
upperBand2 = src + multiplier2 * AtrV2;
lowerBand2 = src - multiplier2 * AtrV2;
prevLowerBand2 = lowerBand2[1];
prevUpperBand2 = upperBand2[1];
if lowerBand2 > prevLowerBand2 or close[1] < prevLowerBand2 Then
lowerBand2 = lowerBand2;
Else
lowerBand2 = prevLowerBand2;
if upperBand2 < prevUpperBand2 or close[1] > prevUpperBand2 Then
upperBand2 = upperBand2;
Else
upperBand2 = prevUpperBand2;
if C > UpperBand2 Then
direction2 = 1;
if C < LowerBand2 Then
direction2 = -1;
if direction2 == 1 Then
SuperTrend2 = lowerband2;
Else
SuperTrend2 = upperband2;
alpha3 = 1 / period3 ;
source3 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV3 = alpha3 * source3 + (1 - alpha3) * ATrV3[1]; //지수가중이평방식
upperBand3 = src + multiplier3 * AtrV3;
lowerBand3 = src - multiplier3 * AtrV3;
prevLowerBand3 = lowerBand3[1];
prevUpperBand3 = upperBand3[1];
if lowerBand3 > prevLowerBand3 or close[1] < prevLowerBand3 Then
lowerBand3 = lowerBand3;
Else
lowerBand3 = prevLowerBand3;
if upperBand3 < prevUpperBand3 or close[1] > prevUpperBand3 Then
upperBand3 = upperBand3;
Else
upperBand3 = prevUpperBand3;
if C > UpperBand3 Then
direction3 = 1;
if C < LowerBand3 Then
direction3 = -1;
if direction3 == 1 Then
SuperTrend3 = lowerband3;
Else
SuperTrend3 = upperband3;
if MarketPosition <= 0 and C > max(선행스팬1,선행스팬2) and
direction1 == 1 and direction1 == 1 and direction3 == 1 Then
Buy();
if MarketPosition == 1 and (direction1 == -1 or direction1 == -1 or direction3 == -1) Then
ExitLong();
if MarketPosition >= 0 and C < min(선행스팬1,선행스팬2) and
direction1 == -1 and direction1 == -1 and direction3 == -1 Then
Sell();
if MarketPosition == -1 and (direction1 == 1 or direction1 == 1 or direction3 == 1) Then
ExitShort();
}
즐거운 하루되세요
> 나도부자1 님이 쓴 글입니다.
> 제목 : 시스템식 부탁드립니다,
> 더운날씨 수고하십니다.
super trend지표를 이용하여 시스템을 구현하려 하는데 잘 안되네요.
* 공통조건 : upertrendAtrPeriod 와 supertrendAtrMultiplier는 모두 변수편집 가능하게
1. 첫 번째 수식
매수 진입 : super trend지표 3개 모두가 상승 추세일때
(한 개라도 색상이 다르면 매수 진입 금지)
매수 청산 : 3개 중 하나라도 하락 전환 시 매수 청산
매도 진입 : super trend지표 3개 모두가 하락 추세
(한 개라도 색상이 다르면 매도 진입 금지)
매수 청산 : 3가지 중 하나라도 상승 전환 시 매도 청산
2. 두 번째 수식
매수 진입 :
1) 주가가 일목 균형표 구름대 위에 위치하고
2) super trend지표 3개 모두가 상승 추세 일 때
(한 개라도 색상이 다르면 매수 진입 금지)
매수 청산 : 3개 중 하나라도 하락 전환 시 매수 청산
매도 진입 :
1) 주가가 일목 균형표 구름대 아래에 위치하고
2) super trend지표 3개 모두가 하락 추세 일 때
(한 개라도 색상이 다르면 매도 진입 금지)
매수 청산 : 3개 중 하나라도 상승 전환 시 매수 청산
-----------------------------------------------------------------------------
input : upertrendAtrPeriod(11);
input : supertrendAtrMultiplier(3);
var : haClose(0),haOpen(0),haHigh(0),haLow(0),haTR(0),alpha(0),haTrueRange(0);
var : haSupertrendUp(0),haSupertrendDown(0),trendingUp(Nan),trendingDown(Nan);
var : direction(0),supertrend(0),supertrendUp(False),supertrendDown(False);
if index == 0 then
{
haClose = (O+H+L+C)/4;
haOpen = open;
haHigh = MaxList( high, haOpen, haClose);
haLow = MinList( low, haOpen,haClose);
}
else
{
haClose = (O+H+L+C)/4;
haOpen = (haOpen [1] + haClose [1])/2 ;
haHigh = MaxList(High, haOpen, haClose) ;
haLow = MinList(Low, haOpen, haClose) ;
}
haTR = max(haHigh - haLow, abs(haHigh - haClose[1]), abs(haLow - haClose[1]));
alpha = 1 / upertrendAtrPeriod ;
haTrueRange = IFf(IsNan(haTrueRange[1]) == true, ma(haTR,upertrendAtrPeriod) , alpha * haTR + (1 - alpha) * IFf(isnan(haTrueRange[1])==true,0,haTrueRange[1]));
haSupertrendUp =((haHigh +haLow )/2 )-(supertrendAtrMultiplier *haTrueRange );
haSupertrendDown =((haHigh +haLow )/2 )+(supertrendAtrMultiplier *haTrueRange );
direction = 0;
trendingUp = iff(haClose[1]>trendingUp[1] , max (haSupertrendUp ,trendingUp[1]) , haSupertrendUp);
trendingDown = iff(haClose[1]<trendingDown[1] , min (haSupertrendDown ,trendingDown[1]) , haSupertrendDown);
direction = iff(haClose > trendingDown[1] , 1 , iff(haClose < trendingUp[1], -1 , IFf(IsNan(direction[1]) == true,1,direction[1])));
supertrend = iff(direction == 1 , trendingUp , trendingDown);
if direction == 1 Then
plot1(supertrend,"supertrend", Magenta);
Else
plot1(supertrend,"supertrend", Lime);
위의 수식은 커뮤니티 "수식 작성 Q&A"에 있는 것인데 혹시 수식이 다르면 정상적인
super trend지표로 작성 부탁 드립니다.
더운 날씨 건강에 유의 하시고 미리 감사드립니다.
수고하세요.