커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6188
글번호 230811
답변완료
재문의 드립니다.
항상 도움의 수식에 감사드립니다.
다름 아니오라 55715번 답변으로 올려주신 수식으로 실행하였을때 이해가 잘 안되는 부분이 있어서 질문 드리고 수식 수정도 부탁드립니다.
1.당일누적수익 계산값
당일누적수익의 계산된 시간범위를 정확히 알고 싶습니다.
매매시간제한을 10시 ~ 04시까지로 설정하였는데 당일누적수익을 계산한 시간도 날짜 관계없이 이 시간범위(10시 ~ 04시까지)인지 아니면 10시 ~ 00시 이전 까지만 당일이고 00시 ~ 04시까지는 익일로 넘어가서 누적되는건지 궁금합니다.
왜냐면 10시 ~ 04시까지의 수익을 계산기로 계산해보면 합계는 손실이 없는 것으로 나오는 날도 04시 기준으로 캔들위에 실시간 표시되는 값이 손실이 누적된 것으로 나오고 00시 ~ 23시 59분까지를 계산해봐도 합계가 손실이 없는 날에 손실이 누적된 것으로 캔들 위에 실시간으로 출력이 되고 있어서요.
그리고 00시 ~ 오전중에만 간단히 계산했을때도 몇번 안되는 신호횟수이고 분명히 수익중인데도 캔들위에 실시간 누적수익표시에는 마이너스로 손실틱수가 표시되고 있어서 이해가 되지를 않습니다. 차트는 200틱차트를 사용하고 있습니다.
그리고 아래 수식에서 당초에는 캔들 위에 실시간으로 표시된다음 지나가면 계산값이 삭제되고 실시간으로 매번 캔들마다 표시되던 것을 수정하여 매매종료 시간인 04시에만 또는 당일로 계산된 시간범위의 끝이 자정이라면 자정에만 캔들 위에 당일누적수익 틱수를 출력하고 지나가도 삭제되지 않고 남아있도록 하려면 어떻게 수정되어야 하는지 부탁드립니다.
2.매매종료시간 및 조건수식 수정
-매매종료시간을 10시 ~ 04시까지로 설정하였는데 04시 전에 진입신호가 나온 상태로 10시 이전까지 신호가 정지되었다가 10시 이후에야 04시 이전에 나와있던 신호가 마무리되고 다음 신호가 나오고 있습니다.
이것을 현재 포지션의 익절,손실 유무에 관계없이 04시에는 매매를 무조건 강제종료하여 신호를 끝내고 10시부터는 새롭게 진입신호를 발생시키고 싶습니다.
04 ~ 10시 사이에 급변동이 생기면 안돼서요.
-매매시간 중이라도 현재누적손익이 +100틱에 도달했거나 또는 반대로 손실로 -50틱에 도달하면 당일 매매 강제종료하도록 수식 수정바랍니다.
감사합니다.^^
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다.
> 안녕하세요
예스스탁입니다.
Input : 당일수익틱수(50);
Var : N1(0),dayPl(0),당일수익(0),Xcond(false);
var : Tcond(false),mav1(0),mav2(0),Hpl(0),tx(0),t(0),t1(0),t2(0);
당일수익 = PriceScale*당일수익틱수;
if stime == 100000 or (stime > 100000 and stime[1] < 100000) Then{
Tcond = true;
Xcond = false;
N1 = NetProfit;
Hpl = 0;
}
if stime == 40000 or (stime > 40000 and stime[1] < 40000) Then
Tcond = false;
mav1 = ma(C,5);
mav2 = ma(C,20);
daypl = NetProfit-N1;
if crossup(c,mav2) Then{
t = 1;
t1 = t[1];
t2 = t1[1];
if C > O Then
t = 2;
}
if CrossDown(c,mav2) Then{
t = -1;
t1 = t[1];
t2 = t1[1];
if C < O Then
t = -2;
}
if daypl > hpl Then
hpl = daypl;
if TotalTrades > TotalTrades[1] and
(IsExitName("dbp",1) == true or IsExitName("dsp",1) == true) then{
Xcond = true;
PlaySound("a.wav");
}
if Tcond == true and Xcond == false then{
if T >= 1 and T != T[1] and T[1] != T[2] and
T1 == -2 and T2 == 2 Then
buy("b",OnClose,def,1);
if T <= -1 and T != T[1] and T[1] != T[2] and
T1 == 2 and T2 == -2 Then
sell("s",OnClose,def,1);
if MarketPosition == 1 then{
Text_Delete(tx);
tx = Text_New(sdate,stime,H+PriceScale*5,NumToStr(daypl+PositionProfit,2));
var1 = highest(h,BarsSinceEntry);
ExitLong("bx1",atlimit,EntryPrice+PriceScale*20);
if var1 >= EntryPrice+PriceScale*15 then
ExitLong("bx2",AtStop,EntryPrice+PriceScale*10);
if var1 >= EntryPrice+PriceScale*10 then
ExitLong("bx3",AtStop,EntryPrice+PriceScale*5);
if var1 < EntryPrice+PriceScale*10 then
ExitLong("bx4",AtStop,EntryPrice-PriceScale*30);
if var1 < EntryPrice+PriceScale*10 and CrossDown(mav1,mav2) then
ExitLong("bx5");
}
if MarketPosition == -1 then{
Text_Delete(tx);
tx = Text_New(sdate,stime,H+PriceScale*5,NumToStr(daypl+PositionProfit,2));
var1 = Lowest(L,BarsSinceEntry);
ExitShort("sx1",atlimit,EntryPrice-PriceScale*20);
if var1 <= EntryPrice-PriceScale*15 then
ExitShort("sx2",AtStop,EntryPrice-PriceScale*10);
if var1 <= EntryPrice-PriceScale*10 then
ExitShort("sx3",AtStop,EntryPrice-PriceScale*5);
if var1 > EntryPrice-PriceScale*10 then
ExitShort("sx4",AtStop,EntryPrice+PriceScale*30);
if var1 > EntryPrice-PriceScale*10 and CrossUp(mav1,mav2) then
ExitShort("sx5");
}
if MarketPosition == 1 and hpl >= 당일수익 then{
ExitLong("dbp",AtStop,EntryPrice-((hpl-daypl)*0.6)/CurrentContracts);
}
if MarketPosition == -1 and hpl >= 당일수익 then{
ExitShort("dsp",AtStop,EntryPrice+((hpl-daypl)*0.6)/CurrentContracts);
}
}
즐거운 하루되세요
> 웹피 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 어제보다 더 춥습니다. 건강 잘 챙기시구요.
아래와 같은 수식을 부탁드립니다.
1.매매시간
10시 ~ 04시까지 매매후 종료
2.진입조건(1계약 진입)
매수 : 양봉 종가가 20일선 아래에서 위로 골든크로스 한후 다시 음봉 종가가 20일선 아래로 데드크로스 하고 다음 봉의 종가가 다시 20일선 위로 골든크로스 할때 매수(매도는 반대)
3.청산/손절
-청산: 3가지
20틱수익 도달시 청산
10틱이상 15틱미만 수익시 5틱수익까지 후퇴하면 5틱수익 청산
15틱이상 수익시 10틱수익까지 후퇴하면 10틱수익 청산
-손절: 둘중에 먼저 도달하는 조건을 실행
수익이 10틱 미만일때 -30틱에서 손절 되거나
수익이 10틱 미만일때 매수의 경우 5일선이 20일선을 데드크로스하면 손절(매도는 반대)
4.매매종료
매매시간 이내에(10시 ~ 04시까지) 당일 누적수익을 50틱이상 달성한 순간부터 당일 누적수익에서 60% 손실이 발생하기 전에는 매매시간 종료까지 매매를 계속함.
누적 총수익에서 60% 손실이 발생하면 즉시 당일 매매종료하고 a.wav 파일 실행
5.당일 누적수익 표시
실시간 현재의 캔들 고점+5틱 위에 확정된 당일 실시간 현재의 누적수익을 계속 표시
수고하세요^^
2017-12-05
202
글번호 114738
답변완료
글번호 55737번 재질문
안녕하세요?
글번호 55737번 재질문 드립니다.
답변주신 스크립트 검증 부탁드립니다.
input : n1(5),n2(10);
var : sum1(0),sum2(0),mav1(0),mav2(0),cnt(0);
sum1 = 0;
sum2 = 0;
for cnt = 0 to max(n1,n2){
if cnt < n1 then
sum1 = sum1 + (DayClose(cnt)-dayopen(cnt));
if cnt < n2 then
sum2 = sum2 + (DayClose(cnt)-dayopen(cnt));
}
mav1 = sum1/n1;
mav2 = sum2/n2;
if NextBarSdate > Sdate then{
if mav1 > 0 and mav2 > 0 and mav1-mav2 > 0 Then
buy("b",AtMarket);
if mav1 < 0 and mav2 < 0 and mav1-mav2 < 0 Then
sell("s",AtMarket);
}
2017-12-05
140
글번호 114737
답변완료
진입 신호후 익절이든 손절이든 됀 후 다음 신호 나올때 까지 대기
input :shortPeriod(12), longPeriod(26), signalPeriod(9), line(10), P(10),간격(20),p1(10),p2(20),p3(30);
Variables : value(0), Value1(0);
array : mav[12](0);
value = MACD(shortPeriod, longPeriod);
value1 = ema(value, signalPeriod);
mav[1] = ma(c,P+간격*1);
mav[2] = ma(c,P+간격*2);
mav[3] = ma(c,P+간격*3);
mav[4] = ma(c,P+간격*4);
mav[5] = ma(c,P+간격*5);
mav[6] = ma(c,P+간격*6);
mav[7] = ma(c,P+간격*7);
mav[8] = ma(c,P+간격*8);
mav[9] = ma(c,P+간격*9);
mav[10] = ma(c,P+간격*10);
mav[11] = ma(c,P+간격*11);
mav[12] = ma(c,P+간격*12);
#상향갯수 카운트
var1 = 0;
if mav[1] > mav[1][1] Then
var1 = var1+1;
if mav[2] > mav[2][1] Then
var1 = var1+1;
if mav[3] > mav[3][1] Then
var1 = var1+1;
if mav[4] > mav[4][1] Then
var1 = var1+1;
if mav[5] > mav[5][1] Then
var1 = var1+1;
if mav[6] > mav[6][1] Then
var1 = var1+1;
if mav[7] > mav[7][1] Then
var1 = var1+1;
if mav[8] > mav[8][1] Then
var1 = var1+1;
if mav[9] > mav[9][1] Then
var1 = var1+1;
if mav[10] > mav[10][1] Then
var1 = var1+1;
if mav[11] > mav[11][1] Then
var1 = var1+1;
if mav[12] > mav[12][1] Then
var1 = var1+1;
#하향갯수 카운트
var2 = 0;
if mav[1] <= mav[1][1] Then
var2 = var2+1;
if mav[2] <= mav[2][1] Then
var2 = var2+1;
if mav[3] <= mav[3][1] Then
var2 = var2+1;
if mav[4] <= mav[4][1] Then
var2 = var2+1;
if mav[5] <= mav[5][1] Then
var2 = var2+1;
if mav[6] <= mav[6][1] Then
var2 = var2+1;
if mav[7] <= mav[7][1] Then
var2 = var2+1;
if mav[8] <= mav[8][1] Then
var2 = var2+1;
if mav[9] <= mav[9][1] Then
var2 = var2+1;
if mav[10] <= mav[10][1] Then
var2 = var2+1;
if mav[11] <= mav[11][1] Then
var2 = var2+1;
if mav[12] <= mav[12][1] Then
var2 = var2+1;
var3 = ma(c,p1);
var4 = ma(c,p2);
var5 = ma(C,p3);
var7 = (highest(H,75)+lowest(L,75))/2;
#상향갯수 12개
if var1 == 12 and c> var7[2] and var3 > var4 and C > var5 and C > O and value1 >= line Then
buy();
#하향갯수 12개
if var2 == 12 and c< var7[2] and var3 < var4 and C < var5 and C < O and value1 <= line Then
sell();
수고 하십니다.. 먼저 익절 20틱 손절 50틱 설정 부탁 드립니다..
그리고 진입 신호 나온후에 손절이든 익절이 됐을때 다음 신호 나올때 까지는 다시 진입이 안됐으면 합니다
2017-12-05
169
글번호 114733
답변완료
부탁드립니다
1
input : af(0.02),maxaf(0.2);
var1 = sar(af,maxaf);
var2 = ma(c,10);
if crossup(var1,c) or crossdown(var1,c) Then
value1 = var2;
plot1(value1);
2
var1 = ma(c,10);
var2 = ma(O,10);
var3 = min(var1,var2);
plot1(var1,"수식1",red);
plot2(var2,"수식2",blue);
plot3(var3,"수식3",gray);
1번 선을 2번이 상방돌파하면 매수신호 하방 돌파하면 매도신호
1차익절 5틱 2차익절 10 3차익절 20 틱표기 이후틱은 10틱씩 표기
2017-12-05
147
글번호 114729
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1.지표
a-최근 n개봉간 상승폭
b-최근 n개봉간 하락폭
2.지표
a-최근 n개봉간 양봉의 갯수
b-최근 n개봉간 음봉의 갯수
3. 기타
-보조도구 자동추세선은 수식으로 만들 수 있는 건가요?
-그림과 같은 추세선의 방향(위 혹은 아래)을 지표로 만들 수 있는지요.
4. 지표
이평선의 방향
=3이평이라고 하면 3이평이 sig(3이평의 9이평)선을 하향돌파하지 않으면 아직 그 방향이라고 판단함. 방향이 상승은 1, 하락은 2.
5. 시스템
-09:20분 이내에
-시가대비 n% 이상 오르거나 내린 뒤
-n% 이상 오르거나 내린 시점에서,
가격이 방향과 다른 방향(오른 뒤라면 내리는 방향, 내린 뒤라면 오르는 방향)으로 n%이상 움직였을 때 진입
55748 재질문 답변도 부탁드립니다. 감사합니다.
2017-12-05
182
글번호 114727
답변완료
부탁드립니다
input : af(0.02),maxaf(0.2);
var1 = sar(af,maxaf);
var2 = ma(c,5);
if crossup(var1,c) or crossdown(var1,c) Then
value1 = var2;
plot1(value1);
위 선을 위로 돌파시 매수신호 아래로 돌파시 매도신호 부탁드립니다
신호후 5틱 단위로 익절 표시와 신호 확정후 반대 신호 나오기전 선뒤로 4칸 밀리면 청산 신호 부탁드립니다
2017-12-05
135
글번호 114726
답변완료
문의드립니다.
macd(300,600) 상향돌파하는 종목을 검색하는 수식을 작성하고 싶습니다.
파워종목검색에서 macd osc 상향전환(300, 600,0)로 놓고 검색을 해보니 177개가 나오는데
cj프레시웨이, dsr 등 다수의 종목이 아직 상향전환되지 않았는데 검색이 되는 것 같습니다.
확인 부탁드립니다.
감사합니다.
2017-12-05
168
글번호 114721
답변완료
볼린져 밴드
지난번에 고가저기 경고음으로 도움(수익)에 도움을 주셔서 참으로 고맙습니다.
아주 유용하게 사용하고 있습니다.
하나더 부탁드리겠습니다.
선물3분봉에서 볼린져밴드(20.2)
1) 상단을 터치했을때 경고음(reject)
2) 하단을 터치했을때 경고음(medo)
나오도록 부탁드립니다.
감사합니다.
2017-12-05
193
글번호 114720
황금소나무 님에 의해서 삭제되었습니다.
2017-12-05
8
글번호 114719