커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4747
글번호 230811
타이밍승부사 님에 의해서 삭제되었습니다.
2015-10-11
22
글번호 91106
답변완료
수식을 추가해서 수정좀 부탁드립니다.
아래 macd오실레이터 기본수식에서
상승 또는 하락신호 출현시 2계약 진입후 50틱 손실발생시 무조건 청산되고,
상승 또는 하락신호 출현시 2계약 진입후 최대수익대비 60틱하락시 무조건 청산되는 수식을
추가해서 수정좀 부탁드립니다.
Input : shortPeriod(12), longPeriod(26), Period(9);
value1 = MACD(shortPeriod, longPeriod);
value2 = ema(value1, Period);
# 매수/매도청산
If CrossUP(value1, value2) Then
{
Buy("매수");
}
# 매도/매수청산
If CrossDown(value1, value2) Then
{
Sell("매도청산");
}
2015-10-11
114
글번호 91105
답변완료
수식요청드립니다.
아래 당일청산 기존수식에 추가하여 사용하는 피라미딩 수식을
당일손실제한(외부변수) 적용 강제청산 수식으로 변경 요청 드림니다.
Input : i증감(0.5);
Var : 재진입(0), 매수가격(0), 매도가격(0);
if MarketPosition == 1 and 재진입 == 0 Then {매수가격 = C; 재진입 = 1;}
if MarketPosition == -1 and 재진입 == 0 Then {매도가격 = C; 재진입 = 1;}
if MarketPosition == 0 Then 재진입 = 0;
if MarketPosition == -1 then {
if C < 매도가격 - i증감 then { Sell("추가매도", AtMarket); 매도가격 = c;}
}
if MarketPosition == 1 then {
if C > 매수가격 + i증감 then { Buy("추가매수", AtMarket); 매수가격 = c;}
}
감사합니다.
2015-10-11
116
글번호 91104
답변완료
문의합니다
수고하십니다~~
간편시스템 부탁합니다
이평크로스 신호시 진입시스템
예을들어 틱챠트에서 5이평이 60이평크로스 신호발생시
1. 매수진입 : 신호발생틱봉 다음봉이후 신호발생봉의 저점에서 진입
2. 매도진입 : 신호발생틱봉 다음봉이후 신호발생봉의 고점에서 진입
진입은 한번만 실행하도록 합니다.
이평값은 임의변경 가능토록 부탁합니다
감사합니다 ^*^
2015-10-10
118
글번호 91103
답변완료
시스템식 수정 부탁드립니다.
아래 시스템식에서 다음과 같이 진입횟수와 손절라인을 추가시킬려고 합니다.
1. 진입횟수 추가
input : 전략식진입횟수(1); ## 진입횟수 추가시켜 시스템식 부탁드립니다.
2. 손절라인에서 매수수량 전체 매도하는 시스템식 추가
1) 외부변수설정을 다음과 같이 하고
input : 최종손절위치(4); ## 외부변수 설정
2) value = abs(var1-V0.5); 일때
var1-value*(최종손절위치+1) 에서 매수한 총물량을 손절하고 차트에 "최종손절"로
표시해 주시면 감사하겠습니다.
----------------------------------------------------------------------------------------
input : 전략식시작일자(20151001), 전략식시작시간(090000), 전략총매수금액(100); # 금액은 만원단위
input : 매수위치1차(1), 매수위치2차(2), 매수위치3차(3);
input : 매도위치1차(1.5), 매도위치2차(2), 매도위치3차(2.5);
input : 매수비중1차(0), 매수비중2차(50), 매수비중3차(50);
input : 매도비중1차(20), 매도비중2차(30), 매도비중3차(50);
input : Period(384);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
Array : HH[400](0),LL[499](0);
TF = TimeToMinutes(stime)%15;
if date != date[1] or (date == date and TF < TF[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 399{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[Period] > 0 Then{
var1 = HH[0];
var2 = LL[0];
var11 = HH[1];
var12 = LL[1];
for cnt = 0 to Period-1{
if HH[cnt] > var1 Then
var1 = HH[cnt];
if HH[cnt+1] > var11 Then
var11 = HH[cnt+1];
if LL[cnt] < var2 Then
var2 = LL[cnt];
if LL[cnt+1] < var21 Then
var21 = LL[cnt+1];
}
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 then{
if MarketPosition == 0 and stime >= 전략식시작시간 and
((stime < 120000 and O > C[1]*0.985) or (stime >= 120000 and C > V2)) Then{
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
if MarketPosition == 1 then{
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and L >= var1-value*(매수위치2차+1) and CurrentContracts == MaxContracts Then
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
if MaxEntries == 2 and L >= var1-value*(매수위치3차+1) and CurrentContracts == MaxContracts Then
buy("3차매수",atlimit,var1-value*(매수위치3차+1),Floor((전략총매수금액*10000*(매수비중3차/100))/C));
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
if LatestExitName(0) == "3차매도" Then
Condition3 = true;
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차,"",Floor(MaxContracts*(매도비중2차/100)),1);
if Condition3 == false then
exitlong("3차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치3차);
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
}
}
2015-10-10
117
글번호 91102
답변완료
함수수정요청(합성11-1호 변형)
안녕하세요?
매번 감사드립니다.
아래의 함수를 수정 요청드립니다.
각 번호로 4개의 함수입니다.
1. 아래의 시스템에서 매도청산이 손절일 때, 손절 이후의 5번째 봉의 종가가 손절값보다 낮으면 신규매도
매수청산이 손절일 때, 손절 이후 5번째 봉의 종가가 손절값보다 높으면 신규매수
2. 1번 요청식에서 청산이 손절뿐만이 아니라 익절도 포함입니다.
즉, 아래의 시스템에서 매도청산 이후 5번째 봉의 종가가 청산값보다 낮으면 신규매도
매수청산 이후 5번째 봉의 종가가 청산값보다 높으면 신규매수
3. 1번식에서 추가 신규진입 후 5번째 이후 봉 종가에 강제청산입니다.
4. 2번식에서 추가 신규진입 후 5번째 이후 봉 종가에 강제청산입니다.
var : entry1(0);
var : ho1(0),OL1(0),HL1(0);
var : maho1(0),maOL1(0),maHL1(0);
var : cnt1(0),sumho1(0),sumOL1(0),sumHL1(0);
var : EntryCnt1(0);
var : V1(0),V2(0),V3(0),V4(0),V5(0);
var : V6(0),V7(0),V8(0),V9(0),V10(0);
if bdate != bdate[1] Then
entry1 = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry1 = entry1+1;
ho1 = Dayhigh-Dayopen;
OL1 = DayOpen-DayLow;
HL1 = DayHigh-DayLow;
sumho1 = 0;
sumOL1 = 0;
sumHL1 = 0;
for cnt1 = 1 to 10{
sumho1 = sumho1 + (dayhigh(cnt1)-dayopen(cnt1));
sumOL1 = sumOL1 + (DayOpen(cnt1)-DayLow(cnt1));
sumHL1 = sumHL1 + (DayHigh(cnt1)-DayLow(cnt1));
}
maho1 = sumho1/10;
maOL1 = sumOL1/10;
maHL1 = sumHL1/10;
V1 =
V2 =
V3 =
V4 =
V5 =
V6 =
V7 =
V8 =
V9 =
V10 =
if MarketPosition == 0 and entry1 == 0 Then{
if V7 > V8 Then
sell("s1",AtStop,V7-0.02);
if V7 < V8 Then
sell("s2",Atlimit,V8-0.02);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,V9-0.03);
ExitShort("sl1",AtStop,V6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,V9-0.03);
ExitShort("sl2",AtStop,V6);
}
var : TF(0);
var : Xtime(0), Etime(false),cnt(0),mav1(0),mav2(0);
var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0);
Array : HH[50](0),LL[50](0),CC[50](0);
mav1 = ma(c,5);
mav2 = ma(C,20);
TF = TimeToMinutes(stime)%30;
if Bdate != Bdate[1] Then{
Etime = true;
if stime >= 090000 Then
Xtime = 050000;
Else
Xtime = 060000;
}
if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if HH[25+2] > 0 Then{
HV = HH[0];
LV = LL[0];
HV1 = HH[1];
LV1 = LL[1];
HV2 = HH[2];
LV2 = LL[2];
for cnt = 0 to 25{
if HH[cnt] > HV Then
HV = HH[cnt];
if LL[cnt] < LV Then
LV = LL[cnt];
if HH[cnt+1] > HV Then
HV = HH[cnt+1];
if LL[cnt+1] < LV Then
LV = LL[cnt+1];
if HH[cnt+2] > HV Then
HV = HH[cnt+2];
if LL[cnt+2] < LV Then
LV = LL[cnt+2];
}
var1 = (HV+LV)/2;
var2 = (HV1+LV1)/2;
var3 = (HV2+LV2)/2;
if Etime == true then{
if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then
buy("b",AtMarket);
if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then
ExitLong("bx",AtMarket);
}
}
if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{
Etime = false;
ExitLong();
}
2015-10-10
120
글번호 91101
답변완료
표시가 이상합니다.
수식에서 뭐가 문제인지 모르겠어요...
1. 외부변수로 배열크기 조정이 가능한가요>
2. A_mid의 plot3 값이 이상한데요...각 봉의 중심값을 나타내고 싶습니다.
Input : Period1(20), Period2(60), Period3(120);
Var : count(0), mid(0);
Arrays : A_high[20](0), A_mid[20](0), A_low[20](0),
B_high[60](0), B_mid[60](0), B_low[60](0),
C_high[120](0), C_mid[120](0), C_low[120](0);
If DayIndex == 0 Then
{
A_high[0] = H;
For count = 1 to Period1-1
{
A_high[count] = A_high[count-1];
}
A_low[0] = L;
For count = 1 to Period1-1
{
A_low[count] = A_low[count-1];
}
}
mid = A_low[0] + (A_high[0]-A_low[0])/2;
A_mid[0] = mid;
For count = 1 to Period1-1
{
A_mid[count] = A_mid[count-1];
}
If H <> A_high[0] Then
A_high[0] = H;
Plot1(A_high[0]);
If L <> A_low[0] Then
A_low[0] = L;
Plot2(A_low[0]);
A_mid[0] = mid;
Plot3(A_mid[0]);
2015-10-10
123
글번호 91100
답변완료
수익차트
다음의 지표식을 부탁합니다.
현재의 전략실행차트에 적용 가능한
plot1(var1,"기간별누적수익");
plot2(var2,"기간별누적최고수익");
plot3(var3,"기간별누적최고수익 * 60% "); 의 지표식을 부탁드립니다.
# 전략실행차트에서 사용자가 진입 일 이후의 기간별누적수익을 선택적으로 활용 할 수 있도록 위 지표식의 외부변수에는 진입일자를 사용 해 주시고 지표의 수익단위는 pt 로 부탁 드리겠습니다.
2015-10-10
138
글번호 91099
답변완료
수식 부탁합니다
1. 60/120/240 이평선 상승
60/120/240 이평선 모두 전봉 대비 상승을 A라고 정하고,A의 경우 10봉 이내 한번 이하
발생한 후 나타나는 첫 번째 스토캐스틱 골든크로스 지표식
2. 60/120/240 이평선 하락
60/120/240 이평선 모두 전봉 대비 하락을 B라고 정하고,B의 경우 10봉 이내 한번 이하
발생한 후 나타나는 첫 번째 스토캐스틱 데드크로스 지표식
2015-10-09
119
글번호 91098