커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 결함좀 봐주세요 ㅜㅜ

스토캐스틱을 이용해서 진입만 하되, 청산은 지수이동평균을 이용하고 싶어 전략식을 만들어 봤습니다. 그런데 이것이 실제 적용을 해 보면 청산 부분이 보이질 않네요. 어느 부분이 잘못되었는지 잘 모르겠어서 도움 요청 드립니다. Input : P1(50), P2(40), P3(10),p4(12),p5(26),p6(9), losslimit(2); Var1 = StochasticsK(P1, P2); Var2 = StochasticsD(P1, P2, P3); Var3 = MACD(p4,p5); //macd Var4 = Ema(p6,Var3); //ema(macd시그널) If entriestoday() < 1 Then { If CrossUp(Var1, 80 ) Then buy(); If CrossDown(Var1, 20) Then sell(); } if marketposition == 1 and CrossDown(Var3,Var4) Then{ exitlong("롱포지션 청산"); //macd가 시그널선을 하향돌파하면 매수청산 } if marketposition == -1 and CrossUp(Var3, Var4) Then{ exitlong("숏포지션 청산"); //macd가 시그널선을 상향 돌파하면 매도청산 } SetStopLoss(losslimit); SetStopEndofday(1520);
프로필 이미지
부우자되고싶다
2018-11-18
208
글번호 123756
시스템

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

프로필 이미지
atmskill
2018-11-18
4
글번호 123755
검색
답변완료

수식 부탁드립니다.

수식 부탁드립니다. 매수 파라볼릭(종) 양전환 시 그 이전의 양전환보다 볼의 위치가 높을 때 매수 매도 파라볼릭(종) 음전환 시 그 이전의 음전환보다 볼의 위치가 높을 때 매도
프로필 이미지
짱구아빠1234
2018-11-18
174
글번호 123754
시스템
답변완료

수식 부탁드립니다.

수식 부탁드립니다. 매수 1.종가가 단순이평 190선보다 높고 2.종가가 선행스팬2보다 높으며 3. 파라볼릭(종) 양전환 후 첫 음봉에 매수 매수청산 파라볼릭(종) 음전환 시 청산 매도 1.종가가 단순이평 190선보다 낮고 2.종가가 선행스팬2보다 낮으며 3. 파라볼릭(종) 음전환 후 첫 양봉에 매도 매도청산 파라볼릭(종) 양전환 시 청산 감사합니다
프로필 이미지
짱구아빠1234
2018-11-18
188
글번호 123753
시스템

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

프로필 이미지
요타
2018-11-18
0
글번호 123752
지표
답변완료

수식 검증 부탁드립니다.

아래 검색식의 검색결과가 식의 내용과 맞지 않은 종목이 검색됩니다. 거래량비율 조건에서 조건에 맞지 않는 종목이 너무 많이 검색이 되는데 어디가 잘못됐는지 검토 부탁드립니다. (사진첨부) 그리고 일봉과 분봉에서 검색결과가 같이 나오는 것은 왜 그런지요? 일봉, 검색시각 18일 일요일 오전 8시 # 거래량 기준--가장최근양봉거래량의 동시간대 150이상 input : Per(150); var: cnt(0),VV(0),em(0); em = ema(c,56); Condition1 = c[1] >= 1000 and v[1] > 100000 and em>=em[1] and c > em and c > c[1] and c > o; if sdate != sdate[1] then { value1 = index; value2 = value1[1]; if DayClose(1) > dayopen(1) Then { var1 = value2; var2 = index[1]; } } if var1 > 0 and var2 > 0 then { for cnt = index-var2 to index-var1 { if stime[cnt] <= stime Then { VV = DayVolume[cnt]; cnt = index-var1+1; } } if DayVolume >= VV*(1+Per/100) Then Condition2 = true; } if Condition1 == true and Condition2 == true Then Find(1);
프로필 이미지
더블나인
2018-11-18
215
글번호 123751
종목검색
답변완료

지표 수정 의뢰드려요

안녕하세요! 수식 확인좀 해주세요! 첨부된 그림1 은 아래 수식으로 만든 겁니다 그런데 첨부된 그림처럼 제 화면에선 15분챠트에서 저렇게 표현이 되질 않는군요! 무엇이 문제인지 잘 모르겠습니다. 확인 좀 부탁드립니다! 그리고 5분 챠트에서는 첨부 그림 처럼 표현 될 수 없는건가요? Input:Period(2000),Percent(20); Var:j(0),k(0),행번호(0),cnt(0),총거래량(0),추가행(0),추정거래량(0); Array:가격대[1000](0),거래량[1000](0),구간[11](0),부분합[10](0),비율[10](0); If Index == 0 then { #----------------------------------------------------------------------------------# # 가격대를 배열변수에 세팅한다. # 첫번째 봉에서 한번만 수행하고 이후는 추가행으로 처리 #----------------------------------------------------------------------------------# 가격대[0] = (Int(Round(H/PriceScale/100,9))+3) * PriceScale * 100; //200틱 이상 둠 for 행번호 = 0 to 998 { 가격대[행번호+1] = 가격대[행번호] - PriceScale; //가격대 배열에 가격 대입둠 } } #----------------------------------------------------------------------------------# # 가격대를 위로 벗어날 경우 행을 추가한다. #----------------------------------------------------------------------------------# if 가격대[0] <= H + PriceScale * 100 then //고가가 가격대 배열 이상이 되면 { for 행번호 = 899 downto 0 { 가격대[행번호+100] = 가격대[행번호]; //추가행만큼 뒤로 옮긴다 거래량[행번호+100] = 거래량[행번호]; } 가격대[0] = 가격대[0] + PriceScale * 100; //추가된 행에 가격 재설정 for 행번호 = 0 to 99 { 가격대[행번호+1] = 가격대[행번호] - PriceScale; } for 행번호 = 0 to 100 //추가된 행의 나머지 항목은 { 거래량[행번호] = 0; //0값으로 초기화 } } #----------------------------------------------------------------------------------# # 반대로 가격이 하락세라면 상단의 빈가격대 행을 삭제한다. #----------------------------------------------------------------------------------# if 가격대[0] > highest(H,Period) + PriceScale * 300 then //가격 하락 추세일 경우 { for 행번호 = 0 to 899 { 가격대[행번호] = 가격대[행번호+100]; //100행만큼 앞으로 옮긴다 거래량[행번호] = 거래량[행번호+100]; } for 행번호 = 899 to 998 { 가격대[행번호+1] = 가격대[행번호] - PriceScale; } for 행번호 = 900 to 999 //추가된 행의 나머지 항목은 { 거래량[행번호] = 0; //0값으로 초기화 } } #----------------------------------------------------------------------------------# # 현재 봉의 거래량을 걸쳐있는 가격대에 분배 #----------------------------------------------------------------------------------# cnt = 0; for 행번호 = 0 to 999 { if L <= 가격대[행번호] and 가격대[행번호] <= H then //현재 봉 가격대가 몇가격대 cnt = cnt + 1; //걸쳐져 있는지 계산 } 추정거래량 = OI/cnt; //가격대별 배분할 거래량 //두번 연산하는 셈인데 위에서는 몇가격대에 걸쳐 있는지 판단하기 위함이고 //아래는 가격대에 해당 거래량을 누적하는 것임 for 행번호 = 0 to 999 { if L <= 가격대[행번호] and 가격대[행번호] <= H then { 거래량[행번호] = 거래량[행번호] + 추정거래량; } } #----------------------------------------------------------------------------------# # 이전 봉의 거래량을 걸쳐있는 가격대에 차감 #----------------------------------------------------------------------------------# If Index >= Period Then { cnt = 0; for 행번호 = 0 to 999 { if L[Period] <= 가격대[행번호] and 가격대[행번호] <= H[Period] then cnt = cnt + 1; } 추정거래량 = OI[Period]/cnt; for 행번호 = 0 to 999 { if L[Period] <= 가격대[행번호] and 가격대[행번호] <= H[Period] then { 거래량[행번호] = 거래량[행번호] - 추정거래량; } } } #----------------------------------------------------------------------------------# # 10개 구간의 구간별 거래량 비율 계산 #----------------------------------------------------------------------------------# 총거래량 = 총거래량 + OI - Iff(Index>=Period,OI[Period],0); For j = 0 To 9 { 구간[j] = 가격대[j*100]; 부분합[j] = 0; } 구간[10] = 가격대[999]-PriceScale; k = 0; For j = 0 To 999 { If 구간[k] >= 가격대[j] && 구간[k+1] < 가격대[j] Then 부분합[k] = 부분합[k] + 거래량[j]; Else k = k + 1; } For j = 0 To 9 { 비율[j] = 부분합[j] * 100 / 총거래량; } if 비율[0] >= percent then plot1(구간[0],"상단1",iff(비율[0]>=40,RGB(130,130,130),iff(비율[0]>=30,RGB(155,155,155),iff(비율[0]>=20,RGB(180,180,180),iff(비율[0]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[0] >= percent then Plot2(구간[1],"하단1",RGB(255,255,255)); if 비율[1] >= percent then Plot3(구간[1],"상단2",iff(비율[1]>=40,RGB(130,130,130),iff(비율[1]>=30,RGB(155,155,155),iff(비율[1]>=20,RGB(180,180,180),iff(비율[1]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[1] >= percent then plot4(구간[2],"하단2",RGB(255,255,255)); if 비율[2] >= percent then Plot5(구간[2],"상단3",iff(비율[2]>=40,RGB(130,130,130),iff(비율[2]>=30,RGB(155,155,155),iff(비율[2]>=20,RGB(180,180,180),iff(비율[2]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[2] >= percent then plot6(구간[3],"하단3",RGB(255,255,255)); if 비율[3] >= percent then Plot7(구간[3],"상단4",iff(비율[3]>=40,RGB(130,130,130),iff(비율[3]>=30,RGB(155,155,155),iff(비율[3]>=20,RGB(180,180,180),iff(비율[3]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[3] >= percent then plot8(구간[4],"하단4",RGB(255,255,255)); if 비율[4] >= percent then Plot9(구간[4],"상단5",iff(비율[4]>=40,RGB(130,130,130),iff(비율[4]>=30,RGB(155,155,155),iff(비율[4]>=20,RGB(180,180,180),iff(비율[4]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[4] >= percent then plot10(구간[5],"하단5",RGB(255,255,255)); if 비율[5] >= percent then Plot11(구간[5],"상단6",iff(비율[5]>=40,RGB(130,130,130),iff(비율[5]>=30,RGB(155,155,155),iff(비율[5]>=20,RGB(180,180,180),iff(비율[5]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[5] >= percent then plot12(구간[6],"하단6",RGB(255,255,255)); if 비율[6] >= percent then plot13(구간[6],"상단7",iff(비율[6]>=40,RGB(130,130,130),iff(비율[6]>=30,RGB(155,155,155),iff(비율[6]>=20,RGB(180,180,180),iff(비율[6]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[6] >= percent then Plot14(구간[7],"하단7",RGB(255,255,255)); if 비율[7] >= percent then Plot15(구간[7],"상단8",iff(비율[7]>=40,RGB(130,130,130),iff(비율[7]>=30,RGB(155,155,155),iff(비율[7]>=20,RGB(180,180,180),iff(비율[7]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[7] >= percent then plot16(구간[8],"하단8",RGB(255,255,255)); if 비율[8] >= percent then Plot17(구간[8],"상단9",iff(비율[8]>=40,RGB(130,130,130),iff(비율[8]>=30,RGB(155,155,155),iff(비율[8]>=20,RGB(180,180,180),iff(비율[8]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[8] >= percent then plot18(구간[9],"하단9",RGB(255,255,255)); if 비율[9] >= percent then Plot19(구간[9],"상단10",iff(비율[9]>=40,RGB(130,130,130),iff(비율[9]>=30,RGB(155,155,155),iff(비율[9]>=20,RGB(180,180,180),iff(비율[9]>=10,RGB(205,205,205),RGB(230,230,230)))))); if 비율[9] >= percent then plot20(구간[10],"하단10",RGB(255,255,255)); ------------------------------------------------------------------------- 볼린저밴드 상단선과 하단선의 색상 변경을 부탁드립니다. 첨부된 그림2 처럼 볼린저밴드 상단과 하단선이 주가가 상승하면 빨강색, 하락시엔 파랑색으로 바뀌도록 수식을 부탁드립니다. 나중에 색변경을 할 수있도록 부탁드려요! -------------------------------------------------------------------------- 그림3은 키움의 챠트 입니다! 첨부그림3 처럼 선물이나 옵션에서 호가의 잔량차이를 0선을 기준으로 위 아래로 색상을 달리 표현을 할 수 있을까요? 방법을 알려주시길 부탁드려요!
프로필 이미지
qha71
2018-11-22
345
글번호 123750
지표
답변완료

수식오류

답변 수식으로 270 271 272 273을 세팅하여 시뮬레이션 한 결과 2018년 11월 16일에 272가 3번이나 진입합니다.(첨부파일 참조) 가격별로 max 1회만 거래하는 수식이라면 2018년 11월 16일은 273 1번, 272 1번 총 2회 거래합니다. 다시 한번 부탁드립니다. ************************************************* Re : 거래횟수 제한 안녕하세요 예스스탁입니다. input : Price1(266.50); input : Price2(266.00); input : Price3(265.50); input : Price4(265.00); var : T(0); if T != 1 and NextBarOpen <= Price1 Then buy("b1",AtStop,Price1); if T != 2 and NextBarOpen <= Price2 Then buy("b2",AtStop,Price2); if T != 3 and NextBarOpen <= Price3 Then buy("b3",AtStop,Price3); if T != 4 and NextBarOpen <= Price4 Then buy("b4",AtStop,Price4); if CurrentContracts > CurrentContracts and LatestEntryName(0) == "b1" Then T = 1 ; if CurrentContracts > CurrentContracts and LatestEntryName(0) == "b2" Then T = 2 ; if CurrentContracts > CurrentContracts and LatestEntryName(0) == "b3" Then T = 3 ; if CurrentContracts > CurrentContracts and LatestEntryName(0) == "b4" Then T = 4 ; 즐거운 하루되세요 > 목마와숙녀 님이 쓴 글입니다. > 제목 : 거래횟수 제한 > 가격별로 max 1회만 거래하는 수식을 요청합니다. ex)가격이 265에서 정체하다가 265.50로 상승 시 아래 수식은 price4에서 여러번 진입과 청산을 반복하다 price3에서 진입합니다. price4에서 1번만 거래하고 price3에서 진입하는 수식을 요청드립니다. **************************************************************************** input : Price1(266.50); input : Price2(266.00); input : Price3(265.50); input : Price4(265.00); if NextBarOpen <= Price1 Then buy("b1",AtStop,Price1); if NextBarOpen <= Price2 Then buy("b2",AtStop,Price2); if NextBarOpen <= Price3 Then buy("b3",AtStop,Price3); if NextBarOpen <= Price4 Then buy("b4",AtStop,Price4);
프로필 이미지
목마와숙녀
2018-11-17
207
글번호 123749
시스템
답변완료

중심선 및 하단표시 요청 드립니다.(2건)

* 항상 많은 도움에 정말 고맙습니다. <요청1> ①아래 수식에서 표시가 상단만 나오는데 중심선 및 하단선 표시도 부탁 드립니다. ②상단선이 이전 3개 상단선 보더 크면 매수, 작으면 매도 로직 좀 부탁 드립니다. ③선 완성시 소리로 나오게 표현좀 부탁 드립니다. PlaySound("C:₩예스트레이더₩data₩Sound₩stop"); 소리문장어디에 삽입하죠? ### ①번이래 수식 input : N(5); var : idx(0),hh(0),d1(0),t1(0),TL(0),TF(0); if bdate != bdate[1] Then idx = 0; Else idx = idx+1; TF = idx%N; if bdate != bdate[1] or (bdate == bdate[1] and TF < TF[1]) Then { hh = h; d1 = sdate; t1 = stime; TL = TL_New(d1,t1,hh,sdate,stime,hh); TL_SetColor(TL,RED); } else { if H > hh Then hh = h; TL_SetBegin(TL,d1,t1,hh); TL_SetEnd(TL,sdate,stime,hh); } <요청2> 아래 수식에서 직선이 그어지면(완료)되면 매매 로직 부탁 드립니다. 1. 고가에서 저가로 선이 완료되면 바로 매수 2. 저가에서 고가로 선이 완료되면 바로 매도 3. 직전 고점 이나 저점 깨지면 스위칭 ▶매수 했는데 직전 완성된 선의 저점 보다 하락 하면 매도청산 새로 매도진입) ▶매도 했는데 직전 완성된 선의 고점 보다 상승 하면 매수청산 새로 매수진입) 4. 아래수식에서 글짜가 매우 크게 나오는데 글자크기 조정 항목이 어느것인가요? ## 아래수식 ################## Input:barCnt(10); Var:j(0),turnPntBit(""),TL1(0),TL33(0),TL44(0),HD(0),HT(0),LD(0),LT(0),HH(0),LL(0); var : TL121(0),TL122(0),tx121(0),tx122(0); Array:valArr[10](0),barArr[10](0),turnPntArr[10](""); For j = 0 To 9 { barArr[j] = barArr[j] + 1; } Condition1 = Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt); Condition2 = Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt); turnPntBit = ""; If Condition1 and Condition2 Then { If Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "HiLo"; Else If Max(valArr[1],valArr[2]) < H[barCnt] Then turnPntBit = "Hi"; Else If Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "Lo"; Else If turnPntArr[1] == "Hi" Then turnPntBit = "Lo"; Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi"; } Else If Condition1 Then turnPntBit = "Hi"; Else If Condition2 Then turnPntBit = "Lo"; If turnPntBit <> "" Then { If turnPntBit == "HiLo" Then { valArr[1] = IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]); barArr[1] = barCnt; TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); If turnPntArr[1] == "Hi" Then turnPntBit = "Lo"; Else turnPntBit = "Hi"; } If turnPntBit <> turnPntArr[1] Then { for j = 8 downto 1 { valArr[j+1] = valArr[j]; barArr[j+1] = barArr[j]; turnPntArr[j+1] = turnPntArr[j]; } } If turnPntBit <> turnPntArr[1] or (turnPntBit == turnPntArr[1] and ((turnPntBit == "Hi" and valArr[1] < H[barCnt]) or (turnPntBit == "Lo" and valArr[1] > L[barCnt]))) Then { valArr[1] = IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]); barArr[1] = barCnt; turnPntArr[1] = turnPntBit; If turnPntArr[1][1] <> turnPntArr[1][0] Then TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2], sDate[barArr[1]],sTime[barArr[1]],valArr[1]); Else TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } } TL_SetSize(TL1,2); TL_SetColor(TL1,RED); * 고맙습니다.
프로필 이미지
요타
2018-11-21
235
글번호 123748
지표