커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7466
글번호 230811
답변완료
수식문의
1.macd가 0선을 돌파하고위에 머물를때(여기에서 시그날크로스가아니고 macd가 0선을돌파할때입니다) 스토캐스틱이 50 이하에서 골든크로스날때 매수 macd가 0선을 돌파하고 아래에 머물를때50 이상에서 데드크로스날때 매도하는시스템식부탁합니다
2.그리고macd가 0선을 돌파나하락시 사운드가 소리나게수식부탁합니다
2015-07-06
161
글번호 88003
답변완료
부탁드립니다.
아래수식을 반대로 부탁드립니다. 매수해야할때를 매도할때로 청산도요 반대매매되도록 부탁드립니다.
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
141
글번호 88002
답변완료
라인설정
수고가많으십니다.라인설정수식과 설정하는방법좀알려주세요.
전일시가.
당일시가.
전일중심가.
당일중심가.
전일고가.
전일저가.
전일종가.
라인채우기방법도 같이알려주시면감사합니다.(예.전일시가=당일시가)꾸벅...
2015-07-04
163
글번호 88001
답변완료
수식 부탁드립니다.
안녕하세요.
도움을 요청 하옵니다.
아래의 조건을 만족하는 수식을 만들어 주셨음 좋겠습니다.
-장운영시간: 07:00 ~ 익일 05:55분 까지 이며, 05:55분에 보유 물량 전량
강제 정리후 모든 진입금지.
-이익청산 목표가는 매수 또는 매도 진입가 대비 20틱이며
목표가 도달시 강제청산
-최초의 거래는 현재가가 시가보다 높으면 매수, 낮으면 매도
-최초 매수 또는 매도 후 목표가 도달하여 강제 청산시
동일봉 재진입 금지하며,
-최초 매수 또는 매도 후 목표가 청산후 재진입은
아래의 조건이 충족 될때만 매수 또는 매도 진입
1. 최초 매수에서 목표가 강제 청산일 경우 현재가가 강제 청산가 보다
10틱 아래이면서, 현재가가 시가보다 위에 있을때 재 매수.
2. 최초 매도에서 목표가 강제 청산일 경우 현재가가 강제 청산가 보다
10틱 위에이며, 현재가가 시가보다 아래에 있을때 재 매도.
-최초 매수 또는 매도 거래 후 모든 진입은 위 매수 또는 매도 조건이 충족
될때만 진입하며,
-현재가가 시가아래에서 시가을 돌파 할 경우 또는
현재가가 시가 위에서 시가 아래로 돌파 할 경우는
최초의 매수조건을 따라가며,
그 이후의 매수조건은 위의 2가지 조건을 충족 할 경우에만 진입.
고맙습니다.
2015-07-04
150
글번호 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
164
글번호 87999
답변완료
수식문의
안녕하세요
콜옵션 265의 델타값이 0.47이라할때 선물1포인트가 움직일때(오르거나 내릴때) 0.47정도가격이상승한다고 가정한다고했을때에 선물가격을 알수있는식 구현이가능합니까
2015-07-04
138
글번호 87998
답변완료
그림과 같이 화면에 음영으로 강조를 표시하는 방법
수고많으십니다.
첨부파일과 같이 스톡캐스틱을 예로
매도권 매수권 영역을 차트 화면과 같이 붉은색 파란색 음영으로 처리 하는 방법이 있는지요
2015-07-04
309
글번호 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
163
글번호 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
164
글번호 87995