커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4428
글번호 230811
답변완료
수식추가부탁드림니다=================
/* 장시작시에는
var1 = 100;
var2 = 100;
시간보정때는
var2 를var1에서시작하게 수정부탁드립니다 감사합니다
if stime == 시간보정*100 or (stime > 시간보정*100 and stime[1] < 시간보정*100) Then{
if Bdate != Bdate[1] Then{
-----------------------------------------------------------------------------
*/
Input: 호가더하기(0),지수더하기(0),폭보정(1.5),지수호가테마LENGTH1(10),순매수LENGTH2(10),급변(0.05)
,순매수테마보정한계(0.3),순매수테마급증보정(0.5),순매수테마급감보정(0.5)
,지수테마보정한계(0.3),지수테마급증보정(0.5),지수테마급감보정(0.5) ;
var : AsksMA(0),BidsMA(0), Period(1),idx(0),EP(0),E11(0),E12(0),E13(0),E21(0),E22(0),E23(0);
Var : value(0);
Var : valuec(0);
var : va61(0);
var : va71(0);
var : va80(0);
var : va81(0);
var : va90(0);
var : va91(0);
var : va92(0);
var : va93(0);
var : va94(0);
var : va95(0);
var : va96(0);
VAR : TEMA1(0);
VAR : TEMA2(0);
VAR : TEMA3(0);
VAR : vmin(0);
VAR : vmax(0);
BidsMa = ma(bids,Period);
AsksMA = ma(asks,Period);
value = ma(bids,period)-ma(asks,period)+29000;
Plot2(BidsMA, "매수잔량이평");
Plot3(AsksMA, "매도잔량이평");
Plot4(value, "차");
//**************************************************************
//*************************************************************
va91=((c-c[1])/c[1]*100)*20000/20000;
va93=((value-value[1])/value[1]*70)*125/2900;
if Bdate != Bdate[1] Then{
idx = 0;
var1 = 100;
var2 = 100;
plot10(var1);
plot11(var2);
plot51(var2 +호가더하기/1000 );
}
Else{
idx = idx+1;
var1 = var1+(var1*(va91/100));
var2 = var2+(var2*(va93/95));
plot10(var1+지수더하기/1000 );
plot11(var2+호가더하기/1000 );
plot51(var2+호가더하기/1000 );
TEMA3 = (3 * Ema(var2+호가더하기/1000 ,순매수LENGTH2)) - (3 * Ema(Ema(var2+호가더하기/1000 ,순매수LENGTH2),순매수LENGTH2)) +
(Ema(Ema(Ema(var2+호가더하기/1000 ,순매수LENGTH2),순매수LENGTH2),순매수LENGTH2));
if TEMA3 >TEMA3[1]+순매수테마보정한계 then TEMA3 = ((TEMA3 -TEMA3[1])*순매수테마급증보정)+TEMA3[1];
if TEMA3 <TEMA3[1]-순매수테마보정한계 then TEMA3 = TEMA3[1]-((TEMA3[1] -TEMA3)*순매수테마급감보정);
if TEMA3 >TEMA3[1]+50 then TEMA3 = ((TEMA3 -TEMA3[1])*0.9)+TEMA3[1];
if TEMA3 <TEMA3[1]-50 then TEMA3 = TEMA3[1]-((TEMA3[1] -TEMA3)*0.9);
plot52(TEMA3,"순매수테마");
}
if var2-var1 > 폭보정 Then var2=var1;
if var1-var2 > 폭보정 Then var2=var1;
//if va71[1] < va71 and va71[1] + 0.05 > va71 then var2=var1;
//if va71[1] > va71 and va71[1] - 0.05 > va71 then var2=var1;
EP = 2/(지수호가테마LENGTH1+1);
if idx == 0 Then{
E11 = var1;
E21 = var2;
}
Else{
E11 = var1 * EP + E11 * (1-EP);
E21 = var2 * EP + E21 * (1-EP);
}
if idx <= 1 Then{
E12 = E11;
E22 = E21;
}
Else{
E12 = E11 * EP + E12 * (1-EP);
E22 = E21 * EP + E22 * (1-EP);
}
if idx <= 2 Then{
E13 = E12;
E23 = E22;
}
Else{
E13 = E12 * EP + E13 * (1-EP);
E23 = E22 * EP + E23 * (1-EP);
}
TEMA1 = (3 * E11) - (3 * E12) + (E13);
if TEMA1 >TEMA1[1]+지수테마보정한계 then TEMA1 = ((TEMA1 -TEMA1[1])*지수테마급증보정)+TEMA1[1];
if TEMA1 <TEMA1[1]-지수테마보정한계 then TEMA1 = TEMA1[1]-((TEMA1[1] -TEMA1)*지수테마급감보정);
if TEMA2 >TEMA2[1]+지수테마보정한계 then TEMA2 = ((TEMA2 -TEMA2[1])*지수테마급증보정)+TEMA2[1];
if TEMA2 <TEMA2[1]-지수테마보정한계 then TEMA2 = TEMA2[1]-((TEMA2[1] -TEMA2)*지수테마급감보정);
TEMA2 = (3 * E21) - (3 * E22) + (E23);
PLOT30(TEMA1+지수더하기/1000 ,"지수테마",iff((TEMA1 +지수더하기/1000 )>(TEMA1 +지수더하기/1000)[1]+00,BLACK,iff((TEMA1 +지수더하기/1000 )<(TEMA1 +지수더하기/1000 )[1]-00,BLACK,BLACK)));
PLOT31(TEMA2 +호가더하기/1000,"호가테마");
vmin = min(TEMA1 ,TEMA2 );
vmax = max(TEMA1 ,TEMA2 );
if TEMA1+지수더하기/1000> TEMA2+호가더하기/1000 Then{
var80 = (TEMA1+지수더하기/1000- TEMA2 +호가더하기/1000 )*0.5+TEMA2+호가더하기/1000 ;
}
if TEMA1 < TEMA2+호가더하기/1000 Then{
var80 = (TEMA2+호가더하기/1000 -TEMA1+지수더하기/1000)*0.5+TEMA1+지수더하기/1000 ;
}
PLOT17(var80,"지호평균");
//테마합 일정 수량차이상의 급등락 표시
if TEMA3 > TEMA3[1]+ 급변 Then{plot21(vmin-0.05,"급등");}
if TEMA3 < TEMA3[1]- 급변 Then{plot22(vmin-0.05,"급락");}
va71 =( TEMA2+호가더하기/1000 - TEMA1+지수더하기/1000 )+100;
if ( TEMA2+호가더하기/1000 )[1] < ( TEMA2+호가더하기/1000 ) and (TEMA1+지수더하기/1000)[1] < (TEMA1+지수더하기/1000) Then{
PLOT25((vmin )-0.02,"매수예비");
//PlaySound("C:₩예스트레이더₩data₩Sound₩pp.wav");
}
if ( TEMA2+호가더하기/1000 )[1] > ( TEMA2+호가더하기/1000 ) and (TEMA1+지수더하기/1000)[1] > (TEMA1+지수더하기/1000) Then{
PLOT26((vmin )-0.02,"매도예비");
// PlaySound("C:₩예스트레이더₩data₩Sound₩dingdong.wav");
}
PLOT60(va71,"55");
if CrossUp (( TEMA2+호가더하기/1000 ),(TEMA1+지수더하기/1000)) Then{
//if (TEMA1[1]+지수더하기/1000 )< (TEMA1+지수더하기/1000) and (va71[1] )< (va71)then {
PLOT45((vmin )-0.02,"매수막대");
// PlaySound("C:₩예스트레이더₩data₩Sound₩up.wav");
}
if CrossDown (( TEMA2+호가더하기/1000 ),(TEMA1+지수더하기/1000)) Then{
// if (TEMA1[1]+지수더하기/1000 )> (TEMA1+지수더하기/1000) and (va71[1] )> (va71) Then{
PLOT46((vmin )-0.02,"매도막대");
// PlaySound("C:₩예스트레이더₩data₩Sound₩dingdong.wav");
}
if va71[1]+급변 < va71 Then {
PLOT18((va71 )+0.01,"매도");
}
if va71[1]-급변 > va71 Then {
PLOT19((va71 )+0.01,"매수");
}
va96 = (tema1 - tema2)*1000;
PLOT61(va96,"66");
2017-03-07
116
글번호 107525
답변완료
시스템 수정부탁드립니다.
항상 도움 주셔서 감사합니다.
아래 시스템식에서 라인에 닿을때 청산이 안됩니다.
[테스트 환경 오일 4월물 - 5분봉]
//========================================================
// 추세선 지정하여 매매하기
//========================================================
input : 추세선시작일1(20170303),추세선시작시간1(220000); //추세선1-저가
input : 추세선종료일1(20170306),추세선종료시간1(171000); //추세선1-저가2
input : 추세선시작일2(20170306),추세선시작시간2(081000); //추세선2-고가
input : 추세선종료일2(20170306),추세선종료시간2(185000); //추세선2-고가2
input : X1(0.72),X11(-0.72),X2(0.42),X22(-0.42) ;// 추세선 이동
input : loss(10),profit(30),Tp(10),Ts(5); // 수익,손절,트레일링스탑
var : TL1(0),TLL1(0),TLLL1(0),T1(0); //추세선1-지지
var : TL2(0),TLL2(0),TLLL2(0),T2(0); //추세선2-저항
##### 추세선 그리기 #####
// 추세선1 - 저가
if sdate == 추세선시작일1 and time == 추세선시작시간1 Then{
T1 = 1;
var1 = L;
}
if T1 == 1 and sdate == 추세선종료일1 and time == 추세선종료시간1 Then{
var2 = L;
TL1 = TL_New(추세선시작일1,추세선시작시간1,var1,추세선종료일1,추세선종료시간1,var2);
TL_SetExtLeft(TL1,true);
TL_SetExtRight(TL1,true);
TL_SetColor(TL1,BLUE) ;
T1 = 2;
TLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x1,추세선종료일1,추세선종료시간1,var2+x1); //추세선 복사
TL_SetExtLeft(TLL1,true);
TL_SetExtRight(TLL1,true);
TL_SetColor(TLL1,BLUE) ;
TLLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x11,추세선종료일1,추세선종료시간1,var2+x11); //추세선 복사
TL_SetExtLeft(TLLL1,true);
TL_SetExtRight(TLLL1,true);
TL_SetColor(TLLL1,BLUE) ;
}
// 추세선2 - 고가
if sdate == 추세선시작일2 and time == 추세선시작시간2 Then{
T2 = 1;
var3 = H;
}
if T2 == 1 and sdate == 추세선종료일2 and time == 추세선종료시간2 Then{
var4 = H;
TL2 = TL_New(추세선시작일2,추세선시작시간2,var3,추세선종료일2,추세선종료시간2,var4);
TL_SetExtLeft(TL2,true);
TL_SetExtRight(TL2,true);
TL_SetColor(TL2,RED) ;
T2 = 2;
TLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x2,추세선종료일2,추세선종료시간2,var4+x2);
TL_SetExtLeft(TLL2,true);
TL_SetExtRight(TLL2,true);
TL_SetColor(TLL2,RED) ;
TLLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x22,추세선종료일2,추세선종료시간2,var4+x22);
TL_SetExtLeft(TLLL2,true);
TL_SetExtRight(TLLL2,true);
TL_SetColor(TLLL2,RED) ;
}
##### 시스템매매 #####
// 진입 시스템
// 매매시간 시작
if sdate >= 추세선종료일1 and stime >= 추세선종료시간1 then {
// 하락
if T1 == 2 and MarketPosition == 0 then { //and s_line1 > -1 and s_line4 < 0 then{
if C < TL_GetValue(TL1,sdate,stime) and C[1] > TL_GetValue(TL1,sdate[1],stime[1]) Then
sell("S");
}
// 상승
if T2 == 2 and MarketPosition == 0 then { //and s_line1 < 1 and s_line4 > 0 then{
if C > TL_GetValue(TL2,sdate,stime) and C[1] < TL_GetValue(TL2,sdate[1],stime[1]) Then
Buy("B");
}
// 청산 시스템
// 매도청산
// X1,X2에 닿을 경우
if MarketPosition == -1 then{
if (L <= TL_GetValue(TLLL1,sdate,stime) and L[1] > TL_GetValue(TLLL1,sdate[1],stime[1]))
or (L <= TL_GetValue(TLLL2,sdate,stime) and L[1] > TL_GetValue(TLLL2,sdate[1],stime[1])) Then
ExitShort("SX");
}
// 매수청산
// // X11,X22에 닿을 경우
if MarketPosition == 1 then{
if (H >= TL_GetValue(TLL1,sdate,stime) and H[1] < TL_GetValue(TLL1,sdate[1],stime[1]))
or (H >= TL_GetValue(TLL2,sdate,stime) and H[1] < TL_GetValue(TLL2,sdate[1],stime[1])) Then
ExitLong("BX");
}
// 매매시간종료
}
// 당일 청산
if stime == 065000 or (stime > 065000 and stime[1] < 065000) Then{
if MarketPosition == 1 Then
exitlong("BDF");
if MarketPosition == -1 Then
ExitShort("SDF");
}
##### 스탑로스 #####
//SetStopProfittarget(Profit*PriceScale,PointStop);
SetStopLoss(loss*PriceScale,PointStop);
//SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop);
문1) X1추세선 라인이나 X2 추세선 라인 또는 X11 추세선 라인이나 X22 추세선 라인에
고가나 저가가 닿을 경우 청산하고 싶은데 청산이 안됩니다.
코딩 수정 및 점검 부탁드립니다.
문2) 추세선 라인 옆에 X1,X11 등의 추세선의 이름을 차트에 표시하고 싶습니다.
도움 부탁드립니다.
2017-03-07
134
글번호 107524
답변완료
수식 부탁드립니다
안녕하세요~!
위에 첨부파일은 키움지표중 가격박스 지표입니다
랭귀지 코드로 변환 부탁드립니다.
중심선
MA( 가격, 이평기간, 이평방법 )
상한선
A = MA( 가격, 이평기간, 이평방법 );
A + AvgIf( 가격 - A, 1, 0.0 )
+ 2 * StdevIf( 가격 - A, 1, 0.0 )
하한선
A = MA( 가격, 이평기간, 이평방법 );
A + AvgIf( 가격 - A, -1, 0.0 )
- 2 * StdevIf( 가격 - A, -1, 0.0 )
항상 감사드립니다.
2017-03-06
306
글번호 107523
답변완료
수익 부탁 합니다
사용자가 매번 원하는 구간(a-b)을 매일 변경 설정하면서 ,,그 구간에서는 매수신호만,,,혹은 매도신호만 나오게 설정 하고 싶습니다
예제-----
금 1230-1233 사이구간에서는 매수신호만 나오게 설정하고 macd(12,26,9) 크로스 매수신호가 나오면 매수진입, 매도신호가 나오면 진입금지,
금 1240-1243 사이구간에서는 매도신호만 나오게 설정하고 macd(12,26,9) 크로스 매도신호가 나오면 매도진입, 매수신호가 나오면 진입금지,
손절----------------------
진입가 대비20틱 손실나면 강제청산
3번이상 손절시 진입 신호가 안나오게 부탁 드립니다
2017-03-06
123
글번호 107522
답변완료
부탁 드립니다
항상 만족한 수식 답변에 감사 드립니다.
아래수식의 그림1을 그림2와 같이 나타 내고 싶습니다.
미리 경배로 감사의 인사 올립니다.
var1=trix(20);
plot1(var1,"trix20");
PlotBaseLine1(0,"0");
PlotBaseLine2(-0.01,"-0.01");
PlotBaseLine3(0.01,"0.01");
참고수식)
var1=trix(20);
if var1 >= 0.01 Then
plot1(0.01,"trix20");
else if var1 <= -0.01 Then
plot1(-0.01,"trix20");
Else
plot1(var1,"trix20");
PlotBaseLine1(0,"0");
PlotBaseLine2(-0.01,"-0.01");
PlotBaseLine3(0.01,"0.01");
2017-03-06
177
글번호 107521
답변완료
항상감사합니다 수식변경부탁드립니다---------------
stime == 090000 or (stime > 090000 and stime[1] < 090000)
을
1)090000을 현재시간으로부터 10분전으로
2)090000을 현재봉으로부터 10봉전으로
각각 부탁드립니다
2017-03-06
116
글번호 107520
답변완료
문릐드립니다. 현재봉 추가 표시..
안녕하세요.
차트 상에서 현재봉을 옆에 추가로 하나 더 표시되도록 하고 싶은데 가능한가요?
수고하세요
2017-03-06
131
글번호 107519
답변완료
재문의드립니다.
1.
input : 기간(20), 시작시간(180000),끝시간(0),수익틱수(20);
INPUT: P26(26), PER(1);
var : T(0),a1(0),a2(0),V1(0),V2(0),V3(0);
var : Tcond(false),Xcond(false);
if (시작시간 > 0 and (stime == 시작시간 or (stime > 시작시간 and stime[1] < 시작시간))) or
(시작시간 == 0 and sdate != sdate[1]) Then{
Tcond = true;
Xcond = false;
}
if (끝시간 > 0 and (stime == 끝시간 or (stime > 끝시간 and stime[1] < 끝시간))) or
(끝시간== 0 and sdate != sdate[1]) Then
Tcond = false;
var1 = Highest(h,기간);
var2 = Lowest(L,기간);
var3 = var1-var2;
value1 = var1-var3*0.382;
value2 = var1-var3*0.500;
value3 = var1-var3*0.618;
if value2 > value2[1] Then
T = 1;
if value2 < value2[1] Then
T = -1;
if T == 1 then{
a1 = value1;
a2 = value2;
}
else{
a1 = value3;
a2 = value2;
}
V1=(Highest(H,P26)+LOWEST(L,P26))/2;
V2=V1*(1+PER/100);
V3=V1*(1-PER/100);
if TotalTrades > TotalTrades[1] and (IsExitName("매수익절",1) or IsExitName("매도익절",1)) Then
Xcond = true;
if Tcond == true and Xcond == false then{
if crossup(a1,v1) Then
buy("매수",OnClose,def,2);
if CrossDown(a1,v1) Then
sell("매도",OnClose,def,2);
if MarketPosition == 1 Then{
ExitLong("매수10틱청",atlimit,EntryPrice+PriceScale*수익틱수,"",1,1);
}
if MarketPosition == -1 Then{
ExitShort("매도10틱청",atlimit,EntryPrice-PriceScale*수익틱수,"",1,1);
}
}
수식 감사합니다
다름이아니라
설정한 시간 외 나오는 신호나
나올경우 그날 무조건 청산되는 수식을 추가해주셨으면합니다
밤12시가 넘을경우 강제청산
안할경우 다음날 오후6시부터 나오는 신호가 연계가 되어
수익이 불투명합니다
당일 수익만을 원하고있습니다
감사합니다
2017-03-06
134
글번호 107511
답변완료
추가질문입니다.
NO. 52243 과 관련입니다
당해지표식을 시스템식으로 변형하여 주시면 감사 하겠습니다.
* Plot1에 할당 된
(꺾은선) 과 (Iff(방향 == 상승,기준고,기준저))의 할당값을 모르겠습니다.
2017-03-06
122
글번호 107509