커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6309
글번호 230811
답변완료
수식문의
아래 var1값과, var2값을 해당 봉에 숫자(텍스트)로 나타나게 할 수 있나요?
감사합니다
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식문의
> 안녕하세요
예스스탁입니다.
Input : short(12),long(26),sig(9);
Var : MACDv(0),MACDS(0),T(0),Hv(0),Lv(0);
MACDv = MACD(short, long);
MACDs = ema(MACDv,sig);
if crossup(MACDV,MACDS) Then{
T = 1;
Hv = H;
var1 = Lv;
}
if CrossDown(MACDV,MACDS) Then{
T = -1;
Lv = L;
var2 = Hv;
}
if T == 1 Then{
if H > Hv Then
Hv = H;
}
if T == -1 then{
if L < Lv Then
Lv = L;
}
plot1(var1);
plot2(var2);
2017-04-24
196
글번호 109119
답변완료
수식검증 부탁합니다.
수식작성이 잘 안되서 부탁드립니다.
Input : Period(1);
var : kk(0,data2),aa(0,data2),diff(0,data2);
<< 중간에 수식이 있습니다.>>
input : Nd(60);
var : SSd(0),TSd(0),secondd(0),hsbb(0);
var : countd(0),cntd(0);
if Bdate != Bdate[1] Then{
var5 = TimeToMinutes(stime)*60;
var6 = FracPortion(stime/100)*100;
SSd = var5+var6;
Secondd = 0;
hsbb = 0;
}
if Bdate == Bdate[1] Then{
value3 = TimeToMinutes(stime)*60;
value4 = FracPortion(stime/100)*100;
TSd = value3+value4;
Secondd = TSd-SSd;
hsbb = ((Secondd-Secondd[1])-BarInterval)/BarInterval;
}
countd = 0;
for cntd = 0 to Nd-1{
if sdate[cntd] == sdate then
countd = countd + hsbb[cntd];
}
var7 = Highest(h,70);
var8 = Lowest(L, 70);
var9 = Lowest(L, 30);
Condition1 = countd >= 12
;
Condition2 = countd >= 12 and CountIF(var7 > var7[1], 20) < 1 and CountIF(var8 < var8[1], 20) < 1
and CountIF(hsbb >= 1 , 10) >= 1 ;
if Condition2 == True and Condition2[1] == False
Then
Sell("매도1", OnClose);
if BarsSinceEntry > 30
Then
ExitShort("정리1");
위와같이 수식을 작성 하였는데요..
위에 있는 수식은 오류없이 원하는 결과가 나옵니다.
그런데 nd(60) 부터 시작하는.. 아래의 수식에서 계속 오류가 발생하네요..
그 위의 수식은 건드리지 않고 아래 수식에 변화를 주어서 원하는 결과를 얻고 싶습니다.
잘라내기를 하면서 검증해보니까..
var : kk(0,data2),aa(0,data2),diff(0,data2); 이 라인때문에 오류가 발생합니다.
여기를 잘라내고 검증하면 원하는 결과가 그대로 나오는데 사실 아래것을 추가하기 위해서 없앨수가 없거든요..
또, data2가 들어간다고 해서 아래 수식에서 딱히 영향을 미칠만한 것도 제 눈에는 안보이네요.. 어디가 잘못된 것이지 조언 부탁합니다.
감사 합니다.
2017-04-24
201
글번호 109118
답변완료
급등후 매수 전략
안녕하세요!!
첨부파일을 참고하셔서
시가가 20일 이평선(파란선)에서 갭상승 급등 또는 급등 할 때 매수신호 발생 코딩
1) 첨부 그림에서 BC매수 지점에 매수하는 것이 아니라 충분히 하락하여
20이평선에 도달하여 반등할 때 매수하는 경우
2) 반대로 BC매수 하루전의 장대 양봉에서 하락하지 않고 바로 계속 상승할 경우에도
매수 신호
3) 세번째는 장대 양봉의 종가를 기준으로 2% ~ 3% 등락하며 며칠 횡보하다가 상승하는 경우
4) 매도는 최고점
시스템이 1), 2), 3)의 중에서 판단하여서 각 경우에 해당 매수 신호를 주고 난뒤
4)의 조건에서 매도를 가능하게 하는 시스템 코딩을 제공해 주시면 감사하겠습니다
항상 감사드립니다.
2017-04-25
251
글번호 109113
답변완료
종목검색 기초적인 문의드립니다.
특정종목코드가 특정가격 보다 아래로 내려가면 검색되도록 하고 싶습니다.
아래 코드처럼 하니 작동이 안되네요. 수정 부탁드립니다.
If StrToNum(SymbolCode()) == 000030 And Close <= 14650 Then Value1 = 1;
If StrToNum(SymbolCode()) == 000250 And Close <= 14500 Then Value1 = 1;
If StrToNum(SymbolCode()) == 000660 And Close <= 52500 Then Value1 = 1;
If StrToNum(SymbolCode()) == 000720 And Close <= 49650 Then Value1 = 1;
If StrToNum(SymbolCode()) == 001070 And Close <= 102000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 001340 And Close <= 2680 Then Value1 = 1;
If StrToNum(SymbolCode()) == 001515 And Close <= 3175 Then Value1 = 1;
If StrToNum(SymbolCode()) == 001740 And Close <= 7800 Then Value1 = 1;
If StrToNum(SymbolCode()) == 001840 And Close <= 6220 Then Value1 = 1;
If StrToNum(SymbolCode()) == 002870 And Close <= 14700 Then Value1 = 1;
If StrToNum(SymbolCode()) == 003160 And Close <= 6120 Then Value1 = 1;
If StrToNum(SymbolCode()) == 003230 And Close <= 56500 Then Value1 = 1;
If StrToNum(SymbolCode()) == 003300 And Close <= 113000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 003670 And Close <= 14600 Then Value1 = 1;
If StrToNum(SymbolCode()) == 003920 And Close <= 876000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 004100 And Close <= 2760 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005450 And Close <= 8310 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005725 And Close <= 5990 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005740 And Close <= 30500 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005745 And Close <= 21750 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005930 And Close <= 2052000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005935 And Close <= 1587000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 005940 And Close <= 12550 Then Value1 = 1;
If StrToNum(SymbolCode()) == 006400 And Close <= 137500 Then Value1 = 1;
If StrToNum(SymbolCode()) == 007330 And Close <= 7180 Then Value1 = 1;
If StrToNum(SymbolCode()) == 007700 And Close <= 25900 Then Value1 = 1;
If StrToNum(SymbolCode()) == 007820 And Close <= 14900 Then Value1 = 1;
If StrToNum(SymbolCode()) == 008060 And Close <= 9570 Then Value1 = 1;
If StrToNum(SymbolCode()) == 008260 And Close <= 4565 Then Value1 = 1;
If StrToNum(SymbolCode()) == 008700 And Close <= 3595 Then Value1 = 1;
If StrToNum(SymbolCode()) == 009150 And Close <= 69300 Then Value1 = 1;
If StrToNum(SymbolCode()) == 009275 And Close <= 33000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 010170 And Close <= 2415 Then Value1 = 1;
If StrToNum(SymbolCode()) == 010955 And Close <= 79300 Then Value1 = 1;
If StrToNum(SymbolCode()) == 010960 And Close <= 4490 Then Value1 = 1;
If StrToNum(SymbolCode()) == 011070 And Close <= 139000 Then Value1 = 1;
If StrToNum(SymbolCode()) == 011155 And Close <= 32200 Then Value1 = 1;
If StrToNum(SymbolCode()) == 013360 And Close <= 16600 Then Value1 = 1;
If StrToNum(SymbolCode()) == 013367 And Close <= 108500 Then Value1 = 1;
If StrToNum(SymbolCode()) == 013580 And Close <= 17600 Then Value1 = 1;
If StrToNum(SymbolCode()) == 017000 And Close <= 9650 Then Value1 = 1;
If StrToNum(SymbolCode()) == 017370 And Close <= 5890 Then Value1 = 1;
If StrToNum(SymbolCode()) == 017510 And Close <= 6690 Then Value1 = 1;
If StrToNum(SymbolCode()) == 019990 And Close <= 6440 Then Value1 = 1;
If StrToNum(SymbolCode()) == 023350 And Close <= 10100 Then Value1 = 1;
If StrToNum(SymbolCode()) == 028100 And Close <= 13200 Then Value1 = 1;
Else Value1 = 0;
Find(Value1);
2017-04-24
258
글번호 109108
답변완료
문의 드립니다.
월봉에서 차트의 과거부터 현재까지 전범위중에 가장 많은 거래량이 있었던 봉을 찾고,
그 봉의 시가와 종가 중에 더 높은 가격이 차트에 표시되게 할 수 있나요?
첨부파일처럼 가로선 긋고 6,340원 이런식으로 자세하게는 안나와도
가로선 등의 형태로 표시가 될 수는 있는지 궁금합니다
2017-04-24
224
글번호 109107
답변완료
함수변환요청
안녕하세요?
아래는 키움에서 사용하였던 스크립트입니다.
YT로 변환 부탁드립니다.
Vars :
TickValue( 0 ),
RSI_value( 0 ),
RSI_period( 14 ),
MACD_OSC_value( 0 ),
MACD_period1( 12 ),
MACD_period2( 26 ),
MACD_signal_period( 9 ),
H_value1( 0 ),
H_bar1( 0 ),
L_value1( 0 ),
L_bar1( 0 ),
H_value2( 0 ),
H_bar2( 0 ),
L_value2( 0 ),
L_bar2( 0 ),
ShortPeriod( 9 ), // 전환선 기간
LongPeriod( 26 ); // 기준선 기간
// 호가단위
TickValue = OneTick * PriceScale;
// RSI
RSI_value = RSI(C, RSI_period);
// MACD 오실레이터
v0 = MACD(C, MACD_period1, MACD_period2); // MACD value
v1 = Ema(v0, MACD_signal_period); // MACD 시그널
MACD_Osc_value = v0 - v1; // MACD 오실레이터
// 전환선 & 기준선 HighestLowest 주어진 기간동안의 극단적인 최고가, 최저가를 반환
//ShortPeriod 기간 동안 고가(H) 중에 최고가를 찾아내어 그 값은 H_value1 값에 저장
//Shortperiod 기간 동안 저가(L) 중에 최저가를 찾아내어 그 값은 L_value1 값에 저장
//위의 최고가와 최저가를 바탕으로 아래와 같이 전환성과 기준선을 계산
highestlowest(H, L, ShortPeriod, H_value1, H_bar1, L_value1, L_bar1);
highestlowest(H, L, LongPeriod, H_value2, H_bar2, L_value2, L_bar2);
Value1 = (H_value1 + L_value1)/2; // 전환선 9개의 봉 동안 최고가 와 최저가의 중간값
Value2 = (H_value2 + L_value2)/2; // 기준선 26개의 봉 동안 최고가 와 최저가의 중간값
// 매수 진입
If Value1 > Value2 //전환선이 기준선보다 크고
And MACD_Osc_value > 0 //오실레이터 값이 0보다 크고
And CrossUp(RSI_value, 70) //RSI가 70을 상향 돌파
Then Buy("매수");
// 매도 진입
If Value1 < Value2 //전환선이 기준선보다 작고
And MACD_Osc_value < 0 //오실레이터 값이 0보다 작고
And CrossDown(RSI_value, 30) //RSI가 30을 하향 이탈
Then Sell("매도");
// 이하 청산 : 1계약당 손익이 10틱보다 크고
If ContractProfit > TickValue * 10 Then
Begin
// 매수 청산 : RSI가 70을 하향 이탈
If CrossDown(RSI_value, 70) then ExitLong("매수청산");
// 매도 청산 : RSI가 30을 상향 돌파
If CrossUp(RSI_value, 30) Then ExitShort("매도청산");
End;
// 손절 10틱
SetStopLoss(TickValue * 10);
2017-04-24
210
글번호 109106
답변완료
ask
아래 수식은 상승추세시 buy만 2회 하는 수식입니다.
하락추세시 sell만 2회 하는 수식으로 전환바랍니다.
거래 방식은 BUY와 같고 역방향이므로
BUY와 SELL의 진입과 청산 지점은 다릅니다.
(BUY1->SELL1->BUY2->SELL2 reverse 거래)
늘 고맙습니다.
******
input : b1(11),b2(13),X1(13),X2(13),진입눌림(4),진입돌파(4),청산눌림(4),청산돌파(4);
var : T1(0),entry(0),LL(0),EH(0),E1(0),H1(0),i1(0),S1(0),L1(0);
if Bdate != Bdate[1] Then{
T1 = TotalTrades;
E1 = 0;
}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if E1 == 0 and C >= daylow+PriceScale*B1 and C[1] < daylow+PriceScale*B1 Then{
E1 = 1;
H1 = H;
i1 = index;
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
if L <= H1-PriceScale*진입눌림 Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파 Then{
buy("b1");
E1 = 0;
}
}
if MarketPosition == 1 Then{
if entry == 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = H;
E1 = 0;
}
if H > EH Then
EH = H;
if E1 == 0 and C <= EH-PriceScale*X1 Then{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*청산눌림 Then{
E1 = 2;
I1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파 Then{
exitlong("bx1");
E1 = 0;
}
}
}
if TotalTrades > TotalTrades[1] Then
LL = L;
if L < LL Then
LL = L;
if MarketPosition == 0 and entry == 1 Then{
if E1 == 0 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2 Then{
E1 = 1;
H1 = H;
i1 = index;
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
if L <= H1-PriceScale*진입눌림 Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파 Then{
buy("b2");
}
}
#if MarketPosition == 1 Then{
# if MarketPosition== 1 and entry == 2 Then
# exitlong("bx3",AtStop,EntryPrice-PriceScale*13);
#}
if MarketPosition == 1 Then{
if entry == 2 then{
if CurrentContracts > CurrentContracts[1] Then
E1 = 0;
if E1 == 0 and L <= EntryPrice-PriceScale*13 Then{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*청산눌림 Then{
E1 = 2;
I1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파 Then{
exitlong("bx3");
E1 = 0;
}
}
}
2024-09-02
189
글번호 109104
답변완료
수식 문의드립니다.
if index >= 1 then{
if O < C Then
var1 = var1+v;
if O > C Then
var1 = Var1-V;
}
plot1(var1);
위 식에서 그냥 양봉,음봉만 가려서 거래량에 총합해주는것이 아닌
캔들의 몸통 비율에 비례해서 거래량을 가감해 주고 싶습니다.
가령
양봉캔들이고 시가=저가이고, 고가=종가 일때(꼬리가 전혀없음)
이 캔들에서 만들어진 거래량은 100% 합해주고
총 캔들길이에 몸통이 반이고 위아래 혹은 위나 아래에만 있는 꼬리가 절반이면
거래량에 50%에 값만 합해주고...
도지는 0%
음봉은 반대로 빼주고..
이렇게 거래량을 가감해주는 식을 만들어 보고싶어서 관리자님께 문의 드려봅니다.
가뭄의 단비같이 궁금증을 해결해 주시는 수식게시판 관리자님께 항상 감사드립니다.
2017-04-24
212
글번호 109101
답변완료
문의드립니다
문의드립니다
적용 주식일봉 입니다
주가가 일목균형표에서 선행스팬 1과 선행스팬2 한마디로 주가의 종가가 구름대 아래에있고
주가가 단순이동평균선240선 위에있고
단순이평 5 20 60 정배열 이고요
upticks > downticks 크면
검색하고십습니다
시스템에서 는 위식을 사용하여
당일 종가매수 하고요
익절은 진입가에서 3% 입니다
손절은 진입가에서-5% 입니다
청산되기전 신호는 무시해야합니다
감사합니다
2017-04-24
213
글번호 109094