커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1590
글번호 230811
답변완료
지표
항상감사합니다.
새해 복많이 받으세요
지표
시가(종가)(지정가격)에서 진동폭을 대입했을때
시가가 중간이 되어 위로 아래로 지표라인 부탁드립니다.
*]
시가 292.95
대입진동폭3.5 /나눔[0=시가/0.63/1.25/2.5/3.75/5/6.25/7.50/8.75/9.37/(100=3.5)]
292.95기준[3.5진동폭][3.5/2->1.75/2->0.88/2->0.44->0.22][3.28,3.06,2.62,1.74]
1]시가[2.95]
2.95+[3.5의0.63]
[3.5의1.25]
[3.5의3.75]
[3.5의절반]
[3.5의6.25]
[3.5의7.50]
[3.5의8.75]
[3.5의9.37]
[3.5]
2.95-[3.5의9.37]
[3.5의8.75]
[3.5의7.50]
[3.5의6.25]
[3.5의절반]
[3.5의3.75]
[3.5의1.25]
[3.5의0.63]
[3.5]
2]종가
종가[2.95]
2.95+[3.5의0.63]
[3.5의1.25]
[3.5의3.75]
[3.5의절반]
[3.5의6.25]
[3.5의7.50]
[3.5의8.75]
[3.5의9.37]
[3.5]
2.95-[3.5의9.37]
[3.5의8.75]
[3.5의7.50]
[3.5의6.25]
[3.5의절반]
[3.5의3.75]
[3.5의1.25]
[3.5의0.63]
[3.5]
3]지정가
지정가[2.95]
2.95+[3.5의0.63]
[3.5의1.25]
[3.5의3.75]
[3.5의절반]
[3.5의6.25]
[3.5의7.50]
[3.5의8.75]
[3.5의9.37]
[3.5]
2.95-[3.5의9.37]
[3.5의8.75]
[3.5의7.50]
[3.5의6.25]
[3.5의절반]
[3.5의3.75]
[3.5의1.25]
[3.5의0.63]
[3.5]
2023-01-02
907
글번호 164995
답변완료
수식 문의
.일전에 도움 주신 수식을 다음과 같이 수정하고 싶습니다.
아래의 수식은
진입 시그널이 발생한 캔들의 기준,
N봉의 고/저가에 +_n틱을 더해 레인지를 설정하고
해당 레인지 안에 들어오는 추가 진입 시그널을 걸러내고
손실보는 방향으로 벗어나면 손절대신 햇지로 반대시그널를 추가하는 로직입니다.
위와 같이, 진입 시그널과 / 헷지 시그널을 구분하여 볼 때,
수정 요청 :
ㄱ. 해당 레인지 안에서 반대포지션의 '진입시그널'은 허용합니다.
(ex : 매수시그널로 만들어진 레인지 안에서 추가 매수 시그널은 걸러내되 매도 진입 시그널은 발생시킴)
ㄴ. 매수진입 후 - 햇지매도 시그널이 발생한 상태라면 매도진입 시그널은 걸러내지 않고 발생시킵니다.
그 반대도 마찬가지.
(이렇게 되면 레인지 안에서 등락하여 매수-헷지-매도-헷지가 반복되더라도
해당 레인지 안에서의 총 진입 횟수는 4회를 넘지 않을 것입니다)
ㄷ. 청산로직 추가 :
현재 포지션이 '진입시그널'일 때 -
설정된 레인지값 * 1 이상 수익나면 모두 청산합니다.
현재 포지션이 '헷지 시그널' 일 때 -
설정된 레인지 값 * 1.5 이상 수익 나면 모두 청산합니다.
끝.
지표나 차트의 조건값이 아닌
포지션 변화에 따라 시그널을 구분해서 조건을 다르게 하는게 꽤 어렵네요.
부탁 좀 드리겠습니다.
새해 복많이 받으시고,
되시는 일 항상 잘 되시기 바랍니다.
감사합니다.
======= 아래 ===========
Input : Vector(9), Period(14), 매수선(40), 매도선(60);
input : 저가봉(5),고가봉(5),저가폭(10),고가폭(10);
Input : shortPeriod(12), longPeriod(26);
Var : rsi_(0), rsi_signal(0) ;
var : ll(0),hh(0),eh(0),el(0),BuyEntry(False),SellEntry(False);
Var : MACDv(0), MACDsig(0), macdosc(0);
rsi_ = RSI(Period);
rsi_signal = MA(RSI(Period), Vector);
MACDv = Data2(MACD(shortPeriod, longPeriod));
//MACDsig = Data2(ema(MACDv,Period));
MACDsig = Data2(ema(Data2(MACD(shortPeriod, longPeriod)),Period));
//macdosc = Data2(MACDv-ema(MACDv,Period));
macdosc = Data2(Data2(MACD(shortPeriod, longPeriod))-ema(Data2(MACD(shortPeriod, longPeriod)),Period));
ll = lowest(l,저가봉);
hh = highest(h,고가봉);
if MarketPosition != 0 Then
{
if MarketPosition != MarketPosition[1] or CurrentContracts > CurrentContracts[1] Then
{
eh = hh;
el = ll;
}
}
BuyEntry = true;
SellEntry = true;
if MarketPosition == 0 Then
{
if MarketPosition(1) == 1 and (C > ll[BarsSinceEntry(1)]-PriceScale*저가폭 and C < HH[BarsSinceEntry(1)]+PriceScale*고가폭) Then
BuyEntry = False;
if MarketPosition(1) == -1 and (C > ll[BarsSinceEntry(1)]-PriceScale*저가폭 and C < HH[BarsSinceEntry(1)]+PriceScale*고가폭) Then
SellEntry = False;
}
else
{
if MarketPosition == 1 and C > el-PriceScale*저가폭 and C < eh+PriceScale*고가폭 Then
BuyEntry = false;
if MarketPosition == -1 and C > el-PriceScale*저가폭 and C < eh+PriceScale*고가폭 Then
SellEntry = false;
}
if macdosc > 0 && rsi_signal < 매수선 && rsi_ > rsi_signal && rsi_[1] < rsi_signal[1] Then
{
if BuyEntry == true Then
Buy("B");
}
if macdosc > 0 && rsi_signal < 매수선 && rsi_[1] < 30 && rsi_ > 30 Then
{
Buy("1");
}
else if macdosc < 0 && rsi_signal > 매도선 && rsi_[1] > 70 && rsi_ < 70 Then
{
Sell("2");
}
if macdosc < 0 && rsi_signal > 매도선 && rsi_ < rsi_signal && rsi_[1] > rsi_signal[1] Then
{
if SellEntry == true Then
Sell("S");
}
if MarketPosition == 1 Then
Sell("bx",AtStop,ll[BarsSinceEntry]-PriceScale*저가폭);
if MarketPosition == -1 Then
BUY("sx",AtStop,hh[BarsSinceEntry]+PriceScale*고가폭);
2023-01-02
916
글번호 164988
답변완료
도와주세요~
실매수 누적거래량으로 봉차트에 추세선을 그리고자 합니다.
첫 캔들 종가 값을 기준으로 가격추세선 Plot1을 시작(예; 이것을 추세선값 A라고 가정)
실매수 누적거래량(변수B) 산정 ---- 변수B = 변수B + (Upvol-DownVol)
누적거래량(변수B)보다 현(Upvol-DownVol)거래량의 결과값에 대한 상승과 하락의 100분율을 구함.(변수C)
입력변수1 = 0.15 (현 거래량이 전 거래량보다 + 일 때)
입력변수2 = -0.15 (현 거래량이 전 거래량보다 - 일 때)
**추세선이 실제거래량과 차이를 보정하기 위함
결론적으로 Plot1 =
전누적거래량비 현 거래량결과값이 +값을 가지면 추세선값A x 100분율을 구한 변수C x 입력변수1
전누적거래량비 현 거래량결과값이 -값을 가지면 추세선값A x 100분율을 구한 변수C x 입력변수2
전누적거래량비 현 거래량결과값이 0값을 가지면 추세선값A = 전추세선값
도와주심에 진심으로 감사드리며
새해 복 많이 받으세요.
2023-01-02
885
글번호 164987
답변완료
지표
항상감사합니다.
1]챠트에 시간표시 부탁드립니다
5분봉챠트라면
5분시가에서 종가까지 시간이 현재봉위치오른쪽에 표시 부탁드립니다.
시,분,초
2]위아래 저점에서 고점까지가격은 표시됩니다.
1.25부터~8.75까지 가격표시도 될까요
저점)0+1.25
2.5
3.75
5.00
6.25
7.50
8.75
고점)100
input:length(10),글자크기(8);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(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]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2)+NewLine+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 2, 1);
Text_SetSize(text1,글자크기);
}
}
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]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2)+NewLine+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 2, 0);
Text_SetSize(text1,글자크기);
}
}
TL_SetSize(TL1,3);
TL_SetColor(TL1,Yellow);
2023-01-01
914
글번호 164986
답변완료
키움증권 수식 변환을 부탁드립니다.
새해 복 많이 받으십시요!!!
키움 수식 변환을 부탁드립니다.
B = ((H + L)/2);
DnB = B - atr(period) + multiple;
UpT = valuewhen(1, highest(DnB(1), period) < DnB, DnB);
UpT
-----------------------------------------------
지표설정
period 20
multiple 3
2023-01-01
1099
글번호 164985
답변완료
예스랭귀지로 변환 부탁드립니다.
Vars :
sell_price( 100 ),
Buy_price( 100 );
Params :
Profit_Target( 100 ),
Stop_Loss( 100 );
If c < Buy_price Then
Begin
Buy("Buy");
End;
If c > Sell_price Then
Begin
Sell("Sell");
End;
SetStopProfitTarget( Profit_Target * pricescale );
SetStopLoss( Stop_Loss * pricescale );
2023-01-01
884
글번호 164984
답변완료
예스랭귀지로 변환 부탁드립니다.
Params :
Profit_Target( 90 ),
Stop_Loss( 40 );
param : BuyA_iLen(20) ,
ExitLongA_iLen(15),
SellA_iLen(20),
ExitShortA_iLen(15);
param : BuyA_ChoiceType(0),
ExitLongA_ChoiceType(1) ;
param : SellA_ChoiceType(1) ,
ExitShortA_ChoiceType(0);
param : Margin(0.00) , cut_amt(1), loss_limit(-100); // cut_amt
param : Time_start(160000) , time_end(050000), time_exit1(051000) ;
var : time_now(0) , Trading_time(False), all_exit(False) , Daily_vari(False),
Buy_ok(False) , Sell_ok(False) ;
var : yesterday_low(0) , yesterday_high(0) ;
var : today_low(0) , today_high(0) ;
var : yesterday_close(0) ;
var : check_01(0), check_02(0),check_03(0),check_04(0),check_05(0);
Var : TickSize( 0 );
TickSize = OneTick * PriceScale;
//////////////////////////////////////////////////////////////////////////
// 매수진입 [BuyA : 종가봉 20 갱신, ]
//////////////////////////////////////////////////////////////////////////
var : BuyA_V1(0), BuyA_V2(0), BuyA_Result(FALSE);
BuyA_V1 = Highest(High, BuyA_iLen);
BuyA_V2 = Lowest(Low, BuyA_iLen);
BuyA_Result = Close > BuyA_V1[1];
if ( BuyA_Result = true )
Then
Buy("Buy");
//////////////////////////////////////////////////////////////////////////
// 매수청산 [ExitLongA : 종가봉 15 갱신, ]
//////////////////////////////////////////////////////////////////////////
var : ExitLongA_V1(0), ExitLongA_V2(0), ExitLongA_Result(FALSE);
ExitLongA_V1 = Highest(High, ExitLongA_iLen);
ExitLongA_V2 = Lowest(Low, ExitLongA_iLen);
ExitLongA_Result = Close < ExitLongA_V2[1];
if ( ExitLongA_Result = true )
Then
ExitLong("");
//////////////////////////////////////////////////////////////////////////
// 매도진입 [SellA : 종가봉 20 갱신, ]
//////////////////////////////////////////////////////////////////////////
var : SellA_V1(0), SellA_V2(0), SellA_Result(FALSE);
SellA_V1 = Highest(High, SellA_iLen);
SellA_V2 = Lowest(Low, SellA_iLen);
SellA_Result = Close < SellA_V2[1];
if ( SellA_Result = true ) Then
Sell("Sell");
//////////////////////////////////////////////////////////////////////////
// 매도청산 [ExitShortA : 종가봉 15 갱신, ]
//////////////////////////////////////////////////////////////////////////
var : ExitShortA_V1(0), ExitShortA_V2(0), ExitShortA_Result(FALSE);
ExitShortA_V1 = Highest(High, ExitShortA_iLen);
ExitShortA_V2 = Lowest(Low, ExitShortA_iLen);
ExitShortA_Result = FALSE;
ExitShortA_Result = Close > ExitShortA_V1[1];
if ( ExitShortA_Result = true )
Then
ExitShort("");
SetStopProfitTarget( Profit_Target * TickSize );
SetStopLoss( Stop_Loss * TickSize );
2023-01-01
881
글번호 164983
답변완료
수식전환 부탁드립니다
늘 건강하시고 도움받음에 다시한번 감사드립니다.
매도
highestsince(1,crossup (avg(c,5),avg(c,20)),avg(c,20));
매수
lowestsince(1,crossup (avg(c,5),avg(c,20)),avg(c,20));
이평
avg(c,20)
고맙습니다.
2023-01-01
1082
글번호 164982
쌈팔광땡 님에 의해서 삭제되었습니다.
2023-01-01
0
글번호 164981