커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1359
글번호 230811
답변완료
수정 부탁드립니다.
아래 지표에서 "▼" 표시를 좀 더 크게 만들고 싶습니다.
"▼"표시에서 신호음이 나도록 할 수 있는 수식이나 방법 알려주시면 감사하겠습니다
사진에 보이는 박스내 숫자 표시도 안되게 부탁드립니다
input : length(15);
input : show_levl(true);
var : up(0),dn(0),A(0),emaValue(0),correction(0),zlma(0);
var : signalUp(False),signalDn(False),zlma_color(0),ema_col(0);
var : TOP(0),BTM(0),box(0),tx(0),tx1(0),check_signals(False);
up = Magenta;
dn = Lime;
#var box1 = box(na) // Variable to store the box
a = atr(200);
emaValue = ema(close, length);
correction = close + (close - emaValue);
zlma = ema(correction, length);
signalUp = CrossUp(zlma, emaValue);
signalDn = CrossDown(zlma, emaValue);
zlma_color = iff(zlma > zlma[3] , up , iff(zlma < zlma[3] , dn , Nan));
ema_col = iff(emaValue < zlma , up , dn);
plot1(zlma, "ZLMA",zlma_color); // Plot ZLMA
plot2(emaValue,"EMA",ema_col);
if signalUp Then
{
Top = zlma;
BTM = zlma-A;
box = box_new(sDate,sTime,Top,NextBarSdate,NextBarStime,BTM);
Box_SetColor(box,up);
Box_SetFill(box,true);
var3 = (Top+BTM)/2;
tx = Text_New(NextBarSdate,NextBarStime,var3,NumToStr(C,2));
Text_SetStyle(tx,1,2);
}
else if signalDn Then
{
Top = zlma+A;
BTM = zlma;
box = box_new(sDate,sTime,Top,NextBarSdate,NextBarStime,BTM);
Box_SetColor(box,dn);
Box_SetFill(box,true);
var3 = (Top+BTM)/2;
tx = Text_New(NextBarSdate,NextBarStime,var3,NumToStr(C,2));
Text_SetStyle(tx,1,2);
}
Else
{
Box_SetEnd(box,sDate,sTime,BTM);
Text_SetLocation(tx,sDate,sTime,var3);
}
check_signals = signalUp or signalDn;
if CrossDown(high, BTM) and emaValue > zlma Then
{
tx1 = Text_New(sDate[1],sTime[1],H[1],"▼");
Text_SetStyle(tx1,2,1);
Text_SetColor(tx1,dn);
}
if CrossUp(low, Top) and emaValue < zlma Then
{
tx1 = Text_New(sDate[1],sTime[1],L[1],"▲");
Text_SetStyle(tx1,2,0);
Text_SetColor(tx1,up);
}
2024-11-16
789
글번호 185328
답변완료
아. 왜 안되는걸까요?
If 상승꺽임 Then
{ 꺽임상태 = "상승꺽임"; }
If 하락꺽임 Then
{ 꺽임상태 = "하락꺽임"; }
연속4하락꺽임 = ( 꺽임상태 == "하락꺽임" && 꺽임상태[1] == "하락꺽임" && 꺽임상태[2] == "하락꺽임" && 꺽임상태[3] == "하락꺽임");
var : CrossUpID(0),CrossDownID(0);
If 연속4하락꺽임 Then Begin
CrossUpID = Text_New_Self (sDate, sTime, ST, "4");
Text_SetStyle(CrossUpID, 2, 2);
Text_SetColor(CrossUpID, Blue);
Text_SetSize(CrossUpID,20);
End;
If 하락꺽임 Then Begin
CrossDownID = Text_New_Self (sDate, sTime, ST, "◇");
Text_SetStyle(CrossDownID, 2, 2);
Text_SetColor(CrossDownID, Red);
Text_SetSize(CrossDownID,20);
End;
코드의 일부분 입니다.
상승꺽임, 하락꺽임은 잘 표시되는데 연속4하락꺽임은 안됩니다.
상승꺽임과 하락꺽임을 꺽임상태에 저장해
신호의 패턴을 규정하고 그걸 이용한 매매를 만들어 볼까 했는데..
신호패턴 저장 방법에 문제가 있나봅니다.
머리속으로는 문제가 없는데 안되니까 답답하네요..
삽질1
// 꺽임 상태 업데이트
If 상승꺽임 Then Begin
꺽임상태 = "상승꺽임";
End Else If 하락꺽임 Then Begin
꺽임상태 = "하락꺽임";
End Else Begin
꺽임상태 = "없음"; // 이전 꺽임 상태 유지하지 않고 '없음'으로 설정
End;
// 연속4하락꺽임 카운터 업데이트
If 꺽임상태 == "하락꺽임" Then Begin
하락꺽임카운터 = 하락꺽임카운터 + 1;
End Else If 꺽임상태 == "상승꺽임" Then Begin
하락꺽임카운터 = 0;
End Else Begin
하락꺽임카운터 = 하락꺽임카운터;
End;
// 연속4하락꺽임 조건 설정
연속4하락꺽임 = (하락꺽임카운터 >= 4);
// 크로스 업/다운 감지 및 표시
Var: CrossUpID(0), CrossDownID(0);
// 연속4하락꺽임 발생 시 "4" 표시
If 연속4하락꺽임 Then Begin
CrossUpID = Text_New_Self(sDate, sTime, ST, "4");
Text_SetStyle(CrossUpID, 2, 2);
Text_SetColor(CrossUpID, Blue);
Text_SetSize(CrossUpID, 20);
End;
이런식으로 하면 하락꺽임 이 되긴 합니다만.. 패턴을 지정하기도 힘들고...
이전 코드가 왜 안되는지 알아야 겠어요 너무 답답해요.
2024-11-17
761
글번호 185327
답변완료
종목검색식 부탁드림니다.
항상 노고에 감사드림니다.
아래의 수식을 종목검색식으로 부탁드림니다.
A=LRL(20);
B=LRL(40);
Valuewhen(1, Crossup(A,B),A)
이선을 하향 이탈하였다가 다시 돌파시 검색되는 검색식으로 부탁드림니다.
2024-11-16
841
글번호 185326
답변완료
문의드립니다(신호)
안녕하세요.
매수,매도 신호를 printf로 출력해서 분석하는데
예비신호를 출력해서 추후 발생할 거래를 사전적으로 예측 또는 거래대비 하려고 합니다.
혹시 가능한 방법이 있는지 문의드립니다.
감사합니다.
즐거운 하루 보내세요.
2024-11-16
740
글번호 185325
답변완료
종목검색식 부탁합니다
수고 하십니다
1]전봉 조건 ;
음봉이고,
시가와 종가 차이가 -5% 이상이고,
종가가 저가가 아닌 경우
2]이번 봉 조건 ;
시가가 전봉 종가보다 아래에 위치하거나
시가가 전봉 종가보다 1% 이하로 큰
양봉이며.
종가가 전봉 몸통의 50%이상 회복한 경우
위 2 조건을 만족하는 검색식 부탁합니다.
수고하세요.
2024-11-16
815
글번호 185324
답변완료
키움 수식 예스트레이더 수식으로의 변형
1-1. 붙임 사진의 아래 지표는 키움 지표로서 아래와 같습니다.
q9=ADX(14)>20;
barssince(q9)
1-2. 위 지표가 연속된(만약 캔들이 1개만이면 그 캔들의 고가와 저가를 수평선(선의 굵기도 임의 변경가능토록)으로 연결하고 그 사이에 색을 임의로 변경하여 넣을수 있게) 적색 기둥 위 해당 캔들 중 최고가와 최저가를 연결하는 선을 만들고 그 선사이에 색을 넣는데 임의로 색도 변경이 가능하게 하고 싶습니다. 이렇게 수평선 두개 사이에 색이 칠해져서 연결하다가 아래 지표에 다시 적색 기둥이 발견되면 다시 동일한 방법으로 수평으로 그려지게 하고 싶습니다.
동작하지 않은 제가 만든 예시(참고만하셔요,오류 투성이 입니다, 쳇 gpt 이용)
// 입력값
input : ADX_Period(14), ADX_Threshold(20), lineThickness(2), lineColor(Orange), fillColor(RGB(255, 0, 0));
// 변수 선언
var : adxValue(0), isBelowThreshold(false), highestHigh(0), lowestLow(0), barIndex(0), previousBarHigh(0), previousBarLow(0), inThresholdPeriod(false);
// ADX 계산
adxValue = ADX(ADX_Period);
// ADX 값이 기준값 이하일 경우 True 설정
isBelowThreshold = adxValue < ADX_Threshold;
// 최고가와 최저가 초기화
highestHigh = High;
lowestLow = Low;
barIndex = 0;
inThresholdPeriod = false;
// 연속된 ADX 값이 기준 이하일 때 최고가와 최저가 추적
if isBelowThreshold then begin
// 첫 번째 캔들이면 최고가와 최저가 초기화
if not inThresholdPeriod then begin
highestHigh = High;
lowestLow = Low;
inThresholdPeriod = true; // 연속적인 적색 캔들의 범위 설정
end;
// 연속된 캔들들의 최고가와 최저가 추적
if High > highestHigh then highestHigh = High;
if Low < lowestLow then lowestLow = Low;
end else begin
// ADX가 기준을 넘으면 선을 그리고 초기화
if inThresholdPeriod then begin
// 최고가와 최저가 사이에 수평선 그리기
Plot1(highestHigh, "HighestHighLine", lineColor, lineThickness);
Plot2(lowestLow, "LowestLowLine", lineColor, lineThickness);
// 최고가와 최저가 사이에 색 채우기
FillArea(lowestLow, highestHigh, fillColor, "FillBetweenLines");
// 초기화
inThresholdPeriod = false;
end;
end;
// 마지막으로 색을 채우고 수평선 그리기
if inThresholdPeriod then begin
// 마지막 연속된 캔들의 최고가와 최저가에 수평선 그리기
Plot1(highestHigh, "HighestHighLine", lineColor, lineThickness);
Plot2(lowestLow, "LowestLowLine", lineColor, lineThickness);
// 색 채우기
FillArea(lowestLow, highestHigh, fillColor, "FillBetweenLines");
end;
2-2. 아래는 키움지표인데 이 지표도 잘 못 나타낸 것인데 하고 싶은 것은 이 ww2에 해당하는 연속 캔들의 값을 4등분으로 나뉘어 4개의 선을 만들고 싶고(고저 기준으로 간격이 동일한 4개선) 이 선들은 굵기 조절 몇 선 자체를 없애거나 나오게도 할 수있게 조절할 수도 있게 만들고 싶습니다 이런 4개이 수평선을 긋고 그 다음 ww2에 해당하면 다시 4개의 수평선을 긋고 하는 식으로 예스트레이더로 변형을 부탁드립니다(캔들의 중간사이에서 잘 보이게 선 굵기를 조정할 수 있게(캔들보다도 더 크게 할수도 작게 할수도 조절할수 있게) 부탁드립니다)도 부탁드려요- 결론적으로 위 1-1과 1-2는 캔들들 중 고가와 저가에 선을 긋는 것이라면 2-2는 그냥 그 고저를 4등분한 선을 긋고 싶습니다(선 굵는 크게 크게 할 수도 있게)
ww1=ADX(14)<20;
ww2=if(ww1, 1,0);
valuewhen(1,ww2,((고가-저가)/2+저가))
아래는 제가 하긴 했는데 위 의도되로 이 ww2에 해당되는 캔들 각각의 중앙값만 연결한 것이지 연속된 이 값들의 가운데에 선 한개만 만들고 싶습니다 아래는 제가 의도되로 만들지는 못했지만 그냥 중앙선만 연결한 지표를 참고로 붙였습니다.
의도와 잘못되게 작성한 지표(단순 참고 , 쳇gpt이용)
// 입력값
input: ADX_Period(14), ADX_Threshold(20), lineThickness(5), lineColor(RGB(255, 0, 0)); // 선 굵기와 색상
// 변수 선언
var: adxValue(0), isBelowThreshold(false), midPrice(0), linePosition(0);
// ADX 계산
adxValue = ADX(ADX_Period);
// ADX 값이 기준값 이하일 경우 True 설정
isBelowThreshold = adxValue < ADX_Threshold;
// 고가와 저가의 중간 값 계산
midPrice = ((High - Low) / 2) + Low;
// ADX 값이 기준 이하일 경우 중간값을 기록
if isBelowThreshold then begin
// 중간값에 선을 긋고, 굵기를 설정 (캔들의 중간에 선을 그리도록)
linePosition = midPrice;
// 캔들의 중간에 선을 그리되, 선의 굵기를 캔들보다 크게 설정
Plot1(linePosition, "MidPriceLine", lineColor, lineThickness);
end;
2024-11-16
948
글번호 185323
답변완료
부탁합니다
PL=
L(5) < L(9) &&
L(5) < L(8) &&
L(5) < L(7) &&
L(5) < L(6) &&
L(5) < L(4) &&
L(5) < L(3) &&
L(5) < L(2) &&
L(5) < L(1) &&
L(5) < L(0);
A=valuewhen(1, PL, L(5));
2024-11-15
703
글번호 185322
답변완료
분봉차트에서 참조차트를 갭보정 수식이 있나요
수고가 많으십니다.
참조차트를 갭보정해보고 싶은데 관련 수식이 있으면 알고 싶습니다.
2024-11-17
617
글번호 185321
답변완료
수식 질문합니다.
안녕하세요.
일봉상에서
1. 전월 월누적거래량이 전전월 대비 2배 이상 많은 종목.
2. 1을 만족하는 월의 최저점과 최고점의 4분1 지점을 돌파하는 종목(1을 만족하는 가장 최근 월 기준).
3. 1을 만족하는 월의 최저점과 최고점의 2분의 1 지점을 돌파하는 종목(1을 만족하는 가장 최근 월 기준).
감사합니다.
2024-11-15
632
글번호 185320