커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 변환 좀 부탁드려요

멀티 챠트 수식인데 예스에 적용해보니 첨부한 화면대로 안나타나고 챠트가 나타나긴 하는데 그냥 단순하게 막대바만 나오네요! 무지한 제 짧은 지식으론 멀티챠트와 호환되는 줄 알았는데 그게 아닌것 같습니다! 첨부 그림처럼 수정 좀 부탁드려요!! 감사합니다! elder impulse(weekly) Inputs:Period0(13),Period1(12),Period2(26),Period3(9); var:macdValW(0),color(0),cnt(0),sum0(0),sum1(0),sum2(0); var:ep0(2/(period0+1)),ep1(2/(period1+1)),ep2(2/(period2+1)),ep3(2/(period3+1)); array:emaValW[2](0),emaFastW[2](0),emaSlowW[2](0),macdSigW[2](0),macdOscW[2](0); if Date[1] < Date and DayOfWeek(Date[1]) >= DayOfWeek(Date) then begin cnt = cnt + 1; if cnt <= period0 then sum0 = sum0 + C[1]; if cnt = period0 then emaValW[0] = sum0/period0; if cnt <= period1 then sum1 = sum1 + C[1]; if cnt = period1 then emaFastW[0] = sum1/period1; if cnt <= period2 then sum2 = sum2 + C[1]; if cnt = period2 then emaSlowW[0] = sum2/period2; emaValW[1] = emaValW[0]; emaFastW[1] = emaFastW[0]; emaSlowW[1] = emaSlowW[0]; macdSigW[1] = macdSigW[0]; macdOscW[1] = macdOscW[0]; end; if cnt > period0 then emaValW[0] = emaValW[1] + ep0 * ( C - emaValW[1]); if cnt > period1 then emaFastW[0] = emaFastW[1] + ep1 * ( C - emaFastW[1]); if cnt > period2 then emaSlowW[0] = emaSlowW[1] + ep2 * ( C - emaSlowW[1]); macdValW = emaFastW[0] - emaSlowW[0]; if cnt > period3 then macdSigW[0] = macdSigW[1] + ep3 * ( macdValW - macdSigW[1]); macdOscW[0] = macdValW - macdSigW[0]; if emaValW[0] > emaValW[1] and macdOscW[0] > macdOscW[1] then begin color = green; end else if emaValW[0] < emaValW[1] and macdOscW[0] < macdOscW[1] then begin color = red; end else begin color = blue; end; plot1(1,"Impulse",color); ------------------------------------------------------------------------------ elder impulse(daily) Inputs:Period0(13),Period1(12),Period2(26),Period3(9); var:macdValD(0),color(0),cnt(0),sum0(0),sum1(0),sum2(0); var:ep0(2/(period0+1)),ep1(2/(period1+1)),ep2(2/(period2+1)),ep3(2/(period3+1)); array:emaValD[2](0),emaFastD[2](0),emaSlowD[2](0),macdSigD[2](0),macdOscD[2](0); if Date[1] < Date then begin cnt = cnt + 1; if cnt <= period0 then sum0 = sum0 + C[1]; if cnt = period0 then emaValD[0] = sum0/period0; if cnt <= period1 then sum1 = sum1 + C[1]; if cnt = period1 then emaFastD[0] = sum1/period1; if cnt <= period2 then sum2 = sum2 + C[1]; if cnt = period2 then emaSlowd[0] = sum2/period2; emaValD[1] = emaValD[0]; emaFastD[1] = emaFastD[0]; emaSlowD[1] = emaSlowD[0]; macdSigD[1] = macdSigD[0]; macdOscD[1] = macdOscD[0]; end; if cnt > period0 then emaValD[0] = emaValD[1] + ep0 * ( C - emaValD[1]); if cnt > period1 then emaFastD[0] = emaFastD[1] + ep1 * ( C - emaFastD[1]); if cnt > period2 then emaSlowD[0] = emaSlowD[1] + ep2 * ( C - emaSlowD[1]); macdValD= emaFastD[0] - emaSlowD[0]; if cnt > period3 then macdSigD[0] = macdSigD[1] + ep3 * ( macdValD- macdSigD[1]); macdOscD[0] = macdValD- macdSigD[0]; if emaValD[0] > emaValD[1] and macdOscD[0] > macdOscD[1] then begin color = green; end else if emaValD[0] < emaValD[1] and macdOscD[0] < macdOscD[1] then begin color = red; end else begin color = blue; end; plot1(1,"Impulse",color); ---------------------------------------------------------------------------------------- elder impulse Inputs:Period0(13),Period1(12),Period2(26),Period3(9); var:emaVal(0),macdVal(0),macdSig(0),macdOsc(0),color(0); emaVal = XAverage(C,Period0); macdVal = MACD(C,Period1,Period2); macdSig = XAverage(macdVal ,period3); macdOsc = macdVal - macdSig; if emaVal > emaVal[1] and macdOsc > macdOsc[1] then begin color = green; end else if emaVal < emaVal[1] and macdOsc < macdOsc[1] then begin color = red; end else begin color = blue; end; plot1(1,"Impulse",color);
프로필 이미지
qha71
2017-05-18
267
글번호 109663
지표

고물상 님에 의해서 삭제되었습니다.

프로필 이미지
고물상
2017-05-18
6
글번호 109662
강조
답변완료

N차수조절

아래 수식 유용하게 쓰고 있습니다. 각각 하락 2회, 상승 2회로서 하루에 2번씩 거래하고 끝인데 계속 거래할 수 있는 수식으로 변경하고 싶고 거래횟수를 input 할 수 있게 부탁드립니다. *** 안녕하세요 예스스탁입니다. 2차진입은 진입이후 최저가가 아닌 진입가 기준입니다. 첨부하신 그림에서는 진입이후 최저가 기준으로 1차 진입과 동일 요건이므로 1차 2차 모두 동일요건으로 청산되게 수정해 드립니다. 이전의 매수식도 같은 개념으로 청산 변경해서 올려드립니다. 1 input : b1(11),b2(13),X1(13),X2(13),진입눌림(4),진입돌파(4),청산눌림(4),청산돌파(4); var : T1(0),entry(0),HH(0),LL(0),EH(0),EL(0),E1(0),H1(0),i1(0),S1(0),L1(0); if Bdate != Bdate[1] Then{ T1 = TotalTrades; E1 = 0; } if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then{ if E1 == 0 and C <= DayHigh-PriceScale*B1 and C[1] < DayHigh-PriceScale*B1 Then{ E1 = 1; L1 = L; i1 = index; } if E1 == 1 and index > i1 then{ if L < L1 Then L1 = L; if H >= L1+PriceScale*진입눌림 Then{ E1 = 2; i1 = index; S1 = L1; } } if E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파 Then{ sell("s1"); } } if TotalTrades > TotalTrades[1] Then HH = H; if H > HH Then HH = H; if MarketPosition == 0 and entry == 1 Then{ if E1 == 0 and C <= HH-PriceScale*B2 and C[1] < HH-PriceScale*B2 Then{ E1 = 1; L1 = L; i1 = index; } if E1 == 1 and index > i1 then{ if L < L1 Then L1 = L; if H >= L1+PriceScale*진입눌림 Then{ E1 = 2; i1 = index; S1 = L1; } } if E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파 Then{ sell("s2"); E1 = 0; } } if MarketPosition == -1 Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = L; E1 = 0; } if L < EL Then{ EL = L; E1 = 0; } if E1 == 0 and C >= EL+PriceScale*X1 Then{ E1 = 1; H1 = H; i1 = index; } if E1 == 1 and index > i1 Then{ if H > H1 Then H1 = H; if L <= H1-PriceScale*청산눌림 Then{ E1 = 2; I1 = index; S1 = H1; } } if E1 == 2 and index > i1 and C >= S1+PriceScale*청산돌파 Then{ ExitShort("sx1"); E1 = 0; } } } 2 input : b1(11),b2(13),X1(13),X2(13),진입눌림(4),진입돌파(4),청산눌림(4),청산돌파(4); var : T1(0),entry(0),LL(0),EH(0),E1(0),H1(0),i1(0),S1(0),L1(0); if Bdate != Bdate[1] Then{ T1 = TotalTrades; E1 = 0; } if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then{ if E1 == 0 and C >= daylow+PriceScale*B1 and C[1] < daylow+PriceScale*B1 Then{ E1 = 1; H1 = H; i1 = index; } if E1 == 1 and index > i1 then{ if H > H1 Then H1 = H; if L <= H1-PriceScale*진입눌림 Then{ E1 = 2; i1 = index; S1 = H1; } } if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파 Then{ buy("b1"); } } if TotalTrades > TotalTrades[1] Then LL = L; if L < LL Then LL = L; if MarketPosition == 0 and entry == 1 Then{ if E1 == 0 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2 Then{ E1 = 1; H1 = H; i1 = index; } if E1 == 1 and index > i1 then{ if H > H1 Then H1 = H; if L <= H1-PriceScale*진입눌림 Then{ E1 = 2; i1 = index; S1 = H1; } } if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파 Then{ buy("b2"); } } if MarketPosition == 1 Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EH = H; E1 = 0; } if H > EH Then{ EH = H; E1 = 0; } if E1 == 0 and C <= EH-PriceScale*X1 Then{ E1 = 1; L1 = L; i1 = index; } if E1 == 1 and index > i1 Then{ if L < L1 Then L1 = L; if H >= L1+PriceScale*청산눌림 Then{ E1 = 2; I1 = index; S1 = L1; } } if E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파 Then{ exitlong("bx1"); E1 = 0; } } }
프로필 이미지
좌오비우오비
2024-09-02
96
글번호 109661
시스템
답변완료

수식추가부탁드림니다=================

저점고점에 수치 표시될때 소리도 나게 해주시면 감사하겠습니다 수고하세요 Input:length(10),종가사용여부(0),파동선두께(2),수치표시(1); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(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 { 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]); If 수치표시 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,RED); } 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)); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { 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]); If 수치표시 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,BLUE); } 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)); } } 최종꼭지점 = "저점"; }
프로필 이미지
leekss1
2017-05-19
114
글번호 109660
지표
답변완료

질문드립니다

동일계좌에서 같은 종목을 다른 시스템으로 서로 분리해서 매매 할수 있나요? 예를들어 같은 종목을 시스템1에서 매수 신호 발생해서 매수 된 상태에서 다른 시스템2에서 매도 신호가 발생하게 되었을때 시스템1에서 보유하고 있던 매수 포지션은 놔두고 매도포지션을 따로 취할수 있나요? 가능하다면 수식상에서 어떻게 표현해야지 구분할수있을까요? 답변부탁드립니다.
프로필 이미지
toal
2017-05-18
78
글번호 109659
시스템
답변완료

atstop주문유형과 참조데이터봉 관련 질문입니다.

안녕하세요. 수고많으십니다. atstop주문 유형으로 데이트레이딩 시스템을 만들었습니다. data2를 진입필터로 사용하고 있습니다. 궁금점은 atstop 주문이 나가는 상황에서 data2종목의 봉은 완성이 되지 않았을 것입니다. 만약 필터 로직이 다음과 같다면 data2(c)->data2(o)>0 //data2양봉 거래 종목의 봉이 완성되지 않은 시점에서 data2의 봉또한 미완성인데, 실제 거래시에 이것을 어떻게 인식하는지 궁금합니다. 미완성인 data2의 봉이 양봉이면 양봉으로 인식하는 것인지 아니면 봉 완성뒤에 주문이 나가는 것인지요? 시뮬레이션과 실전 거래시에 차이점은 어떠한지 의견을 여쭙고싶습니다. 감사합니다.
프로필 이미지
ktemu10k
2017-05-18
98
글번호 109658
시스템
답변완료

안녕하세요

매수 20이평선이 60이평선 골드크로스면매수 단 120이평선위에서 골드크로일때 손절은 20선이60선 데드크로스 이거나 50틱손실일때 매도 20이평선이 60이평선 데드크로스면 매도 단 120이평선 아래서 데드크로스일때 손절은 20선이60선골드크로스 이건나 50틱손실일때
프로필 이미지
수원
2017-05-18
91
글번호 109657
시스템
답변완료

참조데이타의 누적량을 지표로 표현이 될까요?

당일날의 참조데이터의 누적 합산을 오실레이터로 표현하고 싶습니다. value1 = Data2 + data2[1]; plot1(value1,"누적"); 이런식으로 표현하려고 하는데 잘 안되네요..
프로필 이미지
dbs1428
2017-05-18
87
글번호 109656
지표

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

프로필 이미지
터닝
2017-05-18
14
글번호 109655
시스템