커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4360
글번호 230811
답변완료
showme 지표로 부탁드립니다
input : abc(1.05);
if C > dayopen*abc and ma(V,1) > 1000000 Then
buy();
이 신호가 발생한 캔들 아래에 동그라미표시로 부탁드려요
2018-03-19
157
글번호 117506
답변완료
문의드립니다.
10분봉 기준으로
2일전, 3일전 첫봉 거래량이 만주 이상 터진 종목을 검색할 수 있나요??
2018-03-19
155
글번호 117505
답변완료
수식요청 드립이다.
안녕하세요.
연결선물 분봉 틱봉 당일청산 시스템에서
1. 당일 매수 또는 매도 진입 후 미결제약정 수량이 계속 증가하다가 고점에서
30% 감소할경우 전량 청상하는 수식
2. 매수 진입 후 볼린저밴드 상단을 상향돌파하는 완성봉 발생된 후, 볼린저밴드 상단을 하향돌파봉
발생시 매수청산.
매도 진입 후 볼린저밴드 하단단을 하향돌파하는 완성봉 발생된 후, 볼린저밴드 하단을 상향돌파봉
발생시 매도청산.
수식요청 드립이다.
감사합니다.
//-------------------------------------------------------------------------------------------------------#진입수식(예제)
Input : Period(12), sigPeriod(9);
value1 = TRIX(Period);
value2 = ema(value1, sigPeriod);
If CrossUP(value1, value2) Then{
Buy();
}
If CrossDown(value1, value2) Then{
Sell();
}
SetStopEndofday(150000);
//-------------------------------------------------------------------------------------------------------
2018-03-19
150
글번호 117498
답변완료
문의드립니다
혹시 당일 외국인의 코스피,선물,콜,풋옵션의 금액과 수량을
시스템에 입력할수있나요?
2018-03-19
143
글번호 117496
답변완료
지표로 추가를 하려 합니다만...
안녕하세요... 고생많으십니다. ^^
"외국인 순매수 금액" 을 지표로 표시하려고 합니다.. 참조탭에서 선택을 하면
"기본 차트 속성:외국인 순매수 금액" 탭이 뜨고 옵션을 어떤 걸 선택해야 할지 모르겠지만. 그냥 확인을 누르면 "데이타가 존재하지 않습니다.(10005)"가 뜹니다.
틱은 90틱으로 쓰고 있는데.. 어디에서 옵션을 잡아야 하는 건지.. 잘 모르곘네요. ^^;;
매번 도움 감사합니다.
2018-03-19
161
글번호 117495
답변완료
문의드립니다.
매번 감사합니다.
1. 기타
코딩 변환 부탁드립니다.
using elsystem;
using elsystem.collections ;
using elsystem.drawingobjects ;
using elsystem.drawing ;
inputs:
int Iterations( 3 );
variables:
Vector BarData ( NULL ), // Bar DTP
Vector Segments ( NULL ); // of Rounds of Pairs
method void CreateTL ( DTPoint Begin_DTP,
DTPoint End_DTP )
variables: TrendLine New_TL ;
begin
New_TL = TrendLine.Create( Begin_DTP, End_DTP ) ;
New_TL.ExtLeft = false ;
New_TL.ExtRight = false ;
New_TL.Persist = true ;
New_TL.Color = Color.Aquamarine ;
DrawingObjects.Add( New_TL ) ;
end ;
method void LoadBarDataVector ()
begin
if BarData <> NULL then
BarData.Push_Back(
DTPoint.Create( BarDateTime, Close ) astype DTPoint ) ;
end ;
method DTPoint BisectPairs ( Vector DTPPair )
variables: DTPoint BegDTP, DTPoint EndDTP,
DTPoint MidDTP,
int BarDataStartIndex, int BarDataEndIndex,
int BarDataCnt,
int HighDiffIndex, double HighDiff,
int Count, double TL_Val ;
begin
HighDiffIndex = 0 ;
HighDiff = -999999 ;
BegDTP = DTPPair.Items[0] astype DTPoint ;
EndDTP = DTPPair.Items[1] astype DTPoint ;
for Count = 0 to BarData.Count - 1
begin
if (BarData.Items[Count] astype DTPoint).DateTimeOfBar =
BegDTP.DateTimeOfBar then
BarDataStartIndex = Count ;
if (BarData.Items[Count] astype DTPoint).DateTimeOfBar =
EndDTP.DateTimeOfBar then
BarDataEndIndex = Count ;
end ;
BarDataCnt = BarDataEndIndex - BarDataStartIndex ;
if BarDataCnt = 0
then BarDataCnt +=1 ;
for Count = BarDataStartIndex to BarDataEndIndex
begin
// Find TL Value
TL_Val = (BarData.Items[BarDataStartIndex]
astype DTPoint).Price astype double +
(( BarData.Items[BarDataEndIndex] astype DTPoint).
Price astype double -
(BarData.Items[BarDataStartIndex] astype DTPoint).
Price astype double )
* ( ( Count ) / BarDataCnt ) ;
if AbsValue( TL_Val - (BarData.Items[Count] astype DTPoint).
Price astype double ) > HighDiff then
begin
HighDiff = AbsValue( TL_Val -
(BarData.Items[Count] astype DTPoint).Price astype
double ) ;
HighDiffIndex = Count ;
end ;
end ;
MidDTP = BarData.Items[HighDiffIndex] astype DTPoint ;
return MidDTP ;
end;
method void fndDiffBisect( )
variables: Vector RecursRound, Vector NewRound,
Vector NewPairR, Vector NewPairL,
int Count, bool OKToUse,
DTPoint BegDTP, DTPoint EndDTP, DTPoint MidDTP ;
begin
NewRound = new Vector ;
RecursRound = new Vector ;
OKToUse = false ;
RecursRound = segments.Items[Segments.Count -1] astype
Vector ;
for Count = 0 to RecursRound.Count -1
begin
begin
MidDTP = BisectPairs( RecursRound.Items[Count]
astype Vector ) ;
NewPairL = new Vector ;
NewPairL.Push_Back( (RecursRound.Items[Count]
astype Vector).Items[0] astype DTPoint ) ;
NewPairL.Push_Back( MidDTP astype DTPoint ) ;
NewRound.Push_Back( NewPairL astype Vector ) ;
NewPairR = new Vector ;
NewPairR.Push_Back( MidDTP astype DTPoint ) ;
NewPairR.Push_Back( (RecursRound.Items[Count]
astype Vector).Items[1] astype DTPoint ) ;
NewRound.Push_Back( NewPairR astype Vector ) ;
end ;
end ;
Segments.push_back( NewRound ) ;
end ;
method void SeedSegmentsVector()
variables: Vector RecursRound, Vector Pair ;
begin
Pair = new Vector ;
RecursRound = new Vector ;
Pair.Push_Back( BarData.Items[0] astype DTPoint ) ;
Pair.Push_Back( BarData.Items[BarData.Count -1] astype
DTPoint ) ;
RecursRound.Push_Back( Pair astype Vector ) ;
Segments.Push_Back( RecursRound astype Vector ) ;
end ;
method void DrawAllTLs( )
variables: Vector RecursRound, Vector Pair, int Count ;
begin
Pair = new Vector ;
RecursRound = new Vector ;
RecursRound = Segments.Items[Segments.Count -1] astype
vector ;
Print( "TLStart" ) ;
for Count = 0 to RecursRound.Count -1
begin
Pair = RecursRound.Items[Count] astype Vector ;
CreateTL( Pair.Items[0] astype DTPoint, Pair.Items[1]
astype DTPoint );
end ;
end ;
once
begin
ClearPrintLog ;
BarData = new Vector ;
Segments = new Vector ;
end ;
if BarStatus( DataNum + 1 ) = 2 then
LoadBarDataVector () ;
once ( LastBarOnChartEx )
begin
SeedSegmentsVector( ) ;
For Value1 = 1 to Iterations
begin
fndDiffBisect( ) ;
end ;
DrawAllTLs( ) ;
end ;
2018-03-19
180
글번호 117493
답변완료
수식부탁드립니다
매번 고맙습니다
1),해외선물 분봉에서 유럽장 첫 시작해서 완성봉으로 첫봉부터 다섯번째봉까지를 기준으로
총5개 완성봉의 최고점과 최저점을 진폭으로 잡고
그폭만큼씩 위로 3칸과 아래로 3칸을 가로선을 실선으로 긋고
그값은 우측 Y축앞에 표시하면 좋겠습니다
2),해외선물 분봉에서 미국장 첫 시작해서 완성봉으로 첫봉부터 다섯번째봉까지를 기준으로
총5개 완성봉의 최고점과 최저점을 진폭으로 잡고
그폭만큼씩 위로 3칸과 아래로 3칸을 가로선을 실선으로 긋고
그값은 우측 Y축앞에 표시하면 좋겠습니다,
$$ 1).2)별도의 수식으로 부탁드립니다.
2018-03-19
184
글번호 117492
답변완료
점이 찍히지 않는 이유 재문의
종목은 선물이고 주기는 5분봉이었습니다. 녹색점은 plot6로 구현된 것이 맞습니다. 아래 답변대로 시험해 본 결과 점이 찍히지 않는 원인은 5분봉 조건이 맞지 않은데 있었습니다. 5분봉 조건은 condition1= stime-stime[1]==000500으로 하고 이 조건이 충족되고 거래량이 5000개 이상이면 녹색점을 찍도록 했는데... stime은 100000(10시) stime[1]은 095500(9시55분)이었고 이 둘의 차이는 000500이 아니라 4500이었습니다.시간차 계산과 십진법 계산의 차이로 인한 것이었습니다. 그래서 봉의 조건이 5분봉이라는 것을 제가 사용한 방법말고 다른 방법이 없을까요??? 60진법을 10진법으로 바꾸어 사용할 수 있나요??? 60진법을 10진법으로 바꾸려면 각 자릿수를 따로 떼어 내어야 하는데 그렇게 할 수 있나요??? 예를 들어 9시55분0초이라면 시, 분, 초를 따로 분리할 수 있으면 10진법으로 바꿀 수가 있는데... 5분봉이라는 조건이 필요한 이유는 선물 15분봉이나 1분봉에서도 이 지표를 사용할 수 있게 하기 위해서입니다. 그래서 생기는 질문인데요 사용하는 차트의 주기가 1분봉이라는 조건과 주기가 15분봉이라는 조건은 어떻게 하면 되나요???
=====================
안녕하세요
예스스탁입니다.
적용하신 종목과 주기등을 같이 알려주셔야
저희가 수식을 적용해 보고 지정하신 봉에 왜 점이 찍히지 않았는지 답변드릴수 있습니다.
어떤 종목에 적용된지 알수없는 지표 그림과 수식으로는 답변이 어렵습니다.
질문내용을 좀더 명료하게 파악할수 있게 올려주셔야 답변이 가능합니다.
아래 지표 적용해서 어떤 조건이 만족하지 않았는지
사용자분이 파악하셔서 수정하셔야 할것 같습니다.
if (condition1==true or condition3==true) and v>=5000 then{
plot6(var10,"의미5");}
녹색점이라고만 하시면 수식에 색상이 지정된 내용이 있지 않아 어떤 plot인지 파악이 어렵습니다.
아마 내용에 5000개를 언급하셨으므로 위 조건에 의해 점이찍혀야 하는 것 같습니다.
conditio1이나 conditio2중 하나이상 조건이 만족하고
거래량이 5000이상이면 되므로
아래 지표 적용해서 숫자로 2가 발생하는 지 확인하시기 바랍니다.
2개 발생하지 않으면 거래량이나 condition 조건중 하나는 만족하지 않는 것입니다.
지정된 봉에서 2가 나와야 하는데 1이하가 나오면
거래량 조건은 v > 5000으로 명확한 부분이므로
conditio1이나 conditio2 조건내용이 해당 봉에서 충족될수 있는
내용인지 살펴보셔야 합니다.
var1=ma(v,20);
if c>o and v>=2*ma(v,20) then var1=v*1.2;
else var1=0;
if c<=o and v>=2*ma(v,20) then var2=1.2*V;
else var2=0;
var3=v*(2*c-h-l)/(h-l);
var5=v;
if var3==0 then{ var7=0; var8=0; }
else if var3>0 then{ var7=var3; var8=0; }
else{ var8=abs(var3); var7=0; }
#if nextbarsdate!=sdate then{
#if stime>153449 then{
# var1=var1/10;
# var2=var2/10;
# var5=var5/10;
# var7=var7/10;
# var8=var8/10;}
condition1=stime-stime[1]==000500;
condition2=stime-stime[1]==001500;
condition3=stime==090000 and stime[10]-stime[11]==000500;
condition4=stime==090000 and stime[1]-stime==135000;
condition5=stime-stime[1]==000100;
var : count(0);
count = 0;
if (condition1==true or condition3==true) then
count = count+1;
if v>=5000 then
count = count+1;
plot1(count);
즐거운 하루되세요
> 솔잎22 님이 쓴 글입니다.
> 제목 : 점이 찍히지 않는 이유
> var1=ma(v,20);
if c>o and v>=2*ma(v,20) then var1=v*1.2;
else var1=0;
if c<=o and v>=2*ma(v,20) then var2=1.2*V;
else var2=0;
var3=v*(2*c-h-l)/(h-l);
var5=v;
if var3==0 then{ var7=0; var8=0; }
else if var3>0 then{ var7=var3; var8=0; }
else{ var8=abs(var3); var7=0; }
#if nextbarsdate!=sdate then{
#if stime>153449 then{
# var1=var1/10;
# var2=var2/10;
# var5=var5/10;
# var7=var7/10;
# var8=var8/10;}
plot1(var1,"양2");
plot2(var2,"음2");
plot3(var5,"v");
plot4(var7,"수");
plot5(var8,"도");
condition1=stime-stime[1]==000500;
condition2=stime-stime[1]==001500;
condition3=stime==090000 and stime[10]-stime[11]==000500;
condition4=stime==090000 and stime[1]-stime==135000;
condition5=stime-stime[1]==000100;
var10=(v+max(var7,var8))/2;
if (condition1==true or condition3==true) and v>=5000 then{
plot6(var10,"의미5");}
#if condition5==true and (v>=2000 or v>=ma(v,21)*2.5) then{
if condition5==true and v>=2000 then{
plot7(var10,"의미1");}
if (condition1==true or condition3==true) then{
plot8(5000,"기준");}
#if (condition2==true or condition4==true) and v>=10000 then{
# var10=(v+max(var7,var8))/2;
# plot7(var10,"의미15");}
위 코드로 작성된 첨부 파일을 보면 녹색 점이 5분봉에서 조건을 만족하면 찍혀야 하는데 찍히는 데가 있고 그렇지 않은 곳이 있습니다. "이 봉에서"라는 봉에서는 거래량이 5000개를 넘어서고 5분봉이라는 조건을 만족하는 데 점이 찍히지 않습니다. 왜 그런지 좀 고쳐 주시기 바랍니다.
2018-03-19
172
글번호 117491
답변완료
볼밴드 관련 또 문의드립니다
Input : P(20), Dv(2),N(5);
var : bbmd(0),BBup(0),BBdn(0);
BBmd = ema(C,P);
BBup = BollBandUp(P,Dv);
BBdn = BollBandDown(P,Dv);
if crossup(C,BBmd[N]) Then
find(1);
즐거운 하루되세요
> 커피한잔 님이 쓴 글입니다.
> 제목 : 종가,Bollband돌파 관련
> 금일종가가 5일전 볼밴드를 상향돌파시 로직을 어떻게 구현합니까
매번 귀찮게 해드려서 죄송합니다만 프로그램언어 지식 없다보니 어쩔수없시 또 문의드립니다
Input : P(20), Dv(2),N(5);
var : BBdn(0);
BBdn = BollBandDown(P,Dv);
if crossup(C,BBdn[N]) Then
find(1);
위 로직은 당일 종가가 볼밴드를 돌파한 값을 5일 전으로 옴겨놓은걸로 나오네요
Input : P(20), Dv(2),N(5);
var : BBdn(0);
BBdn = BollBandDown(P,Dv,close[5]);
if crossup(C,BBdn) Then
find(1);
이런식으로 수정 해봐는대 에러 발생합니다 많이 버거롭게지만 도와주십시요
갑사합니다
2018-03-19
166
글번호 117489