커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

항상 감사드리며 건강을 기원합니다

Input:length(10); Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0), TL1(0),처리구분(""),T(0),TL2(0),TL3(0); var : hh(0),ll(0),ii(0),diff(0),TL41(0),TL42(0),TL43(0),TL44(0),TL45(0),TL46(0); Array:고점[10,5](0),저점[10,5](0); 처리구분 = ""; If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then { If 저점[1,1] > L Then 처리구분 = "저점처리"; If 고점[1,1] < H Then 처리구분 = "고점처리"; } Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리"; Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리"; If 처리구분 == "고점처리" Then { T = 1; lastHiVal = H; If 고점[1,2] < 저점[1,2] Then { For j = 10 DownTo 2 { 고점[j,1] = 고점[j-1,1]; 고점[j,2] = 고점[j-1,2]; } } If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then { 고점[1,1] = H; 고점[1,2] = Index; sBar = Index - 저점[1,2]; eBar = 0; If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then { TL_Delete(TL1); TL_Delete(TL2); } TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]); TL_SetExtRight(TL2,False); TL2 = TL_New(sDate[1],sTime[1],고점[1,1],sdate,sTime,고점[1,1]); TL_SetColor(TL2,BLUE); TL_SetSize(TL2,2); If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then { sBar = Index - 저점[2,2]; eBar = Index - 저점[1,2]; } } } If 처리구분 == "저점처리" Then { T = -1; lastLoVal = L; If 저점[1,2] < 고점[1,2] Then { For j = 10 DownTo 2 { 저점[j,1] = 저점[j-1,1]; 저점[j,2] = 저점[j-1,2]; } } If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then { 저점[1,1] = L; 저점[1,2] = Index; sBar = Index - 고점[1,2]; eBar = 0; If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then { TL_Delete(TL1); TL_Delete(TL3); } TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]); TL_SetExtRight(TL3,False); TL3 = TL_New(sDate[1],sTime[1],저점[1,1],sdate,sTime,저점[1,1]); TL_SetColor(TL3,RED); TL_SetSize(TL3,2); If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then { sBar = Index - 고점[2,2]; eBar = Index - 고점[1,2]; } } } TL_SetSize(TL1,0); TL_SetColor(TL1,YELLOW); TL_SetEnd(TL2,sdate,stime,고점[1,1]); TL_SetEnd(TL3,sdate,stime,저점[1,1]); TL_SetExtRight(TL2,true); TL_SetExtRight(TL3,true); if T != T[1] then { if T == 1 Then { HH = 고점[2,1]; LL = 저점[1,1]; ii = index-고점[2,2]; diff = abs(HH-LL); } Else { HH = 고점[1,1]; LL = 저점[2,1]; ii = index-저점[2,2]; diff = abs(HH-LL); } TL_Delete(TL41); TL_Delete(TL42); TL_Delete(TL43); TL_Delete(TL44); TL_Delete(TL45); TL_Delete(TL46); TL41 = TL_New(sdate[ii],stime[ii],LL+diff*2.00,sdate,stime,LL+diff*2.00); TL42 = TL_New(sdate[ii],stime[ii],LL+diff*2.618,sdate,stime,LL+diff*2.618); TL43 = TL_New(sdate[ii],stime[ii],LL+diff*3.618,sdate,stime,LL+diff*3.618); TL44 = TL_New(sdate[ii],stime[ii],HH-diff*2.00,sdate,stime,HH-diff*2.00); TL45 = TL_New(sdate[ii],stime[ii],HH-diff*2.618,sdate,stime,HH-diff*2.618); TL46 = TL_New(sdate[ii],stime[ii],HH-diff*3.618,sdate,stime,HH-diff*3.618); TL_SetExtRight(TL41,true); TL_SetExtRight(TL42,true); TL_SetExtRight(TL43,true); TL_SetExtRight(TL44,true); TL_SetExtRight(TL45,true); TL_SetExtRight(TL46,true); TL_SetSize(TL41,2); TL_SetSize(TL42,2); TL_SetSize(TL43,2); TL_SetSize(TL44,2); TL_SetSize(TL45,2); TL_SetSize(TL46,2); } 위 수식은 회원님의 수식입니다 @@@ 종목검색 ### 첨부한 사진처럼 1번 2번 빨간 라인이 발뱅하는 현재봉 부터 3일 동안 검색 되도록 부탁 드립니다 $$$$ 시스템 매수 신호식만 부탁 드립니다 1번 2번 처럼 적색 라인이 발생 하는 시작 부터 신호식 부탁 드립니다 꾸벅 감사합니다
프로필 이미지
매치다2
2020-08-13
1234
글번호 141487
시스템
답변완료

청산 수식이 발생할때마다 분할 매도하는 수식 부탁드림니다.

국내 주식 data1 삼성전자(300분봉) data2 Kodex200 data3 삼성전자 일봉 분할매수는 15단계에 걸쳐서 잘 작동이 되는데요... 청산는 신호 발생하면 전량 실행됨에 따라 다음과 같이 운영하고 싶습니다. 분할 청산( 10회 정률 분할 청산) 분할 매수한후 if MM > MFI값 or SS > 심리도값 or MMM > MFI값 or SSS > 심리도값 위와 같은 신호가 봉마다 발생시마다 10회 정률 분할 청산하는 수식 부탁드림니다. 예를 들면 5회에 걸쳐 1000만원을 매수한후 if MM > MFI값 or SS > 심리도값 or MMM > MFI값 or SSS > 심리도값 의 신호가 발생하는 봉마다 10분의 1씩 ( 100만원씩) 청산하는 수식 요망 -------------아 래 수 식 ------------------ input : 기준평균봉값(80); input : 최초진입하락폭(0.94); input : 추가진입하락폭(0.99); input : MFI기간(15),MFI값(90); input : 심리도기간(15),심리도값(80); input : 제1매수금액(100); input : 제2매수금액(150); input : 제3매수금액(200); input : 제4매수금액(250); input : 제5매수금액(300); input : 제6매수금액(350); input : 제7매수금액(400); input : 제8매수금액(450); input : 제9매수금액(500); input : 제10매수금액(550); input : 제11매수금액(600); input : 제12매수금액(600); input : 제13매수금액(600); input : 제14매수금액(600); input : 제15매수금액(600); var : mav(0,data2),MM(0,Data3),SS(0,Data3); var : MMM(0,Data2),SSS(0,Data2); mav = data2(ma(c,기준평균봉값)); MM = Data3(mfi(MFI기간)); SS = Data3(Simrido(심리도기간)); MMM = Data2(mfi(MFI기간)); SSS = Data2(Simrido(심리도기간)); if MarketPosition == 0 and data2(CrossDown(c,mav*최초진입하락폭)) then buy("b1",atlimit,C,Floor(제1매수금액*10000/min(NextBarOpen,C))); if MarketPosition == 1 then { if MaxEntries == 1 then # 85 buy("b2",AtLimit,LatestEntryPrice(0)*추가진입하락폭,Floor(제2매수금액*10000/c)); if MaxEntries == 2 then # 80 buy("b3",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.01),Floor(제3매수금액*10000/c)); if MaxEntries == 3 then # 75 buy("b4",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.02),Floor(제4매수금액*10000/c)); if MaxEntries == 4 then # 70 buy("b5",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.03),Floor(제5매수금액*10000/c)); if MaxEntries == 5 then # 65 buy("b6",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.04),Floor(제6매수금액*10000/c)); if MaxEntries == 6 then # 85 buy("b7",AtLimit,LatestEntryPrice(0)*추가진입하락폭-0.05,Floor(제7매수금액*10000/c)); if MaxEntries == 7 then # 80 buy("b8",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.06),Floor(제8매수금액*10000/c)); if MaxEntries == 8 then # 75 buy("b9",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.07),Floor(제9매수금액*10000/c)); if MaxEntries == 9 then # 70 buy("b10",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.08),Floor(제10매수금액*10000/c)); if MaxEntries == 10 then # 65 buy("b11",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.09),Floor(제11매수금액*10000/c)); if MaxEntries == 11 then # 80 buy("b12",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.10),Floor(제12매수금액*10000/c)); if MaxEntries == 12 then # 75 buy("b13",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.11),Floor(제13매수금액*10000/c)); if MaxEntries == 13 then # 70 buy("b14",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.12),Floor(제14매수금액*10000/c)); if MaxEntries == 14 then # 65 buy("b15",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.13),Floor(제15매수금액*10000/c)); if MM > MFI값 or SS > 심리도값 or MMM > MFI값 or SSS > 심리도값 Then exitlong("청산",atlimit,C); }
프로필 이미지
이형지
2020-08-13
1161
글번호 141486
시스템
답변완료

부탁 드립니다.

도움 주셔서 깊이 감사 드립니다. 1. 원수식을 타주기(틱봉용)으로 작성 해본 것입니다. 실행결과 조금 이상한 부분이 있어 검토 부탁 드리고자 합니다. 미리 경배로 감사 인사 올립니다. *원수식) input:p(10),sig(5); var1=obv(); var2=ma(var1,p); var3=var1-var2; var4=ma(var3,sig); *타주기_틱봉용) input :ntick(2),P(10),sig(5); var : S1(0),D1(0),TM(0),TF(0),cnt(0); var : C1(0),CC(0),VV(0),idx(0),sum1(0),mav1(0),sum2(0),mav2(0); Array : value[100](0),diff[100](0); if Bdate != Bdate[1] Then idx = 0; Else idx = idx+1; TF = idx%Ntick; if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntick > 1 and TF < TF[1]) or (Bdate == Bdate[1] and ntick > 1 and TM >= TM[1]+ntick) or (Bdate == Bdate[1] and ntick == 1 and TM > TM[1]) Then { idx = idx+1; C1 = CC[1]; VV = 0; For cnt = 1 to 99 { value[cnt] = value[cnt-1][1]; diff[cnt] = diff[cnt-1][1]; } } CC = C; VV = VV + v; if C1 > 0 Then { if CC > C1 Then value[0] = value[1]+VV; if CC < C1 Then value[0] = value[1]-VV; } if idx >= p Then { sum1 = 0; For cnt = 0 to P-1 { sum1 = sum1 + value[cnt]; } mav1 = sum1/P; diff[0] = value[0]-mav1; } if idx >= P+sig Then { sum2 = 0; For cnt = 0 to sig-1 { sum2 = sum2 + diff[cnt]; } mav2 = sum2/sig; Plot1(mav2); }
프로필 이미지
뮬리
2020-08-13
1217
글번호 141485
지표
답변완료

지표식 부탁드려봅니다

매번 답변에 미리 감사드리며 글올려봅니다. 질문은 일정기간안에 있는 일정기간동안의 최고거래량 입니다. 예를들어 highest(v,3)[1] 이면 1봉전 기준 3봉중 최고거래량 일텐데 제가 알고 싶은것은 단순한 3봉중 최고거래량이 아니라 <<일정기간동안 거래량의 합>>의 최고거래량을 알고싶습니다. 흠....제가 언어전달력이 많이 부족한거같네요 다시 예를 들어 1봉전기준 40봉기간내에서 3봉동안의 최고거래량 총 40봉 <-----[---]------------------------------------------> 현재봉 괄호친 이부분의 3봉동안 거래량의 합이 제일 많으면 그 거래량합의 값 총 40봉 <-----------------------------[---]------------------> 현재봉 괄호친 이부분의 3봉동안 거래량의 합이 제일 많으면 그 거래량합의 값 총 40봉 <--------------------------------------------[---]---> 현재봉 괄호친 이부분의 3봉동안 거래량의 합이 제일 많으면 그 거래량합의 값 을 알고싶어요
프로필 이미지
말라
2020-08-14
1465
글번호 141484
지표
답변완료

68754 질문

저의 원래 수식에서 빠진게 있었네요..손절되지 않으면, 마지막에 다음봉시가청산. 이렇게 해도 답변은 똑같으신 건지요? 아래 조건 추가했을 경우로 수정 부탁드립니다.. 감사합니다. ---------------------------------------------------------------- 시간설정 . . . buy("b",AtStop,H); ExitLong("bx",AtStop,NextBarOpen); sell("s",AtStop,L); ExitShort("sx",AtStop,NextBarOpen); buy("b1",AtStop,NextBarOpen+(H-L)*0.5); ExitLong("bx1",AtStop,EntryPrice-(H-L)*0.5); sell("s1",AtStop,NextBarOpen-(H-L)*0.5); ExitShort("sx1",AtStop,EntryPrice+(H-L)*0.5); if MarketPosition == 1 Then ExitLong("bx2",AtMarket); if MarketPosition == -1 Then ExitShort("sx2",AtMarket); ------------------------------------------------------------- 안녕하세요 예스스탁입니다. buy("b",AtStop,H); ExitLong("bx",AtStop,NextBarOpen); sell("s",AtStop,L); ExitShort("sx",AtStop,NextBarOpen); 위 내용은 진입 후 시가에서 청산하는 부분인데 진입가가 시가보다 크면 진입과 청산이 동시에 발생합니다. 위 내용의 경우 진입봉이 완성되고 다음봉 시가에 청산되게 하셔야 합니다. buy("b1",AtStop,NextBarOpen+(H-L)*0.5); ExitLong("bx1",AtStop,EntryPrice-(H-L)*0.5); sell("s1",AtStop,NextBarOpen-(H-L)*0.5); ExitShort("sx1",AtStop,EntryPrice+(H-L)*0.5); 위 내용도 EntryPrice 진입후 봉이 완성되어야 값이 변경이 됩니다. 봉미완성시에 변경되는 값이 아니므로 진입과 동시에 셋팅되어 청산되는 식과 진입후 첫봉이 완성되고 청산하는 내용으로 청산식 2개를 사용하셔야 합니다. 아래는 수정한 식입니다. buy("b",AtStop,H); if MarketPosition == -1 Then ExitShort("sx",AtStop,NextBarOpen); if MarketPosition == 1 Then ExitLong("bx",AtStop,NextBarOpen); sell("s",AtStop,L); buy("b1",AtStop,NextBarOpen+(H-L)*0.5); if MarketPosition <= 0 Then ExitLong("bx1",AtStop,(NextBarOpen+(H-L)*0.5)-(H-L)*0.5); Else ExitLong("bx2",AtStop,EntryPrice-(H-L)*0.5); sell("s1",AtStop,NextBarOpen-(H-L)*0.5); if MarketPosition >= 0 Then ExitShort("sx1",AtStop,(NextBarOpen-(H-L)*0.5)+(H-L)*0.5); Else ExitShort("sx2",AtStop,EntryPrice+(H-L)*0.5); 즐거운 하루되세요 > 군고구마 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 노고에 감사드립니다. 아래 식에서 's'로 매도진입하자마자 동시에 같은가격에 바로 'sx1'으로 매도청산됩니다. 진입후, 시가 또는 진입가의 전봉레인지*0.5 변동시 청산하게 만든건데, 뭔가 잘못한거 같습니다. buy("b",AtStop,H); ExitLong("bx",AtStop,NextBarOpen); sell("s",AtStop,L); ExitShort("sx",AtStop,NextBarOpen); buy("b1",AtStop,NextBarOpen+(H-L)*0.5); ExitLong("bx1",AtStop,EntryPrice-(H-L)*0.5); sell("s1",AtStop,NextBarOpen-(H-L)*0.5); ExitShort("sx1",AtStop,EntryPrice+(H-L)*0.5); 도움 부탁드립니다.
프로필 이미지
군고구마
2020-08-13
1177
글번호 141483
시스템
답변완료

특정전략의 PositionProfit 문의

안녕하세요. 항상 도와주셔서 정말 많은 도움을 받고있습니다. 다름이아니라, 한개의 시스템에 2개의 진입전략을 가지고 운용하고 있습니다. 그중 A전략을 사용하여 손실이 날 경우 다음 전략에서 2배를 매수하는 전략을 아래 수식으로 구현하였습니다. 문제는 이 경우 A전략에서 손실이 난 이후 B전략에서 수익이 나면, 다음 A전략에서 2배를 매수하지 않는 문제가 있습니다.(바로전 B전략에 수익이 났으므로) (A전략손실(50만원) -> B전략수익(100만원) -> A전략진입(50만원: 100만원 진입해야하나 50만 진입)) 혹시 Positionprofit을 매수전략을 구분하여 사용할 수 있을까요? 이해를 돕기 위해 사용중인 전략아래와 같이 발췌하였습니다. #마틴게일 #이전 거래에서 손실 시 2배 배팅을 위한 로직 var : MT(0); MT = 1; if positionprofit(1) <0 then MT = 2; #매수 조건 # 1. A전략: 이전 A전략이 손실을 봤을 시 2배 금액 진입 if stime > 093000 and crossup(ma(C,period),value1) and CsumScore >= Cscore then buy("A전략",Atmarket,DEF,floor((Deposit-entryprice*CurrentContracts)/2*MT/C)); #3. B전략: 동일 금액 진입 if stime > 093000 and crossup(ma(C,period),value3) and BsumScore >= BScore then buy("B전략",Atmarket,DEF,floor((Deposit-entryprice*CurrentContracts)/C));
프로필 이미지
기사단장
2020-08-13
1370
글번호 141481
시스템

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

프로필 이미지
chunsk
2020-08-13
5
글번호 141474
시스템
답변완료

피라미딩 시 진입 수량 누적되는 문제

안녕하세요. 첫 진입과 피라미딩 2번을 모두 1계약씩만 하고 싶은데 첫 진입은 1계약이 잘 되는데, 피라미딩 첫번째는 2계약, 피라미딩 두번째는 3계약 이렇게 계속 누적이 되더라구요. 아래 식으로 하고 있습니다. 누적이 아니라 한계약씩만 진입하고 싶은데 어떻게 해야할까요? # 매수 포지션 첫번재 피라미딩 &#160; if marketposition==1 and c>entryprice*(1+10/100) &#160;and latestentryname(0)=="매수" then buy("애드업1", onclose, def,1); # 매수 포지션 두번째 피라미딩 IF marketposition==1 and c> EntryPrice*(1+20/100) and LatestEntryName(0)=="애드업1" then buy("애드업2",onclose,def,1);
프로필 이미지
터틀3세
2020-08-13
1247
글번호 141473
시스템
답변완료

지표 도움좀 부탁드립니다

아까 질문에 대한 답변을 받았는데 제가 질문을 이상하게 해서 하나의 대답을 못들었네요 ㅎㅎ 다시 질문할게요 1. 봉의 개수 1봉전부터 n봉 전까지의 봉의 개수를 알수 있는 지표좀 알려주세요 2. 당일시가부터 4,7,10봉전까지의 최고가를 알수있는 지표좀 알려주세요 정말 항상 감사합니다. 진심으로요
프로필 이미지
말라
2020-08-13
1174
글번호 141472
지표