커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
6138
글번호 230811
지표
답변완료

이격? 식요청

안녕하세요 첮째 이격도56선 상승돌파 하였고 둘째 전일 일봉기준 종가선 상승돌파 이면 매수 이격도 56선 하락돌파 하였고 전일 일봉기준 종가선 하락돌파 하면 매도 그리고 당일 장마감 청산 내일은 이격도 상승되었고 일봉기준종가선 상승되어 시작이면 시초가매수 이격도 하락되었고 일봉기준 종가선 하락되어 시작이면 시초가매도 그리고 위전략대로진행합니다 감사합니다 ^^
프로필 이미지
회원
2018-06-19
157
글번호 119875
시스템
답변완료

수식재문의

아랫식을 선물진입에 쓰고싶습니다. 시뮬레이션 돌려보니까 4000계약 이런식으로 들어가 있더라고요.. 계약수만 잘들어갈 수 있게만 부탁드립니딘 ㅍ// 작성자 : 수식지왕 Input: 원계정(100000000) , S1HiPeriod(20) , S1LoPeriod(10) , S2HiPeriod(55) , S2LoPeriod(20) , AtrPeriod(20) , S2비율(50) , N배수(2) ; Var: 명목계정(0), 계정배분완료(False), S1Hi(0), S1Lo(0), S2Hi(0), S2Lo(0), j(0), SumTr(0), DayAtr(0), Unit(0), 진입구분(0), 진입횟수(0), N(0), 추가진입가격(0), 단기돌파무시(False), sumV0(0), sumV1(0), maV0(0), maV1(0), DeadCnt(0), 휩소여부(False); Array : 손절가격[5](0), 진입가격[5](0), 계정크기[5](0), 계정체크[5](0); /*=============================================*/ /* 계정관리 */ /*=============================================*/ If 계정배분완료 == False Then //최초 한번만 실행 { 계정체크[0] = 원계정 * 0.9; //10% 손실나면 계정크기[0] = 원계정 * 0.8; //명목계정은 20% 감소 시켜서 운용 For j = 0 To 3 { 계정체크[j+1] = 계정크기[j] * 0.9; 계정크기[j+1] = 계정크기[j] * 0.8; } 계정배분완료 = True; } If NetProfit() >= 0 Then { 명목계정 = 원계정; } Else { For j = 0 To 4 { If 원계정 + NetProfit() < 계정체크[j] Then //10% 손실나면 { 명목계정 = 계정크기[j]; //명목계정은 20% 감소시켜서 운용 } } } /*=============================================*/ /* 변동성 계산 */ /*=============================================*/ // 분봉에서 일봉의 ATR계산, 전일의 ATR이 산출됨 SumTr = 0; For j = 1 To AtrPeriod { SumTr = SumTr + Max(DayHigh(j)-DayLow(j),Abs(DayClose(j+1)-DayHigh(j)),Abs(DayClose(j+1)-DayLow(j))); } DayAtr = SumTr/AtrPeriod; /*=============================================*/ /* 채널 계산 */ /*=============================================*/ // 분봉에서 일봉의 고,저점 계산, 전일의 고,저점임 S1Hi = 0; S1Lo = 0; S2Hi = 0; S2Lo = 0; For j = 1 To S2HiPeriod { If j <= S1LoPeriod && (S1Lo == 0 || S1Lo > DayLow(j)) Then S1Lo = DayLow(j); If j <= S2LoPeriod && (S2Lo == 0 || S2Lo > DayLow(j)) Then S2Lo = DayLow(j); If j <= S1HiPeriod && S1Hi < DayHigh(j) Then S1Hi = DayHigh(j); If S2Hi < DayHigh(j) Then S2Hi = DayHigh(j); } /*=============================================*/ /* 휩소 판단 */ /*=============================================*/ //이평선 데드카운트가 일정 수 이상일 때 휩소로 판단 sumV0 = 0; sumV1 = 0; For j = 0 To S1HiPeriod - 1 { sumV0 = sumV0 + DayClose(j); sumV1 = sumV1 + DayClose(j+1); } maV0 = sumV0 / S1HiPeriod; maV1 = sumV1 / S1HiPeriod; DeadCnt = 0; For j = 0 To S1HiPeriod - 1 { if maV1 <= DayClose(j+1) && maV0 > DayClose(j) then DeadCnt = DeadCnt + 1; } ############## # 진입식 # ############## /*=============================================*/ /* 시스템 1(S1) : 20일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S1Hi) && 단기돌파무시 == False Then { 진입구분 = 1; N = DayAtr; Unit = int((명목계정 * 0.01)/N); //거래단위 계산 추가진입가격 = S1Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; If DeadCnt >= 4 Then //이평 데드크로스 횟수를 4회 이상일 경우 휩소로 봄 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S1매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S1 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 1 Then { If 진입횟수 == 1 && //CurrentEntries()함수를 써도 되나 단계를 체크하기 위해 별도 변수 사용 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S1매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S1매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S1매수4",OnClose,DEF,int(Unit/4)); } } /*=============================================*/ /* 시스템 2(S2) : 55일 최고가 돌파시 매수 진입 */ /*=============================================*/ If 진입구분 == 0 && 진입횟수 == 0 && CrossUp(C,S2Hi) Then { 진입구분 = 2; N = DayAtr; Unit = (명목계정 * 0.01)/N; //거래단위 계산 Unit = int(Unit * S2비율 * 0.01); //S2거래비중 조정 추가진입가격 = S2Hi + (N * N배수 * 0.25); 진입횟수 = 1; 진입가격[1] = C; 단기돌파무시 = False; //단기돌파무시가 True로 설정되었다면 초기화 If DeadCnt >= 4 Then 휩소여부 = True; Else 휩소여부 = False; If 휩소여부 == False Then 손절가격[1] = C - (N * N배수); Else 손절가격[1] = C - (N * N배수 * 0.25); Buy("S2매수1",OnClose,DEF,int(Unit/4)); } /*=============================================*/ /* S2 기준으로 최초 진입 이후 추가 진입 */ /*=============================================*/ If 진입구분 == 2 Then { If 진입횟수 == 1 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 2; 진입가격[2] = C; If 휩소여부 == False Then { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3); } Else { 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25); } Buy("S2매수2",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 2 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 3; 진입가격[3] = C; If 휩소여부 == False Then { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2); } Else { 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25); } Buy("S2매수3",OnClose,DEF,int(Unit/4)); } If 진입횟수 == 3 && 추가진입가격 > 0 && CrossUp(C,추가진입가격) Then { 추가진입가격 = 추가진입가격 + (N * N배수 * 0.25); 진입횟수 = 4; 진입가격[4] = C; If 휩소여부 == False Then { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4); 손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3); 손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2); 손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1); } Else { 손절가격[4] = 진입가격[4] - (N * N배수 * 0.25); } Buy("S2매수4",OnClose,DEF,int(Unit/4)); } } ############## # 청산식 # ############## /*=============================================*/ /* S1 단기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 1 Then { If C < S1Lo Then { If OpenPositionProfit() < 0 Then //이익이 발생했다면 다음번 단기돌파시 진입 무시 { 단기돌파무시 = False; } Else { 단기돌파무시 = True; } 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S1추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; //추가 진입을 막기 위해 초기화 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; 단기돌파무시 = False; //손절포인트를 돌파했다면 다음번 단기돌파 때 진입 ExitLong("S1손절4",OnClose,DEF,"S1매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; //4번 다 진입하지 못하고 손절포인트 만날 수 있으므로 진입횟수 = 2; //각 청산식마다 초기화 손절가격[3] = 0; 진입가격[3] = 0; 단기돌파무시 = False; ExitLong("S1손절3",OnClose,DEF,"S1매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; 단기돌파무시 = False; ExitLong("S1손절2",OnClose,DEF,"S1매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; 단기돌파무시 = False; ExitLong("S1손절1",OnClose,DEF,"S1매수1",DEF); } } /*=============================================*/ /* S2 장기 시스템의 청산 */ /*=============================================*/ If 진입구분 == 2 Then { If C < S2Lo Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; ExitLong("S2추세종료"); } If 진입횟수 == 4 && C < 손절가격[4] Then { 추가진입가격 = 0; 진입횟수 = 3; 손절가격[4] = 0; 진입가격[4] = 0; ExitLong("S2손절4",OnClose,DEF,"S2매수4",DEF); } If 진입횟수 == 3 && C < 손절가격[3] Then { 추가진입가격 = 0; 진입횟수 = 2; 손절가격[3] = 0; 진입가격[3] = 0; ExitLong("S2손절3",OnClose,DEF,"S2매수3",DEF); } If 진입횟수 == 2 && C < 손절가격[2] Then { 추가진입가격 = 0; 진입횟수 = 1; 손절가격[2] = 0; 진입가격[2] = 0; ExitLong("S2손절2",OnClose,DEF,"S2매수2",DEF); } If 진입횟수 == 1 && C < 손절가격[1] Then { 진입구분 = 0; 추가진입가격 = 0; 진입횟수 = 0; 손절가격[1] = 0; 진입가격[1] = 0; ExitLong("S2손절1",OnClose,DEF,"S2매수1",DEF); } } If DayAtr >= 명목계정 * 0.01 * N배수 Then { ExitLong(); }
프로필 이미지
렉쳐
2018-06-20
180
글번호 119872
시스템
답변완료

부탁드립니다

분봉챠트에서 매수진입후 매수청산 수식 부탁드립니다 조건은 당일 고가 - ATR(10) 값 과 5이평선값을 비교해서 큰값에서 청산 부탁드립니다
프로필 이미지
야구르트
2018-06-19
151
글번호 119871
시스템
답변완료

부탁 드립니다.

그림처럼 이동하고 싶습니다. 미리 감사 드립니다.
프로필 이미지
yes
2018-06-19
200
글번호 119868
지표
답변완료

수식문의드립니다

1. 지정가 매매가능 한가요? 미니 S&P라고 한다면 소숫점위에 가격이랑 상관없이 .75 포인트오면 무조건 매수진입하고 .25 오면 매수청산동시에 매도진입하고 싶은데 어떻게 작성해야 되는지요? 도저히 감이 안오네요 var1 = Floor(c); if MarketPosition <= 0 and H < var1+0.75 Then buy("b",AtStop,var1+0.75); if MarketPosition >= 0 and L > var1-0.25 Then sell("s",AtStop,var1-0.75); 이렇게 답변주셨는데요 이렇게되면 청산동시에 다시 진입하는건가요? 저렇게 되면 기존에 포지션있으면 청산만 되는거 아닌가해서요
프로필 이미지
toal
2018-06-19
160
글번호 119865
시스템
답변완료

수식문의

1.당일시가를 기준으로 시가위는 매수만 아래는 매도포지션만을 원칙으로합니다. 2.당일 피보나치의 23.6%와 76.4%를 이용합니다.(끝과끝) --- ex) 현재가(5분봉) 당일 시가 위, 23.6%or76.4%를 1틱이상 돌파했다면 매수 /23.6%or76.4 1틱 하양돌파 매도 위 반대는 매도진입 매수청산 부탁드리겠습니다.
프로필 이미지
렉쳐
2018-06-19
161
글번호 119859
시스템
답변완료

피보나치 수식 점검 부탁드립니다.

아래의 수식에서 추매부분을 수정하고 싶습니다. 도움 주시면 감사하겠습니다. 1) 0.618 매수이후 주가가 흘러내려서 0.618 이하에 있고 3거래일 동안 돌파를 하지 못하면 음봉종가(150000)에 매수를 하되 2회까지 즉, 4거래일째 음봉이면 1회 매수, 5거래일째 또 음봉이면 2회째 매수입니다. 2) 매수포인트중에서 피보나치 0.5와 0.618은 돌파시 매수로 수정 부탁드리겠습니다. 부탁드리겠습니다. - 아 래 - input : n(120),진입금액(3000000),지정일(20180601); var : cnt(0),hh(0),ll(0),rr(0),dd(0),d1(0); if bdate != bdate[1] Then dd = dd+1; if DayHigh(n) > 0 and DayLow(n) > 0 and sdate >= 지정일 Then { hh = DayHigh(1); ll = DayLow(1); for cnt = 1 to n { if DayHigh(cnt) > hh Then hh = DayHigh(cnt); if DayLow(cnt) < ll Then ll = DayHigh(cnt); } rr = (HH-LL); if MarketPosition == 0 and L > hh-rr*0.5 Then Buy("매수_0.5",AtLimit,hh-rr*0.5,Floor(진입금액/C)); if MarketPosition == 1 Then { ExitLong("수익",atlimit,AvgEntryPrice*1.10); if MaxEntries == 1 and L > hh-rr*0.618 Then Buy("매수_0.618",AtLimit,hh-rr*0.618,Floor(진입금액/C)); if CurrentContracts > CurrentContracts and MaxEntries == 1 Then d1 = dd; if dd >= d1+4 and MaxEntries >= 2 and MaxEntries < 4 and stime >= 150000 and stime[1] < 150000 and c < dayopen Then Buy("추매",OnClose,def,Floor(진입금액/C)); } }
프로필 이미지
승부사1
2018-06-19
211
글번호 119857
시스템
답변완료

수식점검부탁드립니다

###,58250 질문에 텍스트 컬러까지 신경써주신 답변수식에 대해 진심으로 감사드립니다,*꾸벅* 수식을 적용해보니까 첨부파일처럼 양운과음운이 교차시점이 제가 체크한부분(사각박스)을 자세히 보시면 차트에 표현된 시점과 구름떼 교차시점이 오차가 있네요,틱봉이나 분봉이 공히 오차범위의 차이가 조금다를뿐 같은 현상이고 그림2와 같이 여러선이 표현되기도 합니다 무슨이유일까요? 도움 부탁드립니다.
프로필 이미지
회원
2018-06-18
262
글번호 119856
지표
답변완료

문의

키움 C(10)을 어떡식으로 표현하나요,여기서 PLoT((C(10)); 으로 하니까 잘못되었다고 나와서 어떤식으로 표현해야되는지 부탁드립니다
프로필 이미지
레전드
2018-06-18
171
글번호 119855
지표