커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6138
글번호 230811
답변완료
수식 수정 부탁드립니다.
페어트레이딩 관련 수식인데요, 예스랭귀지 편집기에서 검증을 해보니 수많은 오류가 뜨네요
오류가 뜨는 부분 수정 부탁드립니다.
수식은 아래와 같습니다.
감사합니다.
---아 래----
//===♠페어트레이딩_
INPUT : ※수량이음수이면_매도(0);
INPUT : 진입_일자(20190325), 진입_시간(193000);
INPUT : D1_진입가(2808.25), D2_진입가(25553);
INPUT : D1_수량(1), D2_수량(-1.4); // 실재 매매시는 2개와 3개
INPUT : ※_수수료는_편도(5);
INPUT : D1_수수료(5), D2_수수료(5), 환율(1180);
INPUT : 손익원화환산1(1); // 달러 표시 손익일 경우 환산 여부 지정
INPUT : 손익_상단(1572), 손익_하단(-1914);
//=== 변수 선언 ===
var : D1현재가(0), D2현재가(0);
//=== 현재가 지정 ===
D1현재가 = Data1(c);
D2현재가 = Data2(c);
//=== 틱단위와 틱가치 대입 ===
var : D1틱단위(0), D1틱가치(0);
var : D2틱단위(0), D2틱가치(0);
D1틱단위 = data1(PriceScale);
D2틱단위 = data2(PriceScale);
D1틱가치 = data1(PointValue);
D2틱가치 = data2(PointValue);
//=== 손익 산출 ===
var : D1손익(0), D2손익(0), 손익소계(0), 순손익(0);
var : D1수수료(0), D2수수료(0), 수수료소계(0);
//==== _손익 산출
D1손익 = ((D1현재가 - D1_진입가) / D1틱단위 * D1틱가치 * D1_수량);
D2손익 = ((D2현재가 - D2_진입가) / D2틱단위 * D2틱가치 * D2_수량);
손익소계 = D1손익 + D2손익;
D1수수료 = abs(D1_수량 * D1_수수료 * 2); //왕복
D2수수료 = abs(D2_수량 * D2_수수료 * 2);
수수료소계 = D1수수료 + D2수수료;
순손익 = 손익소계 - 수수료소계;
//===원화 환산. 금액 단위 천원
iF 손익원화환산1 == 1 Then 순손익 = (순손익 * 환율) / 1000;
//===== 손익 이평선 =====
Input : 소이평값(5), 중이평값(20), 대이평값(60);
var : 소이평(0), 중이평(0), 대이평(0);
소이평 = ma(순손익, 소이평값);
중이평 = ma(순손익, 중이평값);
대이평 = ma(순손익, 대이평값);
//=== 손익의 10 구간 계산
var : 중간선(0), 십등분(0);
var : 이부선(0), 사부선(0), 육부선(0), 팔부선(0), 방향색(0);
중간선 = (손익_상단 + 손익_하단) / 2;
십등분 = (손익_상단 - 손익_하단) / 10;
이부선 = 손익_하단 + 십등분*2;
사부선 = 손익_하단 + 십등분*4;
육부선 = 손익_하단 + 십등분*6;
팔부선 = 손익_하단 + 십등분*8;
//==== 방향표시바 색지정
if 순손익 >= 손익_상단 then
방향색 = RGB(0, 0, 217); // 진청
if 순손익 < 손익_상단 and 순손익 >= 팔부선 then
방향색 = RGB(0, 128, 255); // 연청
if 순손익 < 팔부선 and 순손익 >= 육부선 then
방향색 = RGB(0, 230, 230); //하늘색
if 순손익 < 육부선 and 순손익 >= 사부선 then
방향색 = RGB(0, 204, 0); //녹색
if 순손익 < 사부선 and 순손익 >= 이부선 then
방향색 = RGB(255, 128, 0); //주황
if 순손익 < 이부선 and 순손익 >= 손익_하단 then
방향색 = RGB(255, 128, 192); //연핑크
if 순손익 < 손익_하단 then
방향색 = RGB(255, 0, 255); //진핑크
//========지표의 출력 ==============
//--지정일 지정시간 이후 지표 출력을 위한 것
if Condition1 == false and
sDate >= 진입_일자 and
sTime >= 진입_시간 Then Condition1 = true;
if Condition1 == true Then {
plot13(순손익, "순손익");
plot16(소이평, "소이평");
plot17(중이평, "중이평");
plot18(대이평, "대이평");
}
//==== 손익 상단 하단 출력 및 음성 안내 =========
Input : 음성안내ON1(1);
If 손익_상단 <= 순손익 Then {
plot21(손익_상단, "손익_상단선");
If 음성안내ON1 == 1 Then
playsound("C:₩____Mysound₩11₩풀룻Flute.WAV");
}
If 손익_하단 >= 순손익 Then {
plot22(손익_하단, "손익_하단선");
If 음성안내ON1 == 1 Then
playsound("C:₩____Mysound₩11₩풀룻Flute.WAV");
}
if 순손익 >= 이부선 and 순손익 <= 사부선 Then
plot23(중간선, "중간선");
//==== 방향바 출력 =======
plot24(0, "■방향바", 방향색);
/*
//==== 데이터 검증영역 =====
plot41(D1손익, "D1 손익");
plot42(D2손익, "D2 손익");
plot43(손익소계, "손익소계");
plot44(수수료소계, "수수료합계");
Plot51(D1틱단위, "D1틱단위");
Plot52(D1틱가치, "D1틱가치");
Plot53(D2틱단위, "D2틱단위");
Plot54(D2틱가치, "D2틱가치");
Plot61(D1_진입가, "●D1진입가");
Plot62(D2_진입가, "○D2진입가");
Plot63(D1_수량, "■D1수량");
Plot64(D2_수량, "□D2수량");
Plot65(D1_수수료, "▲D1_수수료");
Plot66(D2_수수료, "△D2_수수료");
plot67(손익_상단, "@@손익_상단");
plot68(손익_하단, "@@손익_하단");
2022-03-22
1304
글번호 157363
답변완료
함수
안녕하세요
가령 5일선 기준으로
max(SmaLL1, SmaHH1) min(SmaLL1, SmaHH1) 에서
max와 min는 무슨차이인가요?
수고하세요
2022-03-22
1113
글번호 157362
답변완료
수식문의 드립니다
아래 지그재그 수식에서 고점저점 가격과 진폭(고저차)수치가 작게보여 크게 볼 수 있는 수식을 첨가 부탁드립니다.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),
Text1(0),처리구분("");
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2)
+NewLine+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 3, 3);
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2)
+NewLine+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 3, 3);
}
}
TL_SetSize(TL1,3);
TL_SetColor(TL1,lgreen);
2022-03-22
1304
글번호 157361
카이니스 님에 의해서 삭제되었습니다.
2022-03-21
98
글번호 157359
종호 님에 의해서 삭제되었습니다.
2022-03-21
6
글번호 157358
답변완료
주식 시스템 문의 드립니다.
안녕하세요
아래 코드로 현재 1분봉으로 매매중인데요
원하는 코드가 잘 안만들어져서 수정 부탁드리고자 합니다.
1. #돌파매수 실행시
Condition11 만족하는 봉 발생시 그 봉의 종가를 CC로 리턴하고 다음봉이 음봉이면 매수대기하다가 첫 양봉 출현시 매수하고자 함
(지금 코드는 임시방편입니다.)
Ex) 조건발생 양봉 - 음봉 - 음봉 - 음봉 - 양봉 -매수
조건발생 양봉 - 양봉 - 매수
2. 마지막 분할매도 부분
수익율 3프로 이상발생한 후 var1 이평이 var3 이평을 crossdown하는 경우 전량 매도
(과거에 수익율이 3프로 이상 발생한 적이 한번이라도 있으면 현재 수익율이 얼마인지 관계없이 crossdown시 전량매도)
아래 코드로 적용해보았는데 작동되질 않습니다.
if countif(C >= AvgEntryPrice*1.03, 60) >= 1 and crossdown(var1,Var3) Then
ExitLong("Exit",OnClose,DEf,"",MaxContracts,1);
3. 분할매도시 주식수량 오차
종목당 일정 금액으로 매수를 하는데 분할매도하면 1~2주씩 남게 됩니다.
어찌해결하면 좋을지 부탁드려요
4. 전체적으로 코드 최적화
초심자이다 보니 코드가 체계적이고 효율적이지 못한것 같습니다.
효율적인 코드로 편집 부탁드릴께요
감사합니다.
--------------------------------------------------------------------------------
input : P1(5),P2(20),P3(60),P4(120),P5(240),P6(480);
Input : Period(12), Period1(6), Period2(10),Period3(12);
var : StoK(0),StoD(0),RSIV(0);
var : HH(0),LL(0),HV(0),HV1(0),HL(0),HL2(0),CC(0), CC1(0);
var1=ma(c,P1);
var2=ma(c,P2);
var3=ma(c,P3);
var4=ma(c,P4);
var5=ma(c,P5);
Var6=ma(c,P6);
StoK = StochasticsK(Period,Period1);
StoD = StochasticsD(Period,Period1,Period2);
RSIV = RSI(Period3);
HL = DayHigh/DayLow; #당일 고가-저가 차이
HH = Highest(H,120);
LL = Lowest(L,120);
HL2 = HH/LL; #2시간 내 고가 저가 차이
#돌파 신호 조건
If C >= O and C > Var5 and C > var6 and HL < 1.15 and HL2 < 1.1 and DayOpen < DayClose[1]*1.05 and countif(CrossDown(var5,Var6),240) == 0 and
countif(M > 100000000,3) >= 1 and DayVolume > (DayVolume[1]*0.3) and
Countif(crossup(RSIV,70),3) >= 1 Then
Condition11 = true;
Else
Condition11 = false;
if C < (AvgEntryPrice*0.95) and countif(M > 100000000,3) >= 1 and C > DayOpen and Countif(crossup(RSIV,70),4) >= 1 and C > var6 Then
Condition12 = true;
Else
Condition12 = false;
#돌파 매수 실행
if countif(Condition11[2],10)>= 1 and C >= O and sDate >= 20220301 and marketposition == 0 and countif(marketposition == 1,120) < 1 Then
Buy("Buy1",OnClose);
if CountIF(Condition12[2],10)>=1 and C >= O and MarketPosition == 1 and C >= O and CountIf(condition12[3],180) == 0 Then
Buy("Buy2",OnClose);
#분할매도
if c >= AvgEntryPrice*1.05 Then
ExitLong("5Per",OnClose,DEf,"",MaxContracts*(1/4),1);
if c >= AvgEntryPrice*1.10 Then
ExitLong("10Per",OnClose,DEf,"",MaxContracts*(1/4),1);
if c >= AvgEntryPrice*1.15 Then
ExitLong("15Per",OnClose,DEf,"",MaxContracts*(1/4),1);
if C >= AvgEntryPrice*1.03 and crossdown(var1,Var3) Then
ExitLong("Exit",OnClose,DEf,"",MaxContracts,1);
2022-03-21
1206
글번호 157344
답변완료
수식 수정부탁드립니다
input : v기간1(5),v기간2(20),K1(8),K2(10);
input : 이평기간1(5),이평기간2(20),이평기간3(60),이평기간4(120),이평기간5(240);
input : 양봉상승율(5), 최고량기간(240), 비교봉수(20), N(0);
input : P(12),dv(2) ;
var : mav1(0), mav2(0), mav3(0), mav4(0), mav5(0);
var1 = MA(V,v기간1);
var2 = MA(V,v기간2);
mav1 = ma(C,이평기간1);
mav2 = ma(C,이평기간2);
mav3 = ma(C,이평기간3);
mav4 = ma(C,이평기간4);
mav5 = ma(C,이평기간5);
var4 = BollBandUp(P,dv);
Var5 = ma(C,P);
Var6 = BollBandDown(P,dv);
Condition1 = (( var1[1] * K1 < V ) or ( V >= V[1] * K2 )) and (C >= C[1]*(1+양봉상승율/100)) ;
Condition2 = ( CrossDown(C, var4 ) or ( H > var4 and C < var4 ) ) and C < O ;
Condition3 = ( CrossUp(C, var4) or ( C > var5 and L < var5 ) or ( C > var6 and L < var6 )) and mav1[1] < mav1 and C > O ;
Condition4 = AccumN(iff((Condition1, 최고량기간 ), 1, 0), 비교봉수 ) >= 1 ;
if CountIf( Condition1, 최고량기간 ) >= 1 and CountIf( Condition2, N ) >= 1
and Condition3 == true and Condition4 == true Then
{
find(1);
}
상기 수식은 다음의 내용을 반영할 수 있는 것으로 만들어 본 것인데 Condition4 에서 문법에러가 난다고 하네요.
기간(240)으로 한 최고거래량이 발생(거래량 5이평보다 K1(8)배, 전일거래량보다 K2(10)배 많은 거래량이 발생)한것이 최근 비교봉수(30일)내에 있는 조건을 충족해한다. 그리고 Condition2는 최고거래량이 발생한 후 볼밴상단선을 이탈한 경우가 있어야 한다는 것이고,
Condition3은 Condition2 이후 볼밴 상단선 또는 중심선 또는 하단선을 돌파하는 캔들출현시에 매수종목으로 검색되게 하는 것입니다.
이 이상의 내용을 반영한 식으로 수정해주시고요
추가적으로 Condition1 이 발생된후 특정기간(5) 이후에 Condition3 이 발생되어야 한다는 조건(돌파시의 캔들상승율은 5%이내이어야한다)을 추가해주시면 감사하겠읍니다
2022-03-21
1633
글번호 157340
답변완료
수식작성 부탁드립니다
안녕하세요?
항상 고민을 해결하여주셔 깊이 감사드립니다
다음 조건의 시스템신호 부탁 드립니다
선물차트에서
1. 호가잔량 5이평선과 MACD(12.26)이 하락하다 상승으로 바뀌고
주가 5이평선이 상승하는 첫 캔들에서 매수신호 발생
2. 호가잔량 5이평선과 MACD(12.26)이 상승하다 하락으로 바뀌고
주가 5이평선이 하락하는 첫 캔들에서 매도신호 발생
수고하십시오
2022-03-21
1642
글번호 157335
답변완료
수식부탁드립니다
아래 수식은 C가 상승시 red color를 유지한채 굵기 변화만 나타내는 수식입니다
Plot1(C,"종가",red,DEF,IFF(C > C[1] ,2,0));
이수식을 base로 C가 상승시 굵기 2 였다가 C = H가 되면 굵기 4 가 되는 수식을 부탁드립니다
감사합니다
2022-03-21
1295
글번호 157334