커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 요청

혹시 하기 수식을 키움에서 시스템 적용하는건 안되나요?? input : P1(5),P2(20); var : T(0); var1 = (NextBarOpen+AccumN(C,P1-1))/P1; var2 = ma(c,P2); if var2 > var2[1] Then T = 1; if var2 < var2[1] Then T = -1; if stime >= 160000 or stime < 020000 then { if T == 1 and NextBarOpen < var1 Then buy("b",AtStop,NextBarOpen+PriceScale*1); if T == -1 and NextBarOpen > var1 Then sell("s",AtStop,NextBarOpen-PriceScale*1); }
프로필 이미지
이인
2018-06-29
237
글번호 120182
시스템
답변완료

스토캐스틱 과열침체 이용

수식을 부탁드립니다.. 틱180 또는 5분봉에서 (가).stochasiks slow(20,10,5)가 과열권(80)에서 하향하면 매도진입, 계속하락하여 침체권(20)에 진입한 후 침체권(20)을 이탈(상승)하면 즉시 청산한다. 단, 매도진입한 후에 도중에서 반전(상승)하여 10틱 손실나면 즉시 청산한다. (나).stochasiks slow(20,10,5)가침체권(20)에서 이탈(상승)하면 매수진입, 계속상승하여 과열권 (80)에 진입한후 과열권(80)을 이탈(하락)하면 즉시 청산한다. 단, 매수진입한 후에 도중에서 반전(하락)하여 10틱 손실나면 즉시 청산한다. (다). 정리(청산)한후에 (가) 및 (나)의 조건이 새로 발생되면 다시 진입(매수, 매도)하는 시스템식을 부탁합니다.,
프로필 이미지
jr1200
2018-06-29
269
글번호 120181
시스템
답변완료

질문입니다.

당일 매매 후 다음날이나 혹은 그 이후에 스탑로스나 스탑트레일링을 적용하여 매매를 하려고 합니다. 당일과 그 다음날 이후 검색 조건이 달라질 텐데 종목검색과 시스템을 어떻게 짜야할지 감이 오질 않네요. 도움 부탁드립니다. 1. 종목검색 조건은 당일 장중 매매 기준으로 3거래일전 양봉이 아닐 것 2거래일전 양봉 1거래일전 양봉 0거래일전 양봉 2,1,0 거래일전 상한가가 없을 것 (상한가 조건으로 부탁드립니다.) if O[3] > C[3] and O[2] < C[2] and O[1] < C[1] and O < C find(1); 2. 매매조건은 당일 15시 15분에 시장가 매수 이후 스탑로스 또는 스탑트레일링 조건에 의해 매매 당일 청산 말고 지정한 시간 뒤에 청산하고자 하면 어떤조건을 추가해야하나요?(ex.진입시점 이후 2거래일 뒤 전량청산) (스팟에서 1분봉 확장차트에 신호를 적용하여 매매하고 있습니다.) input : 매수금액(50000); if stime == 151500 and O < C Then { buy("b",AtMarket,def,Floor(매수금액/C)); } SetStopLoss(2); SetStopTrailing(1,2,PercentStop,1); //최소 2% 수익 이후에 최고 가격대비 1% 하락하면 청산
프로필 이미지
가이츠
2018-07-02
248
글번호 120178
시스템
답변완료

수익실현

수식부탁합니다. 1번 수식 3% 수익후 즉시 ( 매도, 매수) 이익실현 합니다 6% 수익후 즉시 ( 매도, 매수 )이익실현 합니다. 2번 수식 3% 수익후 1%하락시 즉시 ( 매도, 매수) 이익실현 합니다 6% 수익후 1%하락시 즉시 ( 매도, 매수 )이익실현 합니다. 3번 수식 3% 수익후 종가 ( 매도, 매수) 이익실현 합니다 6% 수익후 종가 ( 매도, 매수 )이익실현 합니다. 2번 수식 3% 수익후 1%하락시 종가 ( 매도 ,매수) 이익실현 합니다 6% 수익후 1%하락시 종가 ( 매도, 매수 )이익실현 합니다
프로필 이미지
큰바위얼굴
2018-06-29
245
글번호 120177
시스템
답변완료

수식수정요청

아랫 두수식을 합쳐주시고요. 만약 진입했을때 이전거래가 손실이였다면 다음신호때는 진입x and 2*ATR(20) 로 손절이 들어갔다면 (공식 : (매수)진입가-2ATR, (매도)2ATR-진입가 ) 다음 신호 진입ok 1. nput : p1(55),P2(20); var : cnt(0),h1(0),l1(0),h2(0),l2(0); H1 = DayHigh(1); L1 = daylow(1); H2 = DayHigh(1); L2 = daylow(1); for cnt = 1 to max(P1,P2) { if cnt <= P1 Then { if DayHigh(cnt) > H1 Then H1 = DayHigh(cnt); if DayLow(cnt) < L1 Then L1 = DayLow(cnt); } if cnt <= P2 Then { if DayHigh(cnt) > H2 Then H2 = DayHigh(cnt); if DayLow(cnt) < L2 Then L2 = DayLow(cnt); } } if crossup(h,h1) Then buy("매수"); if CrossDown(l,l2) Then ExitLong("청산"); 2 input : p1(55),P2(20); var : cnt(0),h1(0),l1(0),h2(0),l2(0); H1 = DayHigh(1); L1 = daylow(1); H2 = DayHigh(1); L2 = daylow(1); for cnt = 1 to max(P1,P2) { if cnt <= P1 Then { if DayHigh(cnt) > H1 Then H1 = DayHigh(cnt); if DayLow(cnt) < L1 Then L1 = DayLow(cnt); } if cnt <= P2 Then { if DayHigh(cnt) > H2 Then H2 = DayHigh(cnt); if DayLow(cnt) < L2 Then L2 = DayLow(cnt); } } if CrossDown(l,l1) Then sell("매도"); if crossup(h,h2) Then ExitShort("청산");
프로필 이미지
렉쳐
2018-06-29
297
글번호 120175
시스템
답변완료

문의드립니다

안녕하세요. 예스에서 파일생성에 대해 문의드립니다 다음과 같은 프로그램으로 파일을 생성하고 있는데. If (sDate == CurrentDate) and MarketPosition[0] <> MarketPosition[1] Then { if MarketPosition == 1 and BarsSinceEntry == 1 Then Print("C:₩매매.txt", "진입가격:%.2f", EntryPrice); if MarketPosition[0] <> 1 and MarketPosition[1] == 1 Then Print("C:₩매매.txt", "청산가격:%.2f", ExitPrice(1)); } 해당봉이 아닌 다음봉에 파일이 생성되고 있네요. 해당봉에서 파일을 생성하는 방법을 알려주셨으면 합니다 감사합니다
프로필 이미지
feelkdn
2018-06-29
258
글번호 120174
시스템
답변완료

문의드립니다

1 소수점이하를 모두 제외하신 다면 아래와 같이 작성하시면 됩니다. floor(c)가 소수제외한 값입니다. var1 = Floor(c); if MarketPosition <= 0 and H < var1 Then buy("b",AtStop,var1); if MarketPosition >= 0 and L > var1 Then sell("s",AtStop,var1); 이렇게 답변주셨는데 제가 질문한거는 예를들어 s&p라하면 2750이나 2650, 2550 즉 앞에 두자리와 상관없이 50에 오면 되면 무조건 매수진입하고 싶다는 말이었습니다 답변부탁드려요
프로필 이미지
toal
2018-06-29
243
글번호 120173
시스템
답변완료

수식수정 부탁드립니다.

1) 분할매도가 마무리되어 물량이 0 이 되는날에 그당일은 다시 1차든 2차든 재매수가 안일어났으면 합니다. 2) 지금식은 1차분할매수하고 2차매수가 1차매수후 시간의 흐름에 따라 매도가 한번도 안일어났을때만되는거 같은데요 2차매수는 1차매수후 매도가 몇번이든 발생한 것과 상관없이 예를들어 1차매수후 "매도 1-2" 일어난후에 매수2차가격까지 오면 매수2차매수가 일어났으면 좋겠구요 1차매수부터의 시간의 흐름으로 진행한걸로 매도가 일어났으면 좋겠습니다. 예를들어 1차매수가 발생하고 "매도1-1" "매도1-2"가 진행되다가 주가가 떨어져서 매수2차가에 와서 매수2차가 발생되면 그후에는 매수1차와 2차가 합쳐져서 "매도 1-3"에서 매도가 일어나는 식으루요. 결국 매도는 "매도1-8" 전량 매도가 되어 물량이 0이 되게 하고 싶습니다. 3) 이게 불가능한거면 2차매수가 된시점부터 8분할 매도가 진행되어도 상관없습니다. 감사합니다. input : 투자금액(1000000),투자비율1(50),투자비율2(50); var : m1(0),m2(0),dd(0); m1 = 투자금액*(투자비율1/100); m2 = 투자금액*(투자비율2/100); if bdate != bdate[1] Then { dd = dd+1; Condition1 = false; } if MarketPosition == 0 and Condition1 == false and DayHigh < DayClose(1)*1.08 Then { buy("매수1",atlimit,DayClose(1)*0.985,Floor(m1/(c*0.985))); } if MarketPosition == 1 Then { if CurrentContracts < CurrentContracts[1] Then Condition1 = true; if CurrentContracts > CurrentContracts[1] and MaxEntries == 1 Then var1 = dd; if MaxEntries == 1 and Condition1 == false Then buy("매수2",atlimit,DayClose(1)*0.955,Floor(m2/(c*0.955))); if EntryTime < 92000 Then { if dd == var1 and stime >= 93500 and stime[1] < 93500 Then ExitLong("매도 1-1",OnClose,def,"",Floor(CurrentContracts*0.12),1); if dd == var1 and stime >= 103000 and stime[1] < 103000 Then ExitLong("매도 1-2",OnClose,def,"",Floor(CurrentContracts*0.14),1); if dd == var1 and stime >= 110000 and stime[1] < 110000 Then ExitLong("매도 1-3",OnClose,def,"",Floor(CurrentContracts*0.16),1); if dd == var1 and stime >= 134000 and stime[1] < 134000 Then ExitLong("매도 1-4",OnClose,def,"",Floor(CurrentContracts*0.20),1); if dd == var1 and stime >= 143000 and stime[1] < 143000 Then ExitLong("매도 1-5",OnClose,def,"",Floor(CurrentContracts*0.25),1); if dd == var1+1 and stime >= 93000 and stime[1] < 93000 Then ExitLong("매도 1-6",OnClose,def,"",Floor(CurrentContracts*0.33),1); if dd == var1+1 and stime >= 94300 and stime[1] < 94300 Then ExitLong("매도 1-7",OnClose,def,"",Floor(CurrentContracts*0.50),1); if dd == var1+1 and stime >= 105000 and stime[1] < 105000 Then ExitLong("매도 1-8"); } if EntryTime >= 92000 and EntryTime < 110000 Then { if dd == var1 and stime >= 110000 and stime[1] < 110000 Then ExitLong("매도2-1",OnClose,def,"",Floor(CurrentContracts*0.12),1); if dd == var1 and stime >= 134000 and stime[1] < 134000 Then ExitLong("매도2-2",OnClose,def,"",Floor(CurrentContracts*0.14),1); if dd == var1 and stime >= 143000 and stime[1] < 143000 Then ExitLong("매도2-3",OnClose,def,"",Floor(CurrentContracts*0.16),1); if dd == var1+1 and stime >= 93500 and stime[1] < 93500 Then ExitLong("매도2-4",OnClose,def,"",Floor(CurrentContracts*0.20),1); if dd == var1+1 and stime >= 103000 and stime[1] < 103000 Then ExitLong("매도2-5",OnClose,def,"",Floor(CurrentContracts*0.25),1); if dd == var1+1 and stime >= 110000 and stime[1] < 110000 Then ExitLong("매도2-6",OnClose,def,"",Floor(CurrentContracts*0.33),1); if dd == var1+1 and stime >= 134000 and stime[1] < 134000 Then ExitLong("매도2-7",OnClose,def,"",Floor(CurrentContracts*0.50),1); if dd == var1+1 and stime >= 143000 and stime[1] < 143000 Then ExitLong("매도2-8"); } if EntryTime >= 110000 and EntryTime < 143000 Then { if dd == var1 and stime >= 143000 and stime[1] < 143000 Then ExitLong("매도3-1",OnClose,def,"",Floor(CurrentContracts*0.14),1); if dd == var1+1 and stime >= 93500 and stime[1] < 93500 Then ExitLong("매도3-2",OnClose,def,"",Floor(CurrentContracts*0.16),1); if dd == var1+1 and stime >= 103000 and stime[1] < 103000 Then ExitLong("매도3-3",OnClose,def,"",Floor(CurrentContracts*0.20),1); if dd == var1+1 and stime >= 110000 and stime[1] < 110000 Then ExitLong("매도3-4",OnClose,def,"",Floor(CurrentContracts*0.25),1); if dd == var1+1 and stime >= 134000 and stime[1] < 134000 Then ExitLong("매도3-5",OnClose,def,"",Floor(CurrentContracts*0.33),1); if dd == var1+1 and stime >= 143000 and stime[1] < 143000 Then ExitLong("매도3-6",OnClose,def,"",Floor(CurrentContracts*0.50),1); if dd == var1+2 and stime >= 93500 and stime[1] < 93500 Then ExitLong("매도3-7"); } if EntryTime >= 143000 Then { if dd == var1+1 and stime >= 93500 and stime[1] < 93500 Then ExitLong("매도 4-1",OnClose,def,"",Floor(CurrentContracts*0.12),1); if dd == var1+1 and stime >= 103000 and stime[1] < 103000 Then ExitLong("매도 4-2",OnClose,def,"",Floor(CurrentContracts*0.14),1); if dd == var1+1 and stime >= 110000 and stime[1] < 110000 Then ExitLong("매도 4-3",OnClose,def,"",Floor(CurrentContracts*0.16),1); if dd == var1+1 and stime >= 134000 and stime[1] < 134000 Then ExitLong("매도 4-4",OnClose,def,"",Floor(CurrentContracts*0.20),1); if dd == var1+1 and stime >= 143000 and stime[1] < 143000 Then ExitLong("매도 4-5",OnClose,def,"",Floor(CurrentContracts*0.25),1); if dd == var1+2 and stime >= 93500 and stime[1] < 93500 Then ExitLong("매도 4-6",OnClose,def,"",Floor(CurrentContracts*0.33),1); if dd == var1+2 and stime >= 94300 and stime[1] < 94300 Then ExitLong("매도 4-7",OnClose,def,"",Floor(CurrentContracts*0.50),1); if dd == var1+2 and stime >= 105000 and stime[1] < 105000 Then ExitLong("매도 4-8"); } }
프로필 이미지
부자청년28
2018-06-29
245
글번호 120162
시스템
답변완료

수식수정문의

아래 수식을 쓰다보니 제대로된 진입이 안됩니다. 수정및 조건추가만 부탁드리겠습니다. 조건추가 : 터틀에서쓰는 2ATR 손절 1. 매수진입 청산만 input : p1(55),P2(20); var : cnt(0),h1(0),l1(0),h2(0),l2(0); H1 = DayHigh(1); L1 = daylow(1); H2 = DayHigh(1); L2 = daylow(1); for cnt = 1 to max(P1,P2) { if cnt <= P1 Then { if DayHigh(cnt) > H1 Then H1 = DayHigh(cnt); if DayLow(cnt) < L1 Then L1 = DayLow(cnt); } if cnt <= P2 Then { if DayHigh(cnt) > H2 Then H2 = DayHigh(cnt); if DayLow(cnt) < L2 Then L2 = DayLow(cnt); } } if crossup(h,h1) Then buy("매수"); if CrossDown(l,l2) Then sell("청산"); 2. 매도진입 청산만 input : p1(55),P2(20); var : cnt(0),h1(0),l1(0),h2(0),l2(0); H1 = DayHigh(1); L1 = daylow(1); H2 = DayHigh(1); L2 = daylow(1); for cnt = 1 to max(P1,P2) { if cnt <= P1 Then { if DayHigh(cnt) > H1 Then H1 = DayHigh(cnt); if DayLow(cnt) < L1 Then L1 = DayLow(cnt); } if cnt <= P2 Then { if DayHigh(cnt) > H2 Then H2 = DayHigh(cnt); if DayLow(cnt) < L2 Then L2 = DayLow(cnt); } } if CrossDown(l,l1) Then sell("매도"); if crossup(h,h2) Then buy("청산");
프로필 이미지
렉쳐
2018-06-29
225
글번호 120161
시스템