커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5499
글번호 230811
답변완료
수식에서 기존 보유 수량을 반영이 가능할까요?
국내 주식
예스트레이드(하이투자증권) 적용
모든 수식이 매수 후 매도 가 로직인데...
기존 보유 주식이 있는 것도 반영이 되려면 어떻게 하면 될까요?
예를 들어
RSI(14)< 30 일때 분할 매수 100개
RSI(14)> 80 일때 분할 매도 100개
이런 수식에서 기존 보유 수량이 100개 있을때
기존 보유 수량 100개
RSI(14)< 30 일때 분할 매수 100개
RSI(14)> 80 일때 분할 매도 200개
아래 수식은 현재 사용하고 있는 수식입니다.
기존 사용 수식에 보유주식 1000개 있는 상태에서 반영될수 있게 수식 수정 부탁드릴께요
input : 시작일(20200101);
input : 최대투자금액(2000);
input : 기준평균봉값(80);
input : 최초진입하락폭(0.97);
input : 추가진입하락폭(0.99);
input : MFI기간(15),MFI값(86);
input : 심리도기간(15),심리도값(80);
input : 분할매도횟수(4);
input : 분할매도율(2);
input : 제1매수금액(10);
input : 제2매수금액(20);
input : 제3매수금액(30);
input : 제4매수금액(40);
input : 제5매수금액(50);
input : 제6매수금액(60);
input : 제7매수금액(70);
input : 제8매수금액(80);
input : 제9매수금액(90);
input : 제10매수금액(100);
input : 제11매수금액(120);
input : 제12매수금액(140);
input : 제13매수금액(160);
input : 제14매수금액(180);
input : 제15매수금액(200);
input : 제16매수금액(200);
input : 제17매수금액(200);
input : 제18매수금액(200);
input : 제19매수금액(200);
input : 제20매수금액(200);
input : 제21매수금액(200);
input : 제22매수금액(200);
input : 제23매수금액(200);
input : 제24매수금액(200);
input : 제25매수금액(200);
input : 제26매수금액(250);
input : 제27매수금액(250);
input : 제28매수금액(250);
var : Xcond(False,data1);
var : mav(0,data2),MM(0,Data3),SS(0,Data3);
var : MMM(0,Data2),SSS(0,Data2),Xcnt(0,Data2),Xvol(0,data1);
mav = data2(ma(c,기준평균봉값));
MM = Data3(mfi(MFI기간));
SS = Data3(Simrido(심리도기간));
MMM = Data2(mfi(MFI기간));
SSS = Data2(Simrido(심리도기간));
if Data1(sDate) >= 시작일 Then
{
If AvgEntryPrice*CurrentContracts < 최대투자금액*10000 Then
{
if MarketPosition == 0 and (MarketPosition == 0 or (MarketPosition == 1 and Xcond == False)) and data2(CrossDown(c,mav*최초진입하락폭)) then
buy("b1",atlimit,C,Floor(제1매수금액*10000/min(NextBarOpen,C)));
if MarketPosition == 1 then
{
if MaxEntries == 1 then # 85
buy("b2",AtLimit,LatestEntryPrice(0)*추가진입하락폭,Floor(제2매수금액*10000/c));
if MaxEntries == 2 then # 80
buy("b3",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.01),Floor(제3매수금액*10000/c));
if MaxEntries == 3 then # 75
buy("b4",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.015),Floor(제4매수금액*10000/c));
if MaxEntries == 4 then # 70
buy("b5",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.02),Floor(제5매수금액*10000/c));
if MaxEntries == 5 then # 65
buy("b6",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.025),Floor(제6매수금액*10000/c));
if MaxEntries == 6 then # 85
buy("b7",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.03),Floor(제7매수금액*10000/c));
if MaxEntries == 7 then # 80
buy("b8",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.035),Floor(제8매수금액*10000/c));
if MaxEntries == 8 then # 75
buy("b9",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.04),Floor(제9매수금액*10000/c));
if MaxEntries == 9 then # 70
buy("b10",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.045),Floor(제10매수금액*10000/c));
if MaxEntries == 10 then # 65
buy("b11",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.05),Floor(제11매수금액*10000/c));
if MaxEntries == 11 then # 80
buy("b12",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.055),Floor(제12매수금액*10000/c));
if MaxEntries == 12 then # 75
buy("b13",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.06),Floor(제13매수금액*10000/c));
if MaxEntries == 13 then # 70
buy("b14",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.065),Floor(제14매수금액*10000/c));
if MaxEntries == 14 then # 65
buy("b15",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.07),Floor(제15매수금액*10000/c));
if MaxEntries == 15 then # 80
buy("b16",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.075),Floor(제16매수금액*10000/c));
if MaxEntries == 16 then # 75
buy("b17",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.08),Floor(제17매수금액*10000/c));
if MaxEntries == 17 then # 70
buy("b18",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.085),Floor(제18매수금액*10000/c));
if MaxEntries == 18 then # 65
buy("b19",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.09),Floor(제19매수금액*10000/c));
if MaxEntries == 19 then # 85
buy("b20",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.095),Floor(제20매수금액*10000/c));
if MaxEntries == 20 then # 80
buy("b21",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.1),Floor(제21매수금액*10000/c));
if MaxEntries == 21 then # 75
buy("b22",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.105),Floor(제22매수금액*10000/c));
if MaxEntries == 22 then # 70
buy("b23",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.11),Floor(제23매수금액*10000/c));
if MaxEntries == 23 then # 65
buy("b24",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.115),Floor(제24매수금액*10000/c));
if MaxEntries == 24 then # 80
buy("b25",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.12),Floor(제25매수금액*10000/c));
if MaxEntries == 25 then # 75
buy("b26",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.125),Floor(제26매수금액*10000/c));
if MaxEntries == 26 then # 70
buy("b27",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.13),Floor(제27매수금액*10000/c));
if MaxEntries == 27 then # 65
buy("b28",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.135),Floor(제28매수금액*10000/c));
}
}
}
#==================================================================================================
if MarketPosition == 1 Then
{
if Xcond == False and MM > MFI값 or SS > 심리도값 or MMM > MFI값 or SSS > 심리도값 Then
{
Xcond = true;
Xcnt = 0;
}
if Xcond == true Then
{
Xcnt = Xcnt+1;
if Xcnt < 분할매도횟수 then
Xvol = MaxContracts*분할매도율/100 ;
Else
Xvol = CurrentContracts;
ExitLong("bx",OnClose,DEf,"",Xvol,2);
}
}
Else
{
Xcnt = 0;
Xcond = False;
}
2020-11-12
665
글번호 143838
답변완료
문의드립니다
var1 = dayhigh;
var2 = daylow;
var3 = var1-var2;
plot1(var1-var3*0.236);
plo2(var1-var3*0.500);
plot3(var1-var3*0.764);
위수식으로 전일 고점부터 아래로피보나치
전일 저점으로부터 위로 피보나치 를 부탁드립니다 2가지를부탁드립니다~~미리감사드립니다
2020-11-12
521
글번호 143835
답변완료
수식 부탁드립니다
안녕하세요
현재가격이
10000원 이상이 되면 시장가 매수
1봉전 60분봉 20일선 이하로 내려가면
시장가 매도
2020-11-12
464
글번호 143834
억수로 님에 의해서 삭제되었습니다.
2020-11-12
42
글번호 143833
답변완료
문의
최근 100봉 중 MACD골든크로스가 0선 아래에서 N번 발생했다고 했을 때
가장 최근에 발생한 골든크로스 지점 (현재 봉)과
N개 중 가장 낮은 골든크로스 지점이 몇 개 봉 전인지 구하고 싶습니다.
그리고 최근 100봉 동안 MACD시그널선은 0선 아래에 있어야 합니다.
2020-11-12
512
글번호 143832
답변완료
[69863] 질문에 재질문 드립니다.
주식시장에서 틱차트의 봉패턴으로 시스템트레이딩을 만들려고 합니다.
틱차트 기준으로 특정패턴 만족시 자동검색되어서 자동주문까지 나가는 시스템은
불가능한 건가요..
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : [5034]양음양 일봉기준을 80틱 기준으로 하려면 어떻게 해야하는지요
> 안녕하세요
예스스탁입니다.
해당 수식은 수식 자체에 주기를 지정하는 부분이 없습니다.
종목검색 창에서 주기를 지정해 검색하시면 되는데
종목검색은 분봉이상만 지원해서 틱봉으로 검색을 하실수 없습니다.
즐거운 하루되세요
2020-11-11
596
글번호 143831
답변완료
수식문의
Var:주(2),n(19),j(0),k(0),계산주기(0),X(0),sumXY(0),sumX(0),sumY(0),sumX²(0),
MinLRS(0),MinB(0),MinLRL(0);
Array:MinClose[100](0);
if 주 >= BarInterval then {
계산주기 = 주/BarInterval;
}
k = k + 1;
if DayIndex()%계산주기 == 0 then {
for j = 98 downto 0 {
MinClose[j+1] = MinClose[j];
}
X = X + 1;
k = 0;
}
MinClose[0] = (L+H)/2;
sumXY = 0; sumX = 0; sumY = 0; sumX² = 0;
For j = 0 To n-1 {
sumXY = sumXY + (X-j)*MinClose[j];
sumX = sumX + (X-j);
sumY = sumY + MinClose[j];
sumX²= sumX²+ (X-j)^2;
}
MinLRS = (n*sumXY - sumX*sumY)/(n*sumX²- sumX^2);
MinB = (sumY*sumX²-sumX*sumXY)/(n*sumX²- sumX^2);
MinLRL = MinLRS * X + MinB;
////////////////////////////////////////////////////////
// 타주기를 쓰지 않고 일봉에서 주봉과 월봉의 MinLRL과 MinLRS 값을 각각 가져올수 있을까요?
2020-11-11
593
글번호 143830
답변완료
문의 드립니다.
특정 신호가 발생하면 1계약을 들어가고 거기서 정한 만큼 수익이 발생하면 익절하고 손실이 발생하면 계약이 2배씩 더 들어가서 정한만큼 이익이 발생하면 익절하는 전략입니다.
positionprofit을 사용하지않고 코드를 짜는 방법이 있을까요?
2020-11-12
697
글번호 143829
답변완료
수정 부탁드립니다.
안녕하세요?
기존수식을 바꾸고싶어서 수정해봤는데, 잘 안되서 수정부탁드립니다.
조금 바꿔보았지만, 의도하는바와 다르게 정배열에서 매도, 역배열에서 매수 그리고 양봉에매도 음봉에 매도가 일어나고있습니다.
의도하는것을 적어보겠습니다.
** 진입
정배열 일때, 음봉(외부변수)다음 양봉(입력값 이상)에 매수
역배열 일때, 양봉(외부변수)다음 음봉(입력값 이상)에 매도
각 봉은 다외부변수이고 진입하는 봉은 외부변수로 정하는것보다 이상일시에만 진입.
부탁드립니다.
감사합니다.
input : 양봉(5),진입음봉(5),음봉(5),진입양봉(5),p1(5),p2(20);
input : entrycnt(3),profit(50),loss(50);
var : entry(0);
var1 = ma(c,p1);
var2 = ma(c,p2);
if bdate != bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) then
entry = entry+1;
if entry < entrycnt and var1 < Var2 and MarketPosition == 0 and C == O-음봉*PriceScale and C[1] == O[1]+진입양봉*PriceScale then
buy();
if entry < entrycnt and var1 > Var2 and MarketPosition == 0 and C == O+양봉*PriceScale and C[1] == O[1]-진입음봉*PriceScale then
sell();
SetStopProfittarget(PriceScale*profit,PointStop);
SetStopLoss(PriceScale*loss,PointStop);
2020-11-11
703
글번호 143824