커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8139
글번호 230811
답변완료
수식 문의 드립니다.
아래글은 일전에 제가 문의하여 작성해 주신 예이고요~ ^^
아래 수식에 추가로
상승방향이면 매수진입하여 매도청산만 하는 수식(매도진입은 금지)
매수진입후 손실 중에는 매도청산하지않는다라는 값도 넣어주세요 ^^;
반대로 하락방향일시 매도진입하여 매수청산(매수진입금지)만
또한 매도진입후 손실 중에는 매도청산하지않는다라는 값도 넣어주세요 ^^;
하는 수식을 따로 기재좀 해 주시면 감사하겠습니다 좋은 하루 되세요~*
안녕하세요
예스스탁입니다.
Input : Period1(10), Period2(5),Period3(5);
var : Stok(0),StoD(0);
StoK = StochasticsK(Period1,Period2);
StoD = StochasticsD(Period1,Period2,Period3);
If CrossUP(StoK, StoD) and stok <= 20 Then
{
Buy("매수");
}
If CrossDown(StoK, StoD) and stok >= 80 Then
{
Sell("매도");
}
즐거운 하루되세요
> 어쿠스틱p 님이 쓴 글입니다.
> 제목 : 수식문의 드려요
> 스톡케스틱 지표값이 80이상 수치에서 k값이 d값을 데드크로스했을시만 매도신호발생
20이하 수치에서 k값이 d값을 골드크로스했을시만 매수신호발생
2015-06-11
210
글번호 87115
답변완료
추가 부탁드리겠습니다.
아래 수식에 대해서
매수된 수량에 대해서 매수청산이 모두 완료된 경우
MessageLog를 통해 성과를 표시한 후
1시간이 경과된 이후부터 재매수 가능하도록 로직을 보완하고 싶습니다.
ex) 9:05분 1차 매수
9:08분 2차 매수
9:10분 1차 매도
9:20분 전량 매도
MessageLong(분할횟수, 평균단가, 수익금액, 수익률)이 표시됨
10:30분 1차 매수
10:35분 1차 매도
10:40분 전량 매도
MessageLong(분할횟수, 평균단가, 수익금액, 수익률)이 표시됨
위와 같이 9:05분~9:20분까지 매매가 완료된 후 Log를 표시하고
1시간이 경과한 시점부터 재매수를 하여
10:30분~10:40분까지 매매가 완료된 후 Log를 표시함
감사합니다.
input : fdate(20150610), stime_from(090000), stime_to(144500), entry1(1000000),entry2(1000000),entry3(2000000);
input : updn_tm1(15), buy_r1(0.93), buy_r2(0.9), buy_r3(0.87);
var : V1(0),V2(0),V3(0),cnt(0),count(0),updn_p1(0),AVgv(0);
count = 0;
for cnt = 0 to 10{
if sdate == EntryDate(cnt) Then
count = count+1;
}
if CodeCategoryEx == 11 and BasePrice < 50000 Then {
V1 = int(int(entry1/C)/10)*10;
V2 = int(int(entry2/C)/10)*10;
V3 = int(int(entry3/C)/10)*10;
} Else {
V1 = int(entry1/C);
V2 = int(entry2/C);
V3 = int(entry3/C);
}
if sdate != sdate[1] then {
updn_p1 = updn_tm1 / BarInterval;
}
if sdate == fdate then {
if MarketPosition == 0 and CurrentEntries == 0 then {
var1 = Highest(H, updn_tm1)[1];
if stime >= stime_from and stime <= stime_to and count < 1 then {
buy("b11",atlimit,var1*buy_r1,V1);
buy("b12",atlimit,var1*buy_r2,V2);
buy("b13",atlimit,var1*buy_r3,V3);
var3 = var1;
var4 = L;
}
}
if MarketPosition == 1 and MaxEntries == 1 then {
buy("b21",atlimit,var3*buy_r2,V2);
buy("b22",atlimit,var3*buy_r3,V3);
}
if MarketPosition == 1 and MaxEntries == 2 then {
buy("b31",atlimit,var3*buy_r3,V3);
}
if MarketPosition == 1 Then {
AVgv = AvgEntryPrice;
if L < var4 then
var4 = L;
if MaxEntries <= 2 Then{
if CurrentContracts == MaxContracts Then
exitlong("bx1_1",atlimit,var4+(var3-var4)*0.5,"",int(MaxContracts*0.5),1);
if CurrentContracts == MaxContracts Then
exitlong("bx1_2",atlimit,var4+(var3-var4)*0.75);
}
if MaxEntries == 3 Then{
if CurrentContracts == MaxContracts Then
exitlong("bx2_1",atlimit,var4+(var3-var4)*0.25,"",int(MaxContracts*0.5),1);
if CurrentContracts == MaxContracts Then
exitlong("bx2_2",atlimit,var4+(var3-var4)*0.50);
}
if stime >= 144500 Then{
exitlong("종가청산",AtMarket);
if count == 1 and MarketPosition == 0 Then{
MessageLog("분할횟수 %.f 평균단가 %.f 수익금액 %.2f 수익률",MaxEntries(1),avgv,PositionProfit(1),PositionProfit(1)/avgv);
}
}
}
}
2015-06-11
219
글번호 87113
엠제이 님에 의해서 삭제되었습니다.
2015-06-11
2
글번호 87111
답변완료
시스템식부탁드립니다.
안녕하세요
선물마감 3개월전 표현식부탁드립니다.
선물마감 1개월전 표현식부탁드립니다.
선물마감 1주전 표현식부탁드립니다.
선물마감 3일전 표현식부탁드립니다.
선물마감 당일 표현식부탁드립니다.
2015-06-11
225
글번호 87109
답변완료
수정부탁드립니다.
봉이 바뀔때마다 최근 1000봉의 최적변수를 구하려고합니다.
//If Index >= 1500 && Index <= 2500 Then 처럼 직접 숫자를 넣어주니, 한번이지만 올바르게 작동은합니다. 매봉마다 구하려고 하다가 막혔습니다.
=============================================================
Input: 시작변수(1),종료변수(19),수수료(0),슬리피지(0),참조봉갯수(1000);
Var: cnt(0),n(0),shortPeriod(0),longPeriod(0),longMa(0),최적변수(0);
Array: shortMa[501](0),
MP[501](0),BuySellEntryPrice[501](0),OpenPP[501](0),NP[501](0),TP[501](0);
If Index >= cnt && Index <= cnt + 참조봉갯수 Then
//If Index >= 1500 && Index <= 2500 Then
For n = 0 to 종료변수-시작변수 {
shortPeriod = n+시작변수;
longPeriod = 20;
shortMa[n] = ma(C,shortPeriod);
longMa = ma(C,longPeriod);
If MP[n] == 1 Then {
OpenPP[n] = (C-BuySellEntryPrice[n]);
}
Else If MP[n] == -1 Then {
OpenPP[n] = (BuySellEntryPrice[n]-C);
}
Else {
OpenPP[n] = 0;
}
If MP[n] <= 0 and shortMa[n] > longMa Then {
// If shortMa[n] > longMa Then {
if MP[n] == -1 Then {
NP[n] = NP[n]+OpenPP[n];
}
BuySellEntryPrice[n] = C;
MP[n] = 1;
}
If MP[n] >= 0 and shortMa[n] < longMa Then {
// If shortMa[n] < longMa Then {
if MP[n] == 1 Then{
NP[n] = NP[n]+OpenPP[n];
}
BuySellEntryPrice[n] = C;
MP[n] = -1;
}
TP[n] = NP[n] + OpenPP[n];
If TP[최적변수] < TP[n] Then {
최적변수 = n;
}
}
cnt = cnt + 1;
MessageLog("시가,%.4f,종가,%.4f,MP,%.0f,NP,%.4f,OpenPP,%.4f,TP,%.4f,최적변수,%.0f,cnt,%.0f",open,close,MP[최적변수],NP[최적변수],OpenPP[최적변수],TP[최적변수],최적변수+1,cnt);
2015-06-11
230
글번호 87108
답변완료
수식 문의드립니다.
안녕하세요?
아래식은 문의드린 것에 대해 답변 받은 것입니다.
그런데 아래식은 plot3 에 해당하는 트레일링스탑에 걸리지 않았더라도
16시가 되면 새롭게 모든 선이 지워지고 plot1, plot2 가 뜨네요.
트레일링스탑에 걸리지 않으면 며칠이고 선이 계속 이어지다가,
걸리고 나서야 다시 당일(16시 ~ 16시가 하루)의 plot1,2,3 의 선이 뜨게는 안되나요?
var : AA(0), BB(0),MP(0),EP(0),HH(0);
if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{
var1 = O;
MP = 0;
}
AA = var1*1.01;
if MP == 0 and crossup(c,AA) Then{
MP = 1;
EP = AA;
HH = H;
}
if MP == 1 Then{
if H > HH Then
HH = H;
plot3(HH-(HH-EP)*0.9,"청산선");
}
if MP == 1 and crossdown(c, HH-(HH-EP)*0.9) then {
MP = 0;
}
if MP == 0 Then{
plot1(var1);
plot2(AA);
}
2015-06-11
191
글번호 87107
답변완료
변수값에 소수점이 잔뜩 찍히는 문제
제가 다음과 같이 프로그램을 짜서 실행시켜 보았는데, 결과값을 보면 이상하게 소수점 이하에 값이 잔뜩 찍히는 경우가 있습니다.
function Main_OnStart()
{
var a=120.45, b=120.46;
var c, d, e;
c = 130.46;
d = a+10;
e = b+10;
Main.MessageList(a, b, c, d, e);
if (c == e)
Main.MessageList("true");
else
Main.MessageList("false");
}
실행한 결과==========>
120.45 120.46 130.46 130.45 130.4599999999999998
false
위 결과값에서 a, b, c, d 는 정상적으로 값이 찍히는데 유독 e 만 130.46으로 찍히지 않고 이상하게 소수점 형태로 찍히더군요.
근데, 문제는 수식을 짤 때 저렇게 소수점 형태로 찍히는 경우가 상당히 많아서 if 문같은 비교 수식에서 엉터리 결과를 내는 경우가 아주 많다는 겁니다.
위에서 예를든 경우에도 상식적으로 c와 e는 같은 값을 가질거라고 예상되어 true 가 나와야 되는데 false 가 나와서 비교수식이 오작동하는 경우가 많습니다.
전략도 당연히 엉터리로 돌죠.
이게 자바스크립트 언어 자체가 갖고 있는 오류인가요? 아니면 예스스팟의 오류인가요?
이런 경우에 어떻게 대처해야하는지 참 난감합니다.
어떤 경우에 소수점이 잔뜩 찍힌 형태로 값이 나오는지 감도 못잡겠고요. 대처가 안됩니다 ㅠㅠ
혹시 이런 경우 접하신 적 있으신지? 도와주세요.
2015-06-11
221
글번호 87106
ho2350 님에 의해서 삭제되었습니다.
2015-06-11
0
글번호 87104
답변완료
부탁합니다
거래량조건
1일전일봉거래량.
1일전일봉거래량 < 2일전 일봉거래량.
1일전알봉거래량 > 3일전일봉거래량.
2일전일봉거래량.
2일전일봉거래량 > 1일전일봉거래량 > 3일전일봉거래량.
현재거래량 30분봉거래량기준
과거3일간 30분봉평균거래량*3 < 금일시초가30분봉거래량.
캔들조건
2일전캔들 +4%이상양봉
현재일봉 캔들 양봉.
주석처리부탁합니다.
2015-06-11
183
글번호 87103