커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8147
글번호 230811
답변완료
부탁 좀 드립니다.
안녕하세요 늘 감사합니다.
현재 시스템 신호를 만들어서 사용하고 있습니다.
차트에 매수 신호 나오고 매수 신호에 가격을 나오게 만들고 싶습니다.
예를 들어
화살표 나오고 매수라고 나올 경우 그 옆에 국선의 경우 "269.40" 이런 식으로 나왔으면 좋겠습니다.
작성 해주는 식의 주석 좀 부탁드립니다.
2018-11-09
199
글번호 123546
답변완료
수식 작성좀 부탁드려요.
해외 선물 진입후 일정시간이 지나면 청산하는 수식을 작성하려고 합니다.
오전 10시00분~오후16시00분 까지는 진입후 12분 후에 청산
오후 16시00분~오후22시30분 까지는 진입후 6분 후에 청산
오후22시30분~익일 오전 02시00분 까지는 진입후 3분 후에 청산
위와 같이 청산하는 수식 작성좀 부탁드립니다.
2018-11-09
212
글번호 123545
답변완료
추가 식좀 부탁합니다
value1 = ????????
value2 = ????????????
If crossup(value1,value2) Then
{
Buy ("매수") ;
}
If crossdown(value1,value2) Then
{
Sell ("매도");
}
안녕하세요
전 위 식을 이용해서 매매를 합니다
이곳에 손절 라인을 만들고 싶습니다
예를 들어 국선기준 신호봉의 저가 271.95 고가 272.10 이라면 틱수로는 위로3틱입니다
그럼 손절가는 배수인 6틱를 주고 싶네요
----- 차후에 틱수를 늘릴수 있습니다(꼭 배수가 아니라도요)
예를 하나 더 들면 신호봉의 저가 271.70 고가가 272.00 이라면 틱수로는 위로6틱입니다
그럼 손절가는 배수인 12틱 입니다
매도의 손절가도 같습니다
지표식
그리고 차트에 ------"손절" 이런 지표로 나왔으면 합니다
단 예를 들어 매수시 손절표시 나오고 다음에 매도시 손절가 나오때 매수시 손절가는
없어저야 합니다
다시 말씀 드리면 차트에는 늘 손절가 표시는 하나만 나와있다는 말입니다
예외의 수
매수해서 손절가 나오기도 전에 반대신호가 나오면 청산하고 반대신호 나오게 합니다
모든 식에는 주석도 같이 달아주세요
익절 식
고점 봉의 저가 고가의 수칫의 배가 내로오면 "익절"
손절식의 의미와 같습니다
----- 차후에 틱수를 늘릴수 있습니다(꼭 배수가 아니라도요)
2018-11-09
211
글번호 123544
답변완료
진입조건 하나더 추가 부탁드리겠습니다.
진입조건에 하나 더 추가하고 싶습니다.
if MarketPosition == 0 and CountIF(C>O,Y) == Y Then
buy("정배매수");
if MarketPosition == 0 and CountIF(C<O,X) == X Then
sell("정배매도");
여기에 연속-양봉시 매수진입 연속-음봉시 매도 진입입니다.
거기에 매수진입시 최초양봉과 진입시의 봉간 틱수가 일정틱이상이 되어야 진입할수 있게 해주세요
예를들면 조건1(5회연속 양봉) + 조건2(5회연속 양봉의 차이가 10tick이상) 일때 진입
매도 진입의 경우 그 반대일때 진입하게 끔 수식 부탁드리겠습니다.
======================================================================
input : p1(5),p2(20),p3(60),X(8),Y(7),XX(8),YY(7),XXX(5),YYY(9);
input : 익절틱수(70),손절틱수(56);
var : Tcond(false);
var1 = ma(c,P1);
var2 = ma(c,P2);
var3 = ma(c,P3);
if var1 > var2 and var2 > var3 then
{
if MarketPosition == 0 and CountIF(C>O,Y) == Y Then
buy("정배매수");
if MarketPosition == 0 and CountIF(C<O,X) == X Then
sell("정배매도");
}
else if var1 < var2 and var2 < var3 then
{
if MarketPosition == 0 and CountIF(C>O,YY) == YY Then
buy("역배매수");
if MarketPosition == 0 and CountIF(C<O,XX) == XX Then
sell("역배매도");
}
else
{
if MarketPosition == 0 and CountIF(C>O,YYY) == YYY Then
buy("혼재매수");
if MarketPosition == 0 and CountIF(C<O,XXX) == XXX Then
sell("혼재매도");
}
SetStopProfittarget(PriceScale*익절틱수, PointStop);
SetStopLoss(PriceScale*손절틱수, PointStop);
2018-11-10
213
글번호 123539
답변완료
시스템 식좀 부탁드립니다
30분봉 하나의 봉에서
시작시점에서
양봉과 음봉이번갈아 나올때 양봉에서 음봉으로 변할때 음봉1번
음봉에서 양봉으로 변할때 양봉1번 이런식으로 수를 세서
양봉이 3번나오면 매수
음봉이 3번나오면 매도 식좀 부탁드립니다.
30분봉 하나의 봉에서 양봉음봉이 반복될때를 말하는 것입니다.
만약에 3번 나오지 않으면 이전에 매수상태이면 다음봉 시작에서 양봉이면 매수 음봉이면 매도이고 이전에 매도상태이면 위에것하고 반대로 하며 됩니다.
감사합니다.
2018-11-12
236
글번호 123534
답변완료
59892 재질문드립니다.
이전 질문은 파라볼릭을 반드시사용해야한다는 단점이 있었으나, 인터넷에 감사히 올려져있는 오픈소스에서는 그러한 단점을 극복하였습니다.
사용자함수와 로직 두가지인데 나누어서 올리겠습니다.
사용자함수/////////////////////////
#==========================================#
# 사용자함수 : swing 지그재그 파동
# 버 전 : 1.2
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#==========================================#
Input:n(NumericSimple),useCLprice(NumericSimple),
oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime
oLoZZ[MaxSize3,MaxSize4](NumericArrayRef),
oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine
Var:j(0),jj(0),HH(0),LL(0),최종꼭지점(""),처리구분("");
#==========================================#
HH = IFF(useCLprice==1,C,H);
LL = IFF(useCLprice==1,C,L);
If Index == 0 Then {
oHiZZ[1,1] = HH;
oLoZZ[1,1] = LL;
}
Condition1 = Highest(HH,n)[n+1] <= HH[n] and HH[n] > Highest(HH,n);
Condition2 = Lowest( LL,n)[n+1] >= LL[n] and LL[n] < Lowest( LL,n);
처리구분 = "";
If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생
If oHiZZ[1,1] < HH[n] and oLoZZ[1,1] > LL[n] Then { // 기존의 파동을 벗어난 경우
If HH[n] - oHiZZ[1,1] > oLoZZ[1,1] - LL[n] Then // 많이 벗어난 쪽으로 처리
처리구분 = "고점처리";
Else If HH[n] - oHiZZ[1,1] < oLoZZ[1,1] - LL[n] Then
처리구분 = "저점처리";
Else If 최종꼭지점 == "저점" Then // 벗어난 정도가 동일하면 지그재그 순서대로
처리구분 = "고점처리";
Else
처리구분 = "저점처리";
} Else If oLoZZ[1,1] > LL[n] Then 처리구분 = "저점처리";
Else If oHiZZ[1,1] < HH[n] Then 처리구분 = "고점처리";
Else If 최종꼭지점 == "저점" Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
Else If Condition1 and oLoZZ[1,1] < HH[n] Then 처리구분 = "고점처리";
// SwingHigh 조건이 돼도 저점보다 낮으면 가격이 계속 하락중이므로 무시한다.
Else If Condition2 and oHiZZ[1,1] > LL[n] Then 처리구분 = "저점처리";
// SwingLow 조건이 돼도 고점보다 높으면 가격이 계속 상승중이므로 무시한다.
oTL_NewBit = 0;
#==========================================#
If 처리구분 == "고점처리" Then {
If 최종꼭지점 == "저점" Then {
For j = 10 DownTo 2 {
For jj = 1 To 4 {
oHiZZ[j,jj] = oHiZZ[j-1,jj];
}
}
oHiZZ[1,1] = HH[n];
oHiZZ[1,2] = Index - n;
oHiZZ[1,3] = sDate[n];
oHiZZ[1,4] = sTime[n];
oTL_NewBit = 1;
} Else If oHiZZ[1,1] < HH[n] Then { // 1번 고점보다 높은 고가 출현
oHiZZ[1,1] = HH[n];
oHiZZ[1,2] = Index - n;
oHiZZ[1,3] = sDate[n];
oHiZZ[1,4] = sTime[n];
oTL_NewBit = 2;
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then {
If 최종꼭지점 == "고점" then {
For j = 10 DownTo 2 {
For jj = 1 To 4 {
oLoZZ[j,jj] = oLoZZ[j-1,jj];
}
}
oLoZZ[1,1] = LL[n];
oLoZZ[1,2] = Index - n;
oLoZZ[1,3] = sDate[n];
oLoZZ[1,4] = sTime[n];
oTL_NewBit = 1;
} Else If oLoZZ[1,1] > LL[n] then {
oLoZZ[1,1] = LL[n];
oLoZZ[1,2] = Index - n;
oLoZZ[1,3] = sDate[n];
oLoZZ[1,4] = sTime[n];
oTL_NewBit = 2;
}
최종꼭지점 = "저점";
}
If 최종꼭지점 == "고점" Then SwingZigZag = 1;
Else If 최종꼭지점 == "저점" Then SwingZigZag = -1;
Else SwingZigZag = 0;
////////////////////사용자 함수 종료////////////
지표 로직입니다. 로직활용은 같이 첨부된 사진으로 설명드리겠습니다.
//////////////////추세선 로직//////////////////
Input:봉개수(5),종가사용여부(0);
Var:TL1(0),신규구분(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = SwingZigZag(봉개수, 종가사용여부, 고, 저, 신규구분);
If Value1 == 1 Then { // 고점
If 신규구분 == 1 Then // 신규
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
Else If 신규구분 == 2 Then // 연장
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
} Else If Value1 == -1 Then { // 저점
If 신규구분 == 1 Then // 신규
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
Else If 신규구분 == 2 Then // 연장
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
TL_SetSize(TL1,2);
///////////////////추세선로직 종료///////////////////
사진과 같은 조건에 만족하면, 만족한 캔들 위에 59892처럼 캔들위에 1,2,3으로 횟수를 세고싶습니다. 이평은 위에 총 5개입니다. 감사합니다.
2018-11-10
584
글번호 123533
답변완료
수식문의
아래는 피라미딩 시 손절을 강제청산함수로 사용한 수식입니다.
1.익절
2.트레일링stop
위 2가지 내용도 강제청산함수로 바꿔주시기 바랍니다.
*************************************************************************
손절을 진입별로 지정하기 위해서는
강제청산함수로 지정하시면 됩니다.
input : up손절(74),up익절(192),upTR(130);
input : dn손절(74),dn익절(180),dnTR(110);
if MarketPosition == 1 then
{
ExitLong("bp1",Atlimit,EntryPrice+PriceScale*up익절);
ExitLong("btr1",AtStop,highest(h,BarsSinceEntry)-PriceScale*upTR);
}
if MarketPosition == -1 then
{
ExitShort("sp1",AtLimit,EntryPrice-pricescale*dn익절);
ExitShort("str1",AtStop,Lowest(l,BarsSinceEntry)+pricescale*dnTR);
}
if MarketPosition == 1 Then
SetStopLoss(PriceScale*up손절,PointStop);
else if MarketPosition == -1 Then
SetStopLoss(PriceScale*dn손절,PointStop);
Else
SetStopLoss(0);
2018-11-09
284
글번호 123526
답변완료
문의드립니다.
도와주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
매번 진입 필터링으로 아래 수식쓰고 있는데요. 이거 답변해주신 것처럼 atstop, atlimit일 때도 진입횟수 제한 필터링하려면 어떻게 해야 하나요?
input : entryCount(1);
var : count(0) ;
#진입회수제한
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
if Count < entryCount then {
}
// 답변
3
자동주문은 차트에서 신호가 발생하면 무조건 주문이 발생합니다.
실전에 적용하시면 모두 주문이 집행됩니다.
신호발생위치로 보아 buy와 sell에 atstop이나 atlimit을 사용해 신호를 발생한 것입니다.
해당타입은 봉완성시 조건이 만족하면 다음봉에 신호가 발생합니다.
진입횟수제한은 if문(완성봉기준)으로 판단하는 것입니다.
모두 전봉에 진입1회 필터링조건이 만족했기에 동시 셋팅되어 신호가 발생한것입니다.
봉미완성시에 if문으로 지정한 조건을 체크하지는 않습니다.
즉 진입이 1회이면 한봉에 동시에 셋팅되지 않게 사용자분이 전략상황에 맞게 코딩하셔야 합니다.
2. 기타
피라미딩 관련해서 질문드립니다.
피라미딩하면 봉 하나에서 신호가 여러개 나온다고 하셨습니다. 그럼 피라미딩하면 그 청산신호도 여러개가 봉 하나에서 나오나요.(예전에 만들어주신 수식 돌려보면 그런 거 같기는 한데요.) 그리고 봉 하나에서 여러개 진입, 여러개 청산 이렇게도 된다는 이야긴가요?
가령 5틱마다 재진입, 고가 -5틱 떨어질 때마다 하나하나 청산 이렇게 해놓으면 5틱마다 계속 진입하고, 같은 봉에서 고가 대비 5틱씩 떨어지면 5틱마다 청산하나요?
3. 이거 이전에 예스스탁님이 만들어주신 인트라데이 전략 해선용 제가 좀 고친 건데요. 백테스팅해보니 나스닥에선 아무 진입을 안하더라구요. 기본적인 인트라데이 전략인데 진입이 없을 것 같진 않은데요. 그리고 신호가 나오는 것도 국선 지수랑은 달라 보입니다. 수정좀 부탁드립니다.
inputs: InitMin(90),stopp(1),SS(90000),EE(150000);
Variables: SessStartMin(0), TradeTime(0), SetHigh(0), SetLow(0), LongFlag(False), ShortFlag(False);
SessStartMin = TimeToMinutes(SS);
TradeTime = TimeToMinutes(sTime);
input :
진입횟수(1),
손절률(1),
익절률(1)
;
var : count(0),T1(0);
input : 진입시간(90000),제한시간(150000),청산시간(153400);
var : Tcond(false);
SetStopLoss(손절률,PercentStop);
SetStopProfittarget(익절률,PercentStop);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
Tcond = true;
T1 = TotalTrades;
}
if (sdate != sdate[1] and stime >= 제한시간) or
(sdate == sdate[1] and stime >= 제한시간 and stime[1] < 제한시간) then
{
Tcond = false;
}
if MarketPosition == 0 Then
count = TotalTrades-T1;
Else
count = TotalTrades-T1+1;
if Count < 진입횟수 and Tcond == true then
{
If TradeTime <= SessStartMin + InitMin Then {
If Date <> Date[1] Then {
SetHigh = High;
SetLow = Low;
LongFlag = True;
ShortFlag = True;
}
Else
{
If High > SetHigh Then
SetHigh = High;
If Low < SetLow Then
SetLow = Low;
}
}
Else
{
If sTime < EE Then {
If LongFlag AND CrossUp(Close,SetHigh) Then
buy();
If ShortFlag AND CrossDown(Close,SetLow) Then
sell();
}
}
}
If MarketPosition == 1 Then {
LongFlag = False;
ExitLong("EL", atstop,SetLow );
}
If MarketPosition == -1 Then {
ShortFlag = False;
ExitShort("ES", atstop, SetHigh);
}
if stime == 청산시간 or (stime > 청산시간 and stime < 청산시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
4. 3번 수식 수정한 내용 썸머타임에 따라 breakout시점을 다르게 하도록(썸머타임 뒤에는 한시간 뒤의 고가나 저가를 브레이크 하도록)하나 더 부탁드립니다. 저번 만들어주신 거 보고 수정하려 해도 잘 모르겠습니다.
2018-11-12
266
글번호 123522
답변완료
문의드립니다
매매시간 오후3시 새벽5시
추세진입 5일선 20일선 골든 데드크로스
손절30틱
익절60틱
진입조건 시장가 또는 지정가 ( 시스템에서 선택가능하도록 )
감사합니다.
2018-11-09
204
글번호 123521