커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

문의드립니다

위 그림 관련 답변 받은 수식은 아래와 같습니다. 매봉 그려지는 식이 아니므로 지표속성에서 일자그래프로 지정하고 적용하시기 바랍니다. var : T(0),HL(0),LH(0); if dayindex == 0 Then T = 0; if dayindex > 0 and H == dayhigh Then{ T = 1; HL = L; } if dayindex > 0 and L == DayLow Then{ T = -1; LH = H; } #당일최고가 이후최저가 if L < HL Then HL = L; #당일최저가 이후 최고가 if H > LH Then LH = H; #최근 당일최저가를 갱신했고 #당일최저가 이후 최고가는 당일고가보다는 작고 #당일최저가 이후 최고가는 당일최저가대비 1포인트이상 높고 #현재봉의 고가는 당일최저가 이후 최고가보다 작을때 최근최고가와 당일저가의 0.618선 출력 if T == -1 and T[1] == -1 and LH < dayhigh and LH >= daylow+1 and H < LH Then plot1(LH-(LH-daylow)*0.618,"지표",blue); #최근 당일최고가를 갱신했고 #당일최고가 이후 최저가는 당일저가보다는 크고 #당일최고가 이후 최저가는 당일최고가대비 1포인트이상 낮고 #현재봉의 저가는 당일최고가 이후 최저가보다 클때 최근최저가와 당일고가의 0.618선 출력 if T == 1 and T[1] == 1 and HL > dayLow and HL <= dayhigh-1 and L > HL Then plot1(HL+(dayhigh-HL)*0.618,"지표",red); ----------------------------------------------- 다시 드리는 질문입니다. 1. 위 수식은 당일 움직임인데, 전일과 당일 포함한 움직임에서 위 그림 만족하는 수식 부탁드립니다. 2. period 기간 중 고가 Highest(h,period), 저가 Lowest(L,period)일 때 위 수식으로 전환 부탁드립니다. 3. 위에 말씀하신 '일자그래프로 지정하고 적용' 하라는게 뭔지 설명 좀 부탁드립니다. 4. 해외선물 오일에 위 수식을 그대로 사용해도 되는지.. 안되면 수식 부탁드립니다. 수고하세요.
프로필 이미지
land22
2015-10-22
203
글번호 91569
지표
답변완료

44590번글 관련 - 시스템식 수정 부탁드립니다.

요구한 시스템식에 감사드리고 시스템식에 주석처리해 주신점 더더욱 감사드립니다. 아래와 같이 몇명 수정건과 추가사항을 검토후 시스템식 수정 부탁드립니다. 1. 진입횟수 오류에 대한 문제 - 수정건 1) 일봉과 분봉차트를 보면 4월 22일 1차매수후 1차매도가 이루어 지고 3일이상 횡보하여 1차매수당시~3일동안의 최저가를 이탈하여 29일 "익절"처리되어 매수된 물량이 모두 처리되어 "0인 상태로 여기까지 정상입니다. 2) 이후 6월 1일 1차매수가 부근에서 신호가 발생되어야 하는데 신호가 잡히질 않습니다. 3) 변수설정에서 전략식진입횟수(10)이고 피라미딩 설정에서 다른진입 신호만 허용에 체크되었습니다. 4) 검토후 수정 부탁드립니다. 2. "익절" 내용관련 설명 및 수정건 1) 44590번글 중에 익절에 대해 다음과 같은 답변을 주셨습니다. ----------------------------------------------------------------------------- "익절내용중 1차매수당시 최저점 등 매수당시 최저점이 어떤 값인지 정확치 않아 매수당시 그날의 최저가로 지정했습니다." ----------------------------------------- 2) 제가 설명이 다소 부족해서 다시 설명 드리자면 매수당시의 최저점이 매수당시 그날의 최저가가 아니라 각각의 매수후 "타점보유일수" 동안의 최저가입니다. 3) 정리하면... 각각의 매수후 1차매도만 이루어 지고 하락시 매수당시부터 보유일수 동안의 최저점을 이탈하면 익절 예: 1차매수 --> 1차매도만 발생하고 --> 하락하여 1차매수당시~보유일수 동안의 최저점을 이탈하면 익절 1차매수+2차매수 --> 1차매도만 발생하고 --> 하락하여 2차매수당시~보유일수 동안의 최저점을 이탈하면 익절 1차매수+2차매수+3차매수 --> 1차매도만 발생하고 --> 하락하여 3차매수당시~보유일수 동안의 최저점을 이탈하면 익절 3. "익절"에 대해 시스템식 추가건 44590번글의 4.손절기준의 1)항과 비슷한 개념으로... ----- 44590번글의 4.1)항은 다음과 같습니다. 참고해 주세요.. ------------------------------- ㅣ 4. 손절기준 ㅣ 1) 각각의 매수위치에서 매수후 타점보유일수 만큼 경과하면 해당보유일수 동안의 저점이탈시 손절 ㅣ 예: 1차매수시 "타점보유일수(3)" 인 경우 1차매수후 매수일 포함 3일동안 해당수익이 발생하지 못해 ㅣ 1차매도가 이루어지지 않았을 경우 3일동안의 최저점을 이탈시 손절 ㅣ 또한 같은 경우로 1차매수+2차매수가 되었을때 최종2차매수후 3일동안 1차매도가 이루어지지 않을 ㅣ 경우 최종 2차매수후 3일동안의 최저점을 이탈시 손절 ㅣ 1차매수+2차매수+3차매수가 되었을때 최종3차매수후 3일동안 1차매도도 이루어 지지않았을 경우 ㅣ 최종 3차매수후 3일동안으 최저점을 이탈시 손절 ---------------------------------------------------------------------------------------- 1) 각각의 매수위치에서 매수후 매수일 포함 타점보유일수 동안 1차매도(수익)가 발생하지 않을 경우 즉, 횡보할 경우 타점보유일수 다음날 시가에 익절 2) 예 : 1차매수후 "타점보유일수(3)" 동안 "1차매도"가 발생하지 않을 경우 타점보유일수+1일의 시가에 매도 1차매수+2차매수후 "타점보유일수" 동안 "1차매도"가 발생하지 않을 경우 다음날 시가에 매도 1차매수+2차매수+3차매수후 "타점보유일수"동안 "1차매도"가 발생하지 않을 경우 다음날 시가에 매도 3) 매도가 된 경우 차트에 "익절"로 표시 부탁드립니다. 4. 진입시간 오류에 관한 수정건 그림4)와 같이 진입시간을 10:00로 설정했는데 3분봉 두번째 봉에서 신호가 잡히네요.. 이것도 검토후 수정 부탁드립니다. 즐거운 하루되세요. 이전의 시스템식은 다음과 같습니다. -------------------------------------------------------------------------------------- input : 전략식시작일자(20150422), 전략식시작시간(090000), 전략총매수금액(2000); # 금액은 만원단위 input : P(10),매수위치1차(10), 매수위치2차(7), 매수위치3차(14); input : 매수위치보정(1); input : 매도위치1차(7), 매도위치2차(14); input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50); input : 매도비중1차(50), 매도비중2차(50); input : 전략식진입횟수(10); input : 타점보유일수(3); var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0); var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntryDlow(0); #일자수 계산 if date != date[1] Then Didx = Didx+1; #당일포함 일봉 P개의 종가를 누적 sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } #누적값을 P로 나누어 평균값 산출 mav = sum/P; #상단 Eup = mav+mav*(매수위치1차/100); #하단 Edn = mav-mav*(매수위치1차/100); #지정일 지정시간이 되면 TimeCond는 True(그전에는 false) if sdate == 전략식시작일자 and (stime == 090000 or (stime > 전략식시작시간 and stime[1] < 전략식시작시간 )) then TimeCond = true; #TimeCond가 True가 된 후 if TimeCond == true then{ #무포지션 상태에서 매수위치1차에 도달하면 매수 if MarketPosition == 0 and TotalTrades == 0 Then buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100))); #첫매수이후 if MarketPosition == 1 Then{ #최근 진입시점의 일자수 저장 if CurrentContracts > CurrentContracts[1] Then{ LatestEntryDidx = Didx; LatestEntryDlow = daylow; } #1차매수 발생 후 매수위치2차에 도달하면 매수 if MaxEntries == 1 Then buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100))); #1차매수 발생 후 매수위치3차에 도달하면 매수 if MaxEntries == 2 Then buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100))); #1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true if LatestExitName(0) == "1차매도" then Xcond1 = true; #2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true if LatestExitName(0) == "2차매도" then Xcond2 = true; #Xcond1이 false일때 #진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산 if Xcond1 == false Then exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1); #Xcond2가 false일 #진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산 if Xcond2 == false Then exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100)); #최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가) if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{ #최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산 if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{ Loss = daylow(1); for cnt = 1 to 타점보유일수{ if daylow(cnt) < Loss Then Loss = daylow(cnt); } } #Loss값 이하로 가격하락하면 전량 청산 exitlong("손절",AtStop,Loss); } #1차매도가 발생한 상황 #가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산 if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{ exitlong("익절",AtStop,LatestEntryDlow); } } else{#매수포지션이 아니면 false로 초기화 Xcond1 = false; Xcond2 = false; } } -----------------------------------------------------------------------------------------
프로필 이미지
종풍화성
2015-10-22
152
글번호 91568
시스템
답변완료

질문...

분봉상 적용코드입니다 1번째와 2번째 코드의 V3[0] 와 VV1[0] 에 관해서입니다 if sdate >= 특정일 then{ V3[1] > 0 and VV1[1] > 100 일 경우 해당일의 특정일값에 해당일에 들어갈수있도록 ex) 해당일이 20151019 면 코드내에서 자동으로 if sdate >= 20151019 then{ 이렇게 인식이 되도록 ex) V3[1] > 0 and VV1[1] > 100 ---> 20151019 조건 불만족 V3[2] > 0 and VV1[2] > 100 ---> 20151018 조건 만족 V3[3] > 0 and VV1[3] > 100 ---> 20151017 조건 불만족 일 경우 if sdate >= 20151018 then{ 이렇게 해당코드를 인식하게끔 하고 싶습니다 [0]데이타는 0~5까지입니다 즉 [0],[1],[2],[3],[4],[5] 이렇게 6일동안 그 가운데 조건 만족하는 날의 특정일을 찾아내고 그 값을 3번째 코드내의 특정일로 자동으로 인식하게 하고 싶은겁니다 그래서 3번째 코드를 실행하는데 예를들어 보겠습니다 20151001 -&#61664; V3[5] > 0 and VV1[5] > 100 조건 불만족 20151002 -&#61664; V3[4] > 0 and VV1[4] > 100 조건 만족 20151003 -&#61664; V3[3] > 0 and VV1[3] > 100 조건 불만족 20151004 -&#61664; V3[2] > 0 and VV1[2] > 100 조건만족 20151005 -&#61664; V3[1] > 0 and VV1[1] > 100 조건만족 20151006 -&#61664; V3[0] > 0 and VV1[0] > 100 조건불만족 이렇다고 가정하면 if sdate >= 특정일 then{ 의 특정일에는 코드내에서 조건만족 제일 먼저하는 날인 20151002로 들어가야하고 3번째 코드가 진행될껍니다 그때 var3이 누적되면서 값이 0 이상이어야 계속 유지되어야하고 예를들어 1002부터 누적된값이 1003에 var3이 0 이하가 되면 Var3값을 0으로 초기화하고 다시 1004 만족되면 코드는 특정일이 20151004로 인식해서 var3값을 다시 누적해 나갑니다 이때 1006에 조건이 불만족하여도 var3이 0 이상이면 계속 누적해 나갑니다 요약하면 조건이 만족하는 특정일부터 var3값을 누적하고 그 값이 0 이상 유지되면 조건관계없이 계속 누적해가고 var3이 0 이하가 되면 0값으로 초기화하고 또 진행하다 조건만족하는 특정일이 나오면 그때부터 다시 var3값을 누적해 갑니다 그리고 한가지 추가 질문입니다 데이타를 위에서 얘기했듯이 [0]~[5]까지 6일로 얘기했는데 이것을 [0]~[19]까지 20일로 하면 분봉에서 종목검색시 부하가 많이 걸리나요? 이해가 되지 않으신다면 전화해도 될런지요? 부탁드립니다 ######################################################### var : V1(0),V2(0),cnt(0); Array : V3[10](0); if date != date[1] Then{ for cnt = 1 to 9{ V3[cnt] = V3[cnt-1][1]; } } v1 = accumn(upvol,dayindex+1); v2 = accumn(DOWNvol,dayindex+1); V3[0] = V1 - V2 ; ################################################## var : Vcnt(0),PreDate(0),PreDayV(0); Array : VV1[10](0); if date != date[1] Then{ PreDate = sdate[1]; for Vcnt = 1 to 9{ VV1[Vcnt] = VV1[Vcnt-1][1]; } } if PreDate > 0 Then{ for Vcnt = 1 to 1000 { if stime[Vcnt] <= stime and sdate[Vcnt] == PreDate then{ PreDayV = DayVolume[Vcnt]; Vcnt = 10000; } } } VV1[0] = DayVolume/PreDayV*100 ; ######################################################################### // input : 특정일(20151002) ; if sdate >= 특정일 then{ var1 = var1+Upvol; var2 = var2+DownVol; VAR3 = VAR1 - VAR2; if sdate[1] < 특정일 Then var4 = var3; if var3 > var4 Then var4 = var3; }
프로필 이미지
9회말2아웃
2015-10-21
141
글번호 91567
지표

9회말2아웃 님에 의해서 삭제되었습니다.

프로필 이미지
9회말2아웃
2015-10-21
1
글번호 91566
지표
답변완료

부탁드립니다.

아래 내용을 2분봉 챠트에서 4분봉의 것으로 볼수 있게 부탁드립니다. Input:Period(20),Percent(50); Var:arr(0),j(0),cnt(0),HH(0),LL(0),Tick(0),TickVol(0), TotVol(0),SubTotVol(0),MaxArr(0),UpArr(0),DnArr(0),MaxPrc(0), UpPrc(0),DwnPrc(0),Vol1(0),Vol2(0); Array:Prc[100](0),Vol[100](0); HH = Highest(H,Period); LL = Lowest(L,Period); Tick = Ceiling((HH-LL)/100/PriceScale)*PriceScale; Prc[0] = HH; Vol[0] = 0; for arr = 1 to 99 { Prc[arr] = Prc[arr-1] - Tick; Vol[arr] = 0; } for j = 0 to Period-1 { cnt = 0; for arr = 0 to 99 { if L[j] <= Prc[arr] and Prc[arr] <= H[j] then cnt = cnt + 1; } TickVol = V[j]/cnt; for arr = 0 to 99 { if L[j] <= Prc[arr] and Prc[arr] <= H[j] then { Vol[arr] = Vol[arr] + TickVol; } } } TotVol = 0; MaxArr = 2; for arr = 0 to 99 { TotVol = TotVol + Vol[arr]; if arr >= 2 and arr <= 97 then { if Vol[MaxArr-2]+Vol[MaxArr-1]+Vol[MaxArr]+Vol[MaxArr+1]+Vol[MaxArr+2] < Vol[arr-2] +Vol[arr-1] +Vol[arr] +Vol[arr+1] +Vol[arr+2] then MaxArr = arr; } } UpArr = MaxArr; DnArr = MaxArr; SubTotVol = Vol[MaxArr]; for j = 0 to 99 { Vol1 = iff(UpArr-1>=0,Vol[UpArr-1],0); Vol2 = iff(DnArr+1<=99,Vol[DnArr+1],0); if Vol1 > Vol2 then { SubTotVol = SubTotVol + Vol1; UpArr = UpArr - 1; } else if Vol1 < Vol2 then { SubTotVol = SubTotVol + Vol2; DnArr = DnArr + 1; } else if Vol1 == Vol2 and Vol1 > 0 and Vol2 > 0 then { SubTotVol = SubTotVol + Vol1; UpArr = UpArr - 1; if SubTotVol < TotVol * Percent/100 then { SubTotVol = SubTotVol + Vol2; DnArr = DnArr + 1; } } else if Vol1 + Vol2 == 0 then { if UpArr >= (99 - DnArr) then Uparr = UpArr - 1; else DnArr = DnArr + 1; } if SubTotVol >= TotVol * Percent/100 then j = 99; } MaxPrc = Prc[MaxArr]; UpPrc = Prc[UpArr]; DwnPrc = Prc[DnArr]; Plot1(MaxPrc);
프로필 이미지
까시서방
2015-10-21
150
글번호 91565
지표

9회말2아웃 님에 의해서 삭제되었습니다.

프로필 이미지
9회말2아웃
2015-10-21
0
글번호 91564
종목검색
답변완료

질문드립니다.

data2에서 지표를 구현하고 싶습니다. data1은 따로 있고, data2에서 파라볼릭(종가)을 구현하고 싶은데, 이상하게 data1에서 파라볼릭(종가)을 구현한것과, data2에서 구현한것이 같지 않아 질문드립니다. 예시수식부탁드립니다. 감사합니다.
프로필 이미지
yanartas
2015-10-21
133
글번호 91562
지표
답변완료

질문드립니다

시스템수식 부탁드립니다 1 2 3 은 매수 조건이고 4 5 는 매도 조건입니다 1. 1분봉 주기 a 캔들기간 평균거래량 대비 0봉전 캔들의 거래량이 b 배 이상 (a기간에 0봉전 캔들은 미포함) 2. 1분봉 주기 (c 캔들기간내 캔들간 obv 변동값의 절대값 평균) 대비 [ (0봉전 캔들의 obv값) - (1봉전 캔들의 obv값) ]이 d배 이상 (c기간에 0봉전 캔들은 미포함) 3. [ (0봉전 캔들의 obv값) - (1봉전 캔들의 obv값) ]은 양수 a b c d 설정값은 a=100 b=2 c=100 d=2 입니다 (사용자가 숫자를 넣어 변동 가능하도록 부탁드립니다) 2번 조건에서 캔들간 변동값의 절대값 평균의 의미는 예를들어 5봉전 캔들 obv값 = -5 4봉전 캔들 obv값 = -1 3봉전 캔들 obv값 = 1 2봉전 캔들 obv값 = -2 1봉전 캔들 obv값 = -1 0봉전 캔들 obv값 = 9 일때 캔들간 변동값의 절대값은 각각 4 2 3 1 가 되고 평균은 2.5로 0봉전 캔들의 obv값-1봉전 캔들의 obv=10과 비교하여 4배입니다 (1 and 2 and 3) 조건 만족시 설정금액 (ex 100만원)만큼 매수 매수시 진입시점에서 1분 간격으로 3차례에 걸쳐 각각 30% 40% 30% 매수 4. 진입가격에서 1% 2% 3% 상승시 3차례에 걸쳐 각각 30% 40% 나머지 전량 매도 5. 진입가격보다 1% 2% 3% 하락시 3차례에 걸쳐 각각 30% 40% 나머지 전량 손절 5번 조건은 4번조건보다 우선함 마지막 매수진입 시점기준에서 4. 5 각각의 경우에 설정 시간값 (ex. 30분) 동안 매도가 발생하지 않도록 부탁드립니다 그리고 매일매일 자동으로 트레이더 실행 및 시스템 실행을 위해 자동 매크로 프로그램인 macro express로 프로그램 실행 및 시스템 가동을 해봤는데 비밀번호 입력창에서 키보드 입력이 안됩니다 아무래도 보안문제 때문인거 같은데(추측컨대 secure keystroke 때문인듯합니다만) 혹시 해결책이 있는지요 요약하면 매일매일 자동으로 트레이더 실행 및 가동이 되는 외부 프로그램이나 내부 메뉴가 있는지 문의합니다 익숙치 않아 질문도 많고 번거롭게 해드려 죄송하고 또 감사합니다
프로필 이미지
가이츠
2015-10-22
186
글번호 91560
시스템
답변완료

지표식 부탁드립니다.

매번 성실한 답변 감사드립니다. 분봉 지표식 문의드립니다. 아래 지표식에 만족하는 봉의종가(1)를 최초로 양봉으로 상향돌파하는 봉(2)을 점으로 표시하는 지표식 부탁드립니다. (1)번봉다음 곧바로 (2)번봉이 발생할경우 (2)번봉의 저가는 (1)번봉의 종가보다 아래이고 (1)번봉다음 (1)번봉 종가보다 낮은봉이 발생한 이후에 (2)번봉이 발생할경우는 상관없음. 감사합니다. 지표식~ var4 = BollBandup(20,2); var5 = BollBandup(80,2); var6 = BollBandup(240,2); if date != date[1] Then{ var1 = c; var2 = o; var3 = h; } condition1 = c > highest(c,24)[1] ; ##24봉중-최고가 Condition2 = crossup(c,var5); Condition3 = crossup(c,var6); ##주가-240bbup돌파 if Condition1 == true and Condition3 == true and c > var5 and var4 > var6*0.9 and c > c[1] and c > o and var4 > var4[1] and var5 > var5[1] and var4[1] <= var6[1] and (var6-var5) < var5*0.05 and c < DayClose(1)*1.15 then plot1(c);
프로필 이미지
부양가족
2015-10-21
123
글번호 91559
지표