커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

문의 드립니다!

안녕하세요! 콜옵션 챠트의 콜 시가선을 기준으로해서... 여기에 data1 이 콜이고 data2 가 풋인 복합챠트의 경우 이 콜풋캔들이 이동해서 각각 콜의 시가선을 만날때마다(상하 어느쪽에서 맞던 모두 해당) 각각 세로선과 알람신호가 발생되도록 부탁드립니다 *** 특히 풋캔들(data2)이 콜의 시가선을 맞는 경우가 더 중요합니다 * 세로선 발생시기는 n틱전으로, 세로선의 색상과 두께는 사용자지정이 가능토록해주세요 감사합니다!!!
프로필 이미지
유로파54
2025-03-04
450
글번호 188743
지표
답변완료

수식 확인 좀 부탁 드립니다.

var : Xidx(0), Xinx(0); if Tcond == true and 300< H-L Then { Trade = False; Xidx = Index; } if Tcond == False and Index == Xinx+5 Then Trade = true; 장대봉 출현시 4번째봉까지는 진입금지라는 위의 식을 주셔서 적용해봐도 진입이 계속 됩니다. 수정 부탁드립니다.
프로필 이미지
산수유
2025-03-04
422
글번호 188741
시스템
답변완료

시스템 식 요청 드립니다.

답변 너무 감사드립니다. 그런데, 수정해주신 식으로 다시 한번 돌려보니... 그림 1,2 과 같이 bx 타점에서 자꾸 청산이 되더라구요 아마 수량이 줄어서 그런 것 같습니다. ㅜ.ㅜ 분할매수 4 5 6의 경우 청산 bx와 상관 없게 하고 싶은데... 해당 부분은 어떻게 수정해야 할지 요청 드립니다. ㅜ.ㅜ bx에 관련된 청산 식을 if var1 > 0 and C < Var4 AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) then ExitLong("bx"); 이렇게 수정을 했더니 첨부그림 3, 4 처럼 되었습니다. 첨부그림 4에 시스템식이 적용이 안되는 부분 수기로 작성하였는데 수정 요청 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 시스템식 요청드립니다. > 안녕하세요 예스스탁입니다. 청산식에 수량을 지정하면 기본적으로 첫진입부터 수량이 차감됩니다. 4~6차 수량만 청상하려면 별도로 청산함수에 진입명을 지정하셔야 합니다. 4차 이후 4~6차 진입들의 평단가보다 4% 상승하면 4~6차를 청산하고 이후 4~6차는 조건만족시 추가진입하게 됩니다. input : N(14),금액(2000000); input : 시작날짜 (20250109); Input : 기준선기간(120); Var : 기준선(0); var : cntt(0),H1(0),L1(0); var : cnt(0),sum(0),mav(0),DD(0); var : AP(0),TT(0),entry(False); var : LL(0),RR(0),rate(0); var : 저항(0), B1(0) ; Var : day(0),EntryDay(0),ddd(0),ED(0); var : sum1(0),sum2(0),sum3(0),avg4(0); #------------------------------------- if sDate >= 시작날짜 Then { if Bdate != Bdate[1] Then { entry = true; day = day+1; dd = dd+1; } } if TotalTrades > TotalTrades[1] Then entry = False; #------------------------------------- #------------------------------------- sum = 0; For cnt = 0 to N-1 { sum = sum + DayClose(cnt); } mav = (sum/N); #------------------------------------- #--------------------------------------- if (MarketPosition == 0) and (entry == true) and L > mav Then Buy("1차매수",AtLimit,mav,Floor(금액/min(NextBarOpen,mav))); if MarketPosition == 1 and (LatestEntryName(0) == "1차매수") and L > LatestEntryPrice(0)*0.95 Then Buy("2차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.15/min(NextBarOpen,mav))); if MarketPosition == 1 and (LatestEntryName(0) == "2차매수") and L > LatestEntryPrice(0)*0.95 Then Buy("3차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.2/min(NextBarOpen,mav))); if MarketPosition == 1 and (LatestEntryName(0) == "3차매수") and L > LatestEntryPrice(0)*0.95 Then Buy("4차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.25/min(NextBarOpen,mav))); if MarketPosition == 1 and (LatestEntryName(0) == "4차매수") and L > LatestEntryPrice(0)*0.95 Then Buy("5차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.3/min(NextBarOpen,mav))); if MarketPosition == 1 and (LatestEntryName(0) == "5차매수") and L > LatestEntryPrice(0)*0.95 Then Buy("6차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.35/min(NextBarOpen,mav))); #----------------------------------- if MarketPosition == 1 Then { #전봉대비 수량 감소(일부 청산발생을 위미) if CurrentContracts < CurrentContracts[1] Then { #청산가 저장 var1 = LatestExitPrice(0); if LatestExitName(0) == "3%익절" or LatestExitName(0) == "3-D%익절" or LatestExitName(0) == "3-E%익절" Then Condition1 = true; if LatestExitName(0) == "4%익절" or LatestExitName(0) == "4-D%익절" or LatestExitName(0) == "4-E%익절" Then Condition2 = true; if LatestExitName(0) == "5%익절" or LatestExitName(0) == "5-D%익절" or LatestExitName(0) == "5-E%익절" Then Condition3 = true; if LatestExitName(0) == "7%익절" or LatestExitName(0) == "7-D%익절" Then Condition4 = true; } #전봉대비 수량 증가(추가 진입발생을 의미) if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then { #현재수량 저장 Var3 = CurrentContracts; Var4 = AvgEntryPrice; Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "4차매수")) Then { #현재수량 저장 Var3 = CurrentContracts; Var4 = AvgEntryPrice; Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "6차매수") or (LatestEntryName(0) == "5차매수")) Then { #현재수량 저장 Var3 = CurrentContracts; Var4 = AvgEntryPrice; Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } if var1 > 0 and C < Var4 then ExitLong("bx"); if Condition1 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") )Then ExitLong("3%익절",AtLimit,Var4*1.03,"",Floor(Var3*0.2),1); if Condition2 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then ExitLong("4%익절",AtLimit,Var4*1.04,"",Floor(Var3*0.3),1); if Condition3 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then ExitLong("5%익절",AtLimit,Var4*1.05,"",Floor(Var3*0.4),1); if Condition4 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then ExitLong("7%익절",AtLimit,Var4*1.07,"",Floor(Var3*0.1),1); ExitLong("10%익절",AtLimit,Var4*1.10); //4차 이상 진입 if CurrentEntries >= 4 Then { //4차 이후의 평듄 if CurrentContracts > CurrentContracts[1] Then { sum1 = sum1 + C*(CurrentContracts-CurrentContracts[1]); sum2 = sum2 + (CurrentContracts-CurrentContracts[1]); avg4 = sum1/sum2; } if CurrentEntries >= 4 Then ExitLong("4차이후익절4",AtLimit,avg4*1.04,"4차매수"); if CurrentEntries >= 5 Then ExitLong("4차이후익절5",AtLimit,avg4*1.04,"5차매수"); if CurrentEntries >= 6 Then ExitLong("4차이후익절6",AtLimit,avg4*1.04,"6차매수"); } Else { sum1 = 0; sum2 = 0; avg4 = 0; } } Else#매수진입중이 아니면 { #변수 0으로 초기화 var1 = 0; Var2 = 0; } 즐거운 하루되세요 > 맴맴잉 님이 쓴 글입니다. > 제목 : 시스템식 요청드립니다. > 아래의 식에서 수정이 필요한데 자꾸 오류가 생겨 요청드립니다. 아래의 시스템식은 주가가 14 이평선위에 있다가 해당 이평선을 하향돌파했을때 매수하는 시스템식으로 5% 하락할때마다 분할매수 하고 매도는 매수평단에서 3% 4% 5% 분할매도 하는 시스템 식입니다. 그림파일 1번이 보시면 현재 작성되어있는 식으로 제대로 작동하고 있습니다. --수정하고 싶은 내용은-- 4차 매수 이후부터는 각 차수(4,5,6차)에 매수한 평단에서 4%가 상승하면, 각 차수(4,5,6차)에 매수한 금액(수량) 만큼만 매도 하고, 다시 각 차수(4,5,6차) 매수자리에 오면 매수하는 시스템식으로 수정하고 싶습니다. 예를 들면 그림파일 2번 을 보시면 4차 매수 이후에 4차에 매수한 평단에서 4% 가 상승했을때, 4차에 매수한 금액(수량) 만큼만 매도 해야하고 다시 떨어졌을때, 4차에서 매수하고 싶습니다. 그래서 아래와 같이 4차매수 이후 분할매도식을 수정을 했는데, 4차이후 4% 상승했을때, 전부다 팔리는 상황이 벌어지는데 어떻게 수정을 해야 할지 몰라 요청드립니다. if Condition1 == False AND ((LatestEntryName(0) == "4차매수"))Then ExitLong("분할4익절",AtLimit,LatestEntryPrice(0)*1.04,"",Floor(금액*1.25/min(NextBarOpen,mav))); if Condition1 == False AND ((LatestEntryName(0) == "5차매수"))Then ExitLong("분할5익절",AtLimit,LatestEntryPrice(0)*1.04,"",Floor(금액*1.3/min(NextBarOpen,mav))); if Condition1 == False AND ((LatestEntryName(0) == "6차매수"))Then ExitLong("분할6익절",AtLimit,LatestEntryPrice(0)*1.04,"",Floor(금액*1.35/min(NextBarOpen,mav))); --------------------------------------------------------------- input : N(14),금액(2000000); input : 시작날짜 (20250109); Input : 기준선기간(120); Var : 기준선(0); var : cntt(0),H1(0),L1(0); var : cnt(0),sum(0),mav(0),DD(0); var : AP(0),TT(0),entry(False); var : LL(0),RR(0),rate(0); var : 저항(0), B1(0) ; Var : day(0),EntryDay(0),ddd(0),ED(0); #------------------------------------- if sDate >= 시작날짜 Then { if Bdate != Bdate[1] Then { entry = true; day = day+1; dd = dd+1; } } if TotalTrades > TotalTrades[1] Then entry = False; #------------------------------------- #------------------------------------- sum = 0; For cnt = 0 to N-1 { sum = sum + DayClose(cnt); } mav = (sum/N); #------------------------------------- #--------------------------------------- if (MarketPosition == 0) and (entry == true) and L > mav Then Buy("1차매수",AtLimit,mav,Floor(금액/min(NextBarOpen,mav))); if (LatestEntryName(0) == "1차매수") Then Buy("2차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.15/min(NextBarOpen,mav))); if (LatestEntryName(0) == "2차매수") Then Buy("3차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.2/min(NextBarOpen,mav))); if (LatestEntryName(0) == "3차매수") Then Buy("4차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.25/min(NextBarOpen,mav))); if (LatestEntryName(0) == "4차매수") Then Buy("5차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.3/min(NextBarOpen,mav))); if (LatestEntryName(0) == "5차매수") Then Buy("6차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.35/min(NextBarOpen,mav))); #----------------------------------- if MarketPosition == 1 Then { #전봉대비 수량 감소(일부 청산발생을 위미) if CurrentContracts < CurrentContracts[1] Then { #청산가 저장 var1 = LatestExitPrice(0); if LatestExitName(0) == "3%익절" or LatestExitName(0) == "3-D%익절" or LatestExitName(0) == "3-E%익절" Then Condition1 = true; if LatestExitName(0) == "4%익절" or LatestExitName(0) == "4-D%익절" or LatestExitName(0) == "4-E%익절" Then Condition2 = true; if LatestExitName(0) == "5%익절" or LatestExitName(0) == "5-D%익절" or LatestExitName(0) == "5-E%익절" Then Condition3 = true; if LatestExitName(0) == "7%익절" or LatestExitName(0) == "7-D%익절" Then Condition4 = true; } #전봉대비 수량 증가(추가 진입발생을 의미) if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then { #현재수량 저장 Var3 = CurrentContracts; Var4 = AvgEntryPrice; Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "4차매수")) Then { #현재수량 저장 Var3 = CurrentContracts; Var4 = AvgEntryPrice; Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "6차매수") or (LatestEntryName(0) == "5차매수")) Then { #현재수량 저장 Var3 = CurrentContracts; Var4 = AvgEntryPrice; Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } if var1 > 0 and C < Var4 then ExitLong("bx"); if Condition1 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") )Then ExitLong("3%익절",AtLimit,Var4*1.03,"",Floor(Var3*0.2),1); if Condition2 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then ExitLong("4%익절",AtLimit,Var4*1.04,"",Floor(Var3*0.3),1); if Condition3 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then ExitLong("5%익절",AtLimit,Var4*1.05,"",Floor(Var3*0.4),1); if Condition4 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then ExitLong("7%익절",AtLimit,Var4*1.07,"",Floor(Var3*0.1),1); ExitLong("10%익절",AtLimit,Var4*1.10); if Condition1 == False AND ((LatestEntryName(0) == "4차매수"))Then ExitLong("3-D%익절",AtLimit,Var4*1.03,"",Floor(Var3*0.5),1); if Condition2 == False AND ((LatestEntryName(0) == "4차매수")) Then ExitLong("4-D%익절",AtLimit,Var4*1.04,"",Floor(Var3*0.45),1); if Condition3 == False AND ((LatestEntryName(0) == "4차매수")) Then ExitLong("5-D%익절",AtLimit,Var4*1.05,"",Floor(Var3*0.1),1); if Condition1 == False AND ((LatestEntryName(0) == "6차매수") or (LatestEntryName(0) == "5차매수"))Then ExitLong("3-E%익절",AtLimit,Var4*1.03,"",Floor(Var3*0.5),1); if Condition2 == False AND ((LatestEntryName(0) == "6차매수") or (LatestEntryName(0) == "5차매수")) Then ExitLong("4-E%익절",AtLimit,Var4*1.04,"",Floor(Var3*0.45),1); if Condition3 == False AND ((LatestEntryName(0) == "6차매수") or (LatestEntryName(0) == "5차매수")) Then ExitLong("5-E%익절",AtLimit,Var4*1.05,"",Floor(Var3*0.1),1); } Else#매수진입중이 아니면 { #변수 0으로 초기화 var1 = 0; Var2 = 0; }
프로필 이미지
맴맴잉
2025-03-04
563
글번호 188740
시스템
답변완료

문의

data2(TRIX(Period)); data2(ema(TRIX(Period),sigPeriod)); Oscillar 챠트는 그대로 두고 지표만 반대로(거꾸로)표현 할 수 있도록 부탁 드립니다
프로필 이미지
이광복
2025-03-04
405
글번호 188737
지표
답변완료

문의 드립니다

안녕하세요 FVG Fair value gap 이라는 지표를 예스로 구현 할 수 있는지 궁금합니다. 미리 감사드립니다.
프로필 이미지
동해바다01
2025-03-04
471
글번호 188732
지표

gogosing 님에 의해서 삭제되었습니다.

프로필 이미지
gogosing
2025-03-04
23
글번호 188730
지표
답변완료

수식 작성 문의드립니다

안녕하세요. 진입조건은 psar 상향돌파 and ema50선 이상일 시 롱 Psar하향돌파 and ema50선 아래일 시 숏 포지션이 0일때만 진입, 포지션 있을 시 진입신호뜨더라도 진입안함 손절 30포인트 익절 최고수익대비 50%지점에서 트레일링스탑입니다 감사합니다
프로필 이미지
robot211
2025-03-04
341
글번호 188728
사용자 함수
답변완료

수식변환 요청

다음 수식을 종목검색 수식으로 변환 부탁드립니다. A=predayhigh()-predaylow(); B=dayopen()+A*0.5; B1=RSI(2); A1=LinearRegressionValue(C,50,0); A2=LinearRegressionValue(A1,50,0); eq=A1-A2; VL=A1+eq; crossup(c,B) and B1>50 and C>VL
프로필 이미지
saeroi
2025-03-04
346
글번호 188727
종목검색

회원 님에 의해서 삭제되었습니다.

프로필 이미지
회원
2025-03-04
102
글번호 188726
시스템