커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3261
글번호 230811
답변완료
매수신호와 청산신호 동시 발생
안녕하세요,
다음의 수식에서 매수신호와 청산신호가 동시에 발생하는 오류가 생겨 문의드립니다.
//매수
If MarketPosition == 0 AND COND_B == 1 Then Buy("B1", OnClose, Def, 1);
//종가대비 100pt 하락시 추가매수, 이후 50pt씩 하락시 잔고 5개 될때까지 추가매수 반복
If IsEntryName("B1", 1) == True AND C < DayClosePrice - 100 Then Buy("B2", OnClose, Def, 1);
If IsEntryName("B2", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B3", OnClose, Def, 1);
If IsEntryName("B3", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B4", OnClose, Def, 1);
If IsEntryName("B4", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B5", OnClose, Def, 1);
//종가대비 100pt 상승시 매수청산 1개, 이후 50pt씩 오를 때 잔고 0 될때 까지 추가 매수청산
If C > EntryPrice(1) Then
Begin
If C > DayClosePrice + 100 Then ExitLong("EL1", OnClose, Def, "", 1, 1);
If CurrentContracts >= 2 AND C > ExitPrice(1) + 50 Then ExitLong("EL2", OnClose, Def, "", 1, 2);
End
//매도
If MarketPosition == 0 AND COND_B == -1 Then Sell("S1", OnClose, Def, 1);
//종가대비 100pt 상승시 추가매도, 이후 50pt씩 상승시 잔고 5개 될때까지 추가매도 반복
If IsEntryName("S1", 1) == True AND C > DayClosePrice + 100 Then Sell("S2", OnClose, Def, 1);
If IsEntryName("S2", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S3", OnClose, Def, 1);
If IsEntryName("S3", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S4", OnClose, Def, 1);
If IsEntryName("S4", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S5", OnClose, Def, 1);
//종가대비 100pt 하락시 매도청산, 이후 50pt씩 하락시 잔고 0 될때까지 매도청산
If C < EntryPrice(1) Then
Begin
If C < DayClosePrice - 100 Then ExitShort("ES1", OnClose, Def, "", 1, 1);
If CurrentContracts >= 2 AND C < ExitPrice(1) - 50 Then ExitShort("ES2", OnClose, Def, "", 1, 2);
End
2023-01-26
872
글번호 165737
답변완료
DEMA 관련
한투의 DEMA 수식설명이 아래글에서 작성해 주신 DEMA 수식과 다른 부분이 있을까요? 만약 있다면 한투 DEMA 수식설명 기준으로 부탁 드립니다.
[한투 DEMA 수식설명]
DEMA(2중 지수이동평균) = EMA의 EMA
EMA = {2 / ( n + 1)} X (당일종가 - 전일 EMA)+ 전일 EMA
n = 9일(기본값)
[이전 DEMA 관련 수식]
INPUTS: LENGTH1(9),P1(5),P2(200);
var : mav1(0),mav2(0),DEMA1(0);
var1= EMA(C,LENGTH1);
value1= EMA(EMa(C,LENGTH1),LENGTH1);
DEMA1 = var1 * 2 - value1;
2023-01-26
806
글번호 165735
답변완료
문의 드립니다.
아래 조건으로 수식 부탁 드립니다.
[진입조건(and)]
1) 종가>200일이평선
2) 종가>시가>DEMA(9)
3) 5일이평선>DEMA(9)
[청산조건(and)]
1) DEMA(9)>시가>종가
2023-01-26
995
글번호 165730
답변완료
수정부탁드립니다
input : 기간(100);
var:선1l크기(0), hTL2 (0);
var1 = MA(c,기간);
#전봉대비 이평이 상승할때 이평값
if var1>var1[1] Then
value1 = var1;
hTL2 = TL_New(sDate,sTime,0,sDate,sTime,99999999);
TL_SetSize(hTL2, 선1l크기);
#전봉대비 이평이 하락할때 이평값
if var1<var1[1] Then
value2 = var1;
hTL2 = TL_New(sDate,sTime,0,sDate,sTime,99999999);
TL_SetSize(hTL2, 선1l크기);
수직선 부탁드립니다
2023-01-26
835
글번호 165728
답변완료
문의 드립니다.
아래에서 손절 부분은 그대로 두고 청산하는 부분 삭제 부탁드립니다.
청산은 수동으로 할까합니다.
if MarketPosition <= 0 and CrossUp(C,DayHigh(1)) Then
Buy("b");
if MarketPosition == 1 Then
{
if CrossDown(C,DayHigh(1)) Then
ExitLong("bx");
ExitLong("bp",AtLimit,DayHigh(1)+PriceScale*2);
}
if MarketPosition >= 0 and CrossDown(C,DayLow(1)) Then
Sell("s");
if MarketPosition == -1 Then
{
if CrossUp(C,DayLow(1)) Then
ExitShort("sx");
ExitShort("sp",AtLimit,DayLow(1)-PriceScale*2);
}
2023-01-26
1013
글번호 165726
답변완료
문의드립니다.
수고많으십니다.
5, 20선 골든/데드 선물매메어서
1.
외국인순매수금액을 참조2로해서 골든/데드이고 참고2가 50000 이상/이하일때 신호가 나오게 만들고 싶습니다.
이때 BuyF > 50000 이렇게 and 조건으로 넣었는데 작동을 안하는듯해서 확인 부탁드립니다.
위에는 아래처럼 넣었습니다.
var : BuyF(0,Data2);
BuyF = Data2(C);
2. 추가로 골든/데드를 만족하면 매수/매도인데 외국인순매수금액이 10000 이하/이상이면 매수/매도가 안나오게하는 수식도 부탁드립니다.
2023-01-26
813
글번호 165716
러블리 님에 의해서 삭제되었습니다.
2023-01-26
25
글번호 165713
답변완료
재문의 드립니다.
안녕하세요.
어제 올려주신 식을 적용해 보니 잘안되어서 다시 문의 드립니다.
-----------------------------------------------------------------
아래 수식은 몇일전에 올려 주신 수식인데
스토캐스틱과 이평을 합성된것이 아니라
(이평 골드시에 매수 데드시에 청산) 처럼 이평 1개만으로 만든것과 같습니다.
스토캐스틱이 crossup 상태이던, crossdown 상태이던 상관없이
이평 20 이 60 이평을 돌파하면은 매수 나오게 하고 20 이평이 60 이평을
crossdown 하게 되면은 청산되는 식입니다.
---------------------------------------------------------
아래 조건과 같이 바꾸어 주시면은 감사하겠습니다.
스토캐스틱 500,300,300 이 crossup 상태 일때에만, 20 이평과 60 이평이
골드시에 매수 하고, 20 이평과 60 이평이 crossdown 일때는 청산되게 하고.
스토캐스틱이 crossdown 상태 일때에는 이평 20 과 이평 60 이 crossUp 되도
신규로 매수 신호가 나오지 않게 하고, 이미 매수해 놓은것은 이평 20 이 60을 하향돌파
할때에 청산 신호가 나오게 하는식을 만들으 주시면은 감사하겠습니다.
감사합니다.
----------------------------------------------------------------------
Input : Period(500), Period1(300), Period2(300),P1(20),P2(60);
var : T(0);
value1 = StochasticsK(Period,Period1);
value2 = StochasticsD(Period,Period1,Period2);
var1 = ma(C,P1);
Var2 = ma(C,P2);
If CrossUP(value1, value2) Then
{
T = 1;
}
# 매도/매수청산
If CrossDown(value1, value2) and CrossDown(value3, value4) Then
{
T = -1;
}
if T == 1 Then
{
if CrossUp(var1,Var2) Then
Buy();
if CrossDown(var1,Var2) Then
ExitLong();
}
2023-01-25
590
글번호 165711
답변완료
수식부탁합니다
input:length(6);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL12(0),TL13(0),TL14(0),TL15(0),T(0),고점변곡(""),저점변곡("");
var : clr1(0),clr2(0),BE(0),SE(0),cnt(0),upcond(False),dncond(False),text2(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(0==1,C,H);
LL = IFF(0==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
{
T = 1;
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
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]);
If 1 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 0, 1);
Text_SetColor(Text1,Red);
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,Gray);
}
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 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
T = -1;
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
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]);
If 1 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 0, -1);
Text_SetColor(Text1,Blue);
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,Gray);
}
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 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
if T == -1 and T[1] != -1 Then
{
TL12 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]);
TL_Delete(TL13);
TL13 = TL_New(고[1,3],고[1,4],고[1,1],Sdate,Stime,고[1,1]);
TL_SetExtRight(TL13,true);
TL_SetSize(TL13,2);
TL_SetColor(TL12,clr1);
TL_SetSize(TL12,2);
clr1 = Pink;
TL_SetColor(TL13,clr1);
upcond = False;
}
if T == 1 and T[1] != 1 Then
{
TL14= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]);
TL_Delete(TL15);
TL15= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]);
TL_SetExtRight(TL15,true);
TL_SetColor(TL14,clr2);
TL_SetSize(TL14,2);
clr2 = LightBlue;
TL_SetColor(TL15,clr2);
TL_SetSize(TL15,2);
dncond = False;
}
#===================================================#
VAR:mav5(0),mav10(0),mav20(0),mav40(0),mav60(0),mav120(0),mav30(0);
mav5=ma(c,5);
mav10=ma(c,10);
mav20=ma(c,20);
mav30=ma(c,30);
mav40=ma(c,40);
mav60=ma(c,60);
mav120=ma(c,120);
#============#
if (min(C,ma(c,5)) > TL_GetValue(TL13,sDate,sTime)) Then
{
clr1 = Red;
TL_SetColor(TL13,clr1);
}
if max(C,ma(c,5)) < TL_GetValue(TL15,sDate,sTime) Then
{
clr2 = Blue;
TL_SetColor(TL15,clr2);
}
#=========================================================================#
array:Redline[4](0),Blueline[4](0),Pinkline[4](0),liblueline[4](0),libluex[4](0),Pinkx[4](0);
var : Redx(0),bluex(0),고점매물대(0),Condition100(False),clr3(0);
#==========================미완성==========================================#
1.고점매물대를 red 로 바꿔주세요
Condition100=t==1 and abs(고[2,1]-고[3,1])<=PriceScale*20 and
abs(고[2,1]-고[4,1])<=PriceScale*20 and
abs(고[3,1]-고[4,1])<=PriceScale*20 ;
if Condition100 Then
{
고점매물대=max(고[2,1],고[3,1],고[4,1]);
}
if mav20>mav30 and (min(C,ma(c,5)) >고점매물대) Then
{
clr3 = Red;
TL_SetColor(고점매물대,clr3);
}
2.red 를 카운팅 하려 합니다
Redx=0;
if clr1 == Red or clr3==red Then
{
Bluex=0;
Redx=Redx+1;
}
3.if redx==1 then
{
확정된 고[1,1]리턴 부탁드립니다
}
2023-01-25
865
글번호 165710