커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 문의 드려요

해외선물 분봉 적용할꺼고요 1.당일 고점 에서 -0.65 -1.2 ㅡ1.3 값 당일 저점 에서 0.65 1.2 1.3 값 2.해당주도 위에꺼 처럼 단 월요일은 저번주 포함이고 화요일은 월요일포함해서 되게 3.해당월도 똑같이 단 해당월의 첫째주는 저번달의 값과 2주차부터 시작되게 이런식으로 만들고 싶습니다.
프로필 이미지
렉쳐
2016-10-04
102
글번호 102482
지표
답변완료

수식문의

안녕하세요 늘 많은 도움 주셔서 감사합니다. 하기 답변을 받았는데, 한가지 더 추가 하고 싶습니다. 하기 수식에서 볼린져 밴드의 상단밴드가 60이평 아래도 내려오는 순간 매도 진입하는 수식 부탁드립니다. 반대로 하단밴드가 60이평 위로 올라가는 순간 매수 진입하는 수식 부탁드립니다. 추가조건 1. - 매도 진입후 볼린져 밴드 상단밴드가 다시 60이평 밖으로 빠져 나가면 청산 부탁드립니다. - 매수 진입후 볼린져 밴드 하단밴드가 다시 60이평 밖으로 빠져 나가면 청산 부탁드립니다. 2. - 매도 진입후 DP/DM이 교체가 이루어지면 청산 부탁드립니다. - DP가 위로 올라가면... - 매수 진입후 DP/DM이 교체가 이루어지면 청산 부탁드립니다. - DM이 위로 올라가면... 3. 한번 빠져나가 상단 또는 하단밴드가 60이평내로 10봉이내에 재진입 하는 것은 무시합니다. 인정하지 않고 다음 신호 기다립니다. 감사합니다. --------------------------------------------------------------- 안녕하세요 예스스탁입니다. 1. input : P(14),BBP(20),dv(2),MAP(60); var : ADXV(0),DP(0),DM(0),T(0),BBup(0),BBdn(0),mav(0); ADXV = ADX(P); DP = Diplus(P); DM = DiMinus(P); BBup = BollBandUp(BBP,dv); BBdn = BollBandDown(BBP,dv); mav = ma(C,MAP); if crossup(ADXV,20) Then{ if DP > DM and BBup > mav Then buy("b1"); if DP < DM and BBdn < mav Then sell("s1"); } 2 지표 중에는 계산방법상 차트의 과거봉수에 따라 값이 달라지는 지표들이 있습니다. ADX도 차트에 과거봉수에 따라 값이 달라지는 지표입니다. 차트는 현재기준으로 과거 N개봉이 조회되므로 해당 내용은 차트조회시마다 과거 봉을 최대한 많이 조회하는 방법뿐이 없습니다. 즐거운 하루되세요 > softtoug 님이 쓴 글입니다. > 제목 : 문의사항 > 안녕하세요 하기 문의 드립니다. input : P(14); var : ADXV(0),DP(0),DM(0),T(0); ADXV = ADX(P); DP = Diplus(P); DM = DiMinus(P); if crossup(ADXV,20) Then{ if DP > DM Then buy("b1"); if DP < DM Then sell("s1"); } 상기 수식에서 볼린져 상단밴드가 60 이평 아래에 있을때는 매수금지, 반대로 하단밴드가 60이평 위에 있을때는 매도금지 수식을 추가 부탁드립니다. 다음 신호에서 진입하는 것으로 부탁드립니다. * 중요한 질문이 있습니다. 프로그램을 운영하다가 자리를 비우고 돌아오거나, 오버나이트를 하고 다음날 확인을 하면, 챠트하고 매매한 결과가 다르게 나타납니다. 챠트에서는 신호가 없는데 매매를 진행하기도 하고... 아침에 reset을 하면 어제와는 다른 결과가 나타나 있기도 하고... 왜 이러는지요? 심지어 ADX 수치도 바뀌어져 있을 때가 있습니다. 확인 부탁드립니다. 감사합니다
프로필 이미지
softtoug
2016-10-04
98
글번호 102478
시스템
답변완료

수식부탁드립니다-------------

고점변곡점 그봉위에 택스트로 지수표시하고 그봉에서 소리나게해주세요 PlaySound("C:₩예스트레이더₩data₩Sound₩bubbles.wav"); 저점변곡점그봉아래 택스트로 지수표시하고 그봉에서 소리나게해주세요 PlaySound("C:₩예스트레이더₩data₩Sound₩accept.wav" ); 귀찮게해서 미안합니다 항상 감사합니다 ========================================================================== Input:barCnt(5); Var:j(0),turnPntBit(""),TL1(0),TL33(0),TL44(0),HD(0),HT(0),LD(0),LT(0),HH(0),LL(0); Array:valArr[10](0),barArr[10](0),turnPntArr[10](""); // 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가 For j = 0 To 9 { barArr[j] = barArr[j] + 1; } // 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다 // 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다 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); // 전환점구분 null값으로 초기화; // if 고점조건, 저점조건 동시 만족시 then // if 이전 고점,저점 범위를 모두 벗어났을 때 // 전환점구분 = 고저점; // else if 이전 고점을 갱신했다면 전환점구분 = 고점; // else if 이전 저점을 갱신했다면 전환점구분 = 저점; // else if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점; // else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점; // else if 고점조건 만족하면 전환점구분 = 고점; // else if 저점조건 만족하면 전환전구분 = 저점; 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 전환점구분에 값이 있을 때만 아래 실행, 없으면 통과 If turnPntBit <> "" Then { // if 전환점구분이 고저점이면 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 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then // 배열값들을 이전값으로 Move; 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 전환점구분이 바뀌었거나 또는 // (전환점구분은 안바뀌었는데 // (이전 고점보다 높은 고점이 발생했거나 또는 // 이전 저점보다 낮은 저점이 발생했으면)) then 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 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고; // else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장; 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,1); TL_SetColor(TL1,GREEN); var : TL11(0),TL12(0); if turnPntArr[1][0] == "Hi" Then{ TL_Delete(TL11); TL11 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); TL_SetExtRight(TL11,true); TL_SetColor(TL11,BLUE); TL_SetSize(TL11,1); } if turnPntArr[1][0] == "Lo" Then{ TL_Delete(TL12); TL12 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); TL_SetExtRight(TL12,true); TL_SetColor(TL12,RED); TL_SetSize(TL12,1); } if bdate != BDate[1] Then{ HD = sdate; HT = stime; LD = sdate; LT = stime; HH = H; LL = L; } if H > HH Then{ HH = H; HD = sdate; HT = stime; } TL_Delete(TL33); if turnPntArr[1][0] == "Hi" Then{ TL33 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],HD,HT,dayhigh); } if turnPntArr[1][0] == "Lo" Then{ TL33 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],HD,HT,dayhigh); } TL_SetExtRight(TL33,true); if L < LL Then{ LL = L; LD = sdate; LT = stime; } TL_Delete(TL44); if turnPntArr[1][0] == "Hi" Then{ TL44 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],LD,LT,daylow); } if turnPntArr[1][0] == "Lo" Then{ TL44 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],LD,LT,daylow); } TL_SetExtRight(TL44,true);
프로필 이미지
leekss1
2016-10-04
116
글번호 102477
지표
답변완료

시스템신호 2번재 매매신호부터 시작_ 재질의

항상 감사드립니다 아래 시스템식을 보면서 시간검증및 추가질의 합니다 1_시간설정 질의(아래설정이 맞는지?) 뉴욕시간 #17시~익일 03시 사이 (stime >= 170000 or stime < 030000) #익일03시~익일14시30분 사이 (stime >= 030000 and stime < 143000 2_#17시~익일03시 사이에는 두번째신호부터 신호가 발생하는데 17시~익일03시 시간대에 첫번째 가상신호가 발생하고 (이떼 시스템에서는 신호발생없음) 익일 03시~14시30분 시간으로 넘어가면 17시~익일03시에서발생한 가상신호의 연장선상에서 첫번째신호가 발생합니다 이를 보정하는 방법은 => 첫번재 가상신호가 발생하지 않았으면 03시~14:30시간에서 첫번째 신호부터 발생 첫번째 가상신호가 발생하고 청산되었으면 03시~14:30시간에서 첫번째 신호부터 발생 첫번째 가상신호가 발생하고 청산되지않았으면 가상신호가 청산된후 03시~14:30시간 첫번째 신호부터 발생이 가능한지.. 감사합니다 ##################################################### ##### A_17:00 ~ 03:00_ 2번째신호부터 매매 ##### ##### B_03:00 ~ 14:30_ 1번째신호부터 매매 ##### #################################################### var :entrycnt(0) ,T(0),count(0); #17시나 03시가 되면 0으로 초기화 if (stime == 170000 or (stime > 170000 and stime[1] < 170000)) or (stime == 030000 or (stime > 030000 and stime[1] < 030000)) Then{ Entrycnt = 0; T = 0; count = 0; } # 현지시간_뉴욕 17:00 장시작~익일 03:00 # ## 동일방향 재진입금지/전일 마지막신호와 무관하게 진입 ### if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then Entrycnt = Entrycnt+1; /******************************************************************************/ #매수조건이면 T는 1, 카운트 1증가 if T <= 0 and c>o and c>var77 and C>var51 and stok>stod and (xx+yy)>=-0 and c>var90 and c>var60 and c>피봇1차지지 then { T = 1; count = count+1; #17시~03시 사이 if (stime >= 170000 or stime < 030000) Then{ #카운트가 2 이상이고 나머지 포지션 조건 만족할때 진입 if count >= 2 and ((entrycnt == 0) or (entrycnt >= 1 and MarketPosition == 0 and MarketPosition(1) != 1) or (MarketPosition == -1)) Then #동일방향 재진입금지# BUY("B1_윗꼬리_51"); } #03시~14시30분 사이 if (stime >= 030000 and stime < 143000) Then{ #카운트가 2 이상이고 나머지 포지션 조건 만족할때 진입 if count >= 1 and ((entrycnt == 0) or (entrycnt >= 1 and MarketPosition == 0 and MarketPosition(1) != 1) or (MarketPosition == -1)) Then #동일방향 재진입금지# BUY("BB1_윗꼬리_51"); } } #매도조건이면 T는 -1, 카운트 1증가 if T >= 0 and c<o and c<var77 and c<var51 and stok<stod and (xx+yy)<=0 and c<var90 and c<var60 and c<피봇1차저항 Then{ T = -1; count = count+1; #17시~03시 사이 if (stime >= 170000 or stime < 030000) Then{ #카운트가 2 이상이고 나미저 포지션 조건 만족할때 진입 if count >= 2 and ((entrycnt == 0) or (entrycnt >= 1 and MarketPosition == 0 and MarketPosition(1) != -1) or (MarketPosition == 1)) then #동일방향 재진입금지# Sell("S1_윗꼬리_51"); } #03시~14시30분 사이 if (stime >= 030000 and stime < 143000) Then{ #카운트가 2 이상이고 나미저 포지션 조건 만족할때 진입 if count >= 1 and ((entrycnt == 0) or (entrycnt >= 1 and MarketPosition == 0 and MarketPosition(1) != -1) or (MarketPosition == 1)) then #동일방향 재진입금지# Sell("SS1_윗꼬리_51"); } }
프로필 이미지
조민철
2016-10-04
96
글번호 102471
시스템
답변완료

문의 드립니다.

안녕하세요? 다름이 아니오라,, 수익곡선에 20 이동평균선을 작성하여 수익곡선에 나타내려면 어떻게 해야 하는지 궁금합니다.
프로필 이미지
앙두
2016-10-04
82
글번호 102470
시스템
답변완료

수식문의 드립니다.

10일이평선이 50일이평선 크로스후 n번째 봉완성 후 매수또는 매도진입하는 수식부탁드립니다 (골든크로스에 매수, 데드크로스에 매도) < 조건추가 > 1. 첫번째 크로스후 n번째봉 이전에 다시 반대로 크로스발생시에는 두번째 크로스후 n번째봉에서 매수또는 매도진입. 2. 익절은 10일 이평선이 20일 이평선 크로스후 n번째 봉완성후 익절 3. 10틱 손실시 손절 (봉완성 전에라도 10틱에서 손절가능하게 부탁드립니다.) 감사합니다.
프로필 이미지
방향
2016-10-04
78
글번호 102467
시스템
답변완료

문의드립니다.

안녕하세요? 지난번 작성해주신 수식 누락되어 다시 문의드립니다. 분봉차트에서 적용예정입니다. input : 투자금액(1000000),매수1(30),매수2(30),매수3(40),하락1(10),하락2(15); //1차매수 분봉차트에서 전일일봉의 종가보다 10%갭상승하면 즉시 시장가로 매수 if MarketPosition == 0 and NextBarSdate != sdate and NextBarOpen >= C*1.10 Then buy("b1",AtMarket,def,Floor((투자금액*(매수1/100))/NextBarOpen)); //2차매수 if MarketPosition == 1 Then{ buy("b2",atlimit,EntryPrice*(1-하락1/100),Floor((투자금액*(매수2/100))/NextBarOpen)); } //3차매수 if MarketPosition == 1 Then{ buy("b3",atlimit,EntryPrice*(1-하락2/100),Floor((투자금액*(매수3/100))/NextBarOpen)); } 매도 //1차매도 1,2,3차 매수와 상관없이 수익이 5%이상이면 보유수량의 50% 매도 //2차매도 1,2,3차 매수와 상관없이 수익이 10%이상이면 보유수량의 50% 매도 //2차매도 1,2,3차 매수와 상관없이 수익이 15%이상이면 보유수량의 100% 매도 아울러 위의 수식이 당일 청산이 되지 않고 포지션을 보유하고 넘어갈때 다음날 처리방법도 수식으로 부탁드립니다.
프로필 이미지
에리조나
2016-10-04
104
글번호 102458
시스템
답변완료

문의 드립니다

안녕하세요 1.아래식은 rsi과열권에서 매수매도해서 수익틱수만큼 청산하고, 수익청산이 안되면 추가진입틱수만큼 하락 혹은 상승했을때 최대진입횟수만큼 1계약씩 계속 추가하는 시스템입니다 그런데 최대진입횟수가 5 이하일 때는 평균가에 맞게 수익틱수만큼 정상 청산되는데, 이상하게 몇몇구간에서 평균가가 잘못계산된건지 손실인데 수익인것처럼 청산이 됩니다 주로 최대진입횟수가 5 이상일때 이런 현상이 나던데, 어디가 문제일가요? 확인헤서 수정 좀 부탁드립니다 2. 위의 식이 정상적으로 수정이된다면 이번엔 추가진입시마다 n틱의 배수만큼 추가하락했을때 진입하는 수식을 부탁합니다 그러니까 매수 진입후에 현재 추가진입틱수가 15 이면 두번째 진입은 그냥 15틱이 하락한 후에 하고, 세번째 진입부터는 거기서 다시 15틱+n틱, 네번째 진입은 세번째 진입 가격에서 15틱+2n틱, 다섯번째 진입은 다시 네번째 진입가에서 15틱+3n틱 이렇게 최대진입횟수에 도달할때까지 n배수를 계속 추가한 가격에서 진입하면 됩니다 물론 마지막 손절도 같은 원칙대로 하면 됩니다 번거롭게 해드려서 죄송합니다 그리고 감사합니다 ------------------------------------------------------------------------------------------------- Input : Period(14),upsig(75),downsig(25),수익틱수(5),최대진입횟수(10),추가진입틱수(15); var : RSIV(0); RSIV = RSI(Period); if MarketPosition <= 0 and CrossDown(RSIV,downsig) Then{ buy("1매수",OnClose,def,1); } if MarketPosition == 1 Then{ exitlong("도청",atlimit,AvgEntryPrice+PriceScale*수익틱수); if CurrentEntries < 최대진입횟수 Then buy("BB",atlimit,LatestEntryPrice(0)-PriceScale*추가진입틱수,1); if CurrentEntries == 최대진입횟수 Then ExitLong("BStop",atstop,LatestEntryPrice(0)-PriceScale*추가진입틱수); } if MarketPosition >= 0 and Crossup(RSIV,upsig) Then{ sell("1매도",OnClose,def,1); } if MarketPosition == -1 Then{ ExitShort("수청",atlimit,AvgEntryPrice-PriceScale*수익틱수); if CurrentEntries < 최대진입횟수 Then sell("SS",atlimit,LatestEntryPrice(0)+PriceScale*추가진입틱수,1); if CurrentEntries == 최대진입횟수 Then ExitShort("Sstop",atstop,LatestEntryPrice(0)+PriceScale*추가진입틱수); }
프로필 이미지
쿠루드
2016-10-04
95
글번호 102457
시스템
답변완료

수식 부탁드립니다.

항상 감사합니다. 지수이평을 기준으로하는 볼린저 밴드 부탁드립니다. 기존 볼벤에서 이평만 지수이평으로 바꾸니 밴드업과 밴드다운 값이 바뀌지 않습니다. 부탁드립니다. 좋은 날 되세요.
프로필 이미지
또다시
2016-10-04
100
글번호 102450
지표