커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6550
글번호 230811
오늘도수익 님에 의해서 삭제되었습니다.
2015-08-04
31
글번호 89131
최고대박 님에 의해서 삭제되었습니다.
2015-08-04
0
글번호 89129
답변완료
macd 매수 매도 신호좀 알려주세요
macd 오실레이터 전일보다 상승이면 매수 오실레이터가 하락하면 매도 시스템 수식좀 알려주세요
2015-08-04
157
글번호 89128
답변완료
질문드립니다.
안녕하세셔.
항상 많은 도움주셔서 감사드립니다.
질문입니다---------------------------
ATR의 활용예를 부탁드립니다.
사실, 여기저기 ATR에 대해 검색을 해보면 정확한 의미 전달이 안될 뿐더러
그 활용예를 찾기가 힘듭니다.
시스템에서 ATR이 주로 어떻게 활용되는지
몇가지 사례를 부탁드립니다.
--------------------------------------
감사합니다.
2015-08-04
123
글번호 89126
답변완료
부탁 드립니다.
아래수식은
당일의 최고 최저치를
분봉에서 보는 지표 입니다.
이것을
예를 든다면 3일동안에서의
최고 최저치를 분봉에서 볼수 있는 수식을 부탁 드립니다.
가능하다면 3일을
변수로 설정할수 있겠는지요?
var1=dayhigh-dayopen;
var2=c-dayopen;
var3=daylow-dayopen;
if c>dayopen then {
plot1(var2,"몸통",red);
plot2(var1,"그림자1",red);
plot3(var3,"그림자2",red);
}
else{
plot1(var2,"몸통",blue);
plot2(var1,"그림자1",blue);
plot3(var3,"그림자2",blue);
}
//설정치
//몸통 -> 막대그래프, 굵기->자동
//그림자1,2 -> 막대그래프, 굵기->가장 작은 포인트
2015-08-04
147
글번호 89125
답변완료
함수 부탁드립니다
지표까지는 만들겠는데 함수를 어떻게 만드는지 모르겠습니다.
아래의 지표를 함수로 옮기고 싶습니다.
<지표>
INPUTS: LENGTH1(10)
VARS: TM(0)
TM = EMA(EMA(EMa(C,LENGTH1),LENGTH1),LENGTH1);
PLOT1(TM, "TM");
여기서 TM을 함수로 만들고 싶습니다.
붙여넣기 가능한 형태로 부탁 좀 드릴게요.
2015-08-04
140
글번호 89124
답변완료
종목검색
안녕하세요.
아래 시스템 수식의 조건으로 종목검색을 할수있게 부탁드립니다.
Condition1 = MarketPosition == 0
and (IsExitName("StopLoss",1) == true or IsExitName("StopProfittarget",1) == true)
and MarketPosition(1) == 1;
Condition2 = MarketPosition == 0
and (IsExitName("StopLoss",1) == true or IsExitName("StopProfittarget",1) == true)
and MarketPosition(1) == -1;
var : stok1(0),stod1(0),stok2(0),stod2(0),stok3(0),stod3(0),stok4(0),stod4(0),stok5(0),stod5(0);
var : RSIv1(0),RSIs1(0),RSIV2(0),RSIS2(0),RSIv3(0),RSIs3(0),RSIV4(0),RSIS4(0),RSIV5(0),RSIS5(0);
stok1 = StochasticsK(25,6);
stoD1 = StochasticsD(25,6,6);
stok2 = StochasticsK(18,6);
stod2 = StochasticsD(18,6,6);
stok3 = StochasticsK(15,6);
stoD3 = StochasticsD(15,6,6);
stok4 = StochasticsK(12,6);
stod4 = StochasticsD(12,6,6);
stok5 = StochasticsK(50,6);
stod5 = StochasticsD(50,6,6);
rsiv1 = rsi(11);
rsis1 = ma(rsiv1,7);
rsiv2 = rsi(14);
rsis2 = ma(rsiv2,7);
rsiv3 = rsi(21);
rsis3 = ma(rsiv3,7);
rsiv4 = rsi(24);
rsis4 = ma(rsiv4,7);
rsiv5 = rsi(28);
rsis5 = ma(rsiv5,7);
if stok1 <= 11 and stok2 <= 11 and stok3 <= 12 and stok4 <= 12 and stok5 <= 10 and rsiv1 <= 37 and rsiv2 <= 38 and rsiv3 <= 42 and rsiv4 <= 42 and rsiv5 <= 42 Then
buy("매수");
2015-08-04
137
글번호 89123
답변완료
함수요청(12-1호)
아래의 함수를 수정하고 싶습니다.
가상매매를 하여 손절이 발생될 경우에, 손절의 방향으로 진입을 하고 싶습니다.
가령 가상으로 아래 식으로 진입 후 손절발생이 되면(여기서는 실제로 포지션을 진입하지 않습니다), 바로 그시점에 그가격 매수로 진입을 당일 매매하는 것입니다.
수익청산조건은 손절한 틱수의 2배값입니다.
가령 50틱 손절 이후 진입했으면 수익청산조건은 100틱 이익값입니다.
포지션의 진입후 강제청산의 기준은
SetStopLoss(0.8,PercentStop);
SetStopProfittarget(3,PercentStop);
SetStopInactivity(3,23,PercentStop);
로 동일합니다.
매도의 경우도 마찬가지입니다.
var : entry(0),NP(0),NP1(0),NP2(0);
var : ho(0),OL(0),HL(0);
var : maho(0),maOL(0),maHL(0);
var : cnt(0),sumho(0),sumOL(0),sumHL(0);
var : EntryCnt(0),cond1(false);
var : V1(0),V2(0),V3(0),V4(0),V5(0),V6(0),V7(0),V8(0),V9(0),V10(0);
NP = NetProfit;
if bdate != bdate[1] Then{
entry = 0;
NP1 = NP[1];
NP2 = NP1[1];
Cond1 = true;
if NP1 > NP2 Then
cond1 = false;
}
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
ho = Dayhigh-Dayopen;
OL = DayOpen-DayLow;
HL = DayHigh-DayLow;
sumho = 0;
sumOL = 0;
sumHL = 0;
for cnt = 1 to 10{
sumho = sumho + (dayhigh(cnt)-dayopen(cnt));
sumOL = sumOL + (DayOpen(cnt)-DayLow(cnt));
sumHL = sumHL + (DayHigh(cnt)-DayLow(cnt));
}
maho = sumho/10;
maOL = sumOL/10;
maHL = sumHL/10;
V1 = dayopen(0)+maho;
V2 = DayOpen(0)-maOL;
V3 = DayOpen(0)+maHL;
V4 = DayOpen(0)-maHL;
V5 = NthMaxList(1,V1,V2,V3,V4);
V6 = NthMaxList(2,V1,V2,V3,V4);
V9 = NthMaxList(3,V1,V2,V3,V4);
V10 = NthMaxList(4,V1,V2,V3,V4);
V7 = (V5+V10)/2;
V8 = (V6+V9)/2;
if MarketPosition == 0 and entry == 0 and cond1 == true Then{
if V7 > V8 Then
sell("s1",AtStop,V7-0.02);
if V7 < V8 Then
sell("s2",Atlimit,V8-0.02);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,V9-0.03);
ExitShort("sl1",AtStop,V6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,V9-0.03);
ExitShort("sl2",AtStop,V6);
}
var : TF(0);
var : Xtime(0), Etime(false),mav1(0),mav2(0);
var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0);
Array : HH[50](0),LL[50](0),CC[50](0);
mav1 = ma(c,5);
mav2 = ma(C,20);
TF = TimeToMinutes(stime)%30;
if Bdate != Bdate[1] Then{
Etime = true;
if stime >= 090000 Then
Xtime = 060000;
Else
Xtime = 060000;
}
if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if HH[25+2] > 0 Then{
HV = HH[0];
LV = LL[0];
HV1 = HH[1];
LV1 = LL[1];
HV2 = HH[2];
LV2 = LL[2];
for cnt = 0 to 25{
if HH[cnt] > HV Then
HV = HH[cnt];
if LL[cnt] < LV Then
LV = LL[cnt];
if HH[cnt+1] > HV Then
HV = HH[cnt+1];
if LL[cnt+1] < LV Then
LV = LL[cnt+1];
if HH[cnt+2] > HV Then
HV = HH[cnt+2];
if LL[cnt+2] < LV Then
LV = LL[cnt+2];
}
var1 = (HV+LV)/2;
var2 = (HV1+LV1)/2;
var3 = (HV2+LV2)/2;
if Etime == true then{
if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then
buy("b",AtMarket);
if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then
ExitLong("bx",AtMarket);
}
}
if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{
Etime = false;
ExitLong();
}
SetStopLoss(0.8,PercentStop);
SetStopProfittarget(3,PercentStop);
SetStopInactivity(3,23,PercentStop);
2015-08-04
130
글번호 89122
답변완료
함수요청(11-1호)
아래의 함수를 수정하고 싶습니다.
가상매매를 하여 손절이 발생될 경우에, 손절의 방향으로 진입을 하고 싶습니다.
가령 가상으로 아래 식으로 진입 후 손절발생이 되면(여기서는 실제로 포지션을 진입하지 않습니다), 바로 그시점에 그가격 매수로 진입을 당일 매매하는 것입니다.
수익청산조건은 손절한 틱수의 2배값입니다.
가령 50틱 손절 이후 진입했으면 수익청산조건은 100틱 이익값입니다.
포지션의 진입후 강제청산의 기준은
SetStopLoss(0.8,PercentStop);
SetStopProfittarget(3,PercentStop);
SetStopInactivity(3,23,PercentStop);
로 동일합니다.
매도의 경우도 마찬가지입니다.
var : entry1(0);
var : ho1(0),OL1(0),HL1(0);
var : maho1(0),maOL1(0),maHL1(0);
var : cnt1(0),sumho1(0),sumOL1(0),sumHL1(0);
var : EntryCnt1(0);
var : V1(0),V2(0),V3(0),V4(0),V5(0);
var : V6(0),V7(0),V8(0),V9(0),V10(0);
if bdate != bdate[1] Then
entry1 = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry1 = entry1+1;
ho1 = Dayhigh-Dayopen;
OL1 = DayOpen-DayLow;
HL1 = DayHigh-DayLow;
sumho1 = 0;
sumOL1 = 0;
sumHL1 = 0;
for cnt1 = 1 to 10{
sumho1 = sumho1 + (dayhigh(cnt1)-dayopen(cnt1));
sumOL1 = sumOL1 + (DayOpen(cnt1)-DayLow(cnt1));
sumHL1 = sumHL1 + (DayHigh(cnt1)-DayLow(cnt1));
}
maho1 = sumho1/10;
maOL1 = sumOL1/10;
maHL1 = sumHL1/10;
V1 = dayopen(0)+maho1;
V2 = DayOpen(0)-maOL1;
V3 = DayOpen(0)+maHL1;
V4 = DayOpen(0)-maHL1;
V5 = NthMaxList(1,V1,V2,V3,V4);
V6 = NthMaxList(2,V1,V2,V3,V4);
V9 = NthMaxList(3,V1,V2,V3,V4);
V10 = NthMaxList(4,V1,V2,V3,V4);
V7 = (V5+V10)/2;
V8 = (V6+V9)/2;
if MarketPosition == 0 and entry1 == 0 Then{
if V7 > V8 Then
sell("s1",AtStop,V7-0.02);
if V7 < V8 Then
sell("s2",Atlimit,V8-0.02);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,V9-0.03);
ExitShort("sl1",AtStop,V6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,V9-0.03);
ExitShort("sl2",AtStop,V6);
}
var : TF(0);
var : Xtime(0), Etime(false),cnt(0),mav1(0),mav2(0);
var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0);
Array : HH[50](0),LL[50](0),CC[50](0);
mav1 = ma(c,5);
mav2 = ma(C,20);
TF = TimeToMinutes(stime)%30;
if Bdate != Bdate[1] Then{
Etime = true;
if stime >= 090000 Then
Xtime = 050000;
Else
Xtime = 060000;
}
if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if HH[25+2] > 0 Then{
HV = HH[0];
LV = LL[0];
HV1 = HH[1];
LV1 = LL[1];
HV2 = HH[2];
LV2 = LL[2];
for cnt = 0 to 25{
if HH[cnt] > HV Then
HV = HH[cnt];
if LL[cnt] < LV Then
LV = LL[cnt];
if HH[cnt+1] > HV Then
HV = HH[cnt+1];
if LL[cnt+1] < LV Then
LV = LL[cnt+1];
if HH[cnt+2] > HV Then
HV = HH[cnt+2];
if LL[cnt+2] < LV Then
LV = LL[cnt+2];
}
var1 = (HV+LV)/2;
var2 = (HV1+LV1)/2;
var3 = (HV2+LV2)/2;
if Etime == true then{
if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then
buy("b",AtMarket);
if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then
ExitLong("bx",AtMarket);
}
}
if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{
Etime = false;
ExitLong();
}
SetStopLoss(0.8,PercentStop);
SetStopProfittarget(3,PercentStop);
SetStopInactivity(3,23,PercentStop);
2015-08-04
140
글번호 89121