커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식확인 부탁드립니다.

진입회수를 2로 하였을때 진입->청산 후 진입조건을 만족하여도 바로 진입이 되지 않습니다. 확인부탁드립니다. 그리고 실매매에서 진입이 되었는데 프로그램을 재실행하면 진입이 없는걸로 나오거나 진입이 없던 곳에서 진입이 되어 있습니다 . 확인부탁드립니다. 감사합니다.~ input : short(12),long(26),sig(9),P1(3),P2(30),P3(120); input : 최고익절1(30), 최고대비하락1(10), 손절(20); input : 시작시간(215000), 종료시간(030000); input : 진입회수(1); var : mav1(0,data1),mav2(0,data1),mav3(0,data1); var : Tcond(False,data1),Bcount(0,data1),Scount(0,data1); var : MACDO2(0,data2), MACDO1(0,data1); var : BH(0),SL(0); MACDO2 = data2(MACD_OSC(short,long,sig)); MACDO1 = data1(MACD_OSC(short,long,sig)); mav1 = data1(ma(c,P1)); mav2 = data1(ma(c,P2)); mav3 = data1(ma(c,P3)); if stime == 시작시간 or (stime >시작시간 and stime[1] < 시작시간) Then{ Tcond = true; Bcount = 0; Scount = 0; } if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then{ Tcond = false; } //진입회수 if crossup(mav2,mav3) and MarketPosition != MarketPosition[1] and MarketPosition == 1 Then Bcount = Bcount+1; if CrossDown(mav2,mav3) and MarketPosition != MarketPosition[1] and MarketPosition == -1 Then Scount = Scount+1; //진입 if Tcond == true Then{ if Bcount < 진입회수 and MACDO2 > MACDO2[1] and crossup(mav2,mav3) Then buy("Buy"); if Scount < 진입회수 and MACDO2 < MACDO2[1] and CrossDown(mav2,mav3) Then sell("Sell"); } //청산1 if MarketPosition == 1 Then{ if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*최고익절1 Then ExitLong("B익절1",AtStop,highest(H,BarsSinceEntry)-PriceScale*최고대비하락1); ExitLong("B손절2",AtStop,EntryPrice-PriceScale*손절); } if MarketPosition == -1 Then{ if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*최고익절1 Then ExitShort("S익절1",AtStop,Lowest(L,BarsSinceEntry)+PriceScale*최고대비하락1); ExitShort("S손절2",AtStop,EntryPrice+PriceScale*손절); } if 종료시간 <= sTime and sTime < 시작시간 then { if MarketPosition == 1 then{ ExitLong("B장종료"); } if MarketPosition == -1 then{ ExitShort("S장종료"); } }
프로필 이미지
라떼처럼
2017-08-29
195
글번호 112304
시스템
답변완료

시스템 수식 수정 부탁드립니다.

추가 질문이 생겨서 문의 드립니다. 제가 프로그램을 구매해서 사용중입니다. 그런데 거기서는 아래의 조건들이 다 설정되어서 작동을 하고 있는 것을 확인하였습니다. 예를 들어서 예수금의 경우는 계좌평가에서 맨 위줄에 있는 계좌의 투자원금과 예수금을 체크하여 작동이 되는걸로 알고 있구요. 진입회수 제한과 1회 진입금액까지도 설정창에 별도 설정하지 않아도 작동 되고 있습니다. 매도의 경우도 봉이 완성되지 않아도 정상적으로 매도가 되고 있구요. 전고점은 좀 디테일하지는 않지만 챠트툴에 있는 지지저항선 중에서 일봉상의 직전고점의 종가(음봉인 경우는 시가)를 선택하면 될거 같습니다. 지수 참조데이터는 삭제해야 할거 같습니다. 다른 로직으로 대체해야 겠네요. 따지는거 아니므로 양해 바라구요. ㅎㅎ 구매한 프로그램이다보니 명령어를 볼수는 없습니다. 그리고 아래의 로직은 저의 매매 기법을 프로그램화 해볼수 있을까해서 올렸구요. 혹여 다른 방법이 있지는 않나 싶어서 제차 문의 드립니다. ==== 아 래 ==== 안녕하세요 예스스탁입니다. 1 랭귀지는 기본체계가 봉완성이고 시간도 완성봉 기준으로 판단합니다. 30분봉에서 15시15분 매수는 가능하지 않고 시스템은 장중에 신호가 발생되게 해야 하므로 30분봉에서 14시30분봉완성(15시봉시가수신) 될때가 정규장에서 조건체크할수 있는 마지막봉입니다. 14시30분봉 완성시 체크해서 15시봉 시가에 신호가 발생하게 작성했습니다. 식 작성에 참고하시기 바랍니다. 2 예수금제한등은 가능하지 않습니다. 3 코스피나 코스닥지수를 참조데이터(data2)로 추가하고 식 적용하셔야 합니다. 4 추가진입하는 수식은 반드시 적용시 피라미딩을 사용자분이 설정하셔야 합니다. 설정없이 수식에서 설정이 가능하지 않습니다. 5 전고점은 어떤 값인지 불명확합니다. 청산전략 중 전고점관련 내용은 제외한 수식입니다. 6 input : 매수금액(500000); var : cond(false),Xcond(false); var : 상한가(0), UpLimit(0); var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0); if date >= 19981207 then { if date < 20050328 && CodeCategory() == 2 then UpLimit = (BP[0] * 1.12); Else if date >= 20050328 and date < 20150615 Then UpLimit = (BP[0] * 1.15); Else UpLimit = (BP[0] * 1.30); if CodeCategory() == 2 then { if date >= 20030721 then { up1 = int(UpLimit/100+0.00001)*100; up2 = int(UpLimit/100+0.00001)*100; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/10+0.00001)*10; up7 = int(UpLimit/1+0.00001)*1; } } Else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } if CodeCategory() == 1 || CodeCategory() == 2 then { if sdate < 20101004 Then{ If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up6); } Else{ If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up7); } } else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF 상한가 = up6; } } if MarketPosition == 0 and data2(C > ma(c,5)) and stime == 143000 and C < DayClose(1) and C < O then buy("b",OnClose,def,Floor((매수금액*0.25)/C)); if MarketPosition == 1 Then { if MaxEntries ==5 and C <= AvgEntryPrice*0.75 Then cond = true; if stime == 143000 and C < DayClose(1) and C < O and C < AvgEntryPrice then { if ((cond == false and MaxEntries > 1 and MaxEntries < 5) or (cond == true and MaxEntries > 5 and MaxEntries < 10)) then { buy("bb",OnClose,def,Floor((매수금액*0.25)/C)); } } if CurrentContracts > CurrentContracts[1] Then Xcond = false; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "bp" Then Xcond = true; if Xcond == false then ExitLong("bp",atlimit,AvgEntryPrice*1.10,"",Floor(MaxContracts*0.50),2); if stime == 143000 and C > DayClose(1) and C > O and C > AvgEntryPrice*1.03 then exitlong("bx1",OnClose,def,"",Floor(MaxContracts*0.20),2); exitlong("Bx2",AtLimit,상한가); if stime == 143000 and C > DayClose(1) and DayClose(1) > DayClose(2) and DayClose(2) > DayClose(3) and DayClose(3) > DayClose(4) then exitlong("bx3",OnClose,def,"",Floor(MaxContracts*0.20),2); } Else{ cond = false; Xcond = false; } 즐거운 하루되세요 > 승부사1 님이 쓴 글입니다. > 제목 : 시스템수식 부탁드립니다. > # 매수전략 - 매수 시작일 설정 - 1회 매수 금액 500,000원 - 분할 매수 5회로 제한 (단, 5회 매수후 주가 지속하락하여 평단가대비 -25% 발생시 재작동하여 5회까지 분할 매수) - 코스피(코스닥) 지수가 일봉상 5일선 이하에서는 신규 매수 제한 (기 보유종목에 대한 매수는 진행) - 예수금이 투자원금의 15% 이하인 경우 신규 매수 제한 - 30분봉 챠트에 적용하며 전일종가보다 낮은 음봉이며 평단가보다 낮은 경우 151500에 매수 # 매도전략 - 전일종가보다 높은 양봉이며 평단가대비 3%이상 수익인 경우 151500에 보유 금액의 20% 매도 - 장중 평단가대비 10% 수익실현 즉시 보유 금액의 50% 매도 # 청산전략 &#8211; 조건만족 즉시 실행 &#8211; 재진입 금지 - 장중 상한가 도달시 전량매도 - 전일종가대비 높은 종가(양음봉 상관없이)가 연속되는 경우 4일째 되는 날 151500에 전량매도 - 거래량 60이평선의 3배이상의 거래량이 발생하고 전고점의 종가보다 주가가 낮으면 전량매도 - 거래량 60이평선의 3배이상의 거래량이 발생하고 전고점을 종가를 상승돌파하였다가 다시 하향이탈시 전량매도 피라미딩, 매수금액 설정없이 작동되게 부탁드립니다.
프로필 이미지
승부사1
2017-08-28
285
글번호 112303
시스템
답변완료

부탁드립니다

안녕하세요 부탁드립니다 우선 이평선은 3개 사용합니다 5일 이평선 20일 이평선 30일 이평선 매수 그림에서 4변경우 20 30 이평선있고(위아래 순서는 관계없습니다) 5일 이평선이 두개의 이평선을 골드시 매수 반대는 매도 그림에서 1 2 3 경우 이개의 이평선을 둘다 이&#53465;은 하지 않고 하나만 이탈 또는 터치후 다시 올라가는 경우입니다 캔들기준입니다 단 양봉에 매수고 시가 저가가 이평선에서 완선이 떠 있는 경우입니다 역시 매수고 매수문구는"추가매수" 부탁합니다 반대는 매도 입니다
프로필 이미지
상영중
2017-08-28
277
글번호 112302
지표
답변완료

문의

3894번에서 사용자함수를 넣어면 선언되지 &#51066;은 이름이 사용되었다고 하는글이 뜨는되요 3894 사용자함수를 오류가 나타나지 않게 부탁드릴게요
프로필 이미지
레전드
2017-08-28
236
글번호 112301
지표
답변완료

수식 문의

안녕하세요? 3분봉 차트에서 하루의 첫번째(2번째, 3번째, ...n 번째) 봉이 양봉이고, Data2와 Data3 에서 하루의 첫번째(2번째, 3번째, ...n 번째) 봉이 양봉이다. 란 말을 어떻게 표현하나요? 감사합니다. javascript:OnWrite();
프로필 이미지
에구머니
2017-08-28
204
글번호 112290
시스템
답변완료

재문의드립니다

54572에1번2번수정이 안되어서다시문의드립니다 분봉에서 봉마다 강조가다나오게 부탁드립니다
프로필 이미지
장군
2017-08-28
179
글번호 112289
지표
답변완료

변동성 수식

1) 100일 동안의 변동성을 5분할을 한 후(변동폭의 고점을 1구간, 최점을 5구간)에 어제의 종가가 어제의 변동성의 5구간에 있고 오늘 4구간이하에 있는 경우에 매수하여 2구간 이상일 때 청산한다, 2) 매수조건 (1) 어제 5구간이고 오늘 4구간에서는 장중에 매입한다 (2) 어제 5구간이고 오늘 5구간인 경우에는 종가로 매입한다 3) 청산 조건, (1) 주가가 장중에 3구간 진입후에 4구간으로 하향할 때는 3구간선에서, 2구간에서 3구간으로 하향할 때는 2구간선에서, 1구간에서 2구간으로 하향할 때는 1구간선에서 각각 청산한다 (2) 종가까지 1구간에 있을 때는 유지한다. (3) 잔존 계약분이 오늘1구간에서 2구간, 2구간에서 3구간, 3구간에서 4구간으로 하향할 때 각 하향한 구간선에서 청산한다. 4) 손절 조건 (1) 당일 4구간 매입후에 5구간으로 하향할 경우에 4구간선에서 청산한다. (2) 어제 5구간 매입후에 오늘 5구간 진입시에 청산한다. 5) 진입 수 (1) 하루 2계약까지만 진입과 보유를 허용하며 (2) 두번째 진입시에는 1계약보다 최소 1pt 이상 낮은 계약일 때만 진입허용한다. 위 내용에 관한 시스템 식을 부탁드립니다. 감사합니다 !!!!!
프로필 이미지
무한질주
2017-08-28
243
글번호 112277
시스템
답변완료

진입 체결봉의 저가 고정 문의

안녕하세요, 해외선물에서 거래중인 사용자 입니다. 간단하게 사용하고 있는 전략이 "MA5 > MA20 이고, RSI20 < 20 이면 종가 매수"라고 할때, 1) 진입이 이루어진 봉의 저가를 RSIStop이라는 값으로 지정하려면 어떻게 해야할까요? (피라미딩 전략 미사용) if 조건 then RSIStop = low 라고 지정하는 경우, 진입이 이루어진 다음 봉도 조건을 충족 시키면 RSIStop 값이 변하는것 같습니다. RSIStop 값이 변동 없이 최초의 조건값을 충족시킨 봉의 저가로 고정하고자 하면 어떻게 수식을 짜야할까요? (실제 사용하는 조건에는 추가 조건들이 있어 RSI20 < 20을 crossdown으로 바꾸면 의도한 바와는 조금 다른 결과가 나옵니다.) 2) 진입이 이루어졌고 이후 stoploss가 실행되어 포지션을 청산하였을때, RSI20의 값이 >20 이상이 되었을때 부터 다시 진입 시그널을 발생시키고자 하면 어떻게 해야할까요? n 일 부터 n+10일 까지 쭉 "MA5 > MA20 이고, RSI20 < 20 " 조건을 충족 시키는 상황에서 진입은 n일 종가에 이루어 졌고 n+3일에 stoploss 청산이 이루어 졌다면, 이후 n+3일 부터 n+10일 까지는 조건이 충족되었어도 진입하지 않고싶습니다. 감사합니다.
프로필 이미지
라면의비밀
2017-08-28
185
글번호 112273
시스템
답변완료

54454 번 질문 관련 추가 질문입니다.

안녕하세요, 지난번에 당일 장중에 특정 이벤트가 발생한 이후에는 진입을 안 시키는 방법을 질문드렸었는데, 전일에 특정 이벤트가 발생시 당일 진입을 안 시키는 수식을 알려주시면 감사하겠습니다.
프로필 이미지
맘속의행복
2017-08-28
203
글번호 112272
시스템