커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7197
글번호 230811
답변완료
지표문의
1.차트표시 종류에보면
candlevolume차트 라구 있던데
지표로 좀 만들수 없나요
유사해두 됩니다
2.그럼 수고하세요
2019-06-18
314
글번호 129523
답변완료
문의드립니다
안녕하세요, 항상 감사드립니다.
1
식 문의드린부분에서 적용이 안되는 부분 문의드리고자합니다.
아래식에서 지정일, 지정일시 잡는부분에 오류가있는지 잘되지않아
아래와 같이 지정할수있게 부탁드립니다.
저점
일자 20190601 시분 090500 (5분봉상 1번째 봉의 저점)
고점
일자 20190602 시분 091000 (5분봉상 2번째 봉의 고점)
이후 지정한 고점을 넘어서는 고점 발생시 아래와 같이 갱신
(완성봉 종가가 아닌 고점입니다)
수정부탁드립니다.
2.추가 문의드립니다.
위와 동일하게 조정대 비율이 적용되고
고점을 만든뒤 5%하락한 지점의 가격에 다은뒤
재차 고점을 돌파할때 진입
고점을 만든뒤 10하락한 지점에 가격이 다으면 진입하지않음
(ex 고점1000원 -> 하락5% 950원에 닫고->1005원 진입,
하락10% 900원에 닫고 1005원이 될시 진입하지 않음)
100개
진입한뒤 5%상승 전량청산
진입한뒤 6%하락 전량손절
감사합니다!
------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
피라미딩은 다른진입신호만 허용으로 설정하고 적용하시면 됩니다.
input : ndate(20190601),ntime1(90000),ntime2(100000);
input : 진입비율1(65.2),수량1(100),청산비율1(40.0);
input : 진입비율2(70.0),수량2(50),청산비율2(45.0);
input : 진입비율3(80.0),수량3(30),청산비율3(60.0);
input : 손절비율(90);
var : HH(0),LL(0),Tcond(false);
#지정일 지정일시1
if sdate == ndate Then
{
if (sdate != sdate[1] and stime >= ntime1) or
(sdate == sdate[1] and stime >= ntime1 and stime[1] < ntime1) Then
{
#저가(고정)
LL = L;
}
if (sdate != sdate[1] and stime >= ntime2) or
(sdate == sdate[1] and stime >= ntime2 and stime[1] < ntime2) Then
{
#고가(변화)
LL = h; //그날의 최고가이면 초기값을 dayhigh로 변경
Tcond = true;
}
}
if tcond == true then
{
#고가 갱신
if H > HH Then
HH = H;
#첫진입(65.2%위에서 아래로 터치하면 즉시 매수)
if TotalTrades == 0 and MarketPosition == 0 and L > HH-(HH-LL)*(진입비율1/100) Then
buy("b1",atlimit,HH-(HH-LL)*(진입비율1/100),수량1);
#매수 후
if MarketPosition == 1 then
{
#두번째진입(70.0% 위에서 아래로 터치하면 즉시 추가매수)
if MaxEntries == 1 and L > HH-(HH-LL)*(진입비율2/100) Then
buy("b2",atlimit,HH-(HH-LL)*(진입비율2/100),수량2);
#세번째진입(80.0% 위에서 아래로 터치하면 즉시 추가매수)
if MaxEntries == 2 and L > HH-(HH-LL)*(진입비율3/100) Then
buy("b3",atlimit,HH-(HH-LL)*(진입비율3/100),수량3);
#첫 진입후 40%를 상회하면 즉시 전량청산
if MaxEntries == 1 Then
ExitLong("bx1",Atlimit,HH-(HH-LL)*(청산비율1/100));
#두번 진입후 45%를 상회하면 즉시 전량청산
if MaxEntries == 2 Then
ExitLong("bx2",Atlimit,HH-(HH-LL)*(청산비율2/100));
#세번 진입후 60%를 상회하면 즉시 전량청산
if MaxEntries == 3 Then
ExitLong("bx3",Atlimit,HH-(HH-LL)*(청산비율3/100));
#손절비율 이하로 하락시 즉시 전량청산
ExitLong("bx",AtStop,HH-(HH-LL)*(손절비율/100));
}
}
즐거운 하루되세요
2019-06-18
290
글번호 129522
카카 님에 의해서 삭제되었습니다.
2019-06-17
21
글번호 129521
답변완료
수식의 의미좀 알려주세요~
if data1(crossup(c,S1)) Then
T = 1;
if data1(CrossDown(c,S1)) Then
T = -1;
if T == 1 and data1(C>upline and V >= P1 and V > ma(V,거래량평균일수1)*거래량급등률1 and c > dayopen) and data2(C > S2) Then
{
T = 3;
#Tcond가 true일때만 조건만족시 매수
if Tcond == true and data1(c < dayclose(1)*전일급등률) Then
buy("매수",AtLimit,C-PriceScale*음봉틱수1);
}
이식에서 T = 3 의 의미가 무엇일까요?
2019-06-17
223
글번호 129520
답변완료
62906 재질문
90분봉의 MACD 오실레이터 지표를 만들어 주셔서
시스널선이 MACD선을 돌파할 때 매매신호를 넣어 봤는데 엉뚱한 곳에서
신호가 나옵니다. 확인좀 부탁드립니다. (매매챠트는 15분봉)
input : ntime1(90),P1(20),P2(60),P(20),dv(2),스탑로스(2.5),손절폭(1.5),매수스톡(25),매도스톡(70);
input : 매수이격(18),매도이격(18),단기MAP(20),장기MAP(60),금액(100000000);
input : sto1(25),sto2(6),sto3(6);
input : short(12),long(26),sig(9);
var : cnt(0),sum2(0),sum3(0);
var : tsum1(0),tsum2(0),tmav1(0),tmav2(0);
var : BBup(0),BBdn(0),BBMid(0);
var : S1(0),D1(0),TM(0),TF(0);
Var : Lvalue(0), Hvalue(0);
var : SK(0),SD(0),T(0),단기mav(0),장기mav(0);
Array : C1[100](0),H1[100](0),L1[100](0),FK[100](-1),StoK[100](-1);
var : EP1(0),EP2(0),EP3(0),DINDEX1(0),PreJISU1(0),PreJISU2(0),JISU1(0),JISU2(0);
var : MACDVal(0),MACDSIG(0),PreMACDSIG(0),MACDosc(0);
Ep1 = 2/(short+1);
Ep2 = 2/(long+1);
Ep3 = 2/(sig+1);
# 분봉설정==========================
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%ntime1;
if Bdate != Bdate[1] or
(ntime1 != 1 and Bdate == Bdate[1] and TF < TF[1]) or
(ntime1 == 1 and Bdate == Bdate[1] and TF > TF[1]) Then
{
H1[0] = H;
L1[0] = L;
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
FK[cnt] = FK[cnt-1][1];
stok[cnt] = stok[cnt-1][1];
}
DINDEX1 = DINDEX1 + 1;
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
PreMACDSIG = MACDSIG[1];
}
C1[0] = C;
if H > H1[0] Then
H1[0] = H;
if L < L1[0] Then
L1[0] = L;
if C1[P2] > 0 then
{
tsum1 = 0;
tsum2 = 0;
for cnt = 0 to P2-1
{
if cnt < P1 then
tsum1 = tsum1+C1[cnt];
if cnt < P2 then
tsum2 = tsum2+C1[cnt];
}
# 90분봉의 20일 이평선= tmav1, 60일 이평선= tmav2
tmav1 = tsum1/P1;
tmav2 = tsum2/P2;
}
# MACD 오실레이터
if DINDEX1 <= 1 then {
JISU1 = C;
JISU2 = C;
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal;
MACDosc = MACDval-MACDsig;
}
else{
JISU1 = C * EP1 + PreJISU1 * (1-EP1);
JISU2 = C * EP2 + PreJISU2 * (1-EP2);
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal * EP3 + PreMACDSIG * (1-EP3);
MACDosc = MACDval-MACDsig;
}
}
# 단기 이평선
단기mav = ma(C,단기MAP);
# 장기 이평선
장기mav = ma(C,장기MAP);
# 매수게임=============================
# if crossup(MACDSIG,MACDVal) Then
# buy("매수",OnClose,def,Floor(금액/C));
# if crossdown(단기mav,장기mav) Then
# ExitLong("청산");
# 매도게임==============================
if crossdown(MACDSIG,MACDVal) Then
sell("매도",OnClose,def,1);
if crossup(단기mav,장기mav) Then
ExitShort("매도청산");
2019-06-17
264
글번호 129519
답변완료
해외선물
해외선물용으로
S&P 기준으로요,
시가가 나오면
시가선 기준 Line 하나 ex)2800
위아래로 4개씩 5포인트씩 ex) 2805 2810 2815 2820 / 2795 2790 2785 2780
이 나왔으면 좋겠습니다. 1포인트당 4틱인것 같은데 5포인트면 20틱인것 같구요
그러니까 [시가]기준 20틱 단위로 위아래로 선이 나오면 됩니다.
2019-06-17
252
글번호 129518
답변완료
간단한 시스템 수식 부탁드립니다.
간단한 시스템 수식 부탁드립니다.
1. 10 이평과 20이평의 간격이 30도 이하일때 (혹은 수렴중 ) 좁혀짐
볼린저밴드 중심선이 10이평과 20이평 사이에있고
1 이동평균선이 10이평과 20이평의 중심 중간 에 들어왔을때. 매수식
손절 10틱 익절 20틱
변수에 이평과 볼린저밴드 손절 익절 다 넣어주세요
2. . 10 이평과 20이평의 간격이 30도 이하일때 (혹은 수렴중) 좁혀짐
볼린저밴드 중심선이 10이평과 20이평 사이에있고
1 이동평균선이 10이평과 20이평의 중심 중간에 들어왔을때. 매도식
변수에 이평과 볼린저밴드 손절 익절 다 넣어주세요
통일 : 하루중 몇시부터 몇시사이 에 뜨는 신호 1회만 진입 해라 !!!!!
2019-06-17
243
글번호 129517
답변완료
문의
청산식 조합 했는데 돌아 가는것도 있고 않되는 것도 있네요
수정좀 부탁 합니다
Input : BuyATRP(46),SellATRP(6),BuyATRS1(2.5),BuyATRS2(4.0),BuyATRS3(4.0),SellATRS1(3.5),SellATRS2(6.0),SellATRS3(6.0);
Input : BuyStoploss(12), SellStoploss(6), BuyTrailing(5), BuyFloor(20), SellTrailing(5),SellFloor(8.5);
Input:break(1.9),level(0.3),big(8),sbreak(1.9),slevel(0.3),sbig(8);
var:진입후최고가(0),진입후최저가(0);
If MarketPosition == 1 Then {
진입후최고가 = Highest(H,BarsSinceEntry + 1);
ExitLong("매수추적",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS1);
ExitLong("매수변동성",AtStop,C - ATR(BuyATRP) * BuyATRS2);
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * break Then {
ExitLong("매수손익분기",AtStop,Entryprice + ATR(BuyATRP) * level);
ExitLong("매수추적1",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS3);
}
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * big Then {
ExitLong("매수초과수익",AtStop,Lowest(L,3));
}
SetStopLoss(BuyStoploss, PointStop);
SetStopTrailing(BuyTrailing,BuyFloor,PointStop);
If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김
SetStopLoss(0, PointStop);
SetStopTrailing(0, 0, PointStop);
}
If MarketPosition == -1 Then {
진입후최저가 = Lowest(L,BarsSinceEntry + 1);
ExitShort("매도추적",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS1);
ExitShort("매도변동성",AtStop,C + ATR(SellATRP) * SellATRS2);
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbreak Then {
ExitShort("매도손익분기",AtStop,Entryprice - ATR(SellATRP) * slevel);
ExitShort("매도추적1",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS3);
}
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbig Then {
ExitShort("매도초과수익",AtStop,Highest(H,3));
}
SetStopLoss(SellStoploss, PointStop);
SetStopTrailing(SellTrailing,SellFloor,PointStop);
If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김
SetStopLoss(0, PointStop);
SetStopTrailing(0, 0, PointStop);
}
If MarketPosition == 1 Then
ExitLong("스파이크청산-1", AtLimit, C + ATR(20) * 7); // 상승돌파 시 매수청산
}
If MarketPosition == -1 Then
Exitshort("스파이크청산+1", AtLimit, C - ATR(20) * 7); // 상승돌파 시 매도청산
}
Var:SpikeHigh(0), spikelow(0);
If MarketPosition == 0 Then { // 무포지션일때
SpikeHigh = 10; // 초기화
Condition1 = false;
}
If MarketPosition == 1 Then { // 매수포지션일 때
If !Condition1 and // 스파이크 미발생
H > C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승
SpikeHigh = H; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then { // 스파이크 발생 후
If SpikeHigh < H then SpikeHigh = H; // 신규 고점 나오면 갱신
ExitLong("스파이크청산-2", AtStop, SpikeHigh - ATR(20) * 2);
//추적청산처럼 꼭지 찍고 내려올 때
If MarketPosition == 0 Then { // 무포지션일때
Spikelow = 10; // 초기화
Condition1 = false;
}
If MarketPosition == -1 Then { // 매수포지션일 때
If !Condition1 and // 스파이크 미발생
L < C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승
SpikeHigh = L; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then { // 스파이크 발생 후
If Spikelow > H then SpikeHigh = L; // 신규 고점 나오면 갱신
Exitshort("스파이크low청산-2", AtStop, Spikelow + ATR(20) * 2);
}
}
}
}
2019-06-17
244
글번호 129516
답변완료
시스템 부탁 드립니다
선생님 아래전략 최적화 잘 됩니다 고맙습니다
그리고 아래수식 진입과 청산 손절 방법을 교체 부탁드립니
새롭게 적용할 진입 청산 손절 전략 입니다
매수진입
- 직전고점 보다 (x틱) 더 올라가면 시장가 매수 입니다
매수청산
- 종가가 (20 이평) 을 close down하면 시장가 청산 입니다
매도진입
- 직전 저점보다 (y틱 ) 더 내려가면 매도 진입입니다
매도청산
- 종가가 (30이평을 )close up 하면 청산입니다
손절//익절
손절틱(25틱)//익절틱(35틱)
선생님 () 수치들은 최적화 가능하게 부탁드립니다
늘 감사드립니다
Input : length(10);
var : 종가사용여부(0),수치표시(1),표시(0);
var : 추세두께(2),추세상승색(red),추세하락색(blue);
var : 고점연결두께(2),고점연결색상(RED);
var : 저점연결두께(2),저점연결색상(blue);
input : p1(5),P2(20);
input : 손절틱수(50),익절틱수(50);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),TL11(0),TL12(0),T(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
T = 1;
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,추세두께);
TL_SetColor(TL1,추세상승색);
if 저[1,1] > 저[2,1] Then
{
if 표시 == 0 Then
TL_Delete(TL11);
TL11 = TL_New(저[2,3],저[2,4],저[2,1],저[1,3],저[1,4],저[1,1]);
TL_SetExtRight(TL11,true);
TL_SetColor(TL11,저점연결색상);
TL_SetSize(TL11,저점연결두께);
}
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)+NewLine+"+"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
Text_SetStyle(Text1, 2, 1);
}
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2)+NewLine+"+"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
T = -1;
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,추세두께);
TL_SetColor(TL1,추세하락색);
if 고[1,1] < 고[2,1] Then
{
if 표시 == 0 Then
TL_Delete(TL12);
TL12 = TL_New(고[2,3],고[2,4],고[2,1],고[1,3],고[1,4],고[1,1]);
TL_SetExtRight(TL12,true);
TL_SetColor(TL12,고점연결색상);
TL_SetSize(TL12,고점연결두께);
}
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)+NewLine+"-"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
Text_SetStyle(Text1, 2, 0);
}
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2)+NewLine+"-"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
}
}
최종꼭지점 = "저점";
}
var1 = ma(c,P1);
var2 = ma(C,P2);
if T == -1 and abs(저[1,1]-저[2,1]) <= PriceScale*10 and
C > O and crossup(c,var1) Then
buy("b",AtMarket);
if MarketPosition == 1 Then
{
ExitLong("bx1",AtStop,저[2,1]-PriceScale*1);
if CrossDown(c,var2) Then
exitlong("bx2",AtMarket);
}
if T == 1 and abs(고[1,1]-고[2,1]) <= PriceScale*10 and
C < O and CrossDown(c,var1) Then
sell("s",AtMarket);
if MarketPosition == -1 Then
{
ExitShort("sx1",AtStop,고[2,1]-PriceScale*1);
if CrossUp(c,var2) Then
ExitShort("sx2",AtMarket);
}
SetStopLoss(PriceScale*손절틱수,PointStop);
SetStopProfittarget(PriceScale*익절틱수,PointStop);
2019-06-17
238
글번호 129511