커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8101
글번호 230811
답변완료
수정요청 드립니다.
안녕하세요? 추석에는 잘 쉬셨는지요?
외부변수중 당일폭틱수가 먹히질 않습니다. 수정 부탁드립니다.
감사합니다.
input : 당일폭틱수(20);
input : 양봉틱수1(2),양봉틱수2(3),양봉틱수3(4),LL(5);
input : 음봉틱수1(2),음봉틱수2(3),음봉틱수3(4),HH(5);
input : 익절틱수(10),손절틱수(10);
#당일고저차
var1 = DayHigh-daylow;
if var1 >= 당일폭틱수 and #당일고저폭 지정한 "당일폭"이상
C > O and #양봉
L <= DayLow(0)+PriceScale*LL and #양봉의 저가가 최저가대비+LL틱수 이하
(abs(C-O) == 양봉틱수1*PriceScale or #몸통길이가 양봉틱수1,2,3으로 지정한 틱수이면
abs(C-O) == 양봉틱수2*PriceScale or
abs(C-O) == 양봉틱수3*PriceScale) Then
buy("매수");
if var1 >= 당일폭틱수 and #당일고저폭 지정한 "당일폭"이상
C < O and #음봉
H >= DayHigh(0)-PriceScale*HH and #음봉의 고가가 최고가대비-HH틱수 이하
(abs(C-O) == 음봉틱수1*PriceScale or #몸통길이가 음봉틱수1,2,3으로 지정한 틱수이면
abs(C-O) == 음봉틱수2*PriceScale or
abs(C-O) == 음봉틱수3*PriceScale) Then
sell("매도");
#profit틱수 이상 수익시 청산
SetStopProfittarget(익절틱수*PriceScale,PointStop);
#loss틱수 이상 수익시 청산
SetStopLoss(손절틱수*PriceScale,PointStop);
2018-09-27
225
글번호 122245
답변완료
기준선 매매 수식 수정부탁드립니다.
아래의 수식을 적용해 보았습니다.
1일 1회 또는 2회만 매매되고 이후에는 시그널이 발생되지 않네요.
일목균형표 기준선의 변수값을 120으로 변경한 선을
상승돌파하면 매수진입
하향이탈하면 매수청산하고 매도진입
다시 상승돌파하면 매도청산하고 매수진입
이렇게 반복하다가 당일 누적수익 50틱을 달성하면 매매종료
수익달성을 못하면 종가청산
이렇게 수식을 짜고 싶은데요. 도와주시면 감사드리겠습니다. ^^
- 아 래 -
Input : 당일누적수익틱수(20),당일누적손실틱수(20),P(120);
input : starttime(090000),endtime(153000);
VARS: Tcond(false),N1(0),dayPl(0),당일누적수익(0),당일누적손실(0),Xcond(false);
if (sdate != sdate[1] and stime >= endtime) or
(sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then
{
Tcond = false;
if MarketPosition == 1 Then
ExitLong("bx");
if MarketPosition == -1 Then
ExitShort("sx");
}
if (sdate != sdate[1] and stime >= starttime) or
(sdate == sdate[1] and stime >= starttime and stime[1] < starttime) then
{
Xcond = false;
N1 = NetProfit;
Tcond = true;
}
당일누적수익 = PriceScale*당일누적수익틱수;
당일누적손실 = PriceScale*당일누적손실틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] and
(IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or
IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
var1 = (highest(H,P)+lowest(L,P))/2;
if Tcond == true and Xcond == false then
{
if crossup(c,var1) Then
buy();
if CrossDown(c,var1) Then
sell();
}
if MarketPosition == 1 then{
ExitLong("dbp",atlimit,EntryPrice+((당일누적수익-daypl)/CurrentContracts));
ExitLong("dbl",AtStop,EntryPrice-((당일누적손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsp",atlimit,EntryPrice-((당일누적수익-daypl)/CurrentContracts));
ExitShort("dsl",AtStop,EntryPrice+((당일누적손실+daypl)/CurrentContracts));
}
2018-09-26
257
글번호 122244
답변완료
안녕하세요
반갑습니다
RSI 기준선 60상향돌파 매수
RSI 기준선 40하향돌파 매도
신호받기식 부탁합니다
감사합니다
2018-09-26
218
글번호 122243
답변완료
부탁드립니다.
변환부탁드립니다.
미리 감사 드립니다.
n=sum(1);
p=sar(af,maxaf);
d=c>p;
조건=(d(1)&&!d) or(!d(1)&&d);
b=p-valuewhen(1,조건,p);
a=n-valuewhen(1,조건,n);
if(a!=0,기울기=atan(b/a),0)*배율;
2018-09-26
247
글번호 122242
답변완료
재진입수식요청
* 많은 도움에 항상 고맙 습니다.
*요청 사항: 손절 청산시 바로 반대로 매매(매도, 매수) 할수 있나요?
그림 처럼 손절매 발생시 바로 다른매매 할수 있도록 요청 드립니다.
즉 매수후 손절청산 되었으면 바로 매도 진입
매도후 손절청산 되었으면 바로 매수 진입
var1 = ma(c,5) ;
var2 = ma(c,10) ;
if CrossUp(var1,var2) Then Buy("매수");
if CrossDown(var1,var2) Then Sell("매도");
############# 청산 로직
SetStopProfittarget(PriceScale*15,PointStop);
SetStopLoss(PriceScale*10,PointStop);
* 고맙습니다.
2018-09-27
249
글번호 122241
답변완료
크로스업 조건
안녕하세요.
MACD 골든크로스, 데드크로스로 시스템 작성 시,
조건을
MACD라인이
-0.1~-0.08 안에서 골든크로스시 매수
0.08~0.1 안에서 데드크로스시 매도
로 시스템 적용할 수 있나요?
아래와 같이 조건을 넣었더니 안되네요..
구간이 작아도 수식만 이라도 부탁드립니다. ^^
감사합니다~^^
Input : shortPeriod(12), longPeriod(26), Period(9);
value1 = MACD(shortPeriod, longPeriod);
value2 = ema(value1, Period);
# 매수/매도청산
If value1>-0.1 and value1<-0.08 and CrossUP(value1, value2) Then
{
Buy();
}
# 매도/매수청산
If value1>0.08 and value1<0.1 and CrossDown(value1, value2) Then
{
Sell();
}
2018-09-25
230
글번호 122240
답변완료
분할매수한 종목의 매수청산시 ..일정 수익률에 도달시 일괄매도하는 수식을 알려줏세요...
국내 ETF kodex200종목을
RSI(14)< 20 일때 신호시마다 매수를 하여서 최대 100회
매수 전체 평균 수익률이 5%일때 전량 매도하는 매수 청산 수식좀 알려주세요....
설정에서 목표수익을 기입하는 란이 있는데 그것을 해보니까...
매수된것에 일괄매도가 아니라 각각 매수한 금액에서 +5%일때 각각 매도가 되더라고요..
일단 저는 매수를 여러번했을때 그것에 대한 평균 매수가에 +5일때 일괄 매도가 될수 있도록
되는 수식을 알려주시면 감사하겠습니다.
참고로 매수 평균 금액에서 수익이 5% 33% 분할매도 7% 33% 분할매도 10%일때 나머지 분할매도가 구현이 되나요>?????
구현된다면 그것도 알려주시면 감사하겠습니다.
수고하세요~~
2018-09-25
332
글번호 122239
답변완료
수식문의 드립니다.
안녕하세요?
아래의 수식에서 최근 고점과 저점을 파랑색과 빨간색으로 라인표시를 해주고 있습니다.
여기에 추가로 고점과 저점사이에 2개의 추가선을 추가하고 싶습니다.
61.8%와 38.2%에 라인을 추가해주세요.
이때 라인은 고점과 저점라인보다 얇게 부탁드립니다.
그리고 라인 옆에 가격도 표시되게 부탁드립니다.
이해를 돕고자 이미지 첨부합니다.
잘 부탁드립니다~
Input:barCnt(5);
Var:j(0),turnPntBit(""),TL1(0),TL33(0),TL44(0),HD(0),HT(0),LD(0),LT(0),HH(0),LL(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 9 {
barArr[j] = barArr[j] + 1;
}
// 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다
// 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다
Condition1 = Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt);
Condition2 = Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt);
// 전환점구분 null값으로 초기화;
// if 고점조건, 저점조건 동시 만족시 then
// if 이전 고점,저점 범위를 모두 벗어났을 때
// 전환점구분 = 고저점;
// else if 이전 고점을 갱신했다면 전환점구분 = 고점;
// else if 이전 저점을 갱신했다면 전환점구분 = 저점;
// else if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점;
// else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점;
// else if 고점조건 만족하면 전환점구분 = 고점;
// else if 저점조건 만족하면 전환전구분 = 저점;
turnPntBit = "";
If Condition1 and Condition2 Then {
If Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt] Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H[barCnt] Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Hi" Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
// if 전환점구분에 값이 있을 때만 아래 실행, 없으면 통과
If turnPntBit <> "" Then
{
// if 전환점구분이 고저점이면 then
// 이전 파동은 연장시키고 아래에서 새로이 파동선을 추가토록 한다.
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
// if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then
// 배열값들을 이전값으로 Move;
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H[barCnt]) or
(turnPntBit == "Lo" and valArr[1] > L[barCnt]))) Then {
// 값 배열에는 고점 또는 저점을 대입;
// 봉개수 배열에는 입력변수의 봉개수 대입;
// 전환점 배열에 전환점구분값을 대입;
valArr[1] = IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
turnPntArr[1] = turnPntBit;
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],
sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
TL_SetSize(TL1,0);
TL_SetColor(TL1,GREEN);
var : TL11(0),TL12(0);
if turnPntArr[1][0] == "Hi" Then{
TL_Delete(TL11);
TL11 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetExtRight(TL11,true);
TL_SetColor(TL11,BLUE);
TL_SetSize(TL11,3);
}
if turnPntArr[1][0] == "Lo" Then{
TL_Delete(TL12);
TL12 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetExtRight(TL12,true);
TL_SetColor(TL12,RED);
TL_SetSize(TL12,3);
}
if bdate != BDate[1] Then{
HD = sdate;
HT = stime;
LD = sdate;
LT = stime;
HH = H;
LL = L;
}
if H > HH Then{
HH = H;
HD = sdate;
HT = stime;
}
TL_Delete(TL33);
if turnPntArr[1][0] == "Hi" Then{
TL33 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],HD,HT,dayhigh);
}
if turnPntArr[1][0] == "Lo" Then{
TL33 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],HD,HT,dayhigh);
}
TL_SetExtRight(TL33,true);
if L < LL Then{
LL = L;
LD = sdate;
LT = stime;
}
TL_Delete(TL44);
if turnPntArr[1][0] == "Hi" Then{
TL44 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],LD,LT,daylow);
}
if turnPntArr[1][0] == "Lo" Then{
TL44 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],LD,LT,daylow);
}
TL_SetExtRight(TL44,true);
2018-09-25
388
글번호 122238
답변완료
안녕하세요
안녕하세요(추석은 잘보내셨구요)
현재캔들이 변화되어지고 있은상태에서
(현재가위치)를 수평선으로 표시하여 과거캔들
과의 위치와 비교분석 할려고합니다.
가능하다면 지표식를 부탁합니다
감사합니다
2018-09-25
244
글번호 122237