커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

부탁드립니다.

아래수식을 반대로 부탁드립니다. 매수해야할때를 매도할때로 청산도요 반대매매되도록 부탁드립니다. var : T(0); var1 = ma(c,5); var2 = ma(C,70); if var2[1]>var2[0] and OPEN[0]>var1 and OPEN[0]>CLOSE[0] Then T = -1; SELL(); if var2[1]<var2[0] and OPEN[0]<var1 and OPEN[0]<CLOSE[0] Then T = 1; if MarketPosition == 0 and T == -1 and countif(T == T[1],3) == 3 Then sell(); if MarketPosition == 0 and T == 1 and countif(T == T[1],3) == 3 Then buy(); SetStopProfittarget(PriceScale*10,PointStop); SetStopLoss(PriceScale*19,PointStop);
프로필 이미지
매일상승
2015-07-04
126
글번호 88002
시스템
답변완료

라인설정

수고가많으십니다.라인설정수식과 설정하는방법좀알려주세요. 전일시가. 당일시가. 전일중심가. 당일중심가. 전일고가. 전일저가. 전일종가. 라인채우기방법도 같이알려주시면감사합니다.(예.전일시가=당일시가)꾸벅...
프로필 이미지
보인다
2015-07-04
144
글번호 88001
지표
답변완료

수식 부탁드립니다.

안녕하세요. 도움을 요청 하옵니다. 아래의 조건을 만족하는 수식을 만들어 주셨음 좋겠습니다. -장운영시간: 07:00 ~ 익일 05:55분 까지 이며, 05:55분에 보유 물량 전량 강제 정리후 모든 진입금지. -이익청산 목표가는 매수 또는 매도 진입가 대비 20틱이며 목표가 도달시 강제청산 -최초의 거래는 현재가가 시가보다 높으면 매수, 낮으면 매도 -최초 매수 또는 매도 후 목표가 도달하여 강제 청산시 동일봉 재진입 금지하며, -최초 매수 또는 매도 후 목표가 청산후 재진입은 아래의 조건이 충족 될때만 매수 또는 매도 진입 1. 최초 매수에서 목표가 강제 청산일 경우 현재가가 강제 청산가 보다 10틱 아래이면서, 현재가가 시가보다 위에 있을때 재 매수. 2. 최초 매도에서 목표가 강제 청산일 경우 현재가가 강제 청산가 보다 10틱 위에이며, 현재가가 시가보다 아래에 있을때 재 매도. -최초 매수 또는 매도 거래 후 모든 진입은 위 매수 또는 매도 조건이 충족 될때만 진입하며, -현재가가 시가아래에서 시가을 돌파 할 경우 또는 현재가가 시가 위에서 시가 아래로 돌파 할 경우는 최초의 매수조건을 따라가며, 그 이후의 매수조건은 위의 2가지 조건을 충족 할 경우에만 진입. 고맙습니다.
프로필 이미지
태양의제국
2015-07-04
130
글번호 88000
시스템
답변완료

수식 변경요청 드립니다.

수식1, 수식2 변경요청 드립니다. 수식1 아래 수식에서 2번째 신호발생봉 종가기준 -> 손실 -1PT 이상 발생시 당일손실 제한적용으로 강제청산 -> 수익 +1PT 이상 발생시 [수익보전 추적청산 수식]으로 강제청산(진입횟수 추가적용) => [수익보전 추적청산 수식] -> +1PT 이상 수익이 발생 후, 수익이 30% 감소시 강제청산 수정요청 드립니다. input :N(2),당일손실(-1.5); var : cnt(0),BCount(0),SCount(0); var : NP(0),PreNP(0),DayPL(0); NP = NetProfit; if date != date[1] Then preNP = NP[1]; dayPL = NP-PreNP; BCount = 0 ; SCount = 0 ; for cnt = 0 to 10 { if EntryDate(cnt) == sdate and MarketPosition(cnt) == 1 then BCount = BCount + 1; if EntryDate(cnt) == sdate and MarketPosition(cnt) == -1 then SCount = SCount + 1; } //------------------------------------------------------------------------------- if MarketPosition == 1 Then{ if BCount+SCount == 1 Then ExitLong("당일손실제한bx3",AtStop,EntryPrice+당일손실-dayPL); if BCount+SCount == 2 Then { if PositionProfit(1) > 0 Then ExitLong("당일손실제한bx31",AtStop,EntryPrice-당일손실); Else ExitLong("당일손실제한bx32",AtStop,EntryPrice+당일손실-dayPL); } } if MarketPosition == -1 Then{ if BCount+SCount == 1 then ExitShort("당일손실제한sx3",AtStop,EntryPrice-당일손실+daypl ); if BCount+SCount == 2 Then { if PositionProfit(1) > 0 Then ExitShort("당일손실제한sx31",AtStop,EntryPrice+당일손실); Else ExitShort("당일손실제한sx32",AtStop,EntryPrice-당일손실+daypl ); } } //----------------------------------------------------------------------------------------------------- if MarketPosition == -1 and crossup(H,EntryPrice+0.5) and BCount+SCount < N and dayPL > 당일손실 Then buy("1BX"); if MarketPosition == 1 and CrossDown(L,EntryPrice-0.5) and BCount+SCount < N and dayPL > 당일손실 Then sell("1SX"); //---------------------------------------------------------------------------------------------------- Value1 = Highest(H, BarsSinceEntry-100); if BCount+SCount < N and daypl > 당일손실 Then Buy("매수추적청산",AtStop, Value1-ATR(15)*5); Value2 = Lowest(L, BarsSinceEntry-100); if BCount+SCount < N and daypl > 당일손실 Then sell("매도추적청산",AtStop, Value2-ATR(15)*5); //---------------------------------------------------- 수식2 키움수식 예스수식으로 변경요청 드립니다. #1 매수 a=MACD(shortPeriod,longPeriod)>= eavg(MACD(shortPeriod,longPeriod),sigPeriod), CrossUp(H,BBandsUp(Period1,D1)) and (L(3)<L(2)<L(1)); d=Crossup(Trix(period),eavg(Trix(period),sigperiod10)); if(time >= 090000 && time <= 090130,CrossUp(valuewhen(1,date(1) != date,C),PreDayClose()),a or d) #2 매도 a=CrossDown((highest(H,shortPeriod)+lowest(L,shortPeriod))/2,(highest(H,midPeriod)+lowest(L,midPeriod))/2) and (H(3)<H(2)<H(1)), MACD(shortPeriod,longPeriod) < eavg(MACD(shortPeriod,longPeriod),sigPeriod) and CrossDown(L,BBandsDown(Period1,D1)); d=CrossDown(Trix(period),eavg(Trix(period),sigperiod10)); if(time >= 090000 && time <= 090130,CrossDown(valuewhen(1,date(1) != date,C),PreDayClose()),a or d) // 이하생략 감사합니다.
프로필 이미지
dandy
2015-07-05
145
글번호 87999
시스템
답변완료

수식문의

안녕하세요 콜옵션 265의 델타값이 0.47이라할때 선물1포인트가 움직일때(오르거나 내릴때) 0.47정도가격이상승한다고 가정한다고했을때에 선물가격을 알수있는식 구현이가능합니까
프로필 이미지
백진강
2015-07-04
120
글번호 87998
시스템
답변완료

그림과 같이 화면에 음영으로 강조를 표시하는 방법

수고많으십니다. 첨부파일과 같이 스톡캐스틱을 예로 매도권 매수권 영역을 차트 화면과 같이 붉은색 파란색 음영으로 처리 하는 방법이 있는지요
프로필 이미지
글사랑터
2015-07-04
281
글번호 87997
강조
답변완료

시스템 수식 수정 부탁드립니다.

아래의 수식을 수정 부탁드립니다. 기준봉의 날짜 지정 매수조건 - 1차 매수: 기준봉의 시가와 종가사이에서 시가(기준봉이 음봉이면 종가)대비 75% - 2차 매수: 기준봉의 시가와 종가사이에서 시가(기준봉이 음봉이면 종가)대비 50% - 3차 매수: 기준봉의 시가와 종가사이에서 시가(기준봉이 음봉이면 종가)대비 25% (즉, 만약 기준봉이 음봉인 경우는 역순으로 적용) 매도조건 - 기준봉의 종가(음봉인 경우는 시가)보다 높은 가격에서 전일저가 -1% - 상한가 도달시 전량매도 손절조건 - 기준봉의 저가 -1% 이탈시 손절 - 아 래 - input : 기준봉날짜 (20150701); var : 하한가(0), DnLimit(0); var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0); var : 상한가(0), UpLimit(0); var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0); if date >= 19981207 then { if date < 20050328 && CodeCategory() == 2 then DnLimit = (BP * 0.12); Else if date >= 20050328 and date < 20150615 Then DnLimit = (BP * 0.15); Else DnLimit = (BP * 0.30); if CodeCategory() == 2 then { if date >= 20030721 then { dn1 = int(DnLimit/100)*100; dn2 = int(DnLimit/100)*100; dn3 = int(DnLimit/100)*100; dn4 = int(DnLimit/50)*50; dn5 = int(DnLimit/10)*10; dn6 = int(DnLimit/5)*5; dn7 = int(DnLimit/1)*1; } else { dn1 = int(DnLimit/1000)*1000; dn2 = int(DnLimit/500)*500; dn3 = int(DnLimit/100)*100; dn4 = int(DnLimit/50)*50; dn5 = int(DnLimit/10)*10; dn6 = int(DnLimit/10)*10; dn7 = int(DnLimit/1)*1; } } Else { dn1 = int(DnLimit/1000)*1000; dn2 = int(DnLimit/500)*500; dn3 = int(DnLimit/100)*100; dn4 = int(DnLimit/50)*50; dn5 = int(DnLimit/10)*10; dn6 = int(DnLimit/5)*5; dn7 = int(DnLimit/1)*1; } if CodeCategory() == 1 or CodeCategory() == 2 then { if sdate < 20101004 Then{ If BP >= 500000 Then 하한가 = BP-dn1; Else If BP >= 100000 Then 하한가 = BP-dn2; Else If BP >= 50000 Then 하한가 = BP-dn3; Else If BP >= 10000 Then 하한가 = BP-dn4; Else If BP >= 5000 Then 하한가 = BP-dn5; Else If BP >= 1000 Then 하한가 = BP-dn6; Else 하한가 = BP-dn6; } else{ If BP >= 500000 Then 하한가 = BP-dn1; Else If BP >= 100000 Then 하한가 = BP-dn2; Else If BP >= 50000 Then 하한가 = BP-dn3; Else If BP >= 10000 Then 하한가 = BP-dn4; Else If BP >= 5000 Then 하한가 = BP-dn5; Else If BP >= 1000 Then 하한가 = BP-dn6; Else 하한가 = BP-dn7; } } else if CodeCategory() == 8 or CodeCategory() == 9 then { 하한가 = BP-dn6; } } if date >= 19981207 then { if date < 20050328 && CodeCategory() == 2 then UpLimit = (BP[0] * 1.12); Else if date >= 20050328 and date < 20150615 Then UpLimit = (BP[0] * 1.15); Else UpLimit = (BP[0] * 1.30); if CodeCategory() == 2 then { if date >= 20030721 then { up1 = int(UpLimit/100+0.00001)*100; up2 = int(UpLimit/100+0.00001)*100; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/10+0.00001)*10; up7 = int(UpLimit/1+0.00001)*1; } } Else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } if CodeCategory() == 1 || CodeCategory() == 2 then { if sdate < 20101004 Then{ If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up6); } Else{ If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up7); } } else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF 상한가 = up6; } } if sdate == 기준봉날짜 Then{ value1 = abs(DayClose-dayopen); if DayClose > DayOpen Then{ var1 = dayopen+value1*0.75; var2 = dayopen+value1*0.50; var3 = dayopen+value1*0.25; } Else{ var1 = dayopen-value1*0.75; var2 = dayopen-value1*0.50; var3 = dayopen-value1*0.25; } } if sdate > 기준봉날짜 Then{ #var1(75%)터치시 매수 if Condition1 == false and H < var1 Then Buy("매수11",AtStop,var1); if Condition1 == false and L > var1 Then Buy("매수12",Atlimit,var1); #var2(50%)터치시 매수 MessageLog("%s",Condition2 == false and H < var2); if Condition2 == false and H < var2 Then Buy("매수21",AtStop,var2); if Condition2 == false and L > var2 Then Buy("매수22",Atlimit,var2); #var3(25%)터치시 매수 if Condition3 == false and H < var3 Then Buy("매수31",AtStop,var3); if Condition3 == false and L > var3 Then Buy("매수32",Atlimit,var3); } if MarketPosition == 1 Then{ if LatestEntryName(0) == "매수12" or LatestEntryName(0) == "매수12" Then Condition1 = true; if LatestEntryName(0) == "매수21" or LatestEntryName(0) == "매수22" Then Condition2 = true; if LatestEntryName(0) == "매수31" or LatestEntryName(0) == "매수32" Then Condition3 = true; Exitlong("매도",AtStop,daylow(1)*0.99); } Else{ Condition1 = false; Condition2 = false; Condition3 = false; } ExitLong("상한가매도",Atlimit,상한가);
프로필 이미지
승부사1
2015-07-05
136
글번호 87996
시스템
답변완료

42801 재질문

안녕하세요 42801에서 잘 이해되지 않는 부분 문의드립니다 1-1. 청산 : 5-20 이평데드가 발생한 다음날 시가 ==> ExitLong("bx",AtMarket); 이 부분이 이평데드가 어떻게 적용되는지 잘이해가 안되네요 ==> 1-1. 이것 하나만 예로들어 메세지로그(?)로 신호발생을 보여주시면 감사하겠습니다 (신호후 당일종가, 다음날시가 이부분을 상세하게 확인하고 싶습니다) ======== 43801 답변 주식 선물의 경우 거래소에서 증거금율 확인하시기 바랍니다. 아래는 18%로 지정되었습니다. 1-1. input : 금액(100000000); var1 = ma(c,5); var2 = ma(c,20); if crossup(var1,var2) Then{ buy("b",OnClose,def,floor(금액/C)); } ExitLong("bx",AtMarket); 1-2. input : 금액(100000000); var1 = ma(c,5); var2 = ma(c,20); if crossup(var1,var2) Then{ buy("b",Atmarket,def,floor(금액/C)); } ExitLong("bx"); 2-1. input : 금액(100000000); var1 = ma(c,5); var2 = ma(c,20); var3 = floor(금액/(C*10*0.18)); if crossup(var1,var2) Then{ buy("b",OnClose,def,var3); } ExitLong("bx",AtMarket); 2-2 input : 금액(100000000); var1 = ma(c,5); var2 = ma(c,20); var3 = floor(금액/(C*10*0.18)); if crossup(var1,var2) Then{ buy("b",AtMarket,def,var3); } ExitLong("bx"); 3-1 분봉에서 시초가 매수는 전말 마지막봉의 시간을 지정해야 합니다. 사용하시는 주기에서 마지막봉 시간을 plot1(stime); 위 지표로 확인하고 매도식에 지정해 주셔야 합니다. 아래는 15시 15분으로 되어 있습니다. input : 금액(100000000); var1 = ma(c,5); var2 = ma(c,20); var3 = floor(금액/(C*10*0.18)); if crossup(var1,var2) Then{ value1 = stime; value2 = sdate; } if CrossDown(var1,var2) Then{ value3 = stime; value4 = sdate; } if var1 > var2 and value2 == sdate And stime == 130000 and value1 < 120000 Then buy("b1",OnClose,def,var3); if var1 > var2 and value2 == sdate And stime == 143000 and (value1 >= 120000 and value1 < 130000) Then buy("b2",OnClose,def,var3); if var1 > var2 and value2 == sdate And stime == 150000 and value1 >= 130000 Then buy("b3",OnClose,def,var3); if stime == 151500 and var1 < var2 and sdate == value4 Then sell("s",AtMarket); === 43801 질문 일봉기준입니다 1-1. 주식 / 투자 1억원 매수 : 5-20 이평골든이 발생한 당일 종가 청산 : 5-20 이평데드가 발생한 다음날 시가 1-2. 주식 / 투자 1억원 매수 : 5-20 이평골든이 발생한 다음날 시가 청산 : 5-20 이평데드가 발생한 당일 종가 2-1. 주식선물 / 투자 1억원 매수 : 5-20 이평골든이 발생한 당일 종가 매도 : 5-20 이평데드가 발생한 다음날 시가 2-2. 주식선물 / 투자 1억원 매수 : 5-20 이평골든이 발생한 다음날 시가 매도 : 5-20 이평데드가 발생한 당일 종가 분봉일 경우입니다. 3-1. 주식선물 / 투자 1억원 매수 : 5-20 이평골든이 12이전 발생하면 13시에 매수 5-20 이평골든이 12~13시 발생하면 14시30분에 매수 5-20 이평골든이 13시이후 발생하면 당일 종가에 매수 매도 : 5-20 이평데드가 발생한 다음날 시가 미리 감사드립니다
프로필 이미지
미수예스
2015-07-03
129
글번호 87995
시스템
답변완료

질문 드립니다.

답변하여 주신 아래의 수식을 일봉에 적용하면 매매가 전혀 일어나지 않습니다. 어디가 잘못된 것인지 궁금합니다. var : entry(true); var1 = ma(c,5); var2 = ma(c,20); var3 = highest(C,50); var4 = Lowest(C,50); if entry == true and crossup(var1,var2) Then{ if MarketPosition == -1 and C > EntryPrice Then{ ExitShort(); entry = false; } Else buy(); } if entry == false and CrossDown(var1,var2) Then{ if MarketPosition == 1 and C < EntryPrice Then{ ExitLong(); entry = false; } Else sell(); } if MarketPosition == 0 and entry == false Then{ if crossup(c,var3[BarsSinceExit(1)]*1.02) then{ buy(); entry = true; } if CrossDown(c,var4[BarsSinceExit(1)]*0.98) then{ sell(); entry = true; } } 즐거운 하루되세요 > 앙두 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다. > 아래의 조건을 만족시키는 수식이 궁금합니다. 첫번째, 5 이평선과 20 이평선이 교차되면 첫 진입,, 두번째, 첫 진입 이후 5 이평선과 20 이평선 교차시 마다 매수(도) 진입하되,, 세번째, 직전 진입에서 손실이 발생하면, 이전 50개 봉 종가의 최고점의 102%, 최저점의 98%를 상(하)향 돌파하면 매수(도) 진입으로 전환 네번째, 전환이후에는 다시 5 이평선과 20 이평선 교차시 마다 매수(도) 진입 이후에는 상기 두번째 부터 네번째 까지 계속하여 반복
프로필 이미지
앙두
2015-07-03
129
글번호 87994
시스템