커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4812
글번호 230811
답변완료
부탁드립니다.
아래수식을 반대로 부탁드립니다. 매수해야할때를 매도할때로 청산도요 반대매매되도록 부탁드립니다.
var : T(0);
var1 = ma(c,5);
var2 = ma(C,70);
if var2[1]>var2[0] and
OPEN[0]>var1 and
OPEN[0]>CLOSE[0] Then
T = -1;
SELL();
if var2[1]<var2[0] and
OPEN[0]<var1 and
OPEN[0]<CLOSE[0] Then
T = 1;
if MarketPosition == 0 and T == -1 and countif(T == T[1],3) == 3 Then
sell();
if MarketPosition == 0 and T == 1 and countif(T == T[1],3) == 3 Then
buy();
SetStopProfittarget(PriceScale*10,PointStop);
SetStopLoss(PriceScale*19,PointStop);
2015-07-04
126
글번호 88002
답변완료
라인설정
수고가많으십니다.라인설정수식과 설정하는방법좀알려주세요.
전일시가.
당일시가.
전일중심가.
당일중심가.
전일고가.
전일저가.
전일종가.
라인채우기방법도 같이알려주시면감사합니다.(예.전일시가=당일시가)꾸벅...
2015-07-04
144
글번호 88001
답변완료
수식 부탁드립니다.
안녕하세요.
도움을 요청 하옵니다.
아래의 조건을 만족하는 수식을 만들어 주셨음 좋겠습니다.
-장운영시간: 07:00 ~ 익일 05:55분 까지 이며, 05:55분에 보유 물량 전량
강제 정리후 모든 진입금지.
-이익청산 목표가는 매수 또는 매도 진입가 대비 20틱이며
목표가 도달시 강제청산
-최초의 거래는 현재가가 시가보다 높으면 매수, 낮으면 매도
-최초 매수 또는 매도 후 목표가 도달하여 강제 청산시
동일봉 재진입 금지하며,
-최초 매수 또는 매도 후 목표가 청산후 재진입은
아래의 조건이 충족 될때만 매수 또는 매도 진입
1. 최초 매수에서 목표가 강제 청산일 경우 현재가가 강제 청산가 보다
10틱 아래이면서, 현재가가 시가보다 위에 있을때 재 매수.
2. 최초 매도에서 목표가 강제 청산일 경우 현재가가 강제 청산가 보다
10틱 위에이며, 현재가가 시가보다 아래에 있을때 재 매도.
-최초 매수 또는 매도 거래 후 모든 진입은 위 매수 또는 매도 조건이 충족
될때만 진입하며,
-현재가가 시가아래에서 시가을 돌파 할 경우 또는
현재가가 시가 위에서 시가 아래로 돌파 할 경우는
최초의 매수조건을 따라가며,
그 이후의 매수조건은 위의 2가지 조건을 충족 할 경우에만 진입.
고맙습니다.
2015-07-04
130
글번호 88000
답변완료
수식 변경요청 드립니다.
수식1, 수식2 변경요청 드립니다.
수식1
아래 수식에서 2번째 신호발생봉 종가기준
-> 손실 -1PT 이상 발생시 당일손실 제한적용으로 강제청산
-> 수익 +1PT 이상 발생시 [수익보전 추적청산 수식]으로 강제청산(진입횟수 추가적용)
=> [수익보전 추적청산 수식] -> +1PT 이상 수익이 발생 후, 수익이 30% 감소시 강제청산
수정요청 드립니다.
input :N(2),당일손실(-1.5);
var : cnt(0),BCount(0),SCount(0);
var : NP(0),PreNP(0),DayPL(0);
NP = NetProfit;
if date != date[1] Then
preNP = NP[1];
dayPL = NP-PreNP;
BCount = 0 ;
SCount = 0 ;
for cnt = 0 to 10 {
if EntryDate(cnt) == sdate and MarketPosition(cnt) == 1 then
BCount = BCount + 1;
if EntryDate(cnt) == sdate and MarketPosition(cnt) == -1 then
SCount = SCount + 1;
}
//-------------------------------------------------------------------------------
if MarketPosition == 1 Then{
if BCount+SCount == 1 Then
ExitLong("당일손실제한bx3",AtStop,EntryPrice+당일손실-dayPL);
if BCount+SCount == 2 Then
{
if PositionProfit(1) > 0 Then
ExitLong("당일손실제한bx31",AtStop,EntryPrice-당일손실);
Else
ExitLong("당일손실제한bx32",AtStop,EntryPrice+당일손실-dayPL);
}
}
if MarketPosition == -1 Then{
if BCount+SCount == 1 then
ExitShort("당일손실제한sx3",AtStop,EntryPrice-당일손실+daypl );
if BCount+SCount == 2 Then
{
if PositionProfit(1) > 0 Then
ExitShort("당일손실제한sx31",AtStop,EntryPrice+당일손실);
Else
ExitShort("당일손실제한sx32",AtStop,EntryPrice-당일손실+daypl );
}
}
//-----------------------------------------------------------------------------------------------------
if MarketPosition == -1 and crossup(H,EntryPrice+0.5) and BCount+SCount < N and dayPL > 당일손실 Then
buy("1BX");
if MarketPosition == 1 and CrossDown(L,EntryPrice-0.5) and BCount+SCount < N and dayPL > 당일손실 Then
sell("1SX");
//----------------------------------------------------------------------------------------------------
Value1 = Highest(H, BarsSinceEntry-100);
if BCount+SCount < N and daypl > 당일손실 Then
Buy("매수추적청산",AtStop, Value1-ATR(15)*5);
Value2 = Lowest(L, BarsSinceEntry-100);
if BCount+SCount < N and daypl > 당일손실 Then
sell("매도추적청산",AtStop, Value2-ATR(15)*5);
//----------------------------------------------------
수식2
키움수식 예스수식으로 변경요청 드립니다.
#1 매수
a=MACD(shortPeriod,longPeriod)>= eavg(MACD(shortPeriod,longPeriod),sigPeriod),
CrossUp(H,BBandsUp(Period1,D1)) and (L(3)<L(2)<L(1));
d=Crossup(Trix(period),eavg(Trix(period),sigperiod10));
if(time >= 090000 && time <= 090130,CrossUp(valuewhen(1,date(1) != date,C),PreDayClose()),a or d)
#2 매도
a=CrossDown((highest(H,shortPeriod)+lowest(L,shortPeriod))/2,(highest(H,midPeriod)+lowest(L,midPeriod))/2) and (H(3)<H(2)<H(1)),
MACD(shortPeriod,longPeriod) < eavg(MACD(shortPeriod,longPeriod),sigPeriod) and
CrossDown(L,BBandsDown(Period1,D1));
d=CrossDown(Trix(period),eavg(Trix(period),sigperiod10));
if(time >= 090000 && time <= 090130,CrossDown(valuewhen(1,date(1) != date,C),PreDayClose()),a or d) // 이하생략
감사합니다.
2015-07-05
145
글번호 87999
답변완료
수식문의
안녕하세요
콜옵션 265의 델타값이 0.47이라할때 선물1포인트가 움직일때(오르거나 내릴때) 0.47정도가격이상승한다고 가정한다고했을때에 선물가격을 알수있는식 구현이가능합니까
2015-07-04
120
글번호 87998
답변완료
그림과 같이 화면에 음영으로 강조를 표시하는 방법
수고많으십니다.
첨부파일과 같이 스톡캐스틱을 예로
매도권 매수권 영역을 차트 화면과 같이 붉은색 파란색 음영으로 처리 하는 방법이 있는지요
2015-07-04
281
글번호 87997
답변완료
시스템 수식 수정 부탁드립니다.
아래의 수식을 수정 부탁드립니다.
기준봉의 날짜 지정
매수조건
- 1차 매수: 기준봉의 시가와 종가사이에서 시가(기준봉이 음봉이면 종가)대비 75%
- 2차 매수: 기준봉의 시가와 종가사이에서 시가(기준봉이 음봉이면 종가)대비 50%
- 3차 매수: 기준봉의 시가와 종가사이에서 시가(기준봉이 음봉이면 종가)대비 25%
(즉, 만약 기준봉이 음봉인 경우는 역순으로 적용)
매도조건
- 기준봉의 종가(음봉인 경우는 시가)보다 높은 가격에서 전일저가 -1%
- 상한가 도달시 전량매도
손절조건
- 기준봉의 저가 -1% 이탈시 손절
- 아 래 -
input : 기준봉날짜 (20150701);
var : 하한가(0), DnLimit(0);
var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0);
var : 상한가(0), UpLimit(0);
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
DnLimit = (BP * 0.12);
Else if date >= 20050328 and date < 20150615 Then
DnLimit = (BP * 0.15);
Else
DnLimit = (BP * 0.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
dn1 = int(DnLimit/100)*100;
dn2 = int(DnLimit/100)*100;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/10)*10;
dn7 = int(DnLimit/1)*1;
}
}
Else {
dn1 = int(DnLimit/1000)*1000;
dn2 = int(DnLimit/500)*500;
dn3 = int(DnLimit/100)*100;
dn4 = int(DnLimit/50)*50;
dn5 = int(DnLimit/10)*10;
dn6 = int(DnLimit/5)*5;
dn7 = int(DnLimit/1)*1;
}
if CodeCategory() == 1 or CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn6;
}
else{
If BP >= 500000 Then
하한가 = BP-dn1;
Else If BP >= 100000 Then
하한가 = BP-dn2;
Else If BP >= 50000 Then
하한가 = BP-dn3;
Else If BP >= 10000 Then
하한가 = BP-dn4;
Else If BP >= 5000 Then
하한가 = BP-dn5;
Else If BP >= 1000 Then
하한가 = BP-dn6;
Else
하한가 = BP-dn7;
}
}
else if CodeCategory() == 8 or CodeCategory() == 9 then {
하한가 = BP-dn6;
}
}
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
UpLimit = (BP[0] * 1.12);
Else if date >= 20050328 and date < 20150615 Then
UpLimit = (BP[0] * 1.15);
Else
UpLimit = (BP[0] * 1.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
up1 = int(UpLimit/100+0.00001)*100;
up2 = int(UpLimit/100+0.00001)*100;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/10+0.00001)*10;
up7 = int(UpLimit/1+0.00001)*1;
}
}
Else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up6);
}
Else{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
상한가 = up6;
}
}
if sdate == 기준봉날짜 Then{
value1 = abs(DayClose-dayopen);
if DayClose > DayOpen Then{
var1 = dayopen+value1*0.75;
var2 = dayopen+value1*0.50;
var3 = dayopen+value1*0.25;
}
Else{
var1 = dayopen-value1*0.75;
var2 = dayopen-value1*0.50;
var3 = dayopen-value1*0.25;
}
}
if sdate > 기준봉날짜 Then{
#var1(75%)터치시 매수
if Condition1 == false and H < var1 Then
Buy("매수11",AtStop,var1);
if Condition1 == false and L > var1 Then
Buy("매수12",Atlimit,var1);
#var2(50%)터치시 매수
MessageLog("%s",Condition2 == false and H < var2);
if Condition2 == false and H < var2 Then
Buy("매수21",AtStop,var2);
if Condition2 == false and L > var2 Then
Buy("매수22",Atlimit,var2);
#var3(25%)터치시 매수
if Condition3 == false and H < var3 Then
Buy("매수31",AtStop,var3);
if Condition3 == false and L > var3 Then
Buy("매수32",Atlimit,var3);
}
if MarketPosition == 1 Then{
if LatestEntryName(0) == "매수12" or LatestEntryName(0) == "매수12" Then
Condition1 = true;
if LatestEntryName(0) == "매수21" or LatestEntryName(0) == "매수22" Then
Condition2 = true;
if LatestEntryName(0) == "매수31" or LatestEntryName(0) == "매수32" Then
Condition3 = true;
Exitlong("매도",AtStop,daylow(1)*0.99);
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
ExitLong("상한가매도",Atlimit,상한가);
2015-07-05
136
글번호 87996
답변완료
42801 재질문
안녕하세요 42801에서 잘 이해되지 않는 부분 문의드립니다
1-1. 청산 : 5-20 이평데드가 발생한 다음날 시가
==> ExitLong("bx",AtMarket); 이 부분이 이평데드가 어떻게 적용되는지
잘이해가 안되네요
==> 1-1. 이것 하나만 예로들어 메세지로그(?)로 신호발생을 보여주시면 감사하겠습니다
(신호후 당일종가, 다음날시가 이부분을 상세하게 확인하고 싶습니다)
======== 43801 답변
주식 선물의 경우 거래소에서 증거금율 확인하시기 바랍니다.
아래는 18%로 지정되었습니다.
1-1.
input : 금액(100000000);
var1 = ma(c,5);
var2 = ma(c,20);
if crossup(var1,var2) Then{
buy("b",OnClose,def,floor(금액/C));
}
ExitLong("bx",AtMarket);
1-2.
input : 금액(100000000);
var1 = ma(c,5);
var2 = ma(c,20);
if crossup(var1,var2) Then{
buy("b",Atmarket,def,floor(금액/C));
}
ExitLong("bx");
2-1.
input : 금액(100000000);
var1 = ma(c,5);
var2 = ma(c,20);
var3 = floor(금액/(C*10*0.18));
if crossup(var1,var2) Then{
buy("b",OnClose,def,var3);
}
ExitLong("bx",AtMarket);
2-2
input : 금액(100000000);
var1 = ma(c,5);
var2 = ma(c,20);
var3 = floor(금액/(C*10*0.18));
if crossup(var1,var2) Then{
buy("b",AtMarket,def,var3);
}
ExitLong("bx");
3-1
분봉에서 시초가 매수는 전말 마지막봉의 시간을 지정해야 합니다.
사용하시는 주기에서 마지막봉 시간을
plot1(stime);
위 지표로 확인하고 매도식에 지정해 주셔야 합니다.
아래는 15시 15분으로 되어 있습니다.
input : 금액(100000000);
var1 = ma(c,5);
var2 = ma(c,20);
var3 = floor(금액/(C*10*0.18));
if crossup(var1,var2) Then{
value1 = stime;
value2 = sdate;
}
if CrossDown(var1,var2) Then{
value3 = stime;
value4 = sdate;
}
if var1 > var2 and value2 == sdate And
stime == 130000 and value1 < 120000 Then
buy("b1",OnClose,def,var3);
if var1 > var2 and value2 == sdate And
stime == 143000 and (value1 >= 120000 and value1 < 130000) Then
buy("b2",OnClose,def,var3);
if var1 > var2 and value2 == sdate And
stime == 150000 and value1 >= 130000 Then
buy("b3",OnClose,def,var3);
if stime == 151500 and var1 < var2 and sdate == value4 Then
sell("s",AtMarket);
=== 43801 질문
일봉기준입니다
1-1. 주식 / 투자 1억원
매수 : 5-20 이평골든이 발생한 당일 종가
청산 : 5-20 이평데드가 발생한 다음날 시가
1-2. 주식 / 투자 1억원
매수 : 5-20 이평골든이 발생한 다음날 시가
청산 : 5-20 이평데드가 발생한 당일 종가
2-1. 주식선물 / 투자 1억원
매수 : 5-20 이평골든이 발생한 당일 종가
매도 : 5-20 이평데드가 발생한 다음날 시가
2-2. 주식선물 / 투자 1억원
매수 : 5-20 이평골든이 발생한 다음날 시가
매도 : 5-20 이평데드가 발생한 당일 종가
분봉일 경우입니다.
3-1. 주식선물 / 투자 1억원
매수 : 5-20 이평골든이 12이전 발생하면 13시에 매수
5-20 이평골든이 12~13시 발생하면 14시30분에 매수
5-20 이평골든이 13시이후 발생하면 당일 종가에 매수
매도 : 5-20 이평데드가 발생한 다음날 시가
미리 감사드립니다
2015-07-03
129
글번호 87995
답변완료
질문 드립니다.
답변하여 주신 아래의 수식을 일봉에 적용하면 매매가 전혀 일어나지
않습니다. 어디가 잘못된 것인지 궁금합니다.
var : entry(true);
var1 = ma(c,5);
var2 = ma(c,20);
var3 = highest(C,50);
var4 = Lowest(C,50);
if entry == true and crossup(var1,var2) Then{
if MarketPosition == -1 and C > EntryPrice Then{
ExitShort();
entry = false;
}
Else
buy();
}
if entry == false and CrossDown(var1,var2) Then{
if MarketPosition == 1 and C < EntryPrice Then{
ExitLong();
entry = false;
}
Else
sell();
}
if MarketPosition == 0 and entry == false Then{
if crossup(c,var3[BarsSinceExit(1)]*1.02) then{
buy();
entry = true;
}
if CrossDown(c,var4[BarsSinceExit(1)]*0.98) then{
sell();
entry = true;
}
}
즐거운 하루되세요
> 앙두 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 아래의 조건을 만족시키는 수식이 궁금합니다.
첫번째, 5 이평선과 20 이평선이 교차되면 첫 진입,,
두번째, 첫 진입 이후 5 이평선과 20 이평선 교차시 마다 매수(도) 진입하되,,
세번째, 직전 진입에서 손실이 발생하면, 이전 50개 봉 종가의 최고점의 102%,
최저점의 98%를 상(하)향 돌파하면 매수(도) 진입으로 전환
네번째, 전환이후에는 다시 5 이평선과 20 이평선 교차시 마다 매수(도) 진입
이후에는 상기 두번째 부터 네번째 까지 계속하여 반복
2015-07-03
129
글번호 87994