답변완료
질문 있습니다.
안녕하세요MACD 크로스 시 조건부 진입 로직 질문입니다.MACD 크로스 매매 시스템을 만들고 있는데, 특정 조건을 만족하는 크로스에만 진입하려고 합니다.
구현하고자 하는 로직
골드크로스 매수
1. MACD가 Signal을 상향 돌파 (골드크로스 발생)
2. 단, 크로스 발생 직전 MACD 값이 특정 기준값(수평선) 이하일 때만 진입
3. 기준값을 초과한 상태에서(수평선 올라타면) 골드크로스 하면 진입을 하지 않아야 합니다.
데드크로스 매도
1. MACD가 Signal을 하향 돌파 (데드크로스 발생)
2. 단, 크로스 발생 직전 MACD 값이 특정 기준값(수평선) 이상일 때만 진입
3. 기준값 미만 상태에서(수평선 아래에 있으면) 데드크로스 하면 진입을 하지 않아야 합니다.
현재 작성한 코드 구조는 아래와 같습니다.
Input : MACD_Short(12);
Input : MACD_Long(26);
Input : MACD_Signal(9);
Input : UpperLimit(0); // 예시값
Input : LowerLimit(0); // 예시값
var : MACDValue(0);
var : MACDSignalValue(0);
MACDValue = MACD(MACD_Short, MACD_Long);
MACDSignalValue = Ema(MACDValue, MACD_Signal);
// 골드크로스 매수
if CrossUp(MACDValue, MACDSignalValue) Then {
if MACDValue[1] <= LowerLimit Then {
Buy("GoldBuy", Onclose, Def, 1);
}
}// 데드크로스 매도
if CrossDown(MACDValue, MACDSignalValue) Then {
if MACDValue[1] >= UpperLimit Then {
Sell("DeadSell", Onclose, Def, 1);
}
}
!!!!문제 상황!!!!
조건 체크는 정상 작동 (Text_New로 확인 시 조건 분기 잘 됨)
하지만 Buy(), Sell() 명령이 실행되지 않습니다......
조건을 만족하는데도 진입 신호(화살표)가 차트에 표시되지 않아서 애먹고 있습니다.
>>질문 드립니다!!!
>>질문 1: CrossUp/CrossDown 함수 내부에서 추가 조건 체크
easylanguageif CrossUp(MACDValue, MACDSignalValue) Then {
if MACDValue[1] <= LowerLimit Then { // 이 조건 추가가 문제일까요?
Buy();
}
}
이런 식으로 CrossUp 내부에서 추가 조건을 체크하는 것이 정상적으로 작동하나요?아니면 CrossUp과 조건을 분리해야 하나요?질문 2: 크로스 감지 타이밍과 조건 체크 타이밍//방법 A: CrossUp 내부에서 조건 체크if CrossUp(A, B) Then {
if 추가조건 Then Buy();
}
// 방법 B: CrossUp을 변수에 저장 후 조건 체크
var : IsCrossUp(0);
IsCrossUp = 0;
if CrossUp(A, B) Then IsCrossUp = 1;
if IsCrossUp == 1 and 추가조건 Then Buy();어떤 방식이 더 확실한가요?질문 3: 1봉 전 값 참조 문제if MACDValue[1] <= LowerLimit Then크로스 발생 직전(1봉 전) 값을 체크하려면 [1] 참조가 맞나요?아니면 다른 방식이 필요한가요?부탁이 있습니다."지표값이 특정 범위를 벗어난 상태에서만 크로스 신호를 유효하게 인정"하는 로직의 정확한 구현 방법을 알려주시면 감사하겠습니다.**홈페이지 리뉴얼 축하드립니다. 그런데 게시판 글쓰기 너무 불편해요. 과거 게시판이 제일 좋았습니다.ㅠㅠ**
답변완료
수식 수정 요청 드려 봅니다.
//@version=6indicator("VWAP Rope", overlay = true)
/// Inputs
var params = "Parameters"
src = nz(input.source(close, title = "Source", group = params))
multi = input.float(1.5, title = "VWAP Band Multiplier", step = 0.25, minval = 0, group = params)
len = input.int(20, title = "StdDev Length", minval = 1, group = params) //
var disp = "Display"
rng_tog = input.bool(true, title = "Consolidation Ranges", group = disp)
var cols = "Colors"
up_col = input.color(color.yellow, title = "Up Color", group = cols)
down_col = input.color(color.fuchsia, title = "Down Color", group = cols)
flat_col = input.color(#004d92, title = "Flat Color", inline = "3", group = cols)
rng_col = input.color(#004d9233, title = "", inline = "3", group = cols)
/// VWAP 기반 threshold
vwap = ta.vwap
threshold = ta.stdev(close - vwap, len) * multi //
/// Rope smoother
rope_smoother(float _src, float _threshold) =>
var float _rope = _src
_move = _src - _rope
_rope += math.max(math.abs(_move) - nz(_threshold), 0) * math.sign(_move)
[_rope, _rope + _threshold, _rope - _threshold]
// Rope 계산
[rope, upper, lower] = rope_smoother(src, threshold)
/// 방향성 감지
var dir = 0
dir := rope > rope[1] ? 1 : rope < rope[1] ? -1 : dir
if ta.cross(src, rope)
dir := 0
col = dir > 0 ? up_col : dir < 0 ? down_col : flat_col
/// Consolidation Range
var float c_hi = na
var float c_lo = na
var float h_sum = 0
var float l_sum = 0
var int c_count = 0
var ff = 1
if dir == 0
if dir[1] != 0
h_sum := 0
l_sum := 0
c_count := 0
ff := ff * -1
h_sum += upper
l_sum += lower
c_count += 1
c_hi := h_sum / c_count
c_lo := l_sum / c_count
/// 시각화
plot(rope, linewidth = 3, color = col, title = "VWAP Rope")
plot(upper, color = col, title = "Upper Band", linewidth = 1)
plot(lower, color = col, title = "Lower Band", linewidth = 1)
h1 = plot(ff > 0 ? na : c_hi, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
l1 = plot(ff > 0 ? na : c_lo, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
h2 = plot(ff < 0 ? na : c_hi, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
l2 = plot(ff < 0 ? na : c_lo, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
fill(h1, l1, rng_col, title = "Range Fill 1", display = rng_tog ? display.all : display.none)
fill(h2, l2, rng_col, title = "Range Fill 2", display = rng_tog ? display.all : display.none)
VwapRope
vwap
sign
2025-10-20
139
글번호 227076
지표