커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4401
글번호 230811
답변완료
함수변환 요청(키움)
안녕하세요?
아래는 키움증권에서 사용하는 언어로 쓰여진 함수입니다.
YT언어로 변환 요청드립니다.
감사합니다.
Input : Period( 5 );
Vars : MP( 0 ), Buycount( 0 ), Sellcount( 0 ), totalprofit( 0 );
MP = Marketposition;
V0 = DayofMonth( date );
V1 = dayofweek( date );
If Mod( Month(date), 3) = 0 and V0 >= 8 and V0 <= 14 and V1 = THURSDAY
Then
Begin
If time = 144000 Then v50 = NetProfit;
totalprofit = NetProfit - v50 + PositionProfit;
SetStopEndofday(143000);
End
Else
Begin
If time = 151500 Then v50 = NetProfit;
totalprofit = NetProfit - v50 + PositionProfit;
SetStopEndofday(150000);
End;
If date <> date[1] Then
Begin
Sellcount = 0;
Buycount = 0;
End;
Condition1 = time > 090000 And time < 150000;
condition2 = CrossUp(Close, Average(Close, period));
If Sellcount = 0
Then
Begin
If MP = 0 And condition1 and condition2 And Buycount < 2
Then
Begin
Buy("B1");
Buycount = Buycount + 1 ;
End;
Input : B1(0.7), B2(-1.6);
If Condition1 Then
Begin
If PositionProfit < B2 Then ExitLong("매수 손절");
If PositionProfit > B1 Then Sell("역추세");
End;
Input : X1(2.3), X2(-0.9);
If MP = -1 Then
Begin
If PositionProfit > X1 Then ExitShort("역추세 익절");
If PositionProfit < X2 Then ExitShort("역추세 손절");
End;
Input : bse(50);
If MP = 1 And BarsSinceEntry = bse then
Begin
Sell("S1");
End;
End;
Input : totalv(-2.1), bse2(20), ppf(-0.6);
If mp = 0 And totalprofit < totalv And Buycount >= 2 And Sellcount = 0
Then
Begin
Sell("S2");
Sellcount = 1;
End;
If IsEntryName("역추세") = true and barssinceentry < bse2 And PositionProfit < ppf then Buy("B2");
2017-04-19
218
글번호 108949
답변완료
시스템식 부탁 드립니다~
밑에 두가지 식을 같이 활용하려고 합니다.
매수는 1번식에서 매수 발생하면 바로 진입은 안하고 매수 대기.
그리고 2번식에서 매수 발생 하면 매수 진입,
1번이 매수 상황이면 2번식에서 매도 진입은 나오지 않습니다.
1번식이 매수상황이면 2번식으로 매수 진입 후 1번식에서 반대 매도 발생하면 청산,
매도는 1번식에서 매도 상황일때 대기하고 2번식에서 매도 발생하면 매도 진입.
1번이 매도 상황일때는 매수진입은 나오지 않습니다.
1번식이 매도 상황이면 2번식으로 매도 진입 후 1번식에서 반대 매수 발생하면 청산,
매수, 매도 모두 진입 후 10틱이상 수익방향 진행시 진입자리에서 2틱 익절 mit,
15틱 이상 수익방향 진행시 트레일링 스탑으로 6틱 밑에 걸리도록 하려 합니다.
그리고 분봉에 나오는 신호에 맞춰서 틱차트에서 다른 수식으로 그 방향으로 신호가 나오도록 할수 있을까요?
---------------------------------------------------
1)
input : P1(5),P2(60),RSIP(30);
var1 = wma(c,P1);
var2 = wma(c,P2);
var3 = RSI(RSIP);
Condition1 = var1 > var2 and var3 >=70;
Condition2 = var1 < var2 and var3 <=30;
if Condition1 == true and Condition1[1] == false Then
buy();
if MarketPosition == 1 and CrossDown(var1,var2) and var3 <= 30 Then
ExitLong();
if Condition2 == true and Condition2[1] == false Then
sell();
if MarketPosition == -1 and Crossup(var1,var2) and var3 >= 70 Then
ExitShort();
-------------------------------------------------
2)
INPUT : LENGTH(10);
VAR : TCHAN(0), BCHAN(0),T1(0),T2(0);
TCHAN = HIGHEST(HIGH, LENGTH)[1];
BCHAN = LOWEST(LOW, LENGTH)[1];
if TCHAN > TCHAN[1] and BCHAN > BCHAN[1] Then
T1 = 1;
if TCHAN < TCHAN[1] and BCHAN < BCHAN[1] Then
T1 = -1;
if T1 == 1 Then
exitshort("b",atlimit,BCHAN);
if t1 == -1 Then
SELL("S",atlimit,TCHAN);
if T1 == 1 Then
buy("c",atlimit,BCHAN);
if T1 == -1 Then
exitlong("bx",atlimit,TCHAN);
2017-04-19
187
글번호 108948
답변완료
분봉차트에서 당일 가격 중심선 설정
안녕하세요 지표 수식 문의 드립니다.
분봉차트에서 분봉 가격 기준의 중심선을 설정하고 싶습니다.
지표 주식 알려주시면 감사하겠습니다.
2017-04-19
218
글번호 108943
답변완료
항셍에도 적용되게 지표 수정좀 부탁드립니다.
Var : value1(0) , value2(0), value3(0) ;
value1 = DayHigh(1);
value2 = DayLow(1);
value3 = (value1+value2)/2;
Plot1(value1, "상한");
Plot2(value2, "하한");
Plot3(Value3, "중간");
전일 고점 저점 중간점을 선으로 표시되게 했는데
항셍은 3부타임으로 나뉘어있어서 적용이 잘 안되네요
두가지 버전으로 부탁드릴수있을까요?
1. 10시15분 장시작~ 00시45분 장 종료까지를 하루로 표현한것
2. 1부(10시15분~13시) 2부(14시~17시30분) 3부(18시15분~00시45분)를 각각 하루로
보고 즉 하루에 3번의 저점 고점이 표시되게 표현됐으면 좋겠습니다.
2017-04-19
204
글번호 108940
답변완료
수식 문의 드립니다.^^
항상 감사드립니다. ^^ 수식 부탁 문의 드립니다.
=========
당일 중심값 = (Dayhigh()+Daylow())/2
당일 중심값 위에서만, 특정이평선 (ex,5평선,20평선)의 기울기가 양에서 음으로 기울어지는 순간 소리가 울리고 봉위에 표시가 되었으면 합니다.
물론, 당일 중심값 아래에서만 특정 이평선의 기울기가 음에서 양으로 기울어지는 순간에도 소리가 울리고 봉위에 표시가 되는 수식을 부탁드립니다.
=========
봉위에 표시가 어려우면, 소리라도 나는 수식이라면 감사드립니다. ^^
2017-04-19
185
글번호 108933
답변완료
수식 의뢰드립니다
키움수식을 에스로 변환부탁드립니다 (참조그림 올려요)
국선
타임프레임 ; 5분
매수: 스토캐스틱(5,3,3)이 50아래에서 시그날 골든크로스하고
지수이평 4와 6이평이 골든크로스시 매수 시그널이 나오게 부탁드립니다
매도: 두 이평이 데드크로스하거나 스토가 80아래로 떨어질 때 매도 시그널이 나오도록 해주세요
<키움용 밴드 수식>
수식1
스토변수값 5, 3, 3
cond=Stochasticsslow(sto1,sto2)<50 and
crossup(Stochasticsslow(sto1,sto2),eavg(Stochasticsslow(sto1,sto2),sto3));
valuewhen(1,cond,eavg(c,6))
부탁드려요!
2017-04-19
286
글번호 108932
답변완료
안녕하세요
아래 고점저점 처리 식에서 고점 과 저점을 결정짖는 자리가 어디입니까?
주석좀 부탁드립니다.
배열 대로 진행해서 여기가 저점이다 고점이다를 인식해서 그값을 가지개 되는
부분(확정되어지는) 확정되어서 그때의 주가를 가지게 되는부분
Input:length(50);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),T(0),
Text1(0),처리구분("");
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
}
}
TL_SetSize(TL1,2);
TL_SetColor(TL1,red);
2017-04-19
184
글번호 108931
답변완료
수식문의
첨부와 같은 지표수식을 부탁드립니다
1. 고점선: MACD-sig 데드크로스(b)면 직전 골든크로스(a) 부터 데드크로스(b) 사이의 고점표시(Hv1)를 다음 데드크로스(d) 까지
2. 저점선: MACD-sig 골든크로스(c)면 직전 데드크로스(b) 부터 골든크로스(c) 사이의 저점표시(Lv1)를 다음 골든크로스(e) 까지
첨부는 120틱 차트, MACD short(12), long(26),sig(9) 입니다.
감사합니다
2017-04-18
272
글번호 108930
답변완료
수정부탁드립니다
수고많으십니다
아래식으로 구현되는 파동선이 메인차트300틱차트에서 120틱(data2)파동선이 나타나도록 수정부탁드립니다
감사합니다
Input:length(10),종가사용여부(0),파동선두께(2),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,RED);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,BLUE);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
2017-04-18
202
글번호 108929