답변완료
질문 있습니다.
질문 요점: 청산 후 NetProfit 체크 방식으로도 진입 차단 문제 발생안녕하세요.이전 질문에 대한 답변 감사합니다. (글번호 227784)"매 틱마다 체크하지 말고 청산 후에만 체크하라"는 조언을 참고하여 코드를 수정했는데, 여전히 같은 문제가 발생합니다.ㅜㅜ ===========================================구현하려는 기능===========================================주간 손실 제한 시스템:- 지난주 수익: 금요일 종가 까지 +200틱 벌었고- 이번주 월요일 시작하면서 최대 손실 허용: -200틱 입력 합니다.- 이번주 월~금 중에 누적 손실이 -200 도달 시: 강제 청산 + 이번 주 매매 종료예시:월요일 NetProfit: 200 → 210 → 160 → 90수요일 NetProfit: 90 → 0→ WeeklyProfit = 0 - 200 = -200→ 강제 청산 + 이번 주 매매 종료=========================================== 문제 상황===========================================UseWeeklyStop=0: 정상 작동 되지만...UseWeeklyStop=1: 차트 신호 전부 사라집니다. ㅠㅠ 차트에 아무것도 없습니다.===========================================핵심 코드===========================================// === Input ===Input : UseWeeklyStop(0); // 0=OFF, 1=ONInput : WeekStartProfit(0); // 이번 주 시작 수익 (틱)Input : MaxWeekLoss(-200); // 최대 허용 손실 (틱, 음수)// === 변수 ===Var : WeeklyProfit(0); // 이번 주 누적 수익Var : WeekStopTriggered(0); // 주간 손실 도달 플래그// === 진입 조건 (기존 조건 + WeekStopTriggered 체크) ===if MarketPosition == 0 and InWaitPeriod == 0 and (기타 진입 조건들...) and WeekStopTriggered == 0 Then { Buy("L", OnClose, Def, 1); // 진입 후 초기화...}// === 청산 후 주간 손실 체크 (손절 예시) ===if MarketPosition == 1 Then { // 손절 조건 if C <= StopPrice Then { ExitLong("U-"); LastExitDate = sDate; LastExitTime = CurrentTime; WaitMinutes = 1200; InWaitPeriod = 1; // 청산 직후 주간 손실 체크 if UseWeeklyStop == 1 and WeekStopTriggered == 0 Then { WeeklyProfit = NetProfit - WeekStartProfit; if WeeklyProfit <= MaxWeekLoss Then { WeekStopTriggered = 1; InWaitPeriod = 1; WaitMinutes = 99999; // 긴 대기시간으로 차단 } } } // 익절 조건 if H >= UpperBand Then { ExitLong("U+"); LastExitDate = sDate; LastExitTime = CurrentTime; WaitMinutes = 300; InWaitPeriod = 1; // 청산 직후 주간 손실 체크 if UseWeeklyStop == 1 and WeekStopTriggered == 0 Then { WeeklyProfit = NetProfit - WeekStartProfit; if WeeklyProfit <= MaxWeekLoss Then { WeekStopTriggered = 1; InWaitPeriod = 1; WaitMinutes = 99999; } } }}// 매도 포지션도 동일한 방식으로 구현=========================================== 디버깅 시도===========================================1. UseWeeklyStop=0으로 설정 했는데 정상 작동이 됩니다. 2. UseWeeklyStop=1, WeekStartProfit=0, MaxWeekLoss=-200 로 했더니 백테스트 시작부터 차트에 진입 신호 없고 아무것도 없습니다. 3. 백테스트 초기 상태는 아래와 같습니다. - NetProfit = 0 - WeekStartProfit = 0 - MaxWeekLoss = -200 - WeekStopTriggered = 0 - WeeklyProfit = 0 - 0 = 0 - 0 <= -200? → False (정상) 이론상 문제없어 보이는데 실제로는 진입 안됨4. WeekStopTriggered 관련 코드 전부 주석 처리 하니 정상 작동 됨 → WeekStopTriggered 변수 자체에 문제일가요?===========================================질문===========================================1. 청산 후에만 NetProfit를 체크하는데도 백테스트 초기에 진입이 차단되는 이유가 뭘까요?2. WeekStopTriggered 초기값이 0인데 진입 조건에서 WeekStopTriggered == 0 체크만으로 진입이 안 되는 이유가 있을까요?3. 변수 초기화 시점이나 스코프 문제일까요? - Var : WeekStopTriggered(0); 선언만으로 충분한가요? - 추가 초기화가 필요한가요?4. 이런 방식 대신 다른 방법을 사용해야 하나요? - NetProfit 대신 다른 함수? - 플래그 변수 대신 다른 방식?===========================================도움 요청===========================================주간 손실 제한 기능을 올바르게 구현하는 방법을 알려주시면 감사하겠습니다!- 청산 후 NetProfit 체크 방식이 맞나요?- 변수 초기화나 사용 방법에 문제가 있을까요?- 다른 접근 방법이 필요할까요?ㅜㅜ감사합니다!
답변완료
지표식 좀 부탁드립니다.
당일 18시 3분에 콜,풋 종목 양매수 했을 경우 다음날 15시45분까지의 손익값중 최저값을 구하고 싶습니다.// 당일 18시3분에 양매수 했을 경우의 손익값input : 콜매수갯수(10),풋매수갯수(10),starttime(180300),endtime(154500);var : Tcond(false);var: LL(0);if stime == 180300 Then { // 당일 18시3분에 양매수 했을 경우의 손익값var1= c;Var2=Data2(c);}Var3= (c-var1)*콜매수갯수*250000;Var4=(Data2(c)-Var2)*풋매수갯수*250000;Var5= Var3+Var4;여기서 부터 안됩니다.18시 부터 다음날 15시45분까지의 양매수 손익값(var5)의 최저값을 구하고 싶습니다.if (sdate != sdate[1] and stime >= endtime) or (sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then{ Tcond = false;}if (sdate != sdate[1] and stime >= starttime) or (sdate == sdate[1] and stime >= starttime and stime[1] < starttime) then{ Tcond = true; LL = Var5;}if Tcond == true then{ if Var5 < LL Then LL = Var5; Plot2(LL,"최저값");}plot1(Var5);
양합
양합손익
답변완료
종목검색식 부탁드립니다
1. 거래일 기준, 60일 동안 최대거래량 종목검색식 부탁드립니다. (60일 은 변수처리 해주세요) 2. 아래의 예스트레이더 수식에, "0봉전 ~10봉전까지의 모든종목" 을 추가하여 수정 부탁드려요. --아래-- input : P1(60),비율(1.95); var : cnt(0),count(0); var : sum1(0); var : mav1(0); Array : CC[300](0); if DayOfWeek(sdate) < DayOfWeek(sdate[1]) Then{ for cnt = 1 to 223{ CC[cnt] = CC[cnt-1][1]; } } CC[0] = C; if CC[P1-1] > 0 Then{ sum1 = 0; for count = 0 to P1-1{ sum1 = sum1+CC[count]; } mav1 = sum1/P1; } IF mav1*비율>=L && C>O && C>=mav1 && mav1>mav1[1] TheN Find(1);3. 아래의 예스트레이더 수식에, "0봉전 ~10봉전까지의 모든종목" 을 추가하여 수정 부탁드려요. --아래-- input : 전환선기간(6); var : cnt(0); var : wH1(0), wL1(0); var : w전환선(0); Array : wH[100](0), wL[100](0); if DayOfWeek(Bdate) > DayOfWeek(Bdate[1]) Then { wH[0] = H; wL[0] = L; for cnt = 1 to 99 { wH[cnt] = wH[cnt-1][1]; wL[cnt] = wL[cnt-1][1]; } } if H > wH[0] Then wH[0] = H; if L < wL[0] Then wL[0] = L; if wH[전환선기간-1] < 0 and wL[전환선기간-1] > 0 then { wH1 = wH[0]; wL1 = wL[0]; for cnt = 0 to 전환선기간-1 { if wH[cnt] > wH1 Then wH1 = wH[cnt]; if wL[cnt] < wL1 Then wL1 = wL[cnt]; } w전환선 = (wH1 + wL1)/2; } input : P1(100); var : count(0),BB(0),BB1(0); var : sum1(0); var : mav1(0); Array : CC[300](0); if DayOfWeek(sdate) < DayOfWeek(sdate[1]) Then{ for cnt = 1 to 299{ CC[cnt] = CC[cnt-1][1]; } } CC[0] = C; if CC[P1-1] > 0 Then{ sum1 = 0; for count = 0 to P1-1{ sum1 = sum1+CC[count]; } mav1 = sum1/P1; } BB=MAX(w전환선,mav1); BB1=MIN(w전환선,mav1); IF BB1*1.01>=BB && C>O && CROSSUP(C,BB) TheN Find(1);
답변완료
조건검색문의드립니다
[1]지표명 : 앞당김단기선행 양운구름이 앞당김 장기음운상태일때 선행구름을 단기양운이 돌파 1)앞당김 단기선행구름 수식1 :앞당김 단기선행스팬1 선행1=(highest(high,shortPeriod)+lowest(low,shortPeriod)+highest (high,midPeriod)+lowest(low,midPeriod))/4 수식2 :앞당김 단기선행스팬2 선행2=(highest(high,longPeriod)+lowest(low,longPeriod))/2 지표조건설정 shortPeriod 5 midPeriod 10 longPeriod 25 2)앞당김 장기선행구름 수식1: 앞당김 장기선행스팬1 선행1=(highest(high,shortPeriod)+lowest(low,shortPeriod)+highest (high,midPeriod)+lowest(low,midPeriod))/4 수식2:앞당김 장기선행스팬2 선행2=(highest(high,longPeriod)+lowest(low,longPeriod))/2 지표조건설정 shortPeriod 40 midPeriod 125 longPeriod 250 (요청사항)앞당김 단기 양운구름대가 반드시 앞달김 장기 음운구름대를돌파후, 장기구름대가 양운으로 바뀌는 시점에 종목이 검색되게 예스트레이더 YesLanguage 문법에 맞게 변환해서 조건검색식을 만들어주세요. [2)지표명 : 위 수식에서 단기양운구름이 장기구름을(양운,음운 상관없이 관통되도 됨) 돌파시 검색되는 종목 조건검색식 부탁드립니다.
답변완료
수식 검토 부탁드립니다.
항상 많은 도움 감사드립니다. 시스템식 중에서 포지션 정리 부분에서 stoploss가 생각하고는 다르게 작동하는 경우가 있어서 잘못된 부분에 대해서 검토 부탁드립니다.if MarketPosition == 1 Then { if IsEntryName("A매수") == true Then SetStopLoss(8,PointStop); if IsEntryName("B매수") == true Then SetStopLoss(10,PointStop); if IsEntryName("C매수") == true Then SetStopLoss(15,PointStop); } Else SetStopLoss(0);if MarketPosition == 1 Then{ if IsEntryName("A매수") == true Then{if CrossDown(A,B)thenExitlong("매수정리1",atmarket,def,"A매수");} if IsEntryName("B매수") == true Then{if CrossDown(C,D)thenExitlong("매수정리2",atmarket,def,"B매수");} if IsEntryName("C매수") == true Then{if CrossDown(E,F)thenExitlong("매수정리3",atmarket,def,"C매수");} }if MarketPosition == -1 Then { if IsEntryName("AI매도") == true Then SetStopLoss(8,PointStop); if IsEntryName("B매도") == true Then SetStopLoss(10,PointStop); if IsEntryName("C매도") == true Then SetStopLoss(15,PointStop); } Else SetStopLoss(0);if MarketPosition ==- 1 Then{ if IsEntryName("A매도") == true Then{if CrossUp(A,B)thenExitshort("매도정리1",atmarket,def,"A매도");} if IsEntryName("B매도") == true Then{if CrossUp(C,D)thenExitshort("매도정리2",atmarket,def,"B매도");} if IsEntryName("C매도") == true Then{if CrossUp(E,F)thenExitshort("매도정리3",atmarket,def,"C매도");} }이런식으로 작성하면 매수쪽에 stoploss 값은 맞게 포지션 정리가 되는데 매도쪽 stoploss가 정해놓은것과 다른 값에 정리가 되는 경우가 있어서요..검토 및 수식 수정 부탁드리겠습니다. 핵심은 매수와 매도 포지션 정리할때 각각 종류의 매수,매도 포지션에 다른 stoploss값을 주려는 것입니다.
답변완료
종목검색식 요청드립니다.
아래 키움신호가 당일 분봉에서 볼린져밴드(20,2) 하단선 이하에서 신호가 발생했던 모든 종목을 검색하는 검색식을 만들고 싶습니다. 도움 부탁드립니다. 지표조건(볼린져밴드수치, 신호수식 지표수치)은 수정가능하도록 부탁드립니다. 감사합니다.!!^^* 키움신호수식 (지표조건 : period 20, ratio 2, Vmul 0.5) AA=C(1)<lowest(C(2), period)*ratio;BB=if(C(1)>O(1), (H(1)+L(1)+C(1)+H(1))/2-L(1), (if(C(1)<O(1), (H(1)+L(1)+C(1)+L(1))/2-L(1), (H(1)+L(1)+C(1)+C(1))/2-L(1)) ) );CC=if(C(1)>O(1), (H(1)+L(1)+C(1)+H(1))/4, (if(C(1)<O(1), (H(1)+L(1)+C(1)+L(1))/4, (H(1)+L(1)+C(1)+C(1))/4) ) );DD=(O>=BB) or crossup(C, BB);EE=(O>=CC) or crossup(C, CC);FF=V>=V(1)*Vmul;GG=C>O;HH=C(1)<=O;AA and (DD or EE) and FF and GG and HH