커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7511
글번호 230811
회원 님에 의해서 삭제되었습니다.
2014-04-18
9
글번호 74527
회원 님에 의해서 삭제되었습니다.
2014-04-17
0
글번호 74526
답변완료
35931번 질의 재문의합니다.
답변 감사히 잘 보았습니다.
작성해 주신 수식을 옵션분봉에서 적용하였는데 진입가격 2.00~2.99 가격은 청산신호가 잘 나오는데 다른 가격에선 4월15일 9시30분경에 매수진입은 되었으나 목표가가 도달하였음에도 청산이 안되는군요.
목표가를 모든가격 동일하게 진입가격+20% 로 하였습니다.
손절에 관한 수식을 매수진입때 저가갱신으로 수식을 작성부탁했었는데,
진입봉의 저가 이탈 완성봉에 손절이 되는 수식도 부탁드립니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식문의드려요.
>
안녕하세요
예스스탁입니다.
input : P1(5),P2(20);
var1 = ma(C,P1);
var2 = ma(C,P2);
#매수진입
if crossup(var1,var2) Then
buy();
#매수청산
if MarketPosition == 1 Then{
ExitLong("bx",AtStop,L[BarsSinceEntry]-PriceScale*1);
if EntryPrice >= 2.00 and EntryPrice <= 2.99 Then{
ExitLong("bx1",atlimit,EntryPrice*1.30);
ExitLong("bx2",atlimit,EntryPrice*1.50);
}
}
#매도진입
if CrossDown(var1,var2) Then
Sell();
#매도청산
if MarketPosition == -1 Then{
ExitShort("sx",AtStop,H[BarsSinceEntry]+PriceScale*1);
if EntryPrice >= 2.00 and EntryPrice <= 2.99 Then{
ExitShort("sx1",atlimit,EntryPrice*0.70);
ExitShort("sx2",atlimit,EntryPrice*0.50);
}
}
즐거운 하루되세요
> 대화명 님이 쓴 글입니다.
> 제목 : 수식문의드려요.
> 예스스탁에서 제공하는 단순이동평균 교차 시스템수식을 작성하고 싶습니다.
옵션차트에서 적용하고 싶습니다.
** 매수청산전략 **
5일선과 20일선 골든크로스때 매수진입하고,
매수진입 옵션가격 2.00~2.99 는 진입가격 대비 30% 수익에 강제청산,
2.00~2.99 를 제외한 다른 진입가격은 50% 수익에 강제청산,
손절은 모든 가격대에서 동일하게 진입한 봉의 저가갱신때로 하고 싶습니다.
옵션차트에서 적용하고 싶습니다.
수식작성을 부탁드립니다.
2014-04-17
173
글번호 74525
오동도물개 님에 의해서 삭제되었습니다.
2014-04-17
0
글번호 74520
답변완료
부탁드립니다
아래의 지표를 야간장(CME)에 적용하고싶습니다
수정부탁드립니다,,,,
input:renkoSize(0.5),
length(10),
NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),
filename("renko3.txt"),printOK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
If DayIndex == 0 Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then {
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,
"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,
"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,
"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,
"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If Time >= 151500 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,
"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO"); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 100 then plot5(maV[0],"MidLine");
2014-04-17
234
글번호 74519
답변완료
시스템식 검토 부탁드립니다.
===========================================
- 한국시간 저녁 8시부터 오전 5시 15분 까지 매매
- 매매횟수 3회 제한
- 손절 20틱
- 미국 s&p 500 매매
- 15분봉 매매
============================================
input :
var:
=============================================
매수조건
========================================
elder ray power(2)
binary wave macd(20,12,5,3,12,26,9)
========================================
if stime == 080000 or (stime > 080000 and stime[1] < 080000) Then
count = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
count = count+1;
if (stime >= 080000 or stime < 050000) and bear > bull and bw macd > bw macd_sig and count < 3 then
buy();
if (stime >= 080000 or stime < 050000) and bear < bull and bw macd < bw macd_sig and count < 3 then
sell();
#포지션이 있다면 무조건 05시 00분 종가 청산
if stime == 050000 Then{
ExitLong();
ExitShort();
SetStopEndofday();
}
# 매수/매도 보유 포지션에 대한 20틱 손절
SetStopLoss(PriceScale*20,PointStop);
=============================================
2014-04-17
248
글번호 74513
답변완료
문의
안녕하세요.
일전에 간단한 수식을 하나 만들어 주셨는데, 아래와 같습니다.
이 수식에 추가를 좀 부탁드리겠습니다.
1. 우선 진입신호가 나오면 그 진입봉 5봉전 내의 저가를 인식한다.(편의상 LL 이라 하겠습니다.)
2. 진입신호 후 LL 과 -10틱 중 작은값을 깨면 손절한다.
3. 진입신호 후 LL 대비 10틱 이상 상승하면 트레일링스탑을 적용하여 LL과 그 이후 생긴 고가의 절반을 깨면 익절한다.
4. 2p 상승하면 청산한다.
매도는 위의 반대로 하시면 됩니다.
감사합니다.
----------------------------------------------------------------------------------------
input : Sto1(10),Sto2(3);
var : AA(0);
var : sumGap(0), gap(0), GO(0), GH(0), GL(0), GC(0);
var : stoLval(0), stoHval(0), fstK(0), stoK(0);
if date!=date[1] then { // 날짜가 변경되는 봉에서(분봉에서 첫번째 봉)
gap = Open-Close[1]; // 일간갭
sumGap = sumGap+gap; // 일간갭 누적
}
GO = O - sumGap;// 갭보정 시가
GH = H - sumGap;// 갭보정 고가
GL = L - sumGap;// 갭보정 저가
GC = C - sumGap; // 갭보정 종가
stoLval = lowest(GL,Sto1);
stoHval = highest(GH,Sto1);
fstK = (GC-stoLval)/(stoHval-stoLval)*100;
stoK = ema(fstK, Sto2);
AA = stoK;
var1 = Highest(AA, 3);
var2 = Highest(AA, 10)[3];
var3 = Highest(GC,3);
var4 = Highest(GC,10)[3];
var5 = Lowest(AA, 3);
var6 = Lowest(AA, 10)[3];
var7 = Lowest(GC,3);
var8 = Lowest(GC,10)[3];
if AA < AA[1] and AA[1] > AA[2] and var1<var2 and var3>var4 Then
sell();
if AA > AA[1] and AA[1] < AA[2] and var5>var6 and var7<var8 Then
buy();
2014-04-17
250
글번호 74508
현671 님에 의해서 삭제되었습니다.
2014-04-17
0
글번호 74507
현671 님에 의해서 삭제되었습니다.
2014-04-17
0
글번호 74506