커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5457
글번호 230811
답변완료
당일 첫봉 진입 재질문 합니다!
알려주신 내용을 확인해보고 적용을 시켜봤는데 잘 안됩니다 ^^;; 알려주신 수식을 어디에 추가를 해야되나요? 아니면 알려주신 수식을 추가하지 않고 최초 진입 조건식을 수정하는 방법은 없을까요?
IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then {
IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1);
IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1);
}
# 매수 피라미딩
IF MarketPosition == 1 AND STIME <153000 and IsEntryName("L1")==True THEN {
if highest(h,BarsSinceEntry) <= L2 Then
buy("L2",ATSTOP,L2,LUNIT2);
if highest(h,BarsSinceEntry) <= L1 + LTR Then
buy("L3",ATSTOP, L3,LUNIT2);
}
# 매수청산
IF MarketPosition == 1 then {
if NextBarSdate == SDATE Then
ExitLong("LS",AtStop,LatestEntryPrice - LTR);
IF NextBarSdate != SDATE Then
ExitLong("EL",ATMARKET);
}
# 매도 피라미딩
IF MarketPosition == -1 AND STIME < 153000 AND IsEntryName("S1") == True THEN {
IF Lowest(L,BarsSinceEntry) >= S2 Then
SELL("S2",AtStop,S2,SUNIT2);
IF Lowest(L,BarsSinceEntry) >= S1 - STR Then
SELL("S3",AtStop,S3,SUNIT2);
}
# 매도청산
IF MarketPosition == -1 then {
IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR);
SetStopEndofday();
}
ELSE SetStopEndofday(0); #해제
# 재진입
IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then {
IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1);
IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1);
}
IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN {
IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2);
IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2);
}
IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then {
IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2);
IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2);
}
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 당일 첫봉에서 진입이 안됩니다, 그리고 계좌예수금에 따라 베팅사이즈를 조절
> 안녕하세요
예스스탁입니다.
1
작성하신 수식에는 첫봉에 신호가 발생할수 있는 내용이 없습니다.
각 진입에 NextBarSdate == sDate라는 조건이 있습니다.
다음봉 시가의 날짜와 완성봉의 날짜가 같다라는 조건으로
첫봉이 완성이 되어야 atstop으로 진입이 조건이 충족되고
가격을 셋팅하면 그 다음봉에 신호가 발생합니다.
그러므로 당일 두번째 봉부터 신호가 나올수 있습니다.
첫봉에 신호가 발생할수 있는 내용을 추가하셔야 합니다.
#오늘 마지막봉이 완성되면
#다음봉시가(다음날시가)+LTR 이상의 시세가 첫봉에서 발생하면 매수
#다음봉시가(다음날시가)-STR 이하의 시세가 첫봉에서 발생하면 매도
IF MarketPosition == 0 AND NextBarSdate != sdate Then
{
BUY("L11",ATSTOP,NextBarOpen+LTR,LUNIT1);
SELL("S11",ATSTOP,NExtBarOpen-STR,SUNIT1);
}
LTR,STR,LUNIT1,SUNIT1변수가 0값입니다.
계산식 추가하시기 바랍니다.
2
예수금 부분은 %값을 다르게 지정하셔야 합니다.
1.5%와 같이 외부변수 지정이 되지 않습니다.
0.015로 지정하시면 됩니다.
랭귀지에서 실제 잔고값을 사용시 유의하시기 바랍니다.
차트에 과거봉에는 값이 없습니다.
즐거운 하루되세요
> 엠씨용가 님이 쓴 글입니다.
> 제목 : 당일 첫봉에서 진입이 안됩니다, 그리고 계좌예수금에 따라 베팅사이즈를 조절
> 안녕하세요 ^^
1) 아래와 같은 수식을 사용할 경우 당일 첫봉에서 매수/매도 진입이 전혀 되지 않습니다. 어떻게 해야될까요?
2) 계좌 예수금에 따라 베팅사이즈를 조절하려면 아래와 같이 수식을 적으면 될까요? (모의투자)
input : n(3),risk(1.5%),rt(0.17),MUL(50000);
var : noise(0),sum(0),cnt(0),
RANGE(0),LTR(0),STR(0),
L1(0),L2(0),L3(0),S1(0), S2(0),S3(0),
NL1(0), NL2(0),NL3(0), NS1(0), NS2(0), NS3(0),
VL(0),Lunit(0),LUNIT1(0),LUNIT2(0),SUNIT(0), SUNIT1(0), SUNIT2(0),
Accoundnum(""),value(0);
accoundnum = GetAccount(0);
value = GetUnclearedDeposits(accoundnum);
VL = value / (dayclose(1) * MUL * rt);
LUNIT = INT((value * RISK) / (LTR * MUL));
SUNIT = INT((value * RISK) / (STR * MUL));
# ENTRY
L1 = DAYOPEN + LTR ;
L2 = L1 + (LTR * 0.5);
L3 = L1 + LTR;
S1 = DAYOPEN - STR;
S2 = S1 - (STR * 0.5);
S3 = S1 - STR;
NL1 = LatestExitPrice(1)+LTR;
NL2 = NL1 + LTR * 0.5;
NL3 = NL1 + LTR;
NS1 = LatestExitPrice(1)-STR;
NS2 = NS1 - STR * 0.5;
NS3 = NS1 - Str;
IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then {
IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1);
IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1);
}
# 매수 피라미딩
IF MarketPosition == 1 AND STIME <153000 and IsEntryName("L1")==True THEN {
if highest(h,BarsSinceEntry) <= L2 Then
buy("L2",ATSTOP,L2,LUNIT2);
if highest(h,BarsSinceEntry) <= L1 + LTR Then
buy("L3",ATSTOP, L3,LUNIT2);
}
# 매수청산
IF MarketPosition == 1 then {
if NextBarSdate == SDATE Then
ExitLong("LS",AtStop,LatestEntryPrice - LTR);
IF NextBarSdate != SDATE Then
ExitLong("EL",ATMARKET);
}
# 매도 피라미딩
IF MarketPosition == -1 AND STIME < 153000 AND IsEntryName("S1") == True THEN {
IF Lowest(L,BarsSinceEntry) >= S2 Then
SELL("S2",AtStop,S2,SUNIT2);
IF Lowest(L,BarsSinceEntry) >= S1 - STR Then
SELL("S3",AtStop,S3,SUNIT2);
}
# 매도청산
IF MarketPosition == -1 then {
IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR);
SetStopEndofday(1545);
}
ELSE SetStopEndofday(0); #해제
# 재진입
IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then {
IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1);
IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1);
}
IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN {
IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2);
IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2);
}
IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then {
IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2);
IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2);
}
2020-06-08
2164
글번호 139658
답변완료
검토
yeslanguage에 없어서 문의 합니다
혹시 같은 원리인데 못찾는 거있으면 알려주세요
-----stochastic oscillator
일목균형표에서
-----tchimoku kinko
있는데 못찾는 건지
없는지
추가 넣을 계획이 있는지
알려주세요
2020-06-08
2218
글번호 139644
답변완료
문의드립니다.
아래수식을 예스수식으로 부탁드립니다.
// INPUTS {
Range_Length = input(20, title="Range Length", minval=1)
Display_Bars = input(true, title="Show Bar Colors")
Display_ST = input(true, title="Show Trend")
Display_Channel = input(true, title="Show Channel")
// }
// SETTINGS {
Highest_H = Display_Channel ? highest(high, Range_Length) : na
Lowest_L = Display_Channel ? lowest(low, Range_Length) : na
Highest_C = highest(close, Range_Length)
Lowest_C = lowest(close, Range_Length)
Up = float(na), Up := close > Lowest_C ? min(Highest_C, Highest_C[1]) : na
Dn = float(na), Dn := close < Highest_C ? max(Lowest_C, Lowest_C[1]) : na
ST = float(na), ST := close > Up ? 1 : close < Dn ? -1 : nz(ST[1])
Super_Trend = ST == 1 ? Lowest_C : Highest_C
Bar_Color = Display_Bars ? (ST == 1 ? (close > open ? #4caf50 : #800080) : (close > open ? #2a2e39 : #b71c1c)) : na
// }
// PLOT {
plot(Display_ST ? Super_Trend : na, title="Super Trend",color=color.new(#000000, 0), linewidth=4)
Highest_High = plot(Highest_H, title="Highest High", color=color.new(#000000, 0), display=display.none, editable=false)
Highest_Close = plot(Highest_C, title="Highest Close", color=color.new(#000000, 0), display=display.none, editable=false)
Lowest_Close = plot(Lowest_C, title="Lowest Close", color=color.new(#000000, 0), display=display.none, editable=false)
Lowest_Low = plot(Lowest_L, title="Lowest Low", color=color.new(#000000, 0), display=display.none, editable=false)
fill(Highest_Close, Highest_High, title="Range High", color=color.new(#000000, 60))
fill(Lowest_Low, Lowest_Close, title="Range Low", color=color.new(#000000, 60))
fill(Highest_High, Lowest_Low, title="Full Range", color=color.new(#42a5f5, 90))
barcolor(Bar_Color, title="Bar Colors")
// }
2020-06-08
2380
글번호 139640
답변완료
문의
항상 친절한 답변 감사드립니다.
아래식을 데이타2에 적용하게 부탁드립니다
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),
Text1(0),처리구분("");
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2)
+NewLine+"진폭"+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 2, 1);
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2)
+NewLine+"진폭"+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 2, 0);
}
}
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLACK);
2020-06-08
2210
글번호 139630
답변완료
로직식 부탁드립니다
전일 매수하고 오늘 장초에 시초가 매도할때 시초가가 전일 매수한가격보다 높고 갭이 2퍼센트 이상뜰때 매도하고싶은데 어떻게 작성하면좋을지 모르겠습니다.
작성도움 부탁드립니다
2020-06-08
2049
글번호 139629
답변완료
문의드립니다.
수고에 항상 감사드립니다.
초보질문드립니다.
1. 청산수식을, 종가청산으로 하는것과, 다음봉시가청산으로 하는 것이 같은 것인지요, 결과에 차이가 없는 건가요.
2. 전봉 고가 돌파시 진입조건이면, 전봉고가 +1틱일때 진입되는 건지요.
(휩소무시하고 이론적으로)
3. 전봉 고가 돌파시 진입이라는 조건일때, 다음봉 시가가 갭으로 전봉 고가보다 몇 틱 위에서 시작 되었을 경우,
바로 진입이 되는건지.
4. 설정창에서 계약수를 설정할수도 있고, 수식으로 설정할수도 있는 것으로 아는데, 설정창의 계약수와 수식의 계약수의 수가 다르면 어느게 우선인가요?
또한, 예를들어 1가지 시스템으로 나스닥과 오일 2종목을 매매한다고 할때, 나스닥은 1계약, 오일은 2계약을 매매하고 싶다면, 수식에 계약수설정 수식을 각각 다르게 넣어야 하지요? (이때 설정창의 계약수는 0으로 하면 되나요?)
감사합니다.
2020-06-08
2219
글번호 139627
답변완료
매수매도 시점 질문
조건에 해당하는 종목을 특정시점이 매수, 매도하는 로직을 짤수 있을까요?
예를 들어 오늘 12시에 매수, 다음날 13시에 일괄매도하는 식으로요
2020-06-08
2102
글번호 139625
답변완료
crossup 문의
안녕하세요?
CrossUp 에 대해문의합니다.
라인이 100이라고 가정할경우
일봉에서
1) 어제 종가 100 보다 크고
오늘 시가가 99.5 종가가 101 이면 크로스업 인가요?
2) 어제 종가에 관게 없이
오늘 시가 99
종가 101 이면 crossup 인가요?
2020-06-08
2110
글번호 139624
답변완료
수식 문의 드립니다.
매도 : cci(9,10) 이 100 이상이고, 이전 2봉중 최고점 대비 5% 하락시 봉끝나기 전이라도 즉시 매도
2020-06-08
2149
글번호 139623