답변완료
질문 있습니다.
안녕하세요.어제 답변 주셔서 감사합니다!그나마 해결 되었는데 아직도 어려워 하는 부분이 있습니다. ㅠㅠ질문을 요약해서 올리니 바쁘시더라도 답변 잘 부탁드리겠습니다. 감사합니다!질문의 내용은 청산 후 대기 로직 추가 후 신호가 전혀 안 나옵니다!!! ㅠㅠ (변수 유지 관련)기존에 잘 작동하던 매매 시스템에 "청산 후 30분 동안 진입 금지" 기능을 추가했더니 신호가 전혀 안 나오는 문제가 발생했습니다.원인을 찾고자 여러 가지 궁금한 점들을 질문드립니다.ㅜㅜ현재 상황기존 코드: MACD 0선 돌파 시 매수/매도 신호 → 정상 작동 되었음수정 코드: 청산 후 StopdownMinutes(30분) 동안 진입 금지 추가 → 신호 안 나옵니다.
핵심 코드 구조
// 변수 선언
var : InStopdown(0); // 휴식 중 (1=휴식, 0=거래가능)
var : LastExitTime(0); // 마지막 청산 시간
var : IsGoldenCross(0); // 골드크로스 상태
// 현재 시간
CurrentTime = TimeToMinutes(sTime);
// 이전 상태 유지
InStopdown = InStopdown[1];
LastExitTime = LastExitTime[1];
IsGoldenCross = IsGoldenCross[1];
// 청산 후 휴식 체크
if InStopdown == 1 Then {
ElapsedTime = CurrentTime - LastExitTime;
if ElapsedTime >= StopdownMinutes Then {
InStopdown = 0; // 휴식 종료
}
}// MACD 크로스 감지
if CrossUp(MACDValue, 0) Then {
IsGoldenCross = 1;
}// 청산 로직
if MarketPosition == 1 and C >= AvgEntryPrice + ProfitTicks Then {
ExitLong("WinL");
if StopdownMinutes > 0 Then {
LastExitTime = CurrentTime;
InStopdown = 1; // 휴식 시작
}
}// 진입 신호 감지
if MarketPosition == 0 and IsGoldenCross == 1 and InStopdown == 0 Then {
BuySignal = 1;
Text_New(sDate, sTime, L - 1.5, "매수신호");
}if MarketPosition == 0 and IsGoldenCross == 1 and InStopdown == 1 Then {
Text_New(sDate, sTime, L - 1.5, "매수무효(휴식중)");}질문 목록입니다.var 변수의 값 유지 방법이 무엇인가요?var : InStopdown(0);
InStopdown = InStopdown[1];
질문:1-1: var로 선언한 변수가 [1]로 이전 봉의 값을 참조할 수 있나요? 매 봉마다 초기화되나요?
질문:1-2: 첫 실행 시 (차트 로딩 첫 봉) InStopdown[1]이 존재하지 않으면 어떻게 되나요? 자동으로 0이 되나요? 오류가 나나요?
2. TimeToMinutes 함수 관련
easylanguageCurrentTime = TimeToMinutes(sTime);
ElapsedTime = CurrentTime - LastExitTime;
질문:2-1: sTime이 093000 (9시 30분)일 때 TimeToMinutes는 정확히 무엇을 반환하나요? 570 (9×60+30)인가요?
질문:2-2: TimeToMinutes가 자정(00:00)을 넘어가면 0부터 다시 시작하나요? 그렇다면 시간 차이 계산이 음수가 나오는데 어떻게 처리해야 하나요?
3. MarketPosition 상태 변경 타이밍
if MarketPosition == 1 and C >= AvgEntryPrice + ProfitTicks Then {
ExitLong("WinL");
InStopdown = 1;
}// 바로 다음 줄에서
if MarketPosition == 0 and InStopdown == 0 Then {
BuySignal = 1;
}
질문3: ExitLong() 실행 후 MarketPosition이 즉시 0으로 바뀌나요? 아니면 다음 봉부터 바뀌나요?
4. CrossUp/CrossDown과 상태 변수 유지 충돌
easylanguageIsGoldenCross = IsGoldenCross[1];
if CrossUp(MACDValue, 0) Then {
IsGoldenCross = 1;
}
질문4: 상태 변수를 [1]로 유지하면서 CrossUp 함수와 함께 쓸 때 문제가 없나요? CrossUp이 매 봉마다 체크하는데, 상태 유지 로직과 충돌하지 않나요?
5. 코드 실행 순서의 중요성
현재 코드 순서:
변수 유지 (InStopdown = InStopdown[1])
청산 후 휴식 체크
MACD 크로스 감지
청산 로직
진입 신호 감지질문5: 이 순서가 맞나요? 청산 로직을 신호 감지보다 먼저 배치해야 하나요?변수 디버깅 방법Text_New(sDate, sTime, H, "Stop:" + NumToStr(InStopdown, 0));
Text_New(sDate, sTime, H, "Time:" + NumToStr(CurrentTime, 0));질문6: 매 봉마다 변수 값을 차트에 표시해서 디버깅할 수 있나요? 더 좋은 디버깅 방법이 있나요?조건문 실행 및 변수 변경 반영// 같은 봉에서ExitLong("WinL");
InStopdown = 1;
// 이후
if InStopdown == 0 Then {
BuySignal = 1;}질문7: 같은 봉 내에서 변수 변경이 즉시 반영되나요? 아니면 다음 봉부터 적용되나요?StopdownMinutes 조건 체크if StopdownMinutes > 0 Then {
LastExitTime = CurrentTime;
InStopdown = 1;}질문8: StopdownMinutes를 30으로 설정했는데, Input 값이 제대로 전달되고 있는지 확인하는 방법이 있나요?전체 로직 검증// 진입 조건if MarketPosition == 0 and IsGoldenCross == 1 and InStopdown == 0 Then {
BuySignal = 1;
}// 다음 봉에서
if BuySignal[1] == 1 Then {
Buy("MACD_Buy", AtMarket, Def, ContractSize);
}
질문9: 신호 감지와 실제 진입을 분리하는 이 구조가 맞나요? BuySignal[1]이 제대로 참조되나요?
시도해본 것들
1. StopdownMinutes = 0 설정 → 여전히 신호 안 나옴
2. 기존 코드(StopdownMinutes 없는 버전) → 정상 작동 확인귀한 답변이 도움이 될 것 같습니다! 감사합니다!
2025-10-21
162
글번호 227126
시스템
답변완료
키움 공식을 예스랭귀지로 변환을 부탁드립니다.
다음은 키움에서 만든 진입조건 식입니다. 제가 아는 한도로 만들어 볼려고 해 보았으나 valuewhem 함수와 BarSince 함수에서 막혀 버렸습니다. 그래서 부탁을 드려 봅니다.
김사부 = Highest(H(1), 기간) < H;
주식전쟁 = Valuewhen(1, 김사부, H);
폭 = 주식전쟁 *(비율/100);
Bs = BarsSince(김사부);
K = if(김사부, 주식전쟁, 주식전쟁+폭*Bs);
비율선 = if(K<K(1),K,0);
crossup(C,비율선) and Bs > 봉수
참고로 valuewhen 함수는
사용법 : ValueWhen(nth, condition, data)
설 명 : condition이 nth번째 만족된 시점의 data값 이며,
BarsSince 함수는
사용법 : BarsSince(condition)
설 명 : condition이 만족된 이후 지나간 봉 갯수입니다.
valuewhen
BarsSince
2025-10-21
169
글번호 227121
시스템
답변완료
수식 문의드립니다.
1. 아래 사진은 이격도 크로스업,다운 매수매도 지표입니다. 이 지표를 macd 0 크로스업,다운 매수매도 식에 대입하여 macd 0 크로스업 매수 이후 이격도 신호가 발생했을경우 이격도신호 구간에 macd 시그널이 크로스 다운시 매도하는 식을 추가하고 싶은데 변경 부탑 드립니다.input : period(30), Lpercent(130), Spercent(110);input : short(12),long(24),sig(4)ver : value(0);value=Disparity(Period);..if value > Lpercent and macd 시그널크로스다운 식을 중간에 넣어서 구하려고 해보았지만 반만 되는? 상황이라 도움 부탁드립니다.2. 이격도 구간 macd 시그널 크로스다운 매도(s1)가 완성 되었다면 이후 -15% 에서 다시 매수(b1)하는 식도 함께 만들고 싶습니다. 직전 매도가 s1으로 끝났을 경우 매도가의 -15%에서 재매(b1)수식도 함께 부탁드립니다.3.한 캔들에 매수와 매도가 함께 발생하는 경우가 종종 있는데 매도시 바로 매수가 발생하지 않고 다음 캔들 부터 발생하는 수식도 있을까요? 감사합니다!!
MACD
disparity
이격도
2025-10-21
160
글번호 227112
지표