커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식검토부탁합니다.

매수진입. 1. 9개봉 단기이평이 18개봉 장기이평 상향교차하면 이전 12개봉의 최고가를 갖고 여기에 1.03을 곱한다. 이 값이 진입가격이다. 2.이평선 상향교차가 나면 진입가에 buy stop 주문을 넣는다. 이 주문은 교차 이후 12개의 봉이 완성될 때까지 유효하다. 3. 만약 매수포지션을 가지고잇다가 매수 청산규칙에 의해 청산하였다면 최근 10개봉의 최고가에 buy stop 주문을 걸고 청산 이후 15개 봉까지 이 주문이 유효하도록 한다. 매도진입 1. 9개봉 단기이평이 18개봉 장기이평 하향교차하면 이전 12개 봉의 최저가를 갖고 여기에 0.97을 곱한다. 이 값이 매도진입가격이다. 2. 이평선 하향교차가 나면 진입가에 sell stop 주문을 넣는다. 이 주문은 교차 이후 12개의 봉이 완성될때까지 유효하다. 3. 만약 매도 포지션을 가지고 있다가 매도 청산규칙에 의해 청산하였다면 최근 10개봉의 최저가에 sell stop 주문을 걸고 청산 이후 15개의 봉까지 이주문이 유효하도록 한다. 이 논리로 수식작성했는데 맞는지 검토좀해주세요. Input:FastLen(9),SlowLen(18),ChLen(12),TrailBar(8),ReBars(15); var:FastMA(0),SlowMa(0),LEntryPrice(0),SEntryPrice(0),LCount(-999), Scount(-999),ReEntryCount(0),currentPosion(0); FastMa = Average(Close,FastLen); SLowMa = Average(Close,SlowLen); //매수포지션진입 If CrossUp(FastMa,SlowMa) And BarIndex > 1 then { LEntryPrice = Highest(H,ChLen) * 1.03; LCount = BarIndex; } If MarketPosition <> 1 And BarIndex < LCount + Chlen Then Buy("Cross Over Buy",AtStop,LEntryPrice); //매도포지션진입 If CrossDown(FastMa,SlowMa) And BarIndex > 1 Then { SEntryPrice = Lowest(L,Chlen) * 0.97; SCount = BarIndex; } If MarketPosition <> -1 And BarIndex < SCount + ChLen Then Sell("CrossDown Sell",Atstop,SEntryPrice); //Trailing Stop에 의한 청산 //매수포지션 청산 If MarketPosition == 1 Then ExitLong("매수포지션청산",Atstop,Lowest(L,trailBar)); If MarketPosition == -1 Then ExitShort("매도포지션청산",Atstop,Highest(H,Trailbar)); //재진입 CurrentPosion = MarketPosition; If CurrentPosion == 0 And CurrentPosion[1] == 1 Then ReEntryCount = 1; If CurrentPosion == 0 And CurrentPosion[1] == -1 Then ReEntryCount = 1; If MarketPosition == 0 And MarketPosition[1] == 1 And ReEntryCount < ReBars Then Buy("매수재진입",Atstop,Highest(H,10)); If MarketPosition == 0 And MarketPosition[1] == -1 And ReEntryCount < Rebars Then Sell("매도재진입",AtStop,Lowest(L,10));
프로필 이미지
타고난스캘퍼
2012-02-19
373
글번호 47928
시스템
답변완료

부탁합니다

강세 공식 avg(sum(if(h>h(1),10,0),10),1) >= avg(sum(if(h(1)>h(2),10,0),10),1) and avg(sum(if(h>h(1),10,0),10),1) > lowest(avg(sum(if(h>h(1),10,0),10),1),7) and avg(sum(if(h>h(1),10,0),10),1) >= highest(avg(sum(if(h>h(1),10,0),10),1),3) 약세 공식 avg(sum(if(l>l(1),10,0),10),1) <= avg(sum(if(l(1)>l(2),10,0),10),1) and avg(sum(if(l>l(1),10,0),10),1) < highest(avg(sum(if(l>l(1),10,0),10),1),7) and avg(sum(if(l>l(1),10,0),10),1) <= lowest(avg(sum(if(l>l(1),10,0),10),1),3)
프로필 이미지
안전
2012-02-19
411
글번호 47927
지표
답변완료

추가해주세요------------

if time-stime[봉수] <시간 and stime >= 92000 and dayPL > -(PriceScale*당일손절) then{ if (MarketPosition == 0 or highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*25) and C > C[3] and tema82[0] < tema82[1] +0.08 then Sell(); if (MarketPosition == 0 or Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*25) and C < C[3] and tema82[0] > tema82[1] -0.14 then buy(); } SetStopLoss(PriceScale*13,PointStop); 1)진입을 다르게하려 합니다 하나는 위식과 같이 진입 하는것이고 다른 하나는 위 진입조건 에 스토케스틱을 추가하여 스토케스틱이 85이상이나 25 이하 즉 과열 침체권 에서 진입신호가 나온경우 진입을 안하고(청산만함) 기다리다 과열권 에서 내려올때 매도 침체권에서 올라갈때 매수하게 해주세요 2) 09:20 이후에 " time-stime[봉수] <시간" 이 20개이상 연달아 나온경우 tema82가 상승하고 있으면 포지션이 있던없던 정리하고 매수진입 09:20 이후에 "time-stime[봉수] <시간" 이 20개이상 연달아 나온경우 tema82가 하락하고 있으면 포지션이 있던없던 정리하고 매도진입
프로필 이미지
leekss1
2012-02-20
377
글번호 47926
시스템
답변완료

entryprice에 관하여

피라미딩을 활용하여 매수조건식의 진입횟수(20회)를 정한 다음 청산 조건에 해당되어 청산시키고자 할때 아래의 청산식이 어떻게 적용되는지 궁금하네요. exitlong("s",atlimit,entryprice*(1+5/100)); 즉, 총 20회를 진입을 하기는 했는데, 청산이 될때 entryprice*(1+5/100)의 기준은 1번이 되는지,10번이 되는지, 15번이 되는지 청산기준이 궁금합니다. avgentryprice의 경우에는 피라미딩 횟수(20)에 의한 진입가격의 평균값(1번부터 20번까지) 이라는 것은 알겠는데, entryprice의 경우에는 청산이 되는 기준이 어디인지 궁금합니다.
프로필 이미지
초록물고기
2012-02-19
415
글번호 47925
시스템
답변완료

사용자함수 도 전봉값을 저장하나요?

수고가 많으십니다. 글을 읽다보니 아래 의문이 생겨서 질문하는 건데요. var1 = AvgPrice(aaa)[1]; 답변 중 위의 코드가 AvgPrice(aaa)로 써야 맞는 것 아닌가요? AvgPrice(aaa)와 AvgPrice(aaa)[1] 무슨 차이가 있나요. AvgPrice 사용자함수가 전봉 값을 저장하고 있나요? > 예스스탁 님이 쓴 글입니다. > 제목 : Re : numericseries와 numericarray > 안녕하세요 예스스탁입니다. NumericSeries 는 Numeric과 같은 타입으로 함수 작성시 가장 일반적으로 사용되는 타입니다. 현재봉에 하나의 값만 저장하고 이전값 참조도 가능한 타입이며 함수의 인자로 데이터등일 들어갈때 주로 NumericSeries을 사용합니다. 아래는 Wma 함수내용입니다. 주로 지표에서 wma(c,20)과 같이 사용되는데 기준값이 보통 데이터나 식상 계산값이고 연속되는 값이므로 NumericSeries로 선언하고 기간값 값이 고정값을 주입하는 내용은 NumericSimple로 선언한 식입니다. Input : Price(NumericSeries), Length(NumericSimple); Var : Sum(0), Counter(0), CSum(0); Sum = 0; CSum = 0; For counter = 0 To Length - 1 Begin Sum = Sum + Price[counter] * (Length - counter); CSum = CSum + Length - counter; End; If CSum > 0 Then WMA = Sum / CSum; Else WMA = 0; NumericArray 은 현재봉에 여러 개의 방에 값들을 저장하고 각 방마다 이전값참조가 가능한 타입니다. 관련 타입은 거의 사용되지가 않는데 지표나 시스템등 일반수식에서 배열변수가 사용될때 이 배열변수의 값을 모두 받아드려 특정계산을 할때 사용됩니다. 예를 들어 아래와 같은 수식을 만드시면 avgprice라는 함수는 4개의 공간을 가지는 배열값의 값을 모두 모아 평균을 내는 함수입니다. 함수명 : AvgPrice input : prc[n](NumericArray); AvgPrice = (prc[0]+prc[1]+prc[2]+prc[3])/4; 가령 지표식이나 시스템식등에서 아래와 같이 배열변수를 이용하는 식이 있을때 아래와 같이 지표식에서 avgprice변수의 인자로 배열변수의 이름을 지정해 주시면 해당 배열변수의 각 공간의 값을 모아 평균한 값을 리턴해 줍니다. array : aaa[4](0); aaa[0] = o; aaa[1] = h; aaa[2] = l; aaa[3] = c; var1 = AvgPrice(aaa)[1]; plot1(var1); 주의하셔야 할 부분은 함수에서 지정한 공간수 이상인 배열변수를 avgprice의 인자로 지정하면 에러가 발생하므로 사용상 주의가 필요합니다. 즐거운 하루되세요 > 풀냄새 님이 쓴 글입니다. > 제목 : numericseries와 numericarray > numericseries와 numericarray의 개념과 차이점, 사용례에 대해 간략히나마 설명을 부탁드립니다.
프로필 이미지
따따따
2012-02-19
401
글번호 47924
지표
답변완료

청산식 ?

안녕하세요? 항상 도움을 주셔서 진심으로 감사 드립니다. 1포인트&nbsp;이상&nbsp;수익후&nbsp;본절에 오면&nbsp;청산하는&nbsp;식입니다. if MarketPosition==1 and CodeCategory == 4 Then{ if Highest(H,BarsSinceEntry) >= EntryPrice+1.0 Then ExitLong("청산",AtStop,EntryPrice); } 여기서 한가지 수식 부탁드립니다. 당일청산 전략으로 오전에 매수 혹은 매도로 진입해서 수익을 확정한후 리버설 매매로 다시 수익을 확보한 만큼 손실나면 청산. 가능한 식이라면 위와같이 하나의 카테고리로 만들어 주세요. 당일청산 전략이 많습니다.
프로필 이미지
노블레스
2012-02-19
383
글번호 47921
시스템
답변완료

노고에 항상 감사드립니다.

특정 시점의 지수를 plot 하고 싶습니다.. 예) 5일선과 20일선이 크로스 되는 시점의 20일선 지수(현재가 아님)를 plot 하고 싶습니다. *크로시 시점의 지수가 아니라, 크로스 시점의 20일선 지수를 plot 하고 십습니다. 감사합니다.
프로필 이미지
회원
2012-02-19
428
글번호 47920
지표
답변완료

ts 함수 좀 옮겨 주세요.

AverageArray, SummationArray는 옮겨지는데 정작 CovarArray 는 검증하면 그냥 종료되어 버리네요. 그럼 부탁드립니다. ------------------------------------------------------------------------------ - CovarArray inputs: IndepArray[MaxSize1]( numericarray ), DepArray[MaxSize2]( numericarray ), Size( numericsimple) ; variables: var0( 0 ), var1( 0 ), var2( 0 ) ; condition1 = Size > 0 and Size <= MaxSize1 and Size <= MaxSize2 ; if condition1 then begin var0 = AverageArray( IndepArray, Size ) ; var1 = AverageArray( DepArray, Size ) ; var2 = 0 ; for Value1 = 1 to Size begin var2 = var2 + ( IndepArray[Value1] - var0 ) * ( DepArray[Value1] - var1 ) ; end ; CovarArray = var2 / Size ; end else RaiseRunTimeError( "Check Size input to CovarArray func-see CovarArray code" ) ; ---------------------------------------------------------------------- - AverageArray inputs: PriceValueArray[MaxSize]( numericarray ), Size( numericsimple ) ; AverageArray = SummationArray( PriceValueArray, Size ) / Size ; - SummationArray inputs: PriceValueArray[MaxSize]( numericarray ), Size( numericsimple ) ; variables: var0( 0 ) ; var0 = 0 ; for Value1 = 1 to Size begin var0 = var0 + PriceValueArray[Value1] ; end ; SummationArray = var0 ;
프로필 이미지
몽파
2012-02-19
493
글번호 47919
지표
답변완료

문의드립니다.

아래 식에서 진입후 1포인트 수익청산 후 당일 진입금지. 진입 후 1포인트 손절 후 당일 진입금지. 결론적으로 수익청산을 하던 손절을 하던 하루 한번 진입 청산입니다. Input : shortPeriod(5), longPeriod(20); value1 = ema(C, shortPeriod); value2 = ema(C, longPeriod); # 매수/매도청산 If CrossUP(value1, value2) Then { Buy(); } # 매도/매수청산 If CrossDown(value1, value2) Then { Sell(); }
프로필 이미지
비츠로
2012-02-19
440
글번호 47918
시스템