커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6180
글번호 230811
답변완료
문의드립니다,
수고많으십니다.
아래수식중 증액을할때 진입할때마다라고 했는데 시스템에서 정한기준안에서
예를들면 시스템진입식에 10번진입 실제진입5번일때 실제진입한것만
증액으로 진입식부탁드립니다.
1.
inputs : P1(5),P2(20),RSILength(10), OverSold(30),OverBought(70);
input : 첫진입금액(1000000),A(10);
var : m1(0,Data2),m2(0,Data2), R(0,Data1);
var : TT(0,Data1),T1(0,Data1),entry(0,Data1),mm(0,data1),vol(0,Data1);
m1 = Data2(ma(C,P1));
m2 = Data2(ma(C,P2));
R = data1(RSI(RSILength));
If Data2(m1 > m2) and Crossup(R, OverSold) Then
{
if TotalTrades == 0 Then
mm = 첫진입금액;
Else
mm = mm*(1+A/100);
Buy("B",OnClose,Def,Floor(Floor(mm/C)/10)*10);
}
if Data2(CrossDown(m1,m2)) or Crossup(R, OverBought) Then
Sell("S");
2
inputs : P1(5),P2(20),RSILength(10), OverSold(30),OverBought(70);
input : 첫진입금액(1000000),A(10),B(20);
var : m1(0,Data2),m2(0,Data2), R(0,Data1),LP(0,Data1);
var : TT(0,Data1),T1(0,Data1),entry(0,Data1),mm(0,data1),vol(0,Data1);
m1 = Data2(ma(C,P1));
m2 = Data2(ma(C,P2));
R = data1(RSI(RSILength));
if MarketPosition == 1 Then
LP = LatestEntryPrice(0);
Else
LP = LatestEntryPrice(1);
If Data2(m1 > m2) and Crossup(R, OverSold) Then
{
if TotalTrades == 0 Then
mm = 첫진입금액;
Else
{
if LP > C Then
mm = mm*(1+B/100);
Else
mm = mm*(1+A/100);
}
Buy("B",OnClose,Def,Floor(Floor(mm/C)/10)*10);
}
if Data2(CrossDown(m1,m2)) or Crossup(R, OverBought) Then
Sell("S");
2025-05-22
323
글번호 191081
답변완료
문의 드립니다.
아래 식에서 기준가 2.50을 첫 돌파 후 5번째에 매수 진입하도록 가능할까요?
그리고 익절은 직접 입력할 수 있도록 추가해 주시면 감사하겠습니다.
부탁드립니다.
input : Price(2.50);
if crossup(C,price) Then
buy();
if CrossDown(C,price) Then
ExitLong();
2025-05-22
342
글번호 191077
답변완료
문의 드립니다.
안녕하세요 항상 감사드립니다.
아래의 서식에서 추가적인 서식을 부탁드립니다.
*추가사항
1.연결선물 기준 5분봉에서 이평선 50일선 아래 위치시 매도만 진입, 50일선 위에 위치시 매수 만 진입
(50일선은 최적화를 할 수 있게 input으로 넣어주시기 바랍니다.)
# KOSPI 선물 5분봉
input: tt(150000),당일진입횟수(3);
var: chkP(10), reChkP(20), stopChk(25);
var: HH(0), LL(0), BS(0), SS(0);
var: dayChk(0);
var : TotalCount(0),PreDay(0),DayEntry(0);
TotalCount = TotalTrades;
if Bdate != Bdate[1] Then
PreDay = TotalCount[1];
DayEntry = (TotalCount-PreDay)+IFF(MarketPosition != 0,1,0);
if BarIndex == 0 then ClearDebug();
if dayindex == chkP then
{
HH = Highest(Max(C,O), chkP+1);
LL = Lowest(Min(C,O), chkP+1);
#if date == 20240612 then messageLog("--HH %.2f, LL: %.2f", HH, LL);
}
#if High >= HH and MarketPosition == 0 and ExitDate(1) < Date and time > 93000 then messageLog("HH %.2f, High: %.2f", HH, High);
if DayIndex >= chkP
# and Time < 95000
and sDate == NextBarSdate
and EntryDate(0) < Date
and EntryDate(1) < Date
and DayEntry < 당일진입횟수
Then {
Buy("B1", AtStop, HH);
Sell("S1", AtStop, LL);
}
//if dayChk == 0 and High >= HH and MarketPosition == 0 and ExitDate(1) < Date and time > 93000 then {
// messageLog("HH %.2f, High: %.2f", HH, High);
// dayChk = 1;
//}
if ExitDate(1) == Date
and Time < 150000
// and LatestEntryName(1) != "B2"
// and LatestEntryName(1) != "S2"
// and LatestEntryName(0) != "B2"
// and LatestEntryName(0) != "S2"
Then
{
if DayIndex < reChkP Then
{
HH = Highest(Max(C,O), DayIndex+1);
LL = Lowest(Min(C,O), DayIndex+1);
}
Else
{
HH = Highest(Max(C,O), reChkP);
LL = Lowest(Min(C,O), reChkP);
}
if DayEntry < 당일진입횟수 Then
{
Buy("B2", AtStop, HH);
Sell("S2", AtStop, LL);
}
}
if (MarketPosition == 1) Then {
if DayIndex < stopChk Then {
BS = Lowest(Min(C,O), DayIndex+1);
}
Else {
BS = Lowest(Min(C,O), stopChk);
}
ExitLong("EL", AtStop, BS);
}
if (MarketPosition == -1) Then {
if DayIndex < stopChk Then {
SS = Highest(Max(C,O), DayIndex+1);
}
Else {
SS = Highest(Max(C,O), stopChk);
}
#messageLog(" SS %.2f", SS);
ExitShort("ES", AtStop, SS);
}
var : month(0),nday(0),week(0),X(False);
month = int(date/100)-int(date/10000)*100;
nday = date - int(date/100)*100;
Week = DayOfWeek(date);
#만기일
if (month%3 == 0 and nday >= 8 and nday <= 14 and week == 4) then
{
X = true;
SetStopEndofday(151500);
}
Else#만기일아닐때
{
X = False;
SetStopEndofday(152000);
}
2025-05-22
533
글번호 191074
답변완료
문의드립니다.
시스템을 복리계산하기 위해서 ㅇ
초기자본을 100,000$ 설정하고
수익금이 30,000$이 싸일때마다 1계약씩 늘어나게 하는 수식이 가능할까요?
최대 계약수는 10계약으로...
가능하면 위 3개를 변수로 지정해서 부탁드리겠습니다
2025-05-22
327
글번호 191072
답변완료
부탁드립니다 항상 감사합니다
Input:
length(100), mult(1),
TP_Ratio(1.01), SL_Ratio(0.99),
진입수량(1);
Var:
src(0), a(0), b(0), size(0),
var1(0), var2(0),
Condition1(false), Condition2(false),
t1(0), t2(0),
value1(0), value2(0),
진입가(0), TP(0), SL(0),
posFlag(0), tx(0);
// 1. 원본 가격
src = Close;
// 2. size 계산
size = iff((a[1]-a[2]) > 0 or (b[1]-b[2]) < 0 , atr(length) , TrueRange);
// 3. 상승/하락 조건 기간 카운트
if a[1] > a[2] Then
Begin
Condition1 = true;
var1 = 0;
end
Else if Condition1 then
var1 = var1 + 1;
if b[1] < b[2] Then
Begin
Condition2 = true;
var2 = 0;
end
Else if Condition2 then
var2 = var2 + 1;
// 4. 추세선 계산
a = max(src,a[1]) - size/pow(length,2)*(var1*mult);
b = min(src,b[1]) + size/pow(length,2)*(var2*mult);
// 5. 꺾임 방향
t1 = iff(a > a[1], 1, iff(a < a[1], -1, t1[1]));
t2 = iff(b > b[1], 1, iff(b < b[1], -1, t2[1]));
// 6. 꺾임 발생 시 진입
If t1 == -1 and t1 != t1[1] and posFlag = 0 Then
Begin
SellShort("Short") next bar at market;
진입가 = Close;
TP = 진입가 * SL_Ratio; // 숏 전략이므로 SL<진입가
SL = 진입가 * TP_Ratio;
posFlag = -1;
tx = Text_New(Date, Time, High, "⬇ 매도진입");
Text_SetColor(tx, Red);
End;
If t2 == -1 and t2 != t2[1] and posFlag = 0 Then
Begin
Buy("Long") next bar at market;
진입가 = Close;
TP = 진입가 * TP_Ratio;
SL = 진입가 * SL_Ratio;
posFlag = 1;
tx = Text_New(Date, Time, Low, "⬆ 매수진입");
Text_SetColor(tx, Blue);
End;
// 7. TP/SL 도달 시 청산
If posFlag = -1 Then
Begin
If Close <= TP or Close >= SL Then
Begin
BuyToCover("청산") next bar at market;
posFlag = 0;
End;
End;
If posFlag = 1 Then
Begin
If Close >= TP or Close <= SL Then
Begin
Sell("청산") next bar at market;
posFlag = 0;
End;
End;
// 8. 시각화
Plot1(a, "상단추세");
Plot2(b, "하단추세");
Plot3(value1, "상단꺾임");
Plot4(value2, "하단꺾임");
오류수정부탁드립니다
2025-05-22
622
글번호 191067
답변완료
기존수식에 양봉조건만 넣어주세요
var : 목(0),표(0),가(0),조건(False),cs(-1);
if dayclose()> dayclose(1)*1.29 Then
{
목 = dayclose;
표 = dayopen;
가 = floor((목+표)/2);
cs = 0;
}
조건 = crossdown(c, 가);
if cs >= 0 and 조건 Then
cs = cs+1;
if cs == 1 and cs[1] == 0 Then
Find(1);
선생님께서 만들어주신 수식입니다. 여기에서 양봉만나오게하는조건을 넣었는데 오류가 나서 번거롭더라도 직접넣어주시면 감사하겠습니다
2025-05-22
332
글번호 191066
사공하늘 님에 의해서 삭제되었습니다.
2025-05-22
64
글번호 191065
답변완료
수식 부탁드립니다
다음신호의 수식변환을 부탁드립니다.'
감사합니다.
A=shift(c,-12+1);
B=shift(c,-26+1);
BB=BBandsUp(70,3);
M=Macd(5,52);
조건1=CrossUp(A,BB(0)) && !(M>0);
S2=Valuewhen(1,조건1&&!조건1(1),L);
T=Ttsf(C, 50);
CrossUp(T, S2)
2025-05-22
314
글번호 191064
답변완료
부탁드립니다 항상 감사합니다
Input:
rsiLen(14), rsiCut(50),
macdFastLen(12), macdSlowLen(26), macdSignalLen(9),
tp1Ratio(1.005), tp2Ratio(1.010), tp3Ratio(1.015), slRatio(0.99),
volumeMultiplier(2.0), 평균거래량기간(20),
시작시간(93000), 종료시간(150000);
Var:
rsiVal(0), macdFastEMA(0), macdSlowEMA(0),
macdMain(0), macdSignal(0), macdHist(0),
진입가(0), TP1(0), TP2(0), TP3(0), SL(0),
거래량기준(0), 텍스트ID(0), 손익비텍스트(0),
TL1(0), TL2(0), TL3(0), TL4(0),
박스상(0), 박스하(0),
매수조건(false), 청산1(false), 청산2(false), 청산3(false);
// ① RSI + MACD 계산
rsiVal = RSI(rsiLen);
If CurrentBar = 1 Then
Begin
macdFastEMA = Close;
macdSlowEMA = Close;
End
Else
Begin
macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1)));
macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1)));
macdMain = macdFastEMA - macdSlowEMA;
macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1)));
macdHist = macdMain - macdSignal;
End;
// ② 거래량 기준
거래량기준 = Average(Volume, 평균거래량기간);
// ③ 진입 조건 + 박스 + 라벨
If sTime >= 시작시간 and sTime <= 종료시간 and 매수조건 = false Then
Begin
If rsiVal > rsiCut and macdHist > 0 and macdHist[1] < 0 and Volume > 거래량기준 * volumeMultiplier Then
Begin
진입가 = Close;
TP1 = 진입가 * tp1Ratio;
TP2 = 진입가 * tp2Ratio;
TP3 = 진입가 * tp3Ratio;
SL = 진입가 * slRatio;
박스상 = TP3;
박스하 = SL;
// 자동 매수 진입
Buy("LongEntry") Next Bar at Market;
// 박스 표시 (TL 선 4개)
TL_Delete(TL1); TL_Delete(TL2); TL_Delete(TL3); TL_Delete(TL4); Text_Delete(손익비텍스트);
TL1 = TL_New(Date, Time, 박스상, Date + 1, Time, 박스상);
TL2 = TL_New(Date, Time, 박스하, Date + 1, Time, 박스하);
TL3 = TL_New(Date, Time, 박스상, Date, Time, 박스하);
TL4 = TL_New(Date + 1, Time, 박스상, Date + 1, Time, 박스하);
For TL in [TL1, TL2, TL3, TL4] Do
Begin
TL_SetColor(TL, RGB(200,255,200));
TL_SetSize(TL, 1);
End;
// 손익비 라벨
손익비텍스트 = Text_New(Date, Time, (TP3 + SL)/2,
"손익비 " + NumToStr(AbsValue(TP3 - 진입가) / AbsValue(진입가 - SL), 1) + ":1");
Text_SetColor(손익비텍스트, Green);
Text_SetStyle(손익비텍스트, 1, 0);
텍스트ID = Text_New(Date, Time, Low, "*매수 진입조건 만족");
Text_SetColor(텍스트ID, Green);
매수조건 = true;
청산1 = false; 청산2 = false; 청산3 = false;
End;
End;
// ④ TP별 청산 시뮬레이션
If 매수조건 Then
Begin
If 청산1 = false and Close >= TP1 Then
Begin
Alert("📈 TP1 도달 – 30% 청산");
청산1 = true;
End;
If 청산2 = false and Close >= TP2 Then
Begin
Alert("📈 TP2 도달 – 50% 청산");
청산2 = true;
End;
If 청산3 = false and Close >= TP3 Then
Begin
Alert("✅ TP3 도달 – 나머지 20% 청산 완료");
청산3 = true;
매수조건 = false;
End;
If Close <= SL Then
Begin
Alert("⛔ 손절가 도달 – 전체 청산");
청산1 = true; 청산2 = true; 청산3 = true;
매수조건 = false;
End;
End;
// ⑤ 목표가 시각화
If 매수조건 Then
Begin
Plot1(TP1, "TP1", RGB(0, 150, 255));
Plot2(TP2, "TP2", RGB(0, 100, 200));
Plot3(TP3, "TP3", RGB(0, 50, 150));
End;
지표작성시 오류가 나서 수정부탁드립니다.
2.
Input:
rsiLen(14), rsiCut(50),
macdFastLen(12), macdSlowLen(26), macdSignalLen(9),
tp1Ratio(0.995), tp2Ratio(0.990), tp3Ratio(0.985), slRatio(1.01),
volumeMultiplier(2.0), 평균거래량기간(20),
시작시간(93000), 종료시간(150000);
Var:
rsiVal(0), macdFastEMA(0), macdSlowEMA(0),
macdMain(0), macdSignal(0), macdHist(0),
진입가(0), TP1(0), TP2(0), TP3(0), SL(0),
거래량기준(0), 텍스트ID(0),
TL1(0), TL2(0), TL3(0), TL4(0),
박스상(0), 박스하(0),
매도조건(false);
// ▶? 1. RSI 계산
rsiVal = RSI(rsiLen);
// ▶? 2. MACD 수동 계산 (Index 기준 초기화 제거)
If CurrentBar == 1 Then
Begin
macdFastEMA = Close;
macdSlowEMA = Close;
macdMain = 0;
macdSignal = 0;
macdHist = 0;
End
Else
Begin
macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1)));
macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1)));
macdMain = macdFastEMA - macdSlowEMA;
macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1)));
macdHist = macdMain - macdSignal;
End;
// ▶? 3. 평균 거래량 계산
거래량기준 = ma(Volume, 평균거래량기간);
// ▶? 4. 진입 조건 + 시간 필터
If sTime >= 시작시간 and sTime <= 종료시간 Then
Begin
If rsiVal < rsiCut and macdHist < 0 and macdHist[1] > 0 and Volume > 거래량기준 * volumeMultiplier Then
Begin
매도조건 = true;
진입가 = Close;
// 목표가 / 손절가 계산
TP1 = 진입가 * tp1Ratio;
TP2 = 진입가 * tp2Ratio;
TP3 = 진입가 * tp3Ratio;
SL = 진입가 * slRatio;
박스상 = SL;
박스하 = TP3;
// ?? 손익비 박스 (TL 선 4개)
TL1 = TL_New(sDate, sTime, 박스상, sDate, sTime, 박스하);
TL2 = TL_New(sDate[1], sTime[1], 박스상, sDate[1], sTime[1], 박스하);
TL3 = TL_New(sDate[1], sTime[1], 박스상, sDate, sTime, 박스상);
TL4 = TL_New(sDate[1], sTime[1], 박스하, sDate, sTime, 박스하);
TL_SetColor(TL1, RGB(255, 200, 200)); TL_SetSize(TL1, 1);
TL_SetColor(TL2, RGB(255, 200, 200)); TL_SetSize(TL2, 1);
TL_SetColor(TL3, RGB(255, 200, 200)); TL_SetSize(TL3, 1);
TL_SetColor(TL4, RGB(255, 200, 200)); TL_SetSize(TL4, 1);
// ?? 텍스트 알림
텍스트ID = Text_New(Date, Time, High, "*진입조건만족");
Text_SetColor(텍스트ID, RGB(255, 0, 0));
End;
End;
// ▶? 5. 목표가 / 손절가 Plot 시각화
If 매도조건 Then
Begin
Plot1(TP1, "TP1", RGB(0, 150, 255));
Plot2(TP2, "TP2", RGB(0, 100, 200));
Plot3(TP3, "TP3", RGB(0, 50, 150));
Plot4(SL, "손절", RGB(255, 0, 0));
End;
매수 버젼도 만들어주시면 감사드리겠습니다. 그리고 가능하다면 위 2번째 수식의 매수 매도 통합버젼도 부탁드리겠습니다 오늘도 고생많으십니다 감사합니다
2025-05-22
648
글번호 191063