커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5530
글번호 230811
카카 님에 의해서 삭제되었습니다.
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
207
글번호 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
231
글번호 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
235
글번호 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
230
글번호 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
226
글번호 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
220
글번호 129511
답변완료
트릭스기울기 지표식과 검색식 요청 드립니다.
안녕하세요..검색식과 지표식 좀 부탁드려 보겠습니다.
사용 지표는 trix기울기 입니다. 현재 예스랭귀지 지표에 trix기울기 지표가 없어서
검색을 통해 설정하긴 했는데 변수가 추가된 trix기울기 지표 수식 요청 드립니다.
1. trix기울기는 trix(기간)-trix(기간-1) 인데
기간값 이외에 -1 부분을 사용자가 설정할수 있게끔 변수로 해주시는 지표수식으로
부탁드립니다.
2. 검색하고자 하는 조건은
trix기울기(기간1)이 trix기울기(기간2)를 크로스업 과 크로스다운
하는 종목 검색 입니다. (기간1=5,기간2=12)
3.질문 입니다.
예를 들어 기울기 선이 꺽이는 부분(변곡점)를 검색식으로 구현 할 수 있나요?
초보자라 요청이 많습니다. 바쁘시더라도 부탁 드립니다.
2019-06-17
421
글번호 129507
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
매매종목 : 삼성전자 주식
요청 시스템식 :
1. 매수 조건 : 매일 오후 종가에 삼성전자 매수(가격은 시장가)
2. 매수 청산 : 익일 시가에 매수청산(가격은 시장가)
3. 매매는 하루에 한번만(전일 매수, 당일 아침 청산, 당일 마감시 매수)
요청 시스템식2 :
1. 매수 조건 : 매일 오후 3시에 삼성전자 매수(가격은 지정가)
2. 매수 청산 : 익일 10시에 매수청산(가격은 지정가)
3. 매매는 하루에 한번만(전일 매수, 당일 아침 청산, 당일 마감시 매수)
위의 시스템식 부탁드립니다.
2019-06-17
218
글번호 129502