커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

설정에서 "강제청산"에서 당일 청산에 시간을 5:50분에 AM으로 설정했는데ㅐ

설정에서 "강제청산"에서 당일 청산에 시간을 5:50분에 AM으로 설정했는데요 시스템운영은 30분봉입니다. 종목은 해외선물(쿠르드오일)입니다. 차트에는 첨부화일같이 X표기로 청산이 되는데요.... 실제로 실전에서는 아침 6시에 청산이 안되어 제가 임의로 청산하던가 홀딩하던가 하게 되네요.. 3번이나 그렇게 되어 궁금해서 문의합니다. 왜 6시에 청산이 되지 않는지... 어떻게 하면 청산이 되는지 알려주세요~~~ 제가 사용하는수식은 다음과 같습니다. input : P1(1),P2(1),P4(1),P5(1),N1(50),N2(100); var : cnt(0),sum1(0),sum2(0),avg1(0),avg2(0),T(0),mav2(0),mav3(0); var : sum3(0); if DayClose(N2) > 0 Then { sum1 = 0; sum2 = 0; for cnt = 0 to N2-1 { if cnt < N1 Then sum1 = sum1 + DayClose(cnt); if cnt < N2 Then sum2 = sum2 + DayClose(cnt+1); } avg1 = sum1/N1; avg2 = sum2/N2; T = 0; if avg1 >= avg2 Then T = 1; if avg1 < avg2 Then T = -1; if T == 1 Then mav2=p2 ; if T == -1 Then mav2=p5; if T == 1 Then mav3=p1 ; if T == -1 Then mav3=p4 ; sum3 = 0; for cnt = 1 to 20 { sum3 = sum3 + (DayHigh(cnt)-DayLow(cnt)); } value1 = sum3/20 ; If MarketPosition == 0 and C >= (dayopen+value1*mav3) Then { Buy("매수"); } If MarketPosition == 0 and C <= (dayopen-value1*mav2) Then { sell("매도"); } }
프로필 이미지
이형지
2018-10-06
263
글번호 122487
지표
답변완료

색상질문 외 1건

<질문1> * 첨부 파일 처럼 사용이 안되는 색상표 뭐가 잘못되었나요? 되는것도 있고 안되는것도 있고 그러내요... PLOT24(var24,"하선24",Tool_DarkCyan,def,2); PLOT26(var26,"하선26"); PLOT28(var28,"하선28",DarkMagenta,def,2); PLOT30(var30,"하선30",LYELLOW,def,2); <질문2> 아래 지표수식을 매매 수식 으로 변경 요청 드립니다. * 아래 수식중 파동선에 대하여 매매 수식 좀 요청 드립니다. 1) 파동선 Plot1(파동선,"1",Iff(방향 == 상승, blue,red)); 은 매도 2) 파동선 plot1(Iff(방향 == 상승,고[1],저[1]),"1",Iff(방향 == 상승, blue,red)); 은 매수 3) 선굵기를 좀더 두껍게 3 정도 요청 드립니다. ////////////////// 아래 지표식 ////////////////////////// Input:Period(15),Rsi변동폭(7); Var:j(0),상승(50),하락(-50),양방향(4),추세(1), 파동선(1),Rsi파동선(1),방향(1),RsiV(1),추세선(1),추세선1(0); Array:고[10](0),저[10](0),고Bar[10](0),저Bar[10](0), Rsi고[10](0),Rsi저[10](0),Rsi고Bar[10](0),Rsi저Bar[10](0); RsiV = RSI(Period); For j = 1 To 9 { Rsi고Bar[j] = Rsi고Bar[j] + 1; Rsi저Bar[j] = Rsi저Bar[j] + 1; 저Bar[j] = 저Bar[j] + 1; 고Bar[j] = 고Bar[j] + 1; } If Rsi고[0] <= RsiV || Rsi고[0] == 0 || IsNaN(Rsi고[0]) == True Then { Rsi고[0] = RsiV; Rsi고Bar[0] = 0; } Else Rsi고Bar[0] = Rsi고Bar[0] + 1; If Rsi저[0] >= RsiV || Rsi저[0] == 0 || IsNaN(Rsi저[0]) == True Then { Rsi저[0] = RsiV; Rsi저Bar[0] = 0; } Else Rsi저Bar[0] = Rsi저Bar[0] + 1; If 고[0] <= H || 고[0] == 0 || IsNaN(고[0]) == True Then { 고[0] = H; 고Bar[0] = 0; } Else 고Bar[0] = 고Bar[0] + 1; If 저[0] >= L || 저[0] == 0 || IsNaN(저[0]) == True Then { 저[0] = L; 저Bar[0] = 0; } Else 저Bar[0] = 저Bar[0] + 1; If Rsi저[0][1] + Rsi변동폭 > RsiV[1] && Rsi저[0][1] + Rsi변동폭 <= RsiV Then 방향 = 상승; If Rsi고[0][1] - Rsi변동폭 < RsiV[1] && Rsi고[0][1] - Rsi변동폭 >= RsiV Then 방향 = 하락; If 방향[1] == 하락 && 방향 == 상승 Then { For j = 8 DownTo 1 { Rsi저[j+1] = Rsi저[j]; Rsi저Bar[j+1] = Rsi저Bar[j]; 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } Rsi저[1] = Rsi저[0]; Rsi저Bar[1] = Rsi저Bar[0]; Rsi파동선 = Rsi저[0]; Rsi저[0] = RsiV; Rsi저Bar[0] = 0; Rsi고[0] = RsiV; Rsi고Bar[0] = 0; 저[1] = 저[0]; 저Bar[1] = 저Bar[0]; 파동선 = 저[0]; 저[0] = L; 저Bar[0] = 0; 고[0] = H; 고Bar[0] = 0; } Else If 방향[1] == 상승 && 방향 == 하락 Then { For j = 8 DownTo 1 { Rsi고[j+1] = Rsi고[j]; Rsi고Bar[j+1] = Rsi고Bar[j]; 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } Rsi고[1] = Rsi고[0]; Rsi고Bar[1] = Rsi고Bar[0]; Rsi파동선 = Rsi고[0]; Rsi고[0] = RsiV; Rsi고Bar[0] = 0; Rsi저[0] = RsiV; Rsi저Bar[0] = 0; 고[1] = 고[0]; 고Bar[1] = 고Bar[0]; 파동선 = 고[0]; 고[0] = H; 고Bar[0] = 0; 저[0] = L; 저Bar[0] = 0; } Else If 방향[1] == 하락 && 방향 == 하락 Then { If Rsi고[1] < Rsi고[0] && Rsi고[0][1] - Rsi변동폭 <= RsiV[1] && Rsi고[0][1] - Rsi변동폭 > RsiV Then { Rsi고[1] = Rsi고[0]; Rsi고Bar[1] = Rsi고Bar[0]; Rsi파동선 = Rsi고[0]; Rsi고[0] = RsiV; Rsi고Bar[0] = 0; } If 고[1] < 고[0] && 고[0] > H Then { 고[1] = 고[0]; 고Bar[1] = 고Bar[0]; 파동선 = 고[0]; 고[0] = H; 고Bar[0] = 0; } } Else If 방향[1] == 상승 && 방향 == 상승 Then { If Rsi저[1] > Rsi저[0] && Rsi저[0][1] + Rsi변동폭 >= RsiV[1] && Rsi저[0][1] + Rsi변동폭 < RsiV Then { Rsi저[1] = Rsi저[0]; Rsi저Bar[1] = Rsi저Bar[0]; Rsi파동선 = Rsi저[0]; Rsi저[0] = RsiV; Rsi저Bar[0] = 0; } If 저[1] > 저[0] && 저[0] < L Then { 저[1] = 저[0]; 저Bar[1] = 저Bar[0]; 파동선 = 저[0]; 저[0] = L; 저Bar[0] = 0; } } If Rsi파동선[1] != Rsi파동선 Then Plot1(파동선,"1",Iff(방향 == 상승, blue,red)); Else If LastBarOnChart == 1 Then plot1(Iff(방향 == 상승,고[1],저[1]),"1",Iff(방향 == 상승, blue,red)); if 고[2] < 고[1] && Rsi고[2] > Rsi고[1] Then { 추세선 = (고[1]-고[2])/(고Bar[2]-고Bar[1])*고Bar[2] + 고[2]; 추세선1 = 추세선[1]; Plot3(추세선,"2",Iff(추세선 > 추세선1, red,blue)); } * 항상 고맙습니다. 수고하십시요^^
프로필 이미지
요타
2018-10-07
360
글번호 122486
강조
답변완료

문의 드립니다.

하이투자증권의 예스트레이더 사용합니다. (4101)투자주체매매종합에서 코스피 선물 외인,개인,기관의 순매수 거래량을 지표로 표시 할수 있는지요? 물론 아날로그 수치로서 실시간 볼수도 있지만 지표식으로 표현해 볼수는 없는건지 궁금합니다.
프로필 이미지
bkcah
2018-10-05
244
글번호 122484
지표

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

프로필 이미지
bestkim
2018-10-05
38
글번호 122483
지표
답변완료

수식 작성 문의 드립니다.

안녕하십니까 수식 부탁드립니다. 직접 해보고 싶었으나, 언제 완성될지 모르겠네요 일반 종목이나, ETF 30분봉에 적용 시켜볼 생각 입니다. 잘부탁 드립니다. - 매수 1. MACD 오실레이터 AND DMI 상승(AND 나 OR 둘다 테스트 해볼 생각 입니다) * 필터 : 현재 10일 평균가격이 직전 10일 평균가격보다 높을 경우 (10일선 하락 중인 경우 매수 안함) - 매도 1. MACD 오실레이터 하락 전환 -MACD 오실레이터 하락, 상승은 음에서는 길이가 짧아지고, 양에서는 길어지면 상승으로 표현 했고 반대의 경우 하락 처음 입문하는 거라 이것 저것 모르는게 너무 많습니다. 공부의 의미로 주석도 달아 주시면 진심으로 감사하겠습니다. 잘부탁 드립니다. 수고하십시오.
프로필 이미지
대한이
2018-10-05
259
글번호 122482
시스템
답변완료

지표

아래지표에서 선이 상승이면 빨강 하락이면 파랑으로 표현하고 싶습니다. Input:n(4), af(0.02), maxAF(0.2); Var:j(0),k(0),x(0),z(0),value(0),SarUpC(0),SarDnC(0),SarUpBar(0),SarDnBar(0),SarUpVal(0),SarDnVal(0), 추세선(0),지지선(0),저항선(0); Array:고[10](0),저[10](0),고Bar[10](0),저Bar[10](0); value = Sar(af,maxAF); for j = 1 to 9 { 저Bar[j] = 저Bar[j] + 1; 고Bar[j] = 고Bar[j] + 1; } SarUpBar = SarUpBar + 1; SarDnBar = SarDnBar + 1; if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then { for j = 8 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = H[n]; 고Bar[1] = n; if 저Bar[1] > 고Bar[2] then { for j = 8 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } k = n + 1; for j = n + 2 to 고Bar[2]-1 { if L[k] > L[j] then k = j; } 저[1] = L[k]; 저Bar[1] = k; } } if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then { for j = 8 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = L[n]; 저Bar[1] = n; if 고Bar[1] > 저Bar[2] then { for j = 8 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } k = n + 1; for j = n + 2 to 저Bar[2]-1 { if H[k] < H[j] then k = j; } 고[1] = H[k]; 고Bar[1] = k; } } if CrossUp(C,value) then { SarUpC = C; SarUpVal = (value[1] + value)/2; SarUpBar = 0; } if CrossDown(C,value) then { SarDnC = C; SarDnVal = (value[1] + value)/2; SarDnBar = 0; } 추세선 = 0; 지지선 = 0; 저항선 = 0; if C > value then { for j = 9 downto 1 { if SarUpBar <= 저Bar[j] then x = j; if SarUpBar <= 고Bar[j] then z = j; } 추세선 = (SarUpC - 저[x])/(저Bar[x] - SarUpBar) * 저Bar[x] + 저[x]; 지지선 = (SarUpVal - 저[x])/(저Bar[x] - SarUpBar) * 저Bar[x] + 저[x]; 저항선 = (SarUpVal - 저[x])/(저Bar[x] - SarUpBar) * 고Bar[z] + 고[z]; } if C < value then { for j = 9 downto 1 { if SarDnBar <= 저Bar[j] then x = j; if SarDnBar <= 고Bar[j] then z = j; } 추세선 = (SarDnC - 고[z])/(고Bar[z] - SarDnBar) * 고Bar[z] + 고[z]; 지지선 = (SarDnVal - 고[z])/(고Bar[z] - SarDnBar) * 고Bar[z] + 고[z]; 저항선 = (SarDnVal - 고[z])/(고Bar[z] - SarDnBar) * 저Bar[x] + 저[x]; } if 추세선 > 0 then { plot1(추세선,"추세선",Green); plot2(지지선,"지지선",Red); plot3(저항선,"저항선",Blue); }
프로필 이미지
야크
2018-10-05
259
글번호 122481
지표
답변완료

함수요청

안녕하세요? 함수요청드립니다. 써머타임을 함수로 표현하고 싶습니다. if summer == true then if stime == 223000 then {진입조건} if summer == false then if stime == 233000 then {진입조건} 를 포함하여 전략을 작성하고 싶습니다.
프로필 이미지
흰둥이아빠
2018-10-05
207
글번호 122477
시스템
답변완료

문의드립니다.

도움 감사드립니다. 아래는 안되는 부분입니다.수정부탁드립니다. 1. 당일 누적수익이 70틱 이상이면 당일 거래 종료 - 동작안함 2. 거래종료 청산 시간을 16:30으로 했는데 17:00 이후에 청산이 됩니다. 차트의 시간은 현지(미국) 시간을 사용중입니다. input : 목표청산1(0.4), 손절(40); ########### input : 시작시간(181000),종료시간(163000); Input : 당일누적수익(70),당일누적손실(70); var : N1(0),dayPl(0),당일수익(0),당일손실(0),Xcond(false); ########### input: b_time1(000001),e_time1(030000), stoK_p11(50), stoK_p12(50), stoK_p13(10), ma_p11(10),ma_p12(5),ma_p13(15),ma_p14(250), b_time2(030001),e_time2(180000), stoK_p21(50),stoK_p22(50),stoK_p23(10), ma_p21(25),ma_p22(5),ma_p23(15),ma_p24(127), b_time3(180001),e_time3(240000), stoK_p31(50),stoK_p32(50),stoK_p33(10), ma_p31(25),ma_p32(5),ma_p33(15),ma_p34(102), var : BH(0),SL(0),para(0),HE(0),LE(0); Var:stoK(0),stoD(0),TRIXv(0),TRIXsig(0); var : StochasticsKS1(0),StochasticsDS1(0),HV1(0),Lv1(0),FK1(0); var : StochasticsKS2(0),StochasticsDS2(0),HV2(0),Lv2(0),FK2(0); var : StochasticsKS3(0),StochasticsDS3(0),HV3(0),Lv3(0),FK3(0); LV1 = Lowest(L, stoK_p11); HV1 = Highest(H, stoK_p11); FK1 = (Close - LV1) / (HV1 - LV1) * 100; StochasticsKS1 = ma(FK1,stoK_p12); StochasticsDS1 = ma(StochasticsKS1,stoK_p13); LV2 = Lowest(L, stoK_p21); HV2 = Highest(H, stoK_p21); FK2 = (Close - LV2) / (HV2 - LV2) * 100; StochasticsKS2 = ma(FK2,stoK_p22); StochasticsDS2 = ma(StochasticsKS2,stoK_p23); LV3 = Lowest(L, stoK_p31); HV3 = Highest(H, stoK_p31); FK3 = (Close - LV3) / (HV3 - LV3) * 100; StochasticsKS3 = ma(FK3,stoK_p32); StochasticsDS3 = ma(StochasticsKS3,stoK_p33); ############## if stime == 시작시간 or (stime > 시작시간 and stime[1] < 시작시간) Then{ Xcond = false; N1 = NetProfit; } 당일수익 = PriceScale*당일누적수익; 당일손실 = PriceScale*당일누적손실; daypl = NetProfit-N1; if TotalTrades > TotalTrades[1] and (IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then Xcond = true; ################ If b_time1 <= Time and Time <= e_time1 and Xcond == false Then { stoK = StochasticsKS1; stoD = StochasticsDS1; If countif(ma(C,ma_p11)[1] < ma(C,ma_p11),1) == 1 and ma(C,ma_p12) > ma(C,ma_p13) and countif(ma(C,ma_p14)[1] < ma(C,ma_p14),1) == 1 Then { If !((ExitName(1) == "StopProfitTarget" ) and (EntryName(1) == "매수1" or EntryName(1) == "매수2" or EntryName(1) == "매수3") and MarketPosition == 0) Then Buy("매수1",AtMarket); } If countif(ma(C,ma_p11)[1] > ma(C,ma_p11),1) == 1 and ma(C,ma_p12) < ma(C,ma_p13) and countif(ma(C,ma_p14)[1] > ma(C,ma_p14),1) == 1 Then { If !((ExitName(1) == "StopProfitTarget" ) and (EntryName(1) == "매도1" or EntryName(1) == "매도2" or EntryName(1) == "매도3") and MarketPosition == 0) Then Sell("매도1",AtMarket); } } If b_time2 <= Time and Time <= e_time2 and Xcond == false Then { stoK = StochasticsKS2; stoD = StochasticsDS2; If countif(ma(C,ma_p21)[1] < ma(C,ma_p21),1) == 1 and ma(C,ma_p22) > ma(C,ma_p23) and countif(ma(C,ma_p24)[1] < ma(C,ma_p24),1) == 1 Then { If !((ExitName(1) == "StopProfitTarget" ) and (EntryName(1) == "매수1" or EntryName(1) == "매수2" or EntryName(1) == "매수3") and MarketPosition == 0) Then Buy("매수2",AtMarket); } If countif(ma(C,ma_p21)[1] > ma(C,ma_p21),1) == 1 and ma(C,ma_p22) < ma(C,ma_p23) and countif(ma(C,ma_p24)[1] > ma(C,ma_p24),1) == 1 Then { If !((ExitName(1) == "StopProfitTarget" ) and (EntryName(1) == "매도1" or EntryName(1) == "매도2" or EntryName(1) == "매도3") and MarketPosition == 0) Then Sell("매도2",AtMarket); } } If b_time3 <= Time and Time <= e_time3 and Xcond == false Then { stoK = StochasticsKS3; stoD = StochasticsDS3; If countif(ma(C,ma_p31)[1] < ma(C,ma_p31),1) == 1 and ma(C,ma_p32) > ma(C,ma_p33) and countif(ma(C,ma_p34)[1] < ma(C,ma_p34),1) == 1 Then { If !((ExitName(1) == "StopProfitTarget" ) and (EntryName(1) == "매수1" or EntryName(1) == "매수2" or EntryName(1) == "매수3") and MarketPosition == 0) Then Buy("매수3",AtMarket); } If countif(ma(C,ma_p31)[1] > ma(C,ma_p31),1) == 1 and ma(C,ma_p32) < ma(C,ma_p33) and countif(ma(C,ma_p34)[1] > ma(C,ma_p34),1) == 1 Then { If !((ExitName(1) == "StopProfitTarget" ) and (EntryName(1) == "매도1" or EntryName(1) == "매도2" or EntryName(1) == "매도3") and MarketPosition == 0) Then Sell("매도3",AtMarket); } } if MarketPosition == 1 Then{ BH = highest(H,BarsSinceEntry); if MaxEntries == 1 Then HE = LatestEntryPrice(0); if MaxEntries >= 2 and LatestEntryPrice(0) > HE Then HE = LatestEntryPrice(0); SetStopProfittarget(목표청산1); ExitLong("B손절",AtStop,HE-PriceScale*손절); } if MarketPosition == -1 Then{ SL = Lowest(L,BarsSinceEntry); if MaxEntries == 1 Then LE = LatestEntryPrice(0); if MaxEntries >= 2 and LatestEntryPrice(0) < LE Then LE = LatestEntryPrice(0); SetStopProfittarget(목표청산1); ExitShort("S손절",AtStop,LE+PriceScale*손절); } if MarketPosition == 1 then{ ExitLong("dbp",atlimit,EntryPrice+((당일누적수익-daypl)/CurrentContracts)); ExitLong("dbl",AtStop,EntryPrice-((당일누적손실+daypl)/CurrentContracts)); } if MarketPosition == -1 then{ ExitShort("dsp",atlimit,EntryPrice-((당일누적수익-daypl)/CurrentContracts)); ExitShort("dsl",AtStop,EntryPrice+((당일누적손실+daypl)/CurrentContracts)); } if 종료시간 <= sTime and sTime < 시작시간 then { if MarketPosition == 1 then{ ExitLong("B장종료"); } if MarketPosition == -1 then{ ExitShort("S장종료"); } }
프로필 이미지
라떼처럼
2018-10-05
279
글번호 122468
시스템
답변완료

반대포지션 확인

* 매매시 손실이 20틱 이상이면 바로 반대 포지션 매매할수 있도록 부탁 드립니다. 즉 손실이 커지면 20틱에서 반대로 포지션 취하고 싶습니다. * Input : Period(20), Percent(0.2); var : center(0),UPline(0),DNline(0); center = ma(C, Period); UPline = EnvelopeUp(Period, Percent); Dnline = EnvelopeDown(Period, Percent); VAR1 = Dnline+(UPline-Dnline)*0.9; if crossup(c,Dnline) Then Buy("매수"); if CrossDown(c,UPline) Then sell("매도"); SetStopProfittarget(PriceScale*60,PointStop); SetStopLoss(PriceScale*30,PointStop); * 고맙 습니다.
프로필 이미지
요타
2018-10-05
210
글번호 122467
시스템