커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7228
글번호 230811
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
변환부탁드립니다.
Indicator: Stiffness Indicator
// The Stiffness Indicator
// Markos Katsanos
// TASC Nov 2018
inputs:
MALength( 100 ),
StiffnessLength( 60 ),
Threshold( 90 ) ;
variables:
MAValue( 0 ),
MACorValue( 0 ),
NumAboveMA( 0 ),
Stiffness( 0 ),
StiffnessEMA( 0 ) ;
MAValue = Average( Close, MALength ) ;
MACorValue = MAValue - .2 *
StdDev( Close, MALength ) ;
NumAboveMA = CountIf( Close >
MACorValue, StiffnessLength ) ;
Stiffness = NumAboveMA *
MALength / StiffnessLength ;
StiffnessEMA = XAverage( Stiffness, 3 ) ;
Plot1( Threshold, "Threshold" ) ;
Plot2( StiffnessEMA, "Stiffness" ) ;
Indicator: Corrected Moving Average
// The Stiffness Indicator
// Markos Katsanos
// TASC Nov 2018
inputs:
MALength( 100 ),
StiffnessLength( 60 ),
Threshold( 90 ) ;
variables:
MAValue( 0 ),
MACorValue( 0 ),
NumAboveMA( 0 ),
Stiffness( 0 ),
StiffnessEMA( 0 ) ;
MAValue = Average( Close, MALength ) ;
MACorValue = MAValue - .2 *
StdDev( Close, MALength ) ;
Plot1( MACorValue, "MA COR" ) ;
Plot2( MAValue, "MA" ) ;
Strategy: Stiffness Strategy
// The Stiffness Indicator
// Markos Katsanos
// TASC Nov 2018
// Requires Data2 Symbol for Market
//
inputs:
MALength( 100 ),
StiffnessLength( 60 ),
BuyThreshold( 90 ),
SellThreshold( 50 ),
ExitAfterBars( 84 ),
MarketTrendEMALength( 100 ) ;
variables:
MAValue( 0 ),
MACorValue( 0 ),
NumAboveMA( 0 ),
Stiffness( 0 ),
StiffnessEMA( 0 ),
MarketTrendAvg( 0, Data2 ),
MarketTrendOK( false, Data2 ) ;
MAValue = Average( Close, MALength ) ;
MACorValue = MAValue - .2 *
StdDev( Close, MALength ) ;
NumAboveMA = CountIf( Close >
MACorValue, StiffnessLength ) ;
Stiffness = NumAboveMA *
MALength / StiffnessLength ;
StiffnessEMA = XAverage( Stiffness, 3 ) ;
MarketTrendAvg = XAverage( Close of Data2,
MarketTrendEMALength ) of Data2 ;
MarketTrendOK = MarketTrendAvg
>= MarketTrendAvg[2] ;
if StiffnessEMA crosses over BuyThreshold
and MarketTrendOK then
Buy ( "X Over LE" ) next bar at Market ;
if StiffnessEMA crosses under SellThreshold then
Sell ( "X Under LX" ) next bar at Market ;
if BarsSinceEntry >= ExitAfterBars then
Sell ( "Num Days LX" ) next bar at Market ;
2018-10-15
233
글번호 122705
답변완료
목표수익 도달후 당일 거래청산 로직 문의
첨부파일상의 로직에 목표수익에 도달한 이후에는 거래를 청산하여 진입을 제한하는 로직과
지정해놓은 최대손실 도달시 진입을 제한하여 당일 거래를 청산하는 로직을 덧붙이고 싶습니다.
2018-10-16
203
글번호 122704
답변완료
문의 드립니다.
안녕하세요.
59611번 질문에 답을 주셨는데 안 돼서 다시 질문 드립니다.
틱차트에서 data2의 첫번째봉의 고가, 저가라인을 나타내고 싶습니다.
현재 주가가 고가라인 위에 있으면 빨간색, 저가라인 아래에 있으면 파란색으로 그려지고, 텍스트로 고가, 저가라고 표시되길 원합니다.
텍스트 위치는 현재가 위 15틱에서 나타나면 좋겠습니다.
아래와 같이 답변을 주셨는데, 텍스트가 여러개가 나옵니다.
고가 저가를 갱신할 때마다 텍스트가 나오는 것 같습니다.
그리고 현재 주가가 저가 아래에 있어도 파란색으로 바뀌지 않습니다.
고가 저가 텍스트 옆에 값도 출력되도록 하려면 수식을 어떻게 작성해야 할까요?
감사합니다.
var :v1(0,data2),v2(0,data2),tx(0,data1);
if data2(bdate != bdate[1]) Then
{
v1 = data2(h);
v2 = data2(l);
}
plot1(v1);
plot2(v2);
Text_Delete(tx);
if C > v1 Then
{
plot3(c,"현재가",RED);
tx = Text_New(sdate,stime,C+PriceScale*15,"고가");
}
Else if C < v2 Then
{
plot3(c,"현재가",BLUE);
tx = Text_New(sdate,stime,C-PriceScale*15,"저가");
}
Else
plot3(c,"현재가",BLACK);
2018-10-15
197
글번호 122703
답변완료
스탑로스 질문드립니다.
var : BLcnt(0),SLcnt(0),추격횟수(0), 피라미딩매수(0);
if Bdate != Bdate[1] Then{
BLcnt = 0;
SLcnt = 0;
}
if MarketPosition != MarketPosition[1] and MarketPosition(1) == 1 and
TotalTrades > TotalTrades[1] and LatestExitName(1) == "StopLoss" Then
BLcnt = BLcnt+1;
if MarketPosition == 1 and CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "StopLoss" Then
BLcnt = BLcnt+1;
if BLcnt < 2 and 매수식 then
이면 스탑로스2회 발생시 매매X였습니다.
If MarketPosition == 0 Then
if BLcnt < 2 Then{
if 조건 then
buy
if 조건 then
buy
}
스탑컷이 유효하지가 않네요.
근데 이게 안되더군요. 무엇이 문제인지...
실험한 로직첨부합니다. 일3회 스탑이 나온것을 확인할 수 있습니다.
/////////
var : BLcnt(0),SLcnt(0);
if Bdate != Bdate[1] Then{
BLcnt = 0;
SLcnt = 0;
}
if MarketPosition != MarketPosition[1] and MarketPosition(1) == 1 and
TotalTrades > TotalTrades[1] and LatestExitName(1) == "StopLoss" Then
BLcnt = BLcnt+1;
if MarketPosition == 1 and CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "StopLoss" Then
BLcnt = BLcnt+1;
if MarketPosition != MarketPosition[1] and MarketPosition(1) == -1 and
TotalTrades > TotalTrades[1] and LatestExitName(1) == "손절" Then
SLcnt = SLcnt+1;
if MarketPosition == -1 and CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "손절" Then
SLcnt = SLcnt+1;
MessageLog("BLcnt %.f SLcnt %.f",BLcnt,SLcnt);
If blcnt < 2 and CrossUp(Close,Ma(c,5)) Then{
Buy();
}
SetStopLoss(20*PriceScale,PointStop);
SetStopProfittarget(20*PriceScale,PointStop);
////////////////////나스닥100 2분봉 캔들갯수10000개 하신뒤 확인해보시길 바랍니다. 사진1입니다.
그래서 보안책으로 윗 로직을 지운뒤
Vars : 시작시간(070100),종료시간(070000);
Input : 당일누적손실틱수(120);
Var : N1(0),dayPl(0),당일누적수익(0),당일누적손실(0),Xcond(false),Tcond(false);
당일누적손실 = PriceScale*당일누적손실틱수;
if (sdate != sdate[1] and stime >= 종료시간) or
(sdate == sdate[1] and stime >= 종료시간 and stime[1] < 종료시간) Then
{
Tcond = false;
}
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] and
IsExitName("누적손실제한",1) == true then
Xcond = true;
if Xcond == False then
If MarketPosition == 0 Then{
if 조건식 then
buy
로 해도 일최대손실 틱수를 인식하지 못합니다. 가령100틱을 설정해도 100틱이 누적되었음에도 불구하고 한번더 주문이 나간뒤
If marketposition == -1 then {
ExitShort("누적손실제한",AtStop,EntryPrice+((당일누적손실+daypl)/CurrentContracts));} 이 작동합니다. 120틱째에 누적손실제한이 걸린다거나 하는것이죠. 대체 뭐가 문제일련지요?
1.
그저 저는 하루에 스탑2번 발생시 매매금지 이것만 하고싶을 뿐인데...
참고로 제 진입식은 총5개입니다.
2.
일최대 손실틱수를 100틱으로 하고싶습니다.
토탈 100틱이상 손실이 났을 경우 매매중지이죠.
설정은 외부변수로 선택할 수 있게하고싶습니다.
2018-10-16
234
글번호 122702
답변완료
부탁 드립니다.
항상 도움주심에 감사 드립니다.
다음의 타주기 틱용 수식을
1)일봉에서의 지표를 분용 차트에
2)주봉에서의 지표를 분용 차트에
3)월봉에서의 지표를 분용 차트에 표시되도록 부탁 드립니다.
주)참고수식을 덧붙입니다.
미리 경배로 감사 드립니다.
/*
Inputs: 전환선기간(9),sig(5);
Variables: 전환선(0);
전환선 = (Highest(High, 전환선기간) + Lowest(Low, 전환선기간)) / 2;
var1=c-전환선;
var2=ma(var1,sig);
plot1(var2);
*/
input : Nbars(3),전환선기간(9),sig(26);
var : TF(0),S1(0),D1(0),TM(0),cnt(0),idx(0);
var : H1(0),L1(0),전환선(0),sum(0),mav(0);
Array : HH[100](0),LL[100](0),diff[100](999999999);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
idx = 0;
}
Else
idx = idx+1;
if D1 > 0 then
{
TF = idx%Nbars;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 99
{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
diff[cnt] = diff[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[전환선기간-1] > 0 and LL[전환선기간-1] > 0 then
{
H1 = HH[0];
L1 = LL[0];
for cnt = 0 to 전환선기간-1
{
if HH[cnt] > H1 Then
H1 = HH[cnt];
if LL[cnt] < L1 Then
L1 = LL[cnt];
}
전환선 = (H1 + L1)/2;
diff[0] = C-전환선;
}
if diff[sig-1] < 999999999 Then
{
sum = 0;
for cnt = 0 to sig-1
{
sum = sum + diff[cnt];
}
mav = sum/sig;
plot1(mav);
}
}
참고수식)
Input : Period(5),sig(20);
Var : Ep1(0),Ep2(0);
var : didx(0),emad(0),sigd(0),pred(0),preds(0),emads(0);
var : widx(0),emaw(0),sigw(0),prew(0),prews(0),emaws(0);
var : midx(0),emam(0),sigm(0),prem(0),prems(0),emams(0);
Ep1 = 2/(Period+1);
Ep2 = 2/(sig+1);
if bdate != bdate[1] then
{
didx = didx + 1;
pred = emad[1];
preds = sigd[1];
}
if didx <= 1 then
{
emad = C;
sigd = emad;
}
else
{
emad = C * EP1 + pred * (1-EP1);
sigd = emad * EP2 + preds * (1-EP2);
}
if DayOfWeek(bdate) < DayOfWeek(bdate[1]) then
{
widx = widx + 1;
prew = emaw[1];
prews = sigw[1];
}
if widx <= 1 then
{
emaw = C;
sigw = emaw;
}
else
{
emaw = C * EP1 + prew * (1-EP1);
sigw = emaw * EP2 + prews * (1-EP2);
}
if bdate > bdate[1]+30 then
{
midx = midx + 1;
prem = emam[1];
prems = sigm[1];
}
if midx <= 1 then
{
emam = C;
sigm = emam;
}
else
{
emam = C * EP1 + prem * (1-EP1);
sigm = emam * EP2 + prems * (1-EP2);
}
plot1(sigd,"일봉");
plot2(sigw,"주봉");
plot3(sigm,"월봉");
2018-10-15
196
글번호 122701
회원 님에 의해서 삭제되었습니다.
2018-10-16
10
글번호 122700
답변완료
수식문의 드립니다.
안녕하세요
수식 작성 부탁 드립니다.
볼밴에서 하단 터치시 매수, 상단 터치시 청산후 ,
만약 볼밴상단에서 5틱이상 상승시 재매수후 볼밴상단에서 5틱이상 하락시 청산후 매도 진입
볼밴 하단 진입후 2개 전의 분봉보다 4틱 높을경우 매도 청산, 그리고 매수
이렇게 반복되는 작성 부탁 드립니다.
수고하세요
2018-10-15
135
글번호 122699
답변완료
inactivity 청산식
아래 수식은 전체 트레이드 시간에 적용됩니다.
청산 수식을 두번에 나누어 적용하는 수식을 요청드립니다.(input 수식 포함)
09시부터 12시까지 SetStopInactivity(최소가격변화포인트,봉갯수,PointStop);
12시부터 15시까지 SetStopInactivity(최소가격변화포인트,봉갯수,PointStop);
********************************************************************************
input : 최소가격변화포인트(1.08), 봉갯수(301);
SetStopInactivity(최소가격변화포인트,봉갯수,PointStop);
2018-10-15
163
글번호 122698
답변완료
수식
안녕하세요 감사 인사부터 드려요
제가원하는 수식은
볼린저밴드를 종가기준으로 하한선 이탈후 하한선 안으로 종가기준 제진입시 매수
청산은 매수후 이전 저점을 종가기준 하향이탈하면 매수청산후 매도진입하거나 볼린저밴드 상한선을 고점기준 돌파시 청산
매도는 반대 입니다
중요한것은 매수후 이전 저점을 하향이탈하면 청산후 매도진입
매도후 이전 고점을 상향이탈하면 청산후 매수진입닙니다
항상 감사드립니다 꾸벅
2018-10-15
171
글번호 122697