커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

할수있따 님에 의해서 삭제되었습니다.

프로필 이미지
할수있따
2016-01-08
2
글번호 94237
시스템
답변완료

부탁드립니다

수고하십니다 야간장 시가.고가.저가.종가 선 수식부탁드립니다
프로필 이미지
파생돌이
2016-01-08
135
글번호 94236
지표
답변완료

45833번 답 주신거에 추가 질문 생겼습니다

만들어주신 수식중에 if crossup(H,var2) or CrossDown(L,var2) 에서 H,L 로 하는게 맞는지요? C로 해야되는거 아닌가 확인부탁드립니다 감사합니다
프로필 이미지
지혜샘
2016-01-08
114
글번호 94229
지표
답변완료

지표식 하나 부탁드립니다.

항상 고맙고 미안합니다. 이평선을 기준으로 한 이격도 지표가 아닌 일목균형표상 구름층의 선행스팬1 대비 이격도 지표식을 부탁드립니다.즉,현재종가가 선행스팬1과 비교시 이격도가 얼마인지를 보여주는 지표식을 부탁드리는 것입니다.
프로필 이미지
결사준수
2016-01-08
163
글번호 94226
지표
답변완료

문의드립니다

var : Hv(0),MM(0); if date != date[1] Then{ Hv = V; MM = (H+L+C)/3; } if V > HV Then{ Hv = V; MM = (H+L+C)/3; } plot1(MM); 위 식의 만들어주신것입니다 감사드립니다 추가하고십은것이 있습니다 위식은 당일최고거래량 봉의 고저종입니다 최고가 아닌 두번째로 많은거래량의 고+저+종/3 으로 부탁드립니다
프로필 이미지
파파리리
2016-01-08
173
글번호 94223
지표
답변완료

문의드립니다.

안녕하세요. 이평선에 글자를 넣을 수 있는지요? 20이평, 60이평 120이평을 넣고, 각 선에 20선, 60선, 120선 이라고 글자가 표시되게 할 수 있을까요? 글자위치는 현재캔들 기준 20봉전 이평선 위치에 표시되고, 글자 색깔도 서로 다르게 표시되게 하는 수식이 궁금합니다.
프로필 이미지
하루만
2016-01-08
131
글번호 94222
지표
답변완료

수식요청드립니다.

안녕하세요. 아래 당일손실제한 무포지션 후 재진입조건에 시간적용만 추가요청 드립니다. -> 당일손실제한 청산 후 1시간15분30초 부터 ~ 2시간20분50초 까지 재진입 손절 익절 청산 수식 적용으로 수정요청 드립니다. 감사합니다. input : N(1),PN(2),당일손실(1.0),i증감(0.3),진입수량(1); var : cnt(0),BCount(0),SCount(0); var : NP(0),PreNP(0),DayPL(0),loss(0),v1(0); var : mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0); var : Bxcond(false),SxCond(false); var : Xcond(false); var : TT(0),KK(0),DD(0); NP = NetProfit; if date != date[1] Then{ preNP = NP[1]; Condition1 = false; v1 = 0; Xcond = false; } 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 Condition1 == false and TotalTrades > TotalTrades[1] Then{ Condition1 = true; if PositionProfit(1) > 0 Then v1 = PositionProfit(1); } //------------------------------------------------------------------------- //추가진입인 BB가 아닐때만 발동 if MarketPosition == 1 and IsEntryName("BB") == false Then{ ExitLong("당일손실제한bx3",AtStop,avgEntryPrice-(당일손실+(dayPL-v1))/CurrentContracts); } //추가진입인 SS가 아닐때만 발동 if MarketPosition == -1 and IsEntryName("SS") == false Then{ ExitShort("당일손실제한sx3",AtStop,avgEntryPrice+(당일손실+(dayPL-v1))/CurrentContracts); } //------------------------------------------------------------------------------------------------------ #피라미딩 if MarketPosition == 1 and Bxcond == false and Xcond == false Then Buy("PBB",atlimit,LatestEntryPrice(0)+i증감,진입수량); if MarketPosition == -1 and Sxcond == false and XCond == false Then sell("PSS",atlimit,LatestEntryPrice(0)-i증감,진입수량); //----------------------------------------------------------------------------------------------------- #당일손실제한 청산이 발생하면 Xcond는 true로 변경 if MarketPosition == 0 and TotalTrades > TotalTrades[1] and (IsExitName("당일손실제한sx3",1) == true or IsExitName("당일손실제한bx3",1) == true) Then Xcond = true; #추가진입 #무포지션이고 Xcond가 true이고 #직전청산이 당일손실제한일때만 발생 if MarketPosition == 0 and Xcond == true and (IsExitName("당일손실제한sx3",1) == true or IsExitName("당일손실제한bx3",1) == true) Then{ if Crossup(ma(c,10),ma(C,20)) Then Buy("BB",AtMarket); if CrossDown(ma(C,10),ma(C,20)) Then Sell("SS",AtMarket); } #BB진입에 대한 청산 if MarketPosition == 1 and IsEntryName("BB") == true Then{ ExitLong("BL1",AtStop,avgEntryPrice-0.5); ExitLong("BP1",AtLimit,avgEntryPrice+1.0); } #SS진입에 대한 청산 if MarketPosition == -1 and IsEntryName("SS") == true Then{ ExitShort("SL1",AtStop,avgEntryPrice+0.5); ExitShort("SP1",AtLimit,avgEntryPrice-1.0); } //------------------------------------------------------------------------------------------------------
프로필 이미지
dandy
2016-01-08
137
글번호 94219
시스템
답변완료

수식 검토 부탁드립니다

항상 도움을 주셔서 감사를 드립니다. 얼마전 아래와 같이 수식을 만들어 주셨는데.. 제가 원했던 거하고 수식이 맞지가 않는 것 같습니다 기본적으로 첫번째 매수는 전일 시가와 종가의 평균가격을 산정하고 그 평균가격보다 2% 높은 가격을 1차 매수, 평균가격을 2차매수, 평균가격보다 2% 낮은 가격대가 3차매수인데.. 당일 전일 종가보다 겝상으로 시작해서 1차 매수가격 이하로 진입하면 1차 매수가 되게 할려면 buy("b1",AtStop,var1*1.02,Floor(금액/C)); 에서 AtStop이 아니라 atlimit이 사용되야 하지 않나 싶습니다. 그러니까 첫번재 전제조건은 전일 종가보다 겝상승으로 시작해야 하며, 겝상승이후에 밀려서 첫번째 가격조건 이하로 진입하면 즉시 매수하는 것입니다.(봉완성 아님) 부탁드립니다 ^^ ======================================================== 안녕하세요 예스스탁입니다. 기준일 이후로 신호가 발생하게 작성했습니다. 기준일만 발생하고자 하시면 sdate == 기준일 로 변경하시면 됩니다. 진입을 누적하므로 적용시 시스템 트레이딩 설정창에서 피라미딩을 다른 진입신호만 허용으로 설정하고 적용하시면 됩니다. input : 금액(5000000),기준일(20151218); var1 = (DayOpen(1)+DayClose(1))/2; if sdate >= 기준일 then{ if MarketPosition == 0 and NextBarOpen >= var1*1.02 Then buy("b1",AtStop,var1*1.02,Floor(금액/C)); if MarketPosition == 1 and MaxEntries < 3 Then{ if NextBarOpen >= var1 Then buy("b2",AtStop,var1,Floor(금액/C)); if NextBarOpen >= var1*0.98 Then buy("b3",AtStop,var1*0.98,Floor(금액/C)); if MaxEntries == 1 Then ExitLong("BP1",atlimit,AvgEntryPrice*1.02); if MaxEntries == 2 Then ExitLong("BP2",atlimit,AvgEntryPrice*1.015); if MaxEntries == 3 Then{ ExitLong("BP3",atlimit,AvgEntryPrice*1.01); ExitLong("Bx",AtStop,LatestEntryPrice(0)*0.97); } } }
프로필 이미지
뽄때
2016-01-08
143
글번호 94218
시스템
답변완료

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

안녕하세요.. 새해 복 많이 받으세요. 아래 시스템식에서 1차매수의 경우와 동일하게 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수하도록 다음과 같이 수정했는데 신호가 "2차매수2"로 발생되어야 하는데 그림과 같이 제대로 나오지 않습니다. ------ 2차매수에 관한 일부 식 시작 ------------- # 다음봉에서 2차매수가격을 터치하면 신호발생(즉 가격이 하락해서 첫 터치가 발생하면 매수) # 시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(2차매수1) # 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(2차매수2) if stime <= 145500 Then { if NextBarOpen > var1-value*(매수위치2차+1) Then buy("2차매수1",atlimit,var1-value*(매수위치2차+1),Floor((전략매수금액*10000*(매수비중2차/100))/C)); Else buy("2차매수2",AtMarket,def,Floor((전략매수금액*10000*(매수비중2차/100))/C)); } ------ 2차매수에 관한 일부 식 끝 ------------- 검토하시고 수정 부탁드립니다. 전체 시스템식은 아래와 같습니다. ------------------- 전체 시스템식 ------------------- ## 일봉상 일목균형표의 120일 기준선을 참조하여 3분봉에서 매매함. ## 외부변수 설정 ## input : 전략시작일자(20160105), 전략시작시간(090000), 전략매수금액(1000); input : 매수위치1차(2), 매수위치2차(3); input : 매도위치1차(1.5), 매도위치2차(2); input : 매수비중1차(50), 매수비중2차(50); input : 매도비중1차(50), 매도비중2차(50); input : 전략진입횟수(1); input : 최종손절위치(10),최종익절위치(1); input : Period(120); ## 내부변수 설정 ## var : CL(0),V0.5(0),V1(0),V2(0),V3(0); var : mid(0),V4(0),V5(0),V6(0),V7(0),V8(0),V9(0); var : diff(0),TF(0),cnt(0),value(0); var : entrycond1(false),entrycond2(false),entrycond3(false); # Period 전기간 최고가의 값이 있으면 if dayhigh(Period) > 0 Then { var1 = dayhigh(0); # 당일최고가(Period 기간동안 최고가를 계산하기 위한 초기값) var2 = daylow(0); # 당일최저가(Period 기간동안 최고가를 계산하기 위한 초기값) var11 = dayhigh(1); # 전일최고가(전일기준 Period 기간동안 최고가를 계산하기 위한 초기값) var12 = daylow(1); # 전일최저가(전일기준 Period 기간동안 최고가를 계산하기 위한 초기값) # 0일부터 Period전일까지 최고가와 최저가를 불러와 # Period 기간동안 최고가/최저가를 계산 # 전일기준은 0을 제외하고 Period 기간이므로 +1 for cnt = 0 to Period-1 { if DayHigh(cnt) > var1 Then var1 = DayHigh(cnt); if dayhigh(cnt+1) > var11 Then var11 = dayhigh(cnt+1); if daylow(cnt) < var2 Then var2 = daylow(cnt); if daylow(cnt+1) < var21 Then var21 = daylow(cnt+1); } # Period기간동알 최고가가 전일보다 상승하면 # CL에 당일 중간값 저장 if var11 < var1 Then CL = (var1+var2)/2; V0.5 = var1-((var1-CL)/5)*1; V1 = var1-((var1-CL)/5)*2; ## "빨"타점-1타점 V2 = var1-((var1-CL)/5)*3; ## "주"타점-2타점 V3 = var1-((var1-CL)/5)*4; ## "노"타점-3타점 mid = (var1+var2)/2; ## 중간선 V4 = var1-((var1-CL)/5)*5; ## "초"타점-4타점 V5 = var1-((var1-CL)/5)*6; ## "파"타점-5타점 V6 = var1-((var1-CL)/5)*7; ## "남"타점-6타점 V7 = var1-((var1-CL)/5)*8; ## "보"타점-7타점 V8 = var1-((var1-CL)/5)*9; ## "점"타점-8타점 V9 = var1-((var1-CL)/5)*9; ## "검"타점-9타점 value = abs(var1-V0.5); ####################################################### if sdate >= 전략시작일자 and # 지정일 이후 TotalTrades < 전략진입횟수 and # 최대 진입횟수 이전 MarketPosition == 0 and # 현재 무포지션 stime >= 전략시작시간 and #지정시간 이후 EntryCond1 == false Then { # EntryCond1은 false일때(첫진입이 발생하면 true로 변경되어 한번만 진입하게 됨) # (1차매수1),(1차매수2)은 가격이 하락해서 1차매수가격을 터치한 것인지 # 시가가 갭으로 1차매수가격 이하에서 바로 시작해서 신호가 발생한것인지 # 구분하기 위해서 1차매수를 2개의 함수로 작성한 것입니다. # 시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(1차매수1) # 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(1차매수2) if stime <= 145500 Then { if NextBarOpen > var1-value*(매수위치1차+1) Then buy("1차매수1",atlimit,var1-value*(매수위치1차+1),Floor((전략매수금액*10000*(매수비중1차/100))/C)); Else buy("1차매수2",AtMarket,def,Floor((전략매수금액*10000*(매수비중1차/100))/C)); } if stime == 150000 Then { if L <= var1[1]-value[1]*(매수위치1차+1) Then buy("1차매수3",AtMarket,def,Floor((전략매수금액*10000*(매수비중1차/100))/C)); } } # 매수진입이후 if MarketPosition == 1 then { # 추가진입이 발생하면 1차매도가 다시 발생할수 있도록 false로 초기화 if CurrentContracts > CurrentContracts[1] Then Condition1 = false; # 매수시점의 var1와 V0.5의 차이값을 diff에 저장 diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]); if MaxEntries == 1 and # 최대진입횟수가1이고(첫진입 한번만 발생한 상황) L >= var1-value*(매수위치2차+1) and # 저가가 2차매수가격 이상이고 EntryCond2 == false Then { # EntryCond2은 false일때(2차매수가 발생하면 true로 변경되어 한번만 진입하게 됨) # 다음봉에서 2차매수가격을 터치하면 신호발생(즉 가격이 하락해서 첫 터치가 발생하면 매수) # 시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(2차매수1) # 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(2차매수2) if stime <= 145500 Then { if NextBarOpen > var1-value*(매수위치2차+1) Then buy("2차매수1",atlimit,var1-value*(매수위치2차+1),Floor((전략매수금액*10000*(매수비중2차/100))/C)); Else buy("2차매수2",AtMarket,def,Floor((전략매수금액*10000*(매수비중2차/100))/C)); } if stime == 150000 and L <= var1[1]-value[1]*(매수위치2차+1) Then buy("2차매수3",AtMarket,def,Floor((전략매수금액*10000*(매수비중2차/100))/C)); } # Condition1과 Condition2는 각 매도의 횟수를 1번으로 제한하게 위한 변수 # 포지션 진행 중 1차매도란 이름의 청산이 발생하면 Condition1은 true if CurrentContracts < CurrentContracts[1] and (LatestExitName(0) == "1차매도1" or LatestExitName(0) == "1차매도2") Then Condition1 = true; # 포지션 진행 중 2차매도란 이름의 청산이 발생하면 Condition2는 true if CurrentContracts < CurrentContracts[1] and (LatestExitName(0) == "2차매도1" or LatestExitName(0) == "2차매도2") Then Condition2 = true; # Condition1이 false일때(첫진입후 아직 1차매도는 발생하지 않은 상태) # 당일 최저가에서 diff*매도위치1차만큼 상승하면 매도1차비중만큼 청산 if Condition1 == false then { if stime <= 145500 Then exitlong("1차매도1",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1); if stime == 150000 and H >= lowest(L,BarsSinceEntry)[1]+diff[1]*매도위치1차 Then exitlong("1차매도2",AtMarket,def,"",Floor(MaxContracts*(매도비중1차/100)),1); } if Condition1 == true and CurrentContracts < MaxContracts then { if stime <= 145500 Then exitlong("최종익절1",AtStop,LatestExitPrice(0)-diff*최종익절위치); if stime == 150000 and L <= LatestExitPrice(0)-diff*최종익절위치 Then exitlong("최종익절2",AtMarket); } # Condition2는 false일때(첫진입후 아직 2차매도는 발생하지 않은 상태) # 당일 최저가에서 diff*매도위치2차만큼 상승하면 매도2차비중만큼 청산 if Condition2 == false then { if stime <= 145500 Then exitlong("2차매도1",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차); if stime == 150000 and H >= lowest(L,BarsSinceEntry)[1]+diff[1]*매도위치2차 Then exitlong("2차매도2",AtMarket); } # 당일최고가에서 value*(최종손절위치+1)만큰 하락하면 전량청산 # 3분봉에서 정규장마지막봉 전봉까지만 만족했을때 신호발생 if stime < 145700 Then exitlong("최종손절1",AtStop,var1-value*(최종손절위치+1)); # 정규장 마지막봉에서 조건만족하면 다음봉(다음날)시가에 청산 if stime == 150000 and L <= var1[1]-value[1]*(최종손절위치+1) Then exitlong("최종손절2",AtMarket); } Else { # 매수포지션이 아니면 모두 false로 초기화 Condition1 = false; Condition2 = false; } } # 매수진입 후 1차매수1이나 1차매수2, 1차매수3 진입신호가 발생하면 true if MarketPosition == 1 and (LatestEntryName(0) == "1차매수1" or LatestEntryName(0) == "1차매수2" or LatestEntryName(0) == "1차매수3") Then entrycond1 = true; # 매수진입 후 2차매수1이나 2차매수2, 2차매수3 진입신호가 발생하면 true if MarketPosition == 1 and (LatestEntryName(0) == "2차매수1" or LatestEntryName(0) == "2차매수2" or LatestEntryName(0) == "2차매수3") Then entrycond2 = true; # 무포지션이면 flase로 초기화 if MarketPosition == 0 Then { entrycond1 = false; entrycond2 = false; }
프로필 이미지
종풍화성
2016-01-08
170
글번호 94217
시스템