커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

답변좀 부탁드릡니다

이평선 10일 이평선 이평선 20일 이평선 이평선 40일 이평선 이편선 100일 이평선 계약수는 2개약을 합니다 이렇게 이평선 4개를 사용해서 시스템을 만들어 볼까 합니다 매수 매도 조건 -- 현재 봉의 몸통만 기준으로 해서 2/1 이상이 종가상 100일 이평선을 돌파 이탈시 매수 매도 합니다 만약 현재봉이 종가상 도지면 다음 봉으로 기준으로 합니다 매수2 매도2 조건 -- 매수의 경우 주가가 위에서 아래 있는 100 일 이평선을 터치 또는 이탈했다가 몸통이 위에서 있으면 (종가상) 매수2 매도의 경우는 반대로 입니다 청산식 -- 1. 진입해서 200틱 이상 수익권에서 현재가가 10일 이평선 이탈시 1계약 청산 또는 연속 3음봉시 저가가 낮아지는경우 2. 진입해서 200틱 이상 수익권에서 종가상 20일 이평선 이탈시 1계약 청산 3. 진입해서 200틱 이상 수익권에서 종가상 40일 이평선 이탈시 전체 청산 4. 수익이 1000틱 이상이면 전량 청산 매도시 청산은 반대입니다 단 진입해서 수익권이 200틱 아래면 매수 매도 스위칭합니다
프로필 이미지
사이다
2020-04-01
664
글번호 137407
시스템

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

프로필 이미지
동작맨
2020-03-31
14
글번호 137406
지표
답변완료

질문 올립니다.

안녕하세요. 늘 감사드립니다. 전에 알려 주신, 시장 개장 시점을 중심으로 시고저종을 표시하는 방법을 감사히 잘 쓰고 있습니다. 그런데, 항셍은 1015, 나닥은 2230으로 개장시간이 서로 다르다 보니, 항셍에 적용할 때는 손으로 1015를 쳐 주고 나닥에 적용할 때는 손으로 2230을 쳐 주다 보니 조금 불편한 면이 있습니다. 그래서, 그냥 자동으로 알아서 항셍 시장이면 시작 개시시간을 1015로, 나닥이면 DST에서는 2230, ST에서는 2330으로 자동으로 처리되게 만들어서, 일일히 손으로 장 개시 시간을 입력하지 않고, 한 번 만든 소스로 이 시장 저 시장, 여름 겨울 구분 없이 사용하게 할 방법이 있을지요? 감사합니다!
프로필 이미지
즐겁게
2020-03-31
687
글번호 137405
시스템
답변완료

변동성돌파전략 수식 문의

인터넷에 나오는 수식 넣어봐도 계속 오류 나네요. 변동성돌파전략(당일 시가에서 전일 고점-저점 차의 0.4배 상승시 매수, 익일 시초가 매도) 수식 정확하게 알 수 있을까요?
프로필 이미지
shwk
2020-03-31
668
글번호 137404
시스템
답변완료

수정부탁드립니다.

안녕하세요? 아래 세가지 수식 모두 동일하게 수정부탁드려요. 현재 스위칭은 매매횟수에 포함이 되지않습니다. 이부분을 매매횟수에 포함을시켜서 지정한 매매횟수만큼만 딱 될수있게 부탁드립니다. 감사합니다. [1] input : 매수전봉양봉틱수(5),매수현재양봉틱수(5); input : 매도전봉음봉틱수(5),매도현재음봉틱수(5); input : 진입횟수(5); input : 익절틱수(50),손절틱수(50); var : entry(0); if bdate != bdate[1] Then entry = 0; if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then entry = entry+1; if entry < 진입횟수 and bdate == bdate[1] and MarketPosition == 0 and C[1] == O[1]-매도전봉음봉틱수*PriceScale and C[0] == O[0]-매도현재음봉틱수*PriceScale Then sell("s"); if entry < 진입횟수 and bdate == bdate[1] and MarketPosition == 0 and C[1] == O[1]+매수전봉양봉틱수*PriceScale and C[0] == O[0]+매수현재양봉틱수*PriceScale Then buy("b"); if MarketPosition == 1 Then sell("bs",AtStop,EntryPrice-PriceScale*손절틱수); if MarketPosition == -1 Then buy("sb",AtStop,EntryPrice+PriceScale*손절틱수); SetStopProfittarget(PriceScale*익절틱수,PointStop); [2] input : 매수전봉양봉틱수(5),매수현재양봉틱수(5); input : 매도전봉음봉틱수(5),매도현재음봉틱수(5); input : 진입횟수(5); input : 익절틱수(50),손절틱수(4); input : P1(5),P2(20); var : entry(0),mav1(0),mav2(0),T1(0); mav1 = ma(C,P1); mav2 = ma(C,P2); #영업일 변경 if bdate != bdate[1] Then { T1 = TotalTrades; } if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if mav1 > mav2 and #정배열 entry < 진입횟수 and #진입횟수가 지정한 값 이하 bdate == bdate[1] and MarketPosition == 0 and #매수나 무포지션 상태 C[1] == O[1]-매도전봉음봉틱수*PriceScale and C[0] == O[0]-매도현재음봉틱수*PriceScale Then { sell("s"); if entry < 진입횟수-1 then buy("bs1",AtStop,C+PriceScale*4); Else ExitShort("sx1",AtStop,C+PriceScale*4); } if mav1 < mav2 and #역배열 entry < 진입횟수 and #진입횟수가 지정한 값 이하 bdate == bdate[1] and MarketPosition == 0 and #매도나 무포지션 상태 C[1] == O[1]+매수전봉양봉틱수*PriceScale and C[0] == O[0]+매수현재양봉틱수*PriceScale Then { buy("b"); if entry < 진입횟수-1 Then sell("sb1",AtStop,C-PriceScale*4); Else ExitShort("bx1",AtStop,C-PriceScale*4); } #매수진입 후 손절되면 매도로 스위칭 if MarketPosition == 1 Then { if entry < 진입횟수 Then sell("bs",AtStop,EntryPrice-PriceScale*손절틱수); Else ExitLong("bsx",AtStop,EntryPrice-PriceScale*손절틱수); } #매도진입 후 손절되면 매수로 스위칭 if MarketPosition == -1 and entry < 진입횟수 Then { if entry < 진입횟수 Then buy("sb",AtStop,EntryPrice+PriceScale*손절틱수); Else ExitShort("sbx",AtStop,EntryPrice+PriceScale*손절틱수); } #목표수익 설정 SetStopProfittarget(PriceScale*익절틱수,PointStop); [3] input : 매수전봉양봉틱수(5),매수현재양봉틱수(5); input : 매도전봉음봉틱수(5),매도현재음봉틱수(5); input : 진입횟수(5); input : 익절틱수(50),손절틱수(4); input : P1(5),P2(20); var : entry(0),mav1(0),mav2(0),T1(0); mav1 = ma(C,P1); mav2 = ma(C,P2); #영업일 변경 if bdate != bdate[1] Then { T1 = TotalTrades; } if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if mav1 < mav2 and #역배열 entry < 진입횟수 and #진입횟수가 지정한 값 이하 bdate == bdate[1] and MarketPosition == 0 and #매수나 무포지션 상태 C[1] == O[1]-매도전봉음봉틱수*PriceScale and C[0] == O[0]-매도현재음봉틱수*PriceScale Then { sell("s"); if entry < 진입횟수-1 then buy("bs1",AtStop,C+PriceScale*4); Else ExitShort("sx1",AtStop,C+PriceScale*4); } if mav1 > mav2 and #정배열 entry < 진입횟수 and #진입횟수가 지정한 값 이하 bdate == bdate[1] and MarketPosition == 0 and #매도나 무포지션 상태 C[1] == O[1]+매수전봉양봉틱수*PriceScale and C[0] == O[0]+매수현재양봉틱수*PriceScale Then { buy("b"); if entry < 진입횟수-1 Then sell("sb1",AtStop,C-PriceScale*4); Else ExitShort("bx1",AtStop,C-PriceScale*4); } #매수진입 후 손절되면 매도로 스위칭 if MarketPosition == 1 Then { if entry < 진입횟수 Then sell("bs",AtStop,EntryPrice-PriceScale*손절틱수); Else ExitLong("bsx",AtStop,EntryPrice-PriceScale*손절틱수); } #매도진입 후 손절되면 매수로 스위칭 if MarketPosition == -1 and entry < 진입횟수 Then { if entry < 진입횟수 Then buy("sb",AtStop,EntryPrice+PriceScale*손절틱수); Else ExitShort("sbx",AtStop,EntryPrice+PriceScale*손절틱수); } #목표수익 설정 SetStopProfittarget(PriceScale*익절틱수,PointStop);
프로필 이미지
대구어린울프
2020-03-31
626
글번호 137403
시스템
답변완료

함수 사용 문의드립니다.

수고하십니다. 다른 함수값을 동시에 읽어오고 싶은데, 잘 안되서 글을 쓰게되었네요. ------------------------------------------ func_test 함수 ------------------------------------------ inputs : num(Numeric); var1 = cci(num); var2 = rsi(num); func_test = NumToStr(var1,2) + " " + NumToStr(var2,2); ------------------------------------------ ------------------------------------------ 호출 시스템 ------------------------------------------ var : num(0), r_str(""); if ((Date == 20200330) && (Time == 141500)) then Begin r_str = func_test(9); MessageLog( r_str ); buy(); end; ------------------------------------------ 예를 들어 위와 같이, 사용자정의 함수를 func_test 로 만들었다고 가정할때에 cci 값과 rsi값을 리턴하게 됩니다. 그런데 문제가 있습니다, 이전봉의 CCI값을 가져오려면 CCI[1] [2] ... 이런식으로 번호를 붙이게 되는데 사용자 함수 호출에는 이것이 안먹히는것 같습니다,. func_test(9)[1] 이와같이 호출하면 아래와 같은 오류가 나옵니다. "프로그램오류 : 아직 컴파일되지 않았거나, 실행코드가 없습니다." 리턴값을 스트링으로 한 이유는 : 여러값을 받기위함입니다. 구분자로 분리.. (return ex : 123+456+789) 여러개의 값을 받는 부분은 배열을 써 봤지만, 배열을 써도 [0] 값만 불러오지 [1] [2] 값에는.. [0]값이 불러와집니다. input : arr[n](NumericArrayRef); 을 이용.. 정리하자면, 1. 사용자함수를 만들때에 한번 호출시, 여러개의 리턴값을 받고싶다. (rsi cci 등..) 2. 사용자함수 호출시, 인덱스 봉을 [0] [1] [2] 이런식으로 지정하여, 해당되는 값을 불러오고 싶다. 만약, 위의 예제로 예를 든다면 func_test(9)[2] 호출하면 현재봉 -2 의 값의 CCI, RSI 값을 리턴 받고 싶습니다. 도움을 부탁드립니다.
프로필 이미지
가을이다
2020-03-31
642
글번호 137402
사용자 함수
답변완료

알려주신 수식(매수버전)을 매도 버전으로 변경했는데... 수식에는 이상이 없다고 나?

알려주신 수식(매수버전)을 매도 버전으로 제가 임의로 변경해 보았는데 ... 수식에는 이상이 없다고 나오는데 거래이력이 나오질 않네요... 어떤것을 바꿨냐면 buySetup --> sellSetup data2(c>sarv) --> data2(c<sarv) 변경하였는데...또 바꿀게 있나요? 사용은 하고 있는데 잘모르겠어요..맞게 사용하고 있는지..ㅠㅠ Input : RSIPeriod(7),RSI매수값(65),SimPeriod(7),심리도값(45); Input : N1(1),초기화(7); Input : CCI기간(20),CCI값(400); Input : 하락틱수(5); Input : 즉시익절1(180),즉시손절1(60); Input : 분할매수횟수(1),분할매수틱수(50); Input : RSIPeriod1(8),A(40),B(25); Input : N2(0.6),N3(0.02); Input : tr수익(150),tr하락(25); Input : 거래량1(0),거래량2(14000); Input : 저점손절틱수(0); Input : N4(0.6); Input : 본전생각틱(32); input : af(0.02),maxaf(0.2); var : BBup(0,data1),cond1(false,data1),cond2(false,data1),v1(0,data1),v2(0,data1); var : cnt(0,data1),SigSum(0,data1),count2(0,data1),RSIsig(0,data1); Var : Counter(0,data1), DownAmt(0,data1), UpAmt(0,data1), UpSum(0,data1), DownSum(0,data1), UpAvg(0,data1), DownAvg(0,data1); var : idx(0,data1), PreUpAvg(0,data1), preDownAvg(0,data1),RSIVv(0,data1); var : CCIv(0,data1),RSIv(0,data1),Simri(0,data1),sellSetup(false,data1),DD(0,data1),entry(0,data1); var : sarv(0,data2); Array : C1[100](0,data1); CCIv = data1(CCI(CCI기간)); RSIV = data1(RSI(RSIPeriod)); Simri = data1(Simrido(SimPeriod)); sarv = data2(sar(af,maxaf)); if Bdate != Bdate[1] Then { for cnt = 1 to 99 { C1[cnt] = C1[cnt-1][1]; } PreUpAvg = UpAvg[1]; preDownAvg = DownAvg[1]; idx = idx + 1; } C1[0] = C; If idx == RSIPeriod1+2 Then { UpSum = 0; DownSum = 0; For Counter = 0 To RSIPeriod1 - 1 { UpAmt = C1[Counter] - C1[Counter+1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpSum = UpSum + UpAmt; DownSum = DownSum + DownAmt; } UpAvg = UpSum / RSIPeriod1; DownAvg = DownSum / RSIPeriod1; } If idx > RSIPeriod1+2 Then { UpAmt = C1[0] - C1[1]; If UpAmt >= 0 Then DownAmt = 0; Else { DownAmt = -UpAmt; UpAmt = 0; } UpAvg = (PreUpAvg * (RSIPeriod1 - 1) + UpAmt) / RSIPeriod1; DownAvg = (preDownAvg * (RSIPeriod1 - 1) + DownAmt) / RSIPeriod1; } If UpAvg + DownAvg <> 0 Then RSIvv = 100 * UpAvg / (UpAvg + DownAvg); Else RSIvv = 0; if data1(bdate != bdate[1]) Then { Entry = 0; Cond2 = true; } if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then entry = entry+1; if TotalTrades > TotalTrades[1] and (IsExitName("즉시손절1",1) == true or IsExitName("본전청산1",1)) then Condition2 = false; Condition1 = RSIv > RSI매수값 and Simri > 심리도값 and RSIVV < A and RSIVV > B and v > 거래량1 and v < 거래량2 ; if bdate != bdate[1] Then { DD = DD+1; if var2 > 0 and DD == var2+초기화 Then SellSetup = false; } if SellSetup == false and Condition1 == true and Condition1[1] == false Then { v1 = data1(C); v2 = DD; SellSetup = true; } if Condition2 == true and MarketPosition == 0 and SellSetup == true and C > O and entry == 0 and data2(c<sarv) Then sell("매도",AtStop,var1+PriceScale*하락틱수);
프로필 이미지
이형지
2020-03-31
614
글번호 137401
시스템
답변완료

수식수정부탁드립니다

Input:Period1(17),Period2(17),Period3(17),n1(0),n2(0),n3(0), multi1(1),multi2(2),multi3(2); Var:기울기1(0),절편1(0),회귀선1(0),회귀선tmp(0), 기울기2(0),절편2(0),회귀선2(0), 기울기3(0),절편3(0),회귀선3(0), 채널폭(0),j(0),표준오차(0),표준편차(0); Var : nn1(0),xx1(0),yy1(0),Intercept1(0); Var : nn2(0),xx2(0),yy2(0),Intercept2(0); Var : nn3(0),xx3(0),yy3(0),Intercept3(0); var: y4(0),x4(0),n4(0),j4(0),∑y(0),∑y²(0),∑x(0),∑x²(0),∑xy(0),StdErr(0); nn1 = Period1; xx1 = Index; yy1 = c; Intercept1 = ma(yy1,nn1) - (ma(xx1*yy1, nn1) - ma(xx1,nn1) * ma(yy1,nn1)) / (ma(xx1^2,nn1) - (ma(xx1,nn1)^2)) * ma(xx1,nn1); nn2 = Period2; xx2 = Index; yy2 = c; Intercept2 = ma(yy2,nn2) - (ma(xx2*yy2, nn2) - ma(xx2,nn2) * ma(yy2,nn2)) / (ma(xx2^2,nn2) - (ma(xx2,nn2)^2)) * ma(xx2,nn2); nn3 = Period2; xx3 = Index; yy3 = c; Intercept3 = ma(yy3,nn3) - (ma(xx3*yy3, nn3) - ma(xx3,nn3) * ma(yy3,nn3)) / (ma(xx3^2,nn3) - (ma(xx3,nn3)^2)) * ma(xx3,nn3); y4 = c; n4 = Period2; ∑y = accumN(y4,n4); ∑y² = accumN(y4^2,n4); ∑x = 0; ∑x² = 0; ∑xy = 0; for j4 = 1 to n4{ ∑x = ∑x + j4; ∑x² = ∑x² + j4^2; ∑xy = ∑xy + (j4 * y4[n4-j4]); } StdErr = sqrt(1/(n4*(n4-2)) * (n4*∑y² - ∑y^2 - (n4*∑xy - ∑x*∑y)^2 / (n4*∑x² - ∑x^2))); 기울기1 = LRS(C, Period1)[n1]; 절편1 = Intercept1[n1]; 회귀선1 = 기울기1 * Index + 절편1; 채널폭 = 0; for j = n1 to Period1 + n1 - 1 { 회귀선tmp = 기울기1 * Index[j] + 절편1; 채널폭 = max(채널폭,max(abs(H[j] - 회귀선tmp),abs(회귀선tmp - L[j]))); } 기울기2 = LRS(C, Period2)[n2]; 절편2 = intercept2[n2]; 회귀선2 = 기울기2 * Index + 절편2; 표준오차 = StdErr[n2]; 기울기3 = LRS(C, Period3)[n3]; 절편3 = intercept3[n3]; 회귀선3 = 기울기3 * Index + 절편3; 표준편차 = STD(C,Period3)[n3]; value1=기울기3; value2=절편3; 상기수식을 지표수식(라인 혹은 오실레이터)으로 부탁드립니다.
프로필 이미지
수색대대
2020-03-31
914
글번호 137399
지표
답변완료

수식 문의

친절한 답변 미리 감사드립니다. ^.^ 질문 : 차트 뒤집기를 data2 종목만 하고 싶습니다. 그게 불가능하다면, 지표처럼 가져와서 뒤집어 표현하고 싶은데요, 즉, //=== 현재가 지정 === D1현재가 = Data1(c); D2현재가 = Data2(c); D2현재가 = data2(c); 만 y축을 뒤집어서 보고 싶습니다.
프로필 이미지
부똘이
2020-03-31
609
글번호 137398
지표