커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

해외선물

해외선물용으로 S&P 기준으로요, 시가가 나오면 시가선 기준 Line 하나 ex)2800 위아래로 4개씩 5포인트씩 ex) 2805 2810 2815 2820 / 2795 2790 2785 2780 이 나왔으면 좋겠습니다. 1포인트당 4틱인것 같은데 5포인트면 20틱인것 같구요 그러니까 [시가]기준 20틱 단위로 위아래로 선이 나오면 됩니다.
프로필 이미지
구조대
2019-06-17
225
글번호 129518
지표
답변완료

간단한 시스템 수식 부탁드립니다.

간단한 시스템 수식 부탁드립니다. 1. 10 이평과 20이평의 간격이 30도 이하일때 (혹은 수렴중 ) 좁혀짐 볼린저밴드 중심선이 10이평과 20이평 사이에있고 1 이동평균선이 10이평과 20이평의 중심 중간 에 들어왔을때. 매수식 손절 10틱 익절 20틱 변수에 이평과 볼린저밴드 손절 익절 다 넣어주세요 2. . 10 이평과 20이평의 간격이 30도 이하일때 (혹은 수렴중) 좁혀짐 볼린저밴드 중심선이 10이평과 20이평 사이에있고 1 이동평균선이 10이평과 20이평의 중심 중간에 들어왔을때. 매도식 변수에 이평과 볼린저밴드 손절 익절 다 넣어주세요 통일 : 하루중 몇시부터 몇시사이 에 뜨는 신호 1회만 진입 해라 !!!!!
프로필 이미지
양키
2019-06-17
221
글번호 129517
시스템
답변완료

문의

청산식 조합 했는데 돌아 가는것도 있고 않되는 것도 있네요 수정좀 부탁 합니다 Input : BuyATRP(46),SellATRP(6),BuyATRS1(2.5),BuyATRS2(4.0),BuyATRS3(4.0),SellATRS1(3.5),SellATRS2(6.0),SellATRS3(6.0); Input : BuyStoploss(12), SellStoploss(6), BuyTrailing(5), BuyFloor(20), SellTrailing(5),SellFloor(8.5); Input:break(1.9),level(0.3),big(8),sbreak(1.9),slevel(0.3),sbig(8); var:진입후최고가(0),진입후최저가(0); If MarketPosition == 1 Then { 진입후최고가 = Highest(H,BarsSinceEntry + 1); ExitLong("매수추적",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS1); ExitLong("매수변동성",AtStop,C - ATR(BuyATRP) * BuyATRS2); If 진입후최고가 >= Entryprice + ATR(BuyATRP) * break Then { ExitLong("매수손익분기",AtStop,Entryprice + ATR(BuyATRP) * level); ExitLong("매수추적1",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS3); } If 진입후최고가 >= Entryprice + ATR(BuyATRP) * big Then { ExitLong("매수초과수익",AtStop,Lowest(L,3)); } SetStopLoss(BuyStoploss, PointStop); SetStopTrailing(BuyTrailing,BuyFloor,PointStop); If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김 SetStopLoss(0, PointStop); SetStopTrailing(0, 0, PointStop); } If MarketPosition == -1 Then { 진입후최저가 = Lowest(L,BarsSinceEntry + 1); ExitShort("매도추적",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS1); ExitShort("매도변동성",AtStop,C + ATR(SellATRP) * SellATRS2); If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbreak Then { ExitShort("매도손익분기",AtStop,Entryprice - ATR(SellATRP) * slevel); ExitShort("매도추적1",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS3); } If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbig Then { ExitShort("매도초과수익",AtStop,Highest(H,3)); } SetStopLoss(SellStoploss, PointStop); SetStopTrailing(SellTrailing,SellFloor,PointStop); If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김 SetStopLoss(0, PointStop); SetStopTrailing(0, 0, PointStop); } If MarketPosition == 1 Then ExitLong("스파이크청산-1", AtLimit, C + ATR(20) * 7); // 상승돌파 시 매수청산 } If MarketPosition == -1 Then Exitshort("스파이크청산+1", AtLimit, C - ATR(20) * 7); // 상승돌파 시 매도청산 } Var:SpikeHigh(0), spikelow(0); If MarketPosition == 0 Then { // 무포지션일때 SpikeHigh = 10; // 초기화 Condition1 = false; } If MarketPosition == 1 Then { // 매수포지션일 때 If !Condition1 and // 스파이크 미발생 H > C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승 SpikeHigh = H; // 스파이크 고점 설정 Condition1 = true; // 스파이크 발생 } If Condition1 Then { // 스파이크 발생 후 If SpikeHigh < H then SpikeHigh = H; // 신규 고점 나오면 갱신 ExitLong("스파이크청산-2", AtStop, SpikeHigh - ATR(20) * 2); //추적청산처럼 꼭지 찍고 내려올 때 If MarketPosition == 0 Then { // 무포지션일때 Spikelow = 10; // 초기화 Condition1 = false; } If MarketPosition == -1 Then { // 매수포지션일 때 If !Condition1 and // 스파이크 미발생 L < C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승 SpikeHigh = L; // 스파이크 고점 설정 Condition1 = true; // 스파이크 발생 } If Condition1 Then { // 스파이크 발생 후 If Spikelow > H then SpikeHigh = L; // 신규 고점 나오면 갱신 Exitshort("스파이크low청산-2", AtStop, Spikelow + ATR(20) * 2); } } } }
프로필 이미지
구다이전설
2019-06-17
216
글번호 129516
시스템
답변완료

시스템 부탁 드립니다

선생님 아래전략 최적화 잘 됩니다 고맙습니다 그리고 아래수식 진입과 청산 손절 방법을 교체 부탁드립니 새롭게 적용할 진입 청산 손절 전략 입니다 매수진입 - 직전고점 보다 (x틱) 더 올라가면 시장가 매수 입니다 매수청산 - 종가가 (20 이평) 을 close down하면 시장가 청산 입니다 매도진입 - 직전 저점보다 (y틱 ) 더 내려가면 매도 진입입니다 매도청산 - 종가가 (30이평을 )close up 하면 청산입니다 손절//익절 손절틱(25틱)//익절틱(35틱) 선생님 () 수치들은 최적화 가능하게 부탁드립니다 늘 감사드립니다 Input : length(10); var : 종가사용여부(0),수치표시(1),표시(0); var : 추세두께(2),추세상승색(red),추세하락색(blue); var : 고점연결두께(2),고점연결색상(RED); var : 저점연결두께(2),저점연결색상(blue); input : p1(5),P2(20); input : 손절틱수(50),익절틱수(50); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0),TL11(0),TL12(0),T(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# HH = IFF(종가사용여부==1,C,H); LL = IFF(종가사용여부==1,C,L); If Index == 0 Then { 고[1,1] = HH; 저[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { T = 1; For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetSize(TL1,추세두께); TL_SetColor(TL1,추세상승색); if 저[1,1] > 저[2,1] Then { if 표시 == 0 Then TL_Delete(TL11); TL11 = TL_New(저[2,3],저[2,4],저[2,1],저[1,3],저[1,4],저[1,1]); TL_SetExtRight(TL11,true); TL_SetColor(TL11,저점연결색상); TL_SetSize(TL11,저점연결두께); } If 수치표시 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)+NewLine+"+"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱"); Text_SetStyle(Text1, 2, 1); } } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 수치표시 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)+NewLine+"+"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱"); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { T = -1; For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,추세두께); TL_SetColor(TL1,추세하락색); if 고[1,1] < 고[2,1] Then { if 표시 == 0 Then TL_Delete(TL12); TL12 = TL_New(고[2,3],고[2,4],고[2,1],고[1,3],고[1,4],고[1,1]); TL_SetExtRight(TL12,true); TL_SetColor(TL12,고점연결색상); TL_SetSize(TL12,고점연결두께); } If 수치표시 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)+NewLine+"-"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱"); Text_SetStyle(Text1, 2, 0); } } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)+NewLine+"-"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱"); } } 최종꼭지점 = "저점"; } var1 = ma(c,P1); var2 = ma(C,P2); if T == -1 and abs(저[1,1]-저[2,1]) <= PriceScale*10 and C > O and crossup(c,var1) Then buy("b",AtMarket); if MarketPosition == 1 Then { ExitLong("bx1",AtStop,저[2,1]-PriceScale*1); if CrossDown(c,var2) Then exitlong("bx2",AtMarket); } if T == 1 and abs(고[1,1]-고[2,1]) <= PriceScale*10 and C < O and CrossDown(c,var1) Then sell("s",AtMarket); if MarketPosition == -1 Then { ExitShort("sx1",AtStop,고[2,1]-PriceScale*1); if CrossUp(c,var2) Then ExitShort("sx2",AtMarket); } SetStopLoss(PriceScale*손절틱수,PointStop); SetStopProfittarget(PriceScale*익절틱수,PointStop);
프로필 이미지
유로정복자
2019-06-17
210
글번호 129511
시스템
답변완료

트릭스기울기 지표식과 검색식 요청 드립니다.

안녕하세요..검색식과 지표식 좀 부탁드려 보겠습니다. 사용 지표는 trix기울기 입니다. 현재 예스랭귀지 지표에 trix기울기 지표가 없어서 검색을 통해 설정하긴 했는데 변수가 추가된 trix기울기 지표 수식 요청 드립니다. 1. trix기울기는 trix(기간)-trix(기간-1) 인데 기간값 이외에 -1 부분을 사용자가 설정할수 있게끔 변수로 해주시는 지표수식으로 부탁드립니다. 2. 검색하고자 하는 조건은 trix기울기(기간1)이 trix기울기(기간2)를 크로스업 과 크로스다운 하는 종목 검색 입니다. (기간1=5,기간2=12) 3.질문 입니다. 예를 들어 기울기 선이 꺽이는 부분(변곡점)를 검색식으로 구현 할 수 있나요? 초보자라 요청이 많습니다. 바쁘시더라도 부탁 드립니다.
프로필 이미지
sinic
2019-06-17
410
글번호 129507
종목검색
답변완료

시스템식 부탁드립니다.

항상 도움 주셔서 감사합니다. 매매종목 : 삼성전자 주식 요청 시스템식 : 1. 매수 조건 : 매일 오후 종가에 삼성전자 매수(가격은 시장가) 2. 매수 청산 : 익일 시가에 매수청산(가격은 시장가) 3. 매매는 하루에 한번만(전일 매수, 당일 아침 청산, 당일 마감시 매수) 요청 시스템식2 : 1. 매수 조건 : 매일 오후 3시에 삼성전자 매수(가격은 지정가) 2. 매수 청산 : 익일 10시에 매수청산(가격은 지정가) 3. 매매는 하루에 한번만(전일 매수, 당일 아침 청산, 당일 마감시 매수) 위의 시스템식 부탁드립니다.
프로필 이미지
양치기
2019-06-17
208
글번호 129502
시스템
답변완료

문의드립니다

싱거운 질문일수도 있는데 해결이 안되어 질문드립니다 상승체결 거래량 / 하락체결 거래량 을 분리해서 보기 위하여 다음과 같이 수식을 작성하였습니다. Plot1( Volume, "거래량"); 빨간 바 표시 Plot2( UpVol, "매수"); 점 표시 Plot3( DownVol, "매도"); 파란 바 표시 1. 데이터창에 소수점 (.00) 을 제거하는 방법을 알고 싶습니다. Floor(Volume) , Ceiling(Volume), Int(Volume), IntPortion(Volume) 전부다 해봐도 .00 이 붙어서 나오는데 상당히 가독성이 떨어집니다 2. 첨부파일에 보시면 차트 하단부 거래량 지표 중 매도 (하락체결 거래량) 파란 부분이 실제보다 더 많이 표시됩니다 데이터 창 수치는 문제가 없는데, 바 표시를 표면 상승체결 거래량이 실제보다 더 가려집니다 직관적인 지표를 보고자 하는데 이러한 오류로 인해 매매 타임을 많이 놓쳤습니다 비단 UpVol/ DownVol 뿐 아니라, Asks/ Bids 에 대해서도 마찬가지의 문제를 봅니다. 이러한 오류가 왜 이러는 것인지, 또 어떻게 개선하는 지 부탁드립니다.
프로필 이미지
trademan
2019-06-17
276
글번호 129498
지표
답변완료

문의드립니다

TL_Delete(var1); if C > O Then { var1 = TL_New(sdate[1],stime[1],L,sdate,stime,L); TL_SetColor(var1,RED); } if C < O Then { var1 = TL_New(sdate[1],stime[1],H,sdate,stime,H); TL_SetColor(var1,BLUE); } TL_SetExtRight(var1,True); TL_SetExtLeft(var1,True); 현재수평선이하나만 나오는데 전봉고점+10틱과 전봉저점-10틱에 수평선이 2개나오게 부탁합니다~~
프로필 이미지
유선
2019-06-17
196
글번호 129493
지표
답변완료

배열변수에 값을 넣는 방법으로 다음과 같이 가능한가요?

자바스크립트 같은 언어에서는 aaa = { "111", "222", "333" } 과 같이 배열변수에 여러개의 상수값을 한꺼번에 넣을 수 있는 것 처럼 예스랭귀지에서도 배열에 여러 값을 한꺼번에 넣을 수 있나요? 없다면, aaa[0] = "111"; aaa[1] = "222"; ..... 와 같은 방법으로 하나씩 지정해 주는 방법밖엔 없을까요?
프로필 이미지
온고지신
2019-06-17
226
글번호 129488
사용자 함수