커뮤니티
질문 있습니다.
안녕하세요
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] 참조가 맞나요?
아니면 다른 방식이 필요한가요?
부탁이 있습니다.
"지표값이 특정 범위를 벗어난 상태에서만 크로스 신호를 유효하게 인정"하는 로직의 정확한 구현 방법을 알려주시면 감사하겠습니다.
**홈페이지 리뉴얼 축하드립니다. 그런데 게시판 글쓰기 너무 불편해요. 과거 게시판이 제일 좋았습니다.ㅠㅠ**
답변 1
예스스탁 예스스탁 답변
2025-10-21 12:35:58