커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4457
글번호 230811
답변완료
진입횟수
안녕하세요.
1. 합성시스템에서 모든 매수 신호를 망라하고 매수신호는 오직 1번만 발생하게 하려면 어떻게
하는지 궁금합니다
2. 그리고 아래와 같은 식을 사용해왔는데
var : B1count(0);
if Bdate != Bdate[1] Then
      B1count = 0;
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "매수" Then
      B1count = B1count+1;
if B1count < 1 and 매수조건 Then
      buy("매수");
이 식의 문제점은 매수조건이면 손절이 발생한 같은 봉에서 재진입을 한다는 것입니다.
이런 현상을 막으려고
if (MarketPosition == 0 and (IsEntryName("매수",1) == false or IsExitName("StopLoss",1) == false)) or
(MarketPosition == 1 and LatestEntryName(0) != "매수") and 매수조건
then
 buy("매수");
이렇게도 해봤는데 그것도 잘 안됩니다.ㅠㅠ
감사합니다
2018-11-22
218
글번호 123836
답변완료
수정 부탁드립니다.
1.
그림과 같이 지정한 시간에 당일청산이 이루어지지 않고 있습니다.
아래식의 ##당일 청산1, ##당일 청산2 두가지 모두 안되는듯 합니다.
어떤게 좋은지 몰라 두가지 적어 놓았습니다.
종목은 항셍이며 지정하는 시간, 한국시간 02시 전에 무조건 청산이 될 수 있게 요청드립니다.
##주말청산과 ##특정일청산도 다시한번 봐주시길 요청드립니다.
2. 이전봉 N(10)개의 평균 거래량이 몇 이상 조건을 추가 요청드립니다.
input : 시작시간(101800), 진입종료(002400);
input : 당일청산시간1(003300);
input : 한국주말청산1(004200) ;
input : 특정일종료날짜(20181018), 특정일종료시간(004200);
input : 손절(120), 익절1(80),익절1하락퍼센트(0.9);
var : BH(0),SL(0),HE(0),LE(0);
var : Tcond(False);
### 지표
input : P21(30), P22(70), P23(400); ## 30 60
var21 = ma(C,P21);
var22 = ma(C,P22);
var23 = ma(C,P23);
########
if stime == 시작시간 or (stime >시작시간 and stime[1] < 시작시간) Then{
Tcond = true;
}
if stime == 진입종료 or (stime > 진입종료 and stime[1] < 진입종료) Then{
Tcond = false;
}
if Tcond == true Then{
if crossup(var22,var23)
Then
buy("매수");
if CrossDown(var22,var23)
Then
sell("매도");
}
if MarketPosition == 1 Then{
BH = highest(H,BarsSinceEntry);
if MaxEntries == 1 Then
HE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) > HE Then
HE = LatestEntryPrice(0);
if BH >= EntryPrice+PriceScale*익절1 then{
ExitLong("B익절1",AtStop,BH-(BH-EntryPrice)*익절1하락퍼센트);
}
ExitLong("B손절",AtStop,HE-PriceScale*손절);
}
if MarketPosition == -1 Then{
SL = Lowest(L,BarsSinceEntry);
if MaxEntries == 1 Then
LE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) < LE Then
LE = LatestEntryPrice(0);
if SL <= EntryPrice-PriceScale*익절1 then{
ExitShort("S익절1",AtStop,SL+(EntryPrice-SL)*익절1하락퍼센트);
}
ExitShort("S손절",AtStop,LE+PriceScale*손절);
}
##### 당일 청산 1
if 당일청산시간1 <= sTime and sTime <당일청산시간1 then {
if MarketPosition == 1 then{
ExitLong("B장종료1");
}
if MarketPosition == -1 then{
ExitShort("S장종료1");
}
}
##### 당일 청산 2
if DayOfWeek(bdate) == 1 and
((sdate != sdate[1] and stime >= 당일청산시간1) or
(sdate == sdate[1] and stime >= 당일청산시간1 and stime[1] < 당일청산시간1)) Then
{
if MarketPosition == 1 Then
ExitLong("B장종료D1");
if MarketPosition == -1 Then
ExitShort("S장종료D1");
}
#####특정일청산
if sdate == 특정일종료날짜 and
((sdate != sdate[1] and stime >= 특정일종료시간) or
(sdate == sdate[1] and stime >= 특정일종료시간 and stime[1] < 특정일종료시간)) Then
{
if MarketPosition == 1 Then
exitlong("B특정일종료");
if MarketPosition == -1 Then
ExitShort("S특정일종료");
}
#####한국주말청산
if DayOfWeek(bdate) == 5 and
((sdate != sdate[1] and stime >= 한국주말청산1) or
(sdate == sdate[1] and stime >= 한국주말청산1 and stime[1] < 한국주말청산1)) Then
{
if MarketPosition == 1 Then
ExitLong("B주말청산1");
if MarketPosition == -1 Then
ExitShort("S주말청산1");
}
2018-11-23
245
글번호 123835
답변완료
부탁드립니다.
1. 60149관련입니다.
2. 전일동시간대누적거래량은 알려주셨으나 "전일동시간대 최고가"가 빠졌네요. 부탁드립니다.
("전일동시간대 최고가"란 오늘 시간(예로 11시)에 해당하는 어제 11시간까지의 최고가를 말합니다.)
2018-11-23
206
글번호 123834
답변완료
60075와 관련입니다
안녕하세요
어렵지 않은걸 자꾸 귀찮케해서 미안합니다
60075와 관련해서 60082에서 답변해 주셧는데,
설명이 부족한 탓인지 의도와 다른 답변을 주셨네요
1. 원하는 답은 일봉차트에서 적용할 때 선이 표시되도록 하는 것입니다
일봉차트에서 weekopen(0)은 주간 첫거래일 시가가 주간 마지막까지 직선으로 표시됩니다
일봉차트에서 weekclose(0)를 적용하면 날마다 가격표시가 변하면서 표시됩니다
그래서 weekclose(0) 대신 직선으로 표시되는 지표식을 원하는 것입니다
예를 들면 주 3일째는 3일째의 종가가 주간 첫날부터 직선으로 그려지도록,
주 5일째는 5일째의 종가가 주간 첫날부터 직선으로 그려지는 것입니다
한 주간이 지났을 때는 금요일 일봉의 종가가 월요일부터 금요일까지 직선으로 그려지도록
지표식을 부탁합니다
2. 원하는 답은 일봉차트에서 적용할 때 선이 표시되도록 하는 것입니다
일봉차트에서 monthopen(0)은 월간 첫거래일 시가가 월간 마지막까지 직선으로 표시됩니다
일봉차트에서 monthclose(0)를 적용하면 날마다 가격표시가 변하면서 표시됩니다
그래서 monthclose(0) 대신 직선으로 표시되는 지표식을 원하는 것입니다
예를 들면 월 10일째는 10일째의 종가가 월간 첫날부터 직선으로 그려지도록,
월 20일째는 20일째의 종가가 월간 첫날부터 직선으로 그려지는 것입니다
한 달이 지났을 때는 월 마지막 거래일 일봉의 종가가 월 첫날부터 월 마지막 거래일까지
직선으로 그려지도록 지표식을 부탁합니다
2018-11-23
186
글번호 123833
답변완료
질문드립니다.
외부변수 A에 숫자를 0을 입력하면 매수조건만 진입하고 숫자를 1을 입력하면 매도조건만 진입하게 할 수 있을까요?
2018-11-22
166
글번호 123832
답변완료
DATA2 참조하여 매수 매도 시스템을 만들고자 합니다.
DATA2에 아래와 같은 켈트너 채널 시스템을 적용하여 매수 매도 시스템을 만들고자 합니다.
변환부탁드립니다. 미리 정말 감사드립니다.
Inputs: Length(10), ATRs(1.5), Pval(0.05);
Variables: KUpper(0), BuySetup(False), BuyBase(0);
Variables: KLower(0), SellSetup(False), SellBase(0);
KUpper = KeltnerChannel(Close, Length, ATRs);
KLower = KeltnerChannel(Close, Length, -ATRs);
Condition1 = Crossup(Close, KUpper);
Condition2 = CrossDown(Close, KLower);
If MarketPosition() == 1 OR Close < MA(close, Length) Then
BuySetup = False;
Else
If Condition1 Then Begin
BuySetup = True;
BuyBase = High;
End;
If MarketPosition() == -1 OR Close > MA(Close, Length) Then
SellSetup = False;
Else
If Condition2 Then Begin
SellSetup = True;
SellBase = Low;
End;
//Description : Keltner Channel Long Entry
If BuySetup Then
Buy ("KC_LE", AtStop, BuyBase + Pval);
//Description : Keltner Channel Short Entry
If SellSetup Then
Sell ("KC_SE", AtStop, SellBase - Pval);
2018-11-22
198
글번호 123823
답변완료
함수요청
안녕하세요?
함수요청드립니다.
해외선물 크루드오일 30분봉으로 거래를 하고자 합니다.
1. 써머타임 적용시
-매수: 23시 30분 시점에 현재가 > 00시 30분 시점에 현재가 이면, 익일 1시 시초가 진입
-매도: 23시 30분 시점에 현재가 < 00시 30분 시점에 현재가 이면, 익일 1시 시초가 진입
-청산: SetStopEndOfday(043000);
-당일 진입, 당일 청산으로 1번 왕복 거래입니다.
2. 써머타임 해지시
-매수: 22시 30분 시점에 현재가 > 23시 30분 시점에 현재가 이면, 익일 0시 시초가 진입
-매도: 22시 30분 시점에 현재가 < 23시 30분 시점에 현재가 이면, 익일 0시 시초가 진입
-청산: SetStopEndOfday(033000);
-당일 진입, 당일 청산으로 1번 왕복 거래입니다.
2018-11-22
179
글번호 123821
답변완료
요청드립니다.
아래 식에서
Price Channel 4개의 모든 Channel이 [1]대비 같거나 상승중 일때 조건에 따라 매수
Price Channel 4개의 모든 Channel이 [1]대비 같거나 하락중 일때 조건에 따라 매도
를 하고 싶은데 Price Channel 4개를 지표로 나타내고 보니 지표상 하락중인데 매수가 나타납니다.(그림참조) 수정좀 부탁드립니다.
SetStopProfittarget(Target) 목표청산에 도달하면 최고값대비 10% 하락하면 청산
해선 PriceScale을 고려하여 청산 수식 포함요청드립니다.
###매수 매도 수식###
input : 손절(80),Target(0.4);
var : BH(0),SL(0),HE(0),LE(0);
var : T(0), S(0);
##Price Chanel
INPUT : Length51(50), Length52(200) ;
VAR : Tchan51(0), Bchan52(0),Tchan53(0), Bchan54(0);;
Tchan51 = Highest(High, Length51);
Bchan52 = Lowest(Low, Length51);
Tchan53 = Highest(High, Length52);
Bchan54 = Lowest(Low, Length52);
input : P31(30), P82(280);
var31 = wma(C,P31);
var82 = wma(C,P82);
##M Price Chanel
// Tchan53 = Highest(High, Length52)[1]; # Highest Length52(200)
// Tchan51 = Highest(High, Length51)[1]; # Highest Length51(50)
// Bchan52 = Lowest(Low, Length51)[1]; # Lowest Length51(50)
// Bchan54 = Lowest(Low, Length52)[1]; # Lowest Length52(200)
## Price Chanel 4개 모두 상승 중이면 S = 1
if Tchan53[1] < Tchan53
and Tchan51[1] < Tchan51
and Bchan52[1] < Bchan52
and Bchan54[1] < Bchan54
then {
S = 1;
}
## Price Chanel 4개 모두 하락 중이면 S = -1
if Tchan53[1] > Tchan53
and Tchan51[1] > Tchan51
and Bchan52[1] > Bchan52
and Bchan54[1] > Bchan54
Then {
S = -1;
}
if S == 1 and Crossup(var31, var82)
Then buy("B2");
if S == -1 and Crossdown(var31, var82)
Then sell("S2");
### 청산
if MarketPosition == 1 Then{
BH = highest(H,BarsSinceEntry);
if MaxEntries == 1 Then
HE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) > HE Then
HE = LatestEntryPrice(0);
SetStopProfittarget(Target);
ExitLong("B손절",AtStop,HE-PriceScale*손절);
}
if MarketPosition == -1 Then{
SL = Lowest(L,BarsSinceEntry);
if MaxEntries == 1 Then
LE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) < LE Then
LE = LatestEntryPrice(0);
SetStopProfittarget(Target);
ExitShort("S손절",AtStop,LE+PriceScale*손절);
}
/*
#### 지표
INPUT : Length51(50), Length52(200) ;
VAR : Tchan51(0), Bchan52(0),Tchan53(0), Bchan54(0);
Tchan51 = Highest(High, Length51);
Bchan52 = Lowest(Low, Length51);
Tchan53 = Highest(High, Length52);
Bchan54 = Lowest(Low, Length52);
Plot51(Tchan51, "TOP50");
Plot52(Bchan52, "BOT50");
Plot53(Tchan53, "TOP200");
Plot54(Bchan54, "BOT200");
2018-11-25
206
글번호 123818
답변완료
지표
아래지표에서 종가선을 하나 추가해서 추세선 빨강 파랑하고 체우기를 하고 싶은데 가능한지요..그리고 추세선이 만나는 지점에 빨강 파랑 점을찍고 싶습니다..
input : P(3);
var : cnt(0),i1(0),i2(0),TL1(0),TL2(0);
Array : SHV[50](0),SHD[50](0),SHT[50](0);
Array : SLV[50](0),SLD[50](0),SLT[50](0);
if SwingHigh(1,h,P,P,P*2+1) != -1 Then{
SHV[0] = H[P];
SHD[0] = sdate[P];
SHT[0] = stime[P];
for cnt = 1 to 49{
SHV[cnt] = SHV[cnt-1][1];
SHD[cnt] = SHD[cnt-1][1];
SHT[cnt] = SHT[cnt-1][1];
}
i1 = 1;
for cnt = 1 to 49{
if SHV[cnt] > SHV[0] Then{
i1 = cnt;
cnt = 1000;
}
}
if i1 > 0 Then{
TL_Delete(TL1);
TL1 = TL_New(SHD[i1],SHT[i1],SHV[i1],SHD[0],SHT[0],SHV[0]);
TL_SetExtRight(TL1,true);
TL_SetColor(TL1,RED);
}
}
if SwingLow(1,L,P,P,P*2+1) != -1 Then{
SLV[0] = L[P];
SLD[0] = sdate[P];
SLT[0] = stime[P];
for cnt = 1 to 49{
SLV[cnt] = SLV[cnt-1][1];
SLD[cnt] = SLD[cnt-1][1];
SLT[cnt] = SLT[cnt-1][1];
}
i2 = 1;
for cnt = 1 to 49{
if SLV[cnt] < SLV[0] Then{
i2 = cnt;
cnt = 1000;
}
}
if i2 > 0 Then{
TL_Delete(TL2);
TL2 = TL_New(SLD[i2],SLT[i2],SLV[i2],SLD[0],SLT[0],SLV[0]);
TL_SetExtRight(TL2,true);
TL_SetColor(TL2,blue);
}
}
2018-11-22
207
글번호 123814