커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6567
글번호 230811
답변완료
야간선물 갭보정
야간선물 시스템 거래가 가능한지요?
가능하다면, 야간선물 거래 시점에 갭을 보정하는 수식 부탁합니다.
예를 들면 다음과 같습니다.
1. 야간선물만 거래.
2. 야간선물 시작시점에 주간선물과 갭보정
3. 주간선물 차트 포함 수식적용, 예를 들면 if c(갭보정값) > ma(c(갭보정값), 20(초기 20봉까지는 주간값+갭보정 야간 값)) then buy();
4. 야간선물 종료시점 당일 청산
감사합니다.
2015-06-12
164
글번호 87119
답변완료
문의드려요.
Highest(H,100)[100] 와 Lowest(L,100)[100] 을 풀어써주세요^^
2015-06-12
148
글번호 87118
답변완료
고맙습니다.
1. 매 시간마다 첫 5분 시가봉이 양봉이면 매수하고, 음봉이면 매도하라
2. 매 시간 두번째 5분봉 종가가 첫 5분봉 고가보다 높고, 양봉이면 매수하고, 그 반대로 저가보다 낮고, 음봉이면 매도하라.라는 식을 구하고 싶습니다.
3. 또 30분마다 위 1, 2와 같은 식을 구하고 싶습니다.
4, 그리고 해당 봉에 강조식으로 색을 칠 할 수도 있는지 궁금합니다.
더운 날씨에 고생이 많습니다. 또 친절히 답변해 주셔서 항상 고맙습니다.
2015-06-11
137
글번호 87117
답변완료
일부청산 시 동일봉에서 재진입 문제
# 진입식
if ma1>ma2 then buy(); //crossup이 아닌 부등식으로 진입판단
# 청산식
if 청산조건1==true then exitlong("일부청산1",atstop,highest(c,barssinceentry+1)*0.9,"",1,1); //일부청산
if 청산조건2==true then exitlong(); //전체 청산
-------------------------------------------------
위 진입과 청산로직 적용시 일부청산이 발생할 경우 동일봉에서 바로 진입이 발생합니다
동일봉에서 진입이 발생하지 않고 전체 청산식이 실행되거나
일부청산이 연속발생하여 보유계약수가 0이 되었을 경우에만 진입이 발생하도록
수식 수정 부탁드립니다.
2015-06-11
142
글번호 87116
답변완료
수식 문의 드립니다.
아래글은 일전에 제가 문의하여 작성해 주신 예이고요~ ^^
아래 수식에 추가로
상승방향이면 매수진입하여 매도청산만 하는 수식(매도진입은 금지)
매수진입후 손실 중에는 매도청산하지않는다라는 값도 넣어주세요 ^^;
반대로 하락방향일시 매도진입하여 매수청산(매수진입금지)만
또한 매도진입후 손실 중에는 매도청산하지않는다라는 값도 넣어주세요 ^^;
하는 수식을 따로 기재좀 해 주시면 감사하겠습니다 좋은 하루 되세요~*
안녕하세요
예스스탁입니다.
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
162
글번호 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
170
글번호 87113
엠제이 님에 의해서 삭제되었습니다.
2015-06-11
2
글번호 87111
답변완료
시스템식부탁드립니다.
안녕하세요
선물마감 3개월전 표현식부탁드립니다.
선물마감 1개월전 표현식부탁드립니다.
선물마감 1주전 표현식부탁드립니다.
선물마감 3일전 표현식부탁드립니다.
선물마감 당일 표현식부탁드립니다.
2015-06-11
176
글번호 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
178
글번호 87108