커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7570
글번호 230811
올바로로 님에 의해서 삭제되었습니다.
2013-04-16
3
글번호 62107
회원 님에 의해서 삭제되었습니다.
2013-04-16
24
글번호 62105
관리자에 의해 프로그램 사용법 QnA로 이동되었습니다
2013-04-16
9
글번호 62104
답변완료
시스템식 질문입니다
야간연결선물 1분 차트에서
1
18시 ~ 새벽4시
지표 A 가 100 상향돌파
매수 매매횟수 1회 제한
18시 ~ 새벽4시
지표 A 가 100 하향돌파
매도 매매횟수 1회 제한
새벽 4시 30분 일괄청산(모든 포지션 청산)
선물 매수/매도 상관없이 상한가/하한가면 즉시청산
2
18시 ~ 새벽4시
(지표 A 가 100 상향돌파 매수 or 지표 A 가 100 하향돌파 매도)
위 두가지 조건 중에서 먼저 나온신호로 매매횟수 1회 제한
새벽 4시 30분 일괄청산(모든 포지션 청산)
선물 매수/매도 상관없이 상한가/하한가면 즉시청산
시스템식 부탁드립니다
2013-04-16
226
글번호 62102
답변완료
문의 드립니다.
수고가 많으십니다.
두가지 질문입니다.(선물 입니다.)
1. 전일과 금일 장시작전에 갭이 존재하는데..
* 갭이 -1P 이상이면 진입 금지
* 갭이 -1P 이상이면 매도 금지
* 갭이 +1P 이상이면 매도 금지
2. 외국인 매수 수량에 따른 진입 조건(변수 지정까지 부탁드립니다.)
* 외국인 매수 수량이 + 이면 매수 진입
* 외국인 매수 수량이 _ 이면 매도 진입
감사합니다.
2013-04-16
273
글번호 62101
답변완료
문의드립니다.
안녕하세요.
항상 바쁜 업무에 노고가 많으세요^^
지난번에 만든 시스템 수식의 수정을 추가로 부탁드립니다.
-------------------------------------------------------------------------------------------------------------
Var : 기준선(0), 전환선(0), 후행스팬(0), 선행스팬1(0), 선행스팬2(0),TL1(0), TL2(0),Tx1(0),Tx2(0);
전환선 = (Highest(High, 9) + Lowest(Low, 9)) / 2;
기준선 = (Highest(High, 26) + Lowest(Low, 26)) / 2;
후행스팬 = Close ;
선행스팬1 = (전환선[25] + 기준선[25]) / 2 ;
선행스팬2 = (Highest(High, 52) + Lowest(Low, 52)) / 2;
if (crossup(C,선행스팬1) or (C == 선행스팬1 and C[1] < 선행스팬1[1])) and MarketPosition == 0 and MarketPosition[1] == 0 Then
buy("B1");
if (CrossDown(C,선행스팬1) or (C == 선행스팬1 and C[1] > 선행스팬1[1])) and MarketPosition == 0 and MarketPosition[1] == 0 Then
sell("S1");
value1 = highest(H,index+1);
value2 = lowest(L,index+1);
var1 = highest(h,BarsSinceExit(1));
var2 = Lowest(L,BarsSinceExit(1));
if MarketPosition == 1 and TotalTrades == 0 Then{
ExitLong("BP",AtLimit,EntryPrice+abs(선행스팬1[BarsSinceEntry]-value2[BarsSinceEntry]));
ExitLong("BL",AtStop,value2[BarsSinceEntry]-PriceScale);
TL_Delete(TL1);
TL1 = TL_New(EntryDate,EntryTime,EntryPrice+abs(선행스팬1[BarsSinceEntry]-value2[BarsSinceEntry]),
sdate,stime,EntryPrice+abs(선행스팬1[BarsSinceEntry]-value2[BarsSinceEntry]));
TL_Delete(TL2);
TL2 = TL_New(EntryDate,EntryTime,value2[BarsSinceEntry]-PriceScale,sdate,stime,value2[BarsSinceEntry]-PriceScale);
Text_Delete(Tx1);
Tx1 = Text_New(sdate,stime,EntryPrice+abs(선행스팬1[BarsSinceEntry]-value2[BarsSinceEntry]),
NumToStr(EntryPrice+abs(선행스팬1[BarsSinceEntry]-value2[BarsSinceEntry]),2));
Text_Delete(Tx2);
Tx2 = Text_New(sdate,stime,value2[BarsSinceEntry]-PriceScale, NumToStr(value2[BarsSinceEntry]-PriceScale,2));
}
if MarketPosition == -1 and TotalTrades == 0 Then{
ExitShort("SP",AtLimit, EntryPrice-abs(value1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]));
ExitShort("SL",AtStop, value1[BarsSinceEntry]+PriceScale);
TL_Delete(TL1);
TL1 = TL_New(EntryDate,EntryTime,EntryPrice-abs(value1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]),
sdate,stime,EntryPrice-abs(value1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]));
TL_Delete(TL2);
TL2 = TL_New(EntryDate,EntryTime,value1[BarsSinceEntry]+PriceScale,sdate,stime,value1[BarsSinceEntry]+PriceScale);
Text_Delete(Tx1);
Tx1 = Text_New(sdate,stime,EntryPrice-abs(value1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]),
NumToStr(EntryPrice-abs(value1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]),2));
Text_Delete(Tx2);
Tx2 = Text_New(sdate,stime,value1[BarsSinceEntry]+PriceScale, NumToStr(value1[BarsSinceEntry]+PriceScale,2));
}
if MarketPosition == 1 and TotalTrades >= 1 Then{
ExitLong("BP1",AtLimit,EntryPrice+abs(선행스팬1[BarsSinceEntry]-var2[BarsSinceEntry]));
ExitLong("BL1",AtStop,var2[BarsSinceEntry]-PriceScale);
TL_Delete(TL1);
TL1 = TL_New(EntryDate,EntryTime,EntryPrice+abs(선행스팬1[BarsSinceEntry]-var2[BarsSinceEntry]),
sdate,stime,EntryPrice+abs(선행스팬1[BarsSinceEntry]-var2[BarsSinceEntry]));
TL_Delete(TL2);
TL2 = TL_New(EntryDate,EntryTime,var2[BarsSinceEntry]-PriceScale,sdate,stime,var2[BarsSinceEntry]-PriceScale);
Text_Delete(Tx1);
Tx1 = Text_New(sdate,stime,EntryPrice+abs(선행스팬1[BarsSinceEntry]-var2[BarsSinceEntry]),
NumToStr(EntryPrice+abs(선행스팬1[BarsSinceEntry]-var2[BarsSinceEntry]),2));
Text_Delete(Tx2);
Tx2 = Text_New(sdate,stime,var2[BarsSinceEntry]-PriceScale,NumToStr(var2[BarsSinceEntry]-PriceScale,2));
}
if MarketPosition == -1 and TotalTrades >= 1 Then{
ExitShort("SP1",AtLimit,EntryPrice-abs(var1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]));
ExitShort("SL1",AtStop,var1[BarsSinceEntry]+PriceScale);
TL_Delete(TL1);
TL1 = TL_New(EntryDate,EntryTime,EntryPrice-abs(var1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]),
sdate,stime,EntryPrice-abs(var1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]));
TL_Delete(TL2);
TL2 = TL_New(EntryDate,EntryTime,var1[BarsSinceEntry]+PriceScale,sdate,stime,var1[BarsSinceEntry]+PriceScale);
Text_Delete(Tx1);
Tx1 = Text_New(sdate,stime,EntryPrice-abs(var1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]),
NumToStr(EntryPrice-abs(var1[BarsSinceEntry]-선행스팬1[BarsSinceEntry]),2));
Text_Delete(Tx2);
Tx2 = Text_New(sdate,stime,var1[BarsSinceEntry]+PriceScale,NumToStr(var1[BarsSinceEntry]+PriceScale,2));
}
-------------------------------------------------------------------------------------------------------------
현재시스템식은 2번지점의 매수신호 후 3번선상까지가 목표가로 수익청산 설정이고(노란색 박스크기의 값만큼), 1번지점을 하락 돌파할 때 한틱 아래에서(4번지점) 손실청산입니다.
개선을 위해 현재의 식을 그대로 유지하면서, 손실청산일때 반대로 스위칭 진입을 하려고 합니다.
1. 그림과 같이 첫 진입신호에서(2번지점) 3번지점의 목표가를 닿지 못한채 1번지점의 한 틱을 깰때(4번지점), 청산과 함께 반대로 매도 진입을 합니다.
2. 스위칭의 손절가는 직전에 생긴 매수신호(2번지점)에서 형성된 고점(7번지점)을 한 틱 돌파했을때 입니다.
3. 목표가는 직전신호의 기준이되는 저점(1번지점)과 신호후 형성된 고점(7번지점)의 크기(파란색박스)만큼을 손절의 기준이 됐던 1번지점에서 아래방향으로 계산한 5번지점까지 입니다.
4. 만약 스위칭의 목표가인 5번지점까지 오지 않고 다시 7번지점을 상향 돌파하면 그 한 틱위에서 손실청산과 함께 2차 매수 스위칭이 발생하는 것입니다.
5. 5번지점까지 오지 않아 생긴 2차 스위칭의 목표가는 그때까지 생긴 저점에서(가상으로 8번지점이라고 한다면) 8번지점에서 7번지점까지의 크기(오렌지색박스)를 7번지점부터 위로 더하여 생긴 크기만큼이 되는것 입니다.
6. 2차 스위칭은 손절가는 물론 가상의 저점인 8번지점을 한틱 아래입니다.
7. 목표가 미도달로 무한 스위칭이 아닌 변수만큼을 적용하고, 그 변수만큼 스위칭횟수가 도달하면 마지막은 손절청산으로 마감하고, 처음처럼 새로운 진입신호를 기다립니다.
8. 스위칭으로 진입한 신호가 유지되는 동안 선행스팬1을 상승 또는 하락돌파하는 신호는 전과 마찬가지로 무시됩니다.
질문 하나 드리자면, 한계약 진입을 원칙으로 첫 신호발생 후 스위칭 신호가 나오면 손절과 진입은 동시에 이루어 지는지요?
동시라면 2계약의 증거금이 필요할 것이고 그렇지 않다면, 시장가 청산 후, 시장가 진입이 이렇게 설정하면 가능한 건지요?
내용은 별거 아닌거 같은데, 글로 설명하자니, 더 어려워진것이 아닌가 싶네요.
자꾸 부탁드리는 맘이 죄송해서..... 현재까지의 수식에 오류없이 위의 내용을 추가하는것이 어려운 일이 아니길 바랍니다.
감사합니다.^^
2013-04-16
313
글번호 62100
답변완료
누적수량
수고많으십니다.
if crossup(ma(c,5),ma(c,10)) then {buy("b",atmarket,10);}
if marketposition==1 then {exitlog("s",atlimit,avgentryprice*(1+1/100));}
위 식이 매수식과 청산식이라고 가정하여 질문을 드립니다.
위식에서 매수된 수량이 10개만 있더라도 1% 포인트 상승하면 청산하게 되는데,
질문) 바로 청산되지 않고, 매수된 수량이 최대 50개가 되었을 경우에 한하여
매입평균가에서 1% 상승하였다면 청산하라.
부탁드립니다.
2013-04-15
276
글번호 62099
답변완료
데이터가 누락되요..
항상 감사하고 있습니다.
시스템식에서 틱봉을 기본 데이터로 하고
참조데이터에 분봉을 놓았을때
분봉종가가 마무리 되는 자리에서 틱봉에서 봉이 형성되지 않고 데이터가 빠지는
현상이 나타납니다.
때문에 시스템식에서 계속 오류가 발생하고 있습니다.
어떻게 해결해야 하나요?
2013-04-15
240
글번호 62098
답변완료
수식작성
질문1. data2의 55봉전 가격표시를 "Data2(C[55])" 할수있는지요?
원하는 수식은 data2의 현재가가 55봉전가격대비 몇% 인가?입니다.
Value1= (Data2(C)/Data2(C[55]))*100; 로 작성했는데 맞는지요?
질문2. 다른 진입 포지션을 다른청산식으로 청산하려 하는데 신호가 안나오네요.
아래시스템의 "IsEntryName" 적용이 맞는지요?
If MarketPosition==0 Then {
If Crossup(Value1,70) Then Buy("b1");
If CrossUp(Value2,70) Then Buy("b2"); }
If MarketPosition==1 Then {
If IsEntryName("b1") and CrossDown(Value1,30) Then ExitLong("x1");
If IsEntryName("b2") and CrossDown(Value2,50) Then ExitLong("x2"); }
<끝>
감사합니다.
2013-04-15
246
글번호 62086