커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6041
글번호 230811
답변완료
수식 부탁드립니다
var1 = ma(C,20);
if MarketPosition == 0 and CrossUp(c,var1) Then
Buy("b",OnClose,DEf,1);
if MarketPosition == 1 Then
{
ExitLong("Bp",AtLimit,EntryPrice+PriceScale*30);
Sell("bs",AtStop,EntryPrice-PriceScale*30,MaxContracts*2);
}
if MarketPosition == -1 Then
{
ExitShort("Sp",AtLimit,EntryPrice-PriceScale*30);
Buy("sb",AtStop,EntryPrice+PriceScale*30,MaxContracts*2);
}
안녕하세요
이평선 넘어가면 30틱 이익나면 끝내고 30틱 손실나면 계속 늘리는
식인데 진입후 바로 이익 손실이나면 다음 봉에서 실행되는 데
해결 방법 없을까요?
2023-01-02
946
글번호 165018
동백초보 님에 의해서 삭제되었습니다.
2023-01-02
9
글번호 165004
답변완료
수정부탁드립니다
수정ㅂ부탁드립니다. 표시가안되네요
input: ATRLength9(100), ATRMult9(0.5);
vars: ATR9(0), avg9(0), dn9(0), up9(0), trend9(1), flag9(0), flagh9(0), qqq9(0),trTx(0);
ATR9 = ATR(ATRLength9) * ATRMult9;
avg9 = (highest(H,1)+lowest(L,1))/2;
up9 = avg9 + ATR9;
dn9 = avg9 - ATR9;
if close > up9[1] then trend9 = 1;
else if close < dn9[1] then trend9 = -1;
if trend9 < 0 and trend9[1] > 0 then flag9 = 1; else flag9 = 0;
if trend9 > 0 and trend9[1] < 0 then flagh9 = 1; else flagh9 = 0;
if trend9 > 0 and dn9 < dn9[1] then dn9 = dn9[1];
if trend9 < 0 and up9 > up9[1] then up9 = up9[1];
if flag9 == 1 then up9 = avg9 + ATR9;
if flagh9 == 1 then dn9 = avg9 - ATR9;
if trend9 == 1 then qqq9 = up9;
{
Text_Delete(trtx);
trTx = Text_New(sDate,sTime,var1-PriceScale*2," ▲");
Text_SetColor(trTx,Red);
Text_SetStyle(trTx,2,0);
Text_SetSize(trTx,20);
}
if trend9 == -1 then qqq9 = dn9;
{
Text_Delete(trtx);
trTx = Text_New(sDate,sTime,var1+PriceScale*2," ▼");
Text_SetColor(trTx,Blue);
Text_SetStyle(trTx,2,1);
Text_SetSize(trTx,20);
}
2023-01-02
1024
글번호 164999
답변완료
수정부탁드립니다
input: ATRLength9(100), ATRMult9(10);
vars: ATR9(0), avg9(0), dn9(0), up9(0), trend9(1), flag9(0), flagh9(0), qqq9(0),trTx(0);
ATR9 = ATR(ATRLength9) * ATRMult9;
avg9 = (highest(H,1)+lowest(L,1))/2;
up9 = avg9 + ATR9;
dn9 = avg9 - ATR9;
if close > up9[1] then trend9 = 1;
else if close < dn9[1] then trend9 = -1;
if trend9 < 0 and trend9[1] > 0 then flag9 = 1; else flag9 = 0;
if trend9 > 0 and trend9[1] < 0 then flagh9 = 1; else flagh9 = 0;
if trend9 > 0 and dn9 < dn9[1] then dn9 = dn9[1];
if trend9 < 0 and up9 > up9[1] then up9 = up9[1];
if flag9 == 1 then up9 = avg9 + ATR9;
if flagh9 == 1 then dn9 = avg9 - ATR9;
if trend9 == 1 then qqq9 = up9;
{
Text_Delete(trtx);
trTx = Text_New(sDate,sTime,var1-PriceScale*2," ▲");
Text_SetColor(trTx,Red);
Text_SetStyle(trTx,2,0);
Text_SetSize(trTx,20);
}
if trend9 == -1 then qqq9 = dn9;
{
Text_Delete(trtx);
trTx = Text_New(sDate,sTime,var1+PriceScale*2," ▼");
Text_SetColor(trTx,Blue);
Text_SetStyle(trTx,2,1);
Text_SetSize(trTx,20);
}
2023-01-02
1238
글번호 164998
답변완료
수식 부탁드립니다.
특정날짜를 지정해서 매매를 안하게끔 조건식 가능한지요?
예를들어 작년수능일 22/11/17 , 년마지막날 22/12/30 , 새해첫날 23/01/02
세 날짜 강제로 주문 안나오게 가능하면 부탁드립니다.
감사합니다.
2023-01-02
930
글번호 164996
답변완료
지표
항상감사합니다.
새해 복많이 받으세요
지표
시가(종가)(지정가격)에서 진동폭을 대입했을때
시가가 중간이 되어 위로 아래로 지표라인 부탁드립니다.
*]
시가 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
987
글번호 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
971
글번호 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
944
글번호 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
983
글번호 164986