커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6272
글번호 230811
답변완료
질문드립니다.
다른 5이평을 뒤집어서 상향크로스될때는 빨간색 하향크로스될때는 파란색으로 표시하고싶습니다...
Input : Period1(5);
var : Sma1(0), sma2(0);
Sma1 = ma(C,Period1);
sma2 = sma1-(sma1-5);
Plot1(Sma1, "이동평균1");
plot2(sma2,"반대");
이렇게하면 올바르게 나오지를 않네요
2017-08-31
129
글번호 112375
답변완료
행복; 시스템식 작성 바랍니다
한국의 금융산업 발전을 위해 불철주야 애쓰시는 귀하의 노고를 높이 평가합니다
시스템식 관련입니다
Q&A 54578번에 대한 답변 << 아래 >> 와 같이 잘 받았습니다
======<< 아래 시작 >>===============================
if MarketPosition == 0 and sdate == 20151020 and C > 46800 then{
Condition1 = true;
buy("b1",OnClose,def,722);
}
if Condition1 == true and MaxEntries < 5 Then{
buy("b2",AtStop,47947,308);
buy("b3",AtStop,49061,308);
buy("b4",AtStop,50169,308);
buy("b5",AtStop,51275,308);
}
if MarketPosition == 1 Then{
if MaxEntries == 1 then
exitlong("bx1",AtStop,highest(H,BarsSinceEntry)*0.790);
if MaxEntries == 2 then
exitlong("bx2",AtStop,highest(H,BarsSinceEntry)*0.688);
if MaxEntries == 3 then
exitlong("bx3",AtStop,highest(H,BarsSinceEntry)*0.586);
if MaxEntries == 4 then
exitlong("bx4",AtStop,highest(H,BarsSinceEntry)*0.484);
if MaxEntries == 5 and C > 100000 Then
exitlong("bx5");
======<< 아래 끝 >>===============================
<< 아래 >>를 < 다음 >과 같이 약간 변형하여 LG전자에 적용하였습니다
- 주기; 일봉
- 종목; LG전자
======<< 다음 시작 >>===============================
if MarketPosition == 0 and sdate == 20151020 and C > 46800 then
buy("b1",OnClose,def,722);
if MarketPosition == 1 Then{
if sdate >= 20151020 and MaxEntries < 5 Then{
buy("b2",AtStop,47947,308);
buy("b3",AtStop,49061,308);
buy("b4",AtStop,54490,308);
buy("b5",AtStop,55994,308);
}
if MaxEntries == 1 then
exitlong("bx1",AtStop,highest(H,BarsSinceEntry)*0.790);
if MaxEntries == 2 then
exitlong("bx2",AtStop,highest(H,BarsSinceEntry)*0.688);
if MaxEntries == 3 then
exitlong("bx3",AtStop,highest(H,BarsSinceEntry)*0.586);
if MaxEntries == 4 then
exitlong("bx4",AtStop,highest(H,BarsSinceEntry)*0.484);
if MaxEntries == 5 and C > 100000 Then
exitlong("bx5");
}
======<< 다음 끝 >>===============================
그랬더니, 2015년 10월 20일에 1차 매수 후
2차, 3차 매수는 2015년 10월 21일에 정상적으로 매수되었는데
2016년 10월 22일에는 4차 매수가 3번 반복되고 5차 매수가 1번 실행되어
합이 7차례 매수가 됩니다
원래는 5번 매수가 되어야 하는데 추가로 2번 더 매수가 이루어집니다~
어떻게 수정 해야 하나요?
2017-08-30
166
글번호 112374
답변완료
이전질문에 대한 추가질문입니다.
If 지평선>value10 Then {
if CrossUp(value13,value14) then Sell("매도");
}
If 지평선<Value10 Then {
if CrossUp(value13,value14) then Buy("매수");
}
If MarketPosition==1 Then{ #정방향 매도
If CrossDown(지평선,value10) Then ExitLong("매수청산1");
If 지평선<Value10 Then {
If CrossUp(value13,value14) Then ExitLong("매수청산2"); #손절
}
}
If MarketPosition==-1 Then{ #정방향 매수
If CrossUp(지평선,value10) Then ExitShort("매도청산1");
If 지평선>value10 Then {
If CrossUp(value13,value14) Then ExitShort("매도청산2"); #손절
}
}
위와같은 수식이 있다고 할때 전에 질문드린 내용으로 수식 수정을 좀 부탁드려도 될까요
답변해주신 내용으로 수식작성을 해보니 아예 진입이 나오지 않아서요..
매번 감사드립니다.
2017-08-30
123
글번호 112373
답변완료
수식부탁합니다
아래에서 파라미딩을 설정하면 지표에서는 매수신호가 봉마다 1개 예를들면 총 5개 매수체결이 되는데 지표에서 청산신호가 한봉에 5개 나오면 체결이 5개 되어야 하나 실제 체결은 1개만 됩니다. 옵션의 문제인가요?
var Begin;
var CallCode,PutCode;
function C1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1 )
{
Main.MessageList("매수신호발생");
Begin = 1;
CallCode = Option.GetATMCallRecent(1);
var CallPrice = Option.GetBidByCode(CallCode,2);
A1.OrderBuy(CallCode, 1, CallPrice, 1);
}
if (Begin == 1 && Signal.signalKind == 2 )
{
Begin = 0;
Main.MessageList("매수청산발생");
var BxCallPrice = Option.GetAskByCode(CallCode, 2);
A1.OrderSell(CallCode, 1, BxCallPrice, 1);
2017-08-30
154
글번호 112372
답변완료
수식 검토 부탁드립니다
선물 분봉에 사용 목적으로 아래를 작성해보았는데 수식 검토 부탁드립니다
회신은 e-mail. mintaizhi@gmail.com으로 가능할까요?
========================================================================================
Inputs: ShortPeriod(2), Period1(13), qty(2);
var1 = ema(C,Period1); "13지수이평"
Variables: Fval(0),FvalFast(0);
Fval = ((Close - Close[1]) * Volume) ; "2 Force Index"
FvalFast = Ema(Fval, ShortPeriod);
if ema(C,13)<C[1]) and ema(Fval, ShortPeriod)<0 Then
Buy("매수", ? ,qty);
"만일 직전종가가 13지수이평보다 크고 2Force Index가 0보다 작으면, 다음봉 현재가가 13지수이평과 만날때 매수"
if ema(C,13)>C[1]) and ema(Fval, ShortPeriod)>0 Then
Sell("매도", ? ,qty);
"만일 직전종가가 13지수이평보다 작고 2Force Index가 0보다 크면, 다음봉 현재가가 13지수이평과 만날때 매도"
========================================================================================
시스템에 복사해서 사용할 예정입니다
감사합니다
2017-08-30
182
글번호 112371
답변완료
답변주신 내용에 대해 질문
ㅁ
2017-08-30
122
글번호 112370
답변완료
문의 드립니다.
안녕하세요.
크루드오일 시스템수식 작성중입니다.
진입시간은 18시부터 새벽 2시까지로 했는데...
청산신호가 안나와도 2시 30분이 되면 시장가로 청산하는 수식을 어떻게 작성해야 하는지요??
2017-08-30
129
글번호 112369
답변완료
1수치전환 수직선 자동, 2, 화살표로부터 수익 손실 표시
매일 수작업에 힘이겨워 편집기로 조건을 대입하면 자동으로 해결 할 수 있는것을 알게되어
부탁드리게 됬습니다.
먼저 노고에 감사드립니다.
다른것들도 잘 쓰고 있습니다 감사합니다.
1
수치전환 수직선이
12시, 13시, 20시, 00시에 매일 자동으로 체크 될 수 있었으면 좋겠습니다.
2
어떤 조건에서 화살표가 나오게 신호를 해야 할 지 몰라서
수동으로 상승 화살표를 체크 하면,
그로부터 시간이 흘러 15틱(노란박스), 20(주홍박스), 30틱(보라박스)
상승하였으면 상승 마감
그 체크로부터 하락 15틱 하였으면 하락마감파란박스
이렇게 자동 체크될 수 있었으면 좋겠습니다.
(화살표로부터 진입후 청산 마감= 보라색 또는 파란색 박스가 표시될 때 까지)
* 박스체크가 어렵다면 옆에 체크한것 처럼 숫자로 표시할 수 있어도 좋겠습니다.
2017-08-30
252
글번호 112368
답변완료
수식 수정 좀 부탁드립니다.
안녕하세요?
아래 수식은 다른 곳에서 구한 수식인데 추세선이 종가에 나타나기 때문에 다른 추세선들과 같이 보려니 헷갈려서 볼수가 없습니다. 일반적인 추세선처럼 고가나 저가에 나타나도록 수정 좀 부탁드립니다. 파동선은 가능하시면 종가에 나타나도록 그냥 두어주시면 좋겠습니다. 안되면 고가나 저가에 나타나도록 바꾸셔도 괸찮구요.
감사합니다.
========================================================
Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),
#ssssssssssssssssssssssssssssssssss
파동선두께(2),추세선두께(0),고점파동선색(RGB(204,0,0)),저점파동선색(GRAY),수치표시(1); //수치표시값을 1로하면 고점 저점의 값을 표시 0으로하면 값을 없앰
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Var:j(0),jj(0),최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),진입횟수(0),
TL1(0),TL2(0),TL3(0),Text1(0),
고추세최종(0),저추세최종(0),고ID(0),저ID(0);
Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
#ssssssssssssssssssssssssssssssssss
If Index == 0 Then // ------------------------------ ①
{
고[1,1] = C;
저[1,1] = C;
}
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Condition1 = Highest(C,length) == C and 최종고가 <> C;
Condition2 = Lowest (C,length) == C and 최종저가 <> C;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종변곡점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리
Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = C; // 신규고점을 체크하기 위해 저장
If 최종변곡점 == "저점" Then
{
진입횟수 = 0;
For j = 100 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = C;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 1 Then // ------------------------------ ②
{
Text1 = Text_New(sDate,sTime,고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,고점파동선색);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = C;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,sDate,sTime,고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
{
고추세최종 = 0;
For j = 3 To 추세판단범위
{
If 고[2,1] < 고[j,1] Then
{
고ID = j;
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL2 = TL_New(고[고ID,3],고[고ID,4],고[고ID,1],sDate,sTime,고추세최종);
#ssssssssssssssssssssssssssssssssss
TL_SetSize(TL2,추세선두께);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
TL_SetColor(TL2,MAGENTA);
j = 100;
}
}
}
Else If 고추세최종[1] > 0 Then
{
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL_SetEnd(TL2,sDate,sTime,고추세최종);
}
If 저추세최종[1] > 0 Then
{
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL_SetEnd(TL3,sDate,sTime,저추세최종);
}
최종변곡점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = C;
If 최종변곡점 == "고점" then
{
진입횟수 = 0;
For j = 100 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = C;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 1 Then
{
Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,저점파동선색);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
Else If 저[1,1] > C then
{
저[1,1] = C;
저[1,3] = sDate;
저[1,4] = sTime;
저[1,2] = Index;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,sDate,sTime,저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
If 저[2,2][1] <> 저[2,2] Then
{
저추세최종 = 0;
For j = 3 To 추세판단범위
{
If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then
{
저ID = j;
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL3 = TL_New(저[저ID,3],저[저ID,4],저[저ID,1],sDate,sTime,저추세최종);
#ssssssssssssssssssssssssssssssssss
TL_SetSize(TL3,추세선두께);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
TL_SetColor(TL3,CYAN);
j = 100;
}
}
}
Else If 저추세최종[1] > 0 Then
{
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL_SetEnd(TL3,sDate,sTime,저추세최종);
}
If 고추세최종[1] > 0 Then
{
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL_SetEnd(TL2,sDate,sTime,고추세최종);
}
최종변곡점 = "저점";
}
#==========================================#
If 처리구분 == "" Then
{
If Index - 고[1,2] <= 추세선연장 Then //-------------------------- ③
{
If 고추세최종[1] > 0 Then
{
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL_SetEnd(TL2,sDate,sTime,고추세최종);
}
}
Else
{
고추세최종 = 0;
}
If Index - 저[1,2] <= 추세선연장 Then //-------------------------- ④
{
If 저추세최종[1] > 0 Then
{
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL_SetEnd(TL3,sDate,sTime,저추세최종);
}
}
Else
{
저추세최종 = 0;
}
}
2017-08-30
183
글번호 112362