커뮤니티
수식문의
2026-10-06 09:21:55
92
글번호 233802
슈퍼트렌드 돌파 1봉전, 돌파봉, 돌파+1봉 3곳 어디에서나
상승CHoCH나 선행1/2돌파 중 하나가 나오는 종목을 검색코자 합니다.
(물론 두 신호가 동시 또는 연속으로 나오는 것 무관)
혹시 한 수식에 담아 표현하기 어려우면
슈퍼트렌드돌파수식에 AND로 연결할 수식만 있어도 되는 것 아닌지요?
3개의 수식은 첨부로 올려드립니다.
- 1. supertrend 돌파.zip (0.01 MB)
- 2. 상승 CHoCH.zip (0.01 MB)
- 3. 선행1이 선행2돌파.zip (0.01 MB)
답변 1
예스스탁 예스스탁 답변
2026-10-06 13:19:05
안녕하세요
예스스탁입니다.
돌파 1봉전인지는 알수 없습니다.
돌파봉이거나 1봉 뒤인경우
상승CHoCH나 선행1/2돌파 중 하나가 나오는 종목을 찾게 작성해 드립니다.
# Market Structure CHoCH/BOS 종목검색
#
# SearchMode
# 1 = 하락 구조 뒤 최초 상승 CHoCH
# 2 = 상승 BOS와 상승 CHoCH 전체
# 3 = 하락 BOS와 하락 CHoCH 전체
# 4 = 상승 구조 뒤 최초 하락 CHoCH
# 5 = 상승·하락 구조 돌파 전체
#
# 기본값 1
# 하락 구조에서 최근 상단 프랙탈을
# 종가가 최초 상향 돌파하는 봉 검색
Input:
FractalLength(5),
SearchMode(1);
Vars:
PivotBars(0),
HighPivotBar(0),
LowPivotBar(0),
HighPivot(0),
LowPivot(0),
UpperLevel(0),
LowerLevel(0),
UpperReady(False),
LowerReady(False),
UpperCrossed(False),
LowerCrossed(False),
BullBreak(False),
BearBreak(False),
BullCHoCH(False),
BearCHoCH(False),
StructureState(0),
Cond(False);
PivotBars = IntPortion(FractalLength / 2);
# 최근 확정 프랙탈 탐색
HighPivotBar = SwingHighBar(
1,
H,
PivotBars,
PivotBars,
FractalLength
);
LowPivotBar = SwingLowBar(
1,
L,
PivotBars,
PivotBars,
FractalLength
);
HighPivot = SwingHigh(
1,
H,
PivotBars,
PivotBars,
FractalLength
);
LowPivot = SwingLow(
1,
L,
PivotBars,
PivotBars,
FractalLength
);
# 새로운 상단 프랙탈 확정
if HighPivotBar == PivotBars then
UpperLevel = HighPivot;
if HighPivotBar == PivotBars then
UpperReady = True;
if HighPivotBar == PivotBars then
UpperCrossed = False;
# 새로운 하단 프랙탈 확정
if LowPivotBar == PivotBars then
LowerLevel = LowPivot;
if LowPivotBar == PivotBars then
LowerReady = True;
if LowPivotBar == PivotBars then
LowerCrossed = False;
# 확정 프랙탈의 최초 돌파
BullBreak = UpperReady == True
and UpperCrossed == False
and CrossUp(C, UpperLevel);
BearBreak = LowerReady == True
and LowerCrossed == False
and CrossDown(C, LowerLevel);
# 하락 구조에서 상단 돌파하면 상승 CHoCH
BullCHoCH = BullBreak == True
and StructureState == -1;
# 상승 구조에서 하단 이탈하면 하락 CHoCH
BearCHoCH = BearBreak == True
and StructureState == 1;
Cond = False;
# 기본 매수 후보
if SearchMode == 1 then
Cond = BullCHoCH;
# 상승 구조 돌파 전체
if SearchMode == 2 then
Cond = BullBreak;
# 하락 구조 돌파 전체
if SearchMode == 3 then
Cond = BearBreak;
# 하락 CHoCH
if SearchMode == 4 then
Cond = BearCHoCH;
# 양방향 구조 돌파 전체
if SearchMode == 5 then
Cond = BullBreak or BearBreak;
# 돌파한 프랙탈의 중복 신호 차단
if BullBreak == True then
UpperCrossed = True;
if BearBreak == True then
LowerCrossed = True;
# 현재 시장구조 갱신
if BullBreak == True then
StructureState = 1;
if BearBreak == True then
StructureState = -1;
Input:
ShortLength(9),
MidLength(26),
LongLength(52),
# 1=A가 B를 상향돌파
# 2=A와 B가 동시에 상승 중
# 3=동시상승이 처음 발생한 봉
SignalMode(1);
Vars:
LineA(0),
LineB(0),
BothRising(False),
CrossSignal(False),
RisingStart(False);
LineA = (Highest(H, ShortLength) + Lowest(L, ShortLength) + Highest(H, MidLength) + Lowest(L, MidLength)) / 4;
LineB = (Highest(H, LongLength) + Lowest(L, LongLength)) / 2;
BothRising = LineA > LineA[1] and LineB > LineB[1];
CrossSignal = CrossUp(LineA, LineB);
RisingStart = BothRising and BothRising[1] == False;
input : AtrPeriod(14),factor(3);
var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0);
var : prevSuperTrend(0), superTrend(C), direction(0),alpha(0),source(0);
var1 = Ema(C,200);
if CurrentBar > 1 Then
{
src = (H+L)/2;
alpha = 1 / AtrPeriod ;
source = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV = alpha * source + (1 - alpha) * ATrV[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand = src + factor * AtrV;
lowerBand = src - factor * AtrV;
prevLowerBand = lowerBand[1];
prevUpperBand = upperBand[1];
if lowerBand > prevLowerBand or close[1] < prevLowerBand Then
lowerBand = lowerBand;
Else
lowerBand = prevLowerBand;
if upperBand < prevUpperBand or close[1] > prevUpperBand Then
upperBand = upperBand;
Else
upperBand = prevUpperBand;
if C > UpperBand Then
direction = 1;
if C < LowerBand Then
direction = -1;
if direction == 1 Then
supertrend = lowerband;
Else
supertrend = upperband;
if CountIf(CROSSUP(c,supertrend),2) >= 1 and
(Cond == True or
(SignalMode == 1 and CrossSignal) or
(SignalMode == 2 and BothRising) or
(SignalMode == 3 and RisingStart)) then
Find(1);
}
즐거운 하루되세요
다음글
이전글