커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8144
글번호 230811
답변완료
문의드립니다
문의 드립니다
아래 수식은 만들어주신 지표수식입니다
1 문의 지표식에서
// 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다
이분분에서 좌측5봉을 2개부터5개까지하고 우측5봉을 2개부터5개까지조율할수있어으면합니다
그리고 저점조건도 똑같이 부탁드립니다
2 종목검색 부탁합니다
아래 선이 blue 와 red 로 표현되고잇습니다
검색식에서 blue 선값에 5프로 근접하면 검색되도록 부탁드립니다
감사합니다
Input:barCnt(30);
Var:j(0),turnPntBit(""),TL1(0),TL2(0),TL3(0),T(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]);
if turnPntArr[1][0] == "Hi" and valArr[1] < valArr[3] Then{
var1 = valArr[2]-abs(valArr[1]-valArr[3])+PriceScale;
var2 = blue;
}
// if turnPntArr[1][0] == "Lo" and valArr[1] > valArr[3] Then{
// var1 = valArr[2]+abs(valArr[1]-valArr[3])-PriceScale;
// var2 = red;
// }
TL2 = TL_New(sDate[barArr[2]],sTime[barArr[2]],var1,sDate[barArr[1]],sTime[barArr[1]],var1);
TL_SetColor(tl2,var2);
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,GREEN);
2019-05-01
274
글번호 128290
답변완료
지표 변경부탁드립니다
a=crossup(sar(af,maxAf),c) or crossdown(sar(af,maxAf),c);
valuewhen(1,a,avg(c,5))
키움수식입니다 변경부탁들비니다
af 0.02
MAXAF 0.2
2019-04-30
294
글번호 128289
답변완료
수식문안드립니다.
고생이 많으십니다.
수식부탁드립니다.
#수식1
A=avg(c,기간3);
c/A*100
# 기간1:10// 기간2:20// 기간3:60
# 기준선:100
감사합니다.
2019-05-02
256
글번호 128288
바닥차기 님에 의해서 삭제되었습니다.
2019-04-30
1
글번호 128287
답변완료
수식문의
안녕하세요
1. 하기 수식에서 진입을 그냥 한개만 하게끔 부탁드립니다.
2. 최초 매수 진입시 볼린져 밴드 하단에서 진입 하게 될 경우, 완성봉이 볼린져 밴드 상단으로 진입했다가 다시 하단으로 내려오면 청산하게 부탁드립니다.
매도는 반대로 부탁드립니다.
3. 매수진입시 볼린져 밴드 상단밖에서 진입해야 할 경우는 진입하지 못하게 부탁드립니다.
매도진입시 볼린져 밴드 하단밖에서 진입해야 할 경우는 진입하지 못하게 부탁드립니다.
4. 최초 매수 진입시 볼린져 밴드 이평과 상단 사이에서 진입하게 될 경우, 볼린져 밴드 하단에 완성봉이 생기면 청산 부탁 드립니다.
매도는 반대로 부탁드립니다.
- 옵션으로 청산과 동시에 반대매매 진입하게 참고식도 부탁드립니다.
번거롭게해서 죄송합니다.
감사합니다.
Input : short(12), long(26), signal(9);
Var : MACDv1(0,data1), MACDs1(0,data1),macdo1(0,data1);
Var : MACDv2(0,data2), MACDs2(0,data2),macdo2(0,data2);
var : Bcond(false,data1),Scond(false,data1);
MACDv1 = data1(MACD(short, long));
MACDs1 = data1(ema(MACDv1,signal));
macdo1 = data1(MACDv1-MACDs1);
MACDv2 = data2(MACD(short, long));
MACDs2 = data2(ema(MACDv2,signal));
macdo2 = data2(MACDv2-MACDs2);
Bcond = macdo1 > 0 and macdo2 > 0;
Scond = macdo1 < 0 and macdo2 < 0;
if Bcond == true and Bcond[1] == false then
buy("b",OnClose,def,2);
if Scond == true and Scond[1] == false Then
sell("s",OnClose,def,2);
if MarketPosition == 1 Then
ExitLong("bx1",atlimit,EntryPrice+PriceScale*20,"",1,1);
if MarketPosition == -1 Then
ExitShort("sx1",atlimit,EntryPrice-PriceScale*20,"",1,1);
감사합니다.
2019-05-02
277
글번호 128286
답변완료
부탁드립니다
수고하십니다
아래수식이 맞나요?
var : cnt(0);
Array : O2[20](0,data2),H2[20](0,data2),L2[20](0,data2);
Array : O3[20](0,data3),H3[20](0,data3),L3[20](0,data3);
Array : O4[20](0,data4),H4[20](0,data4),L4[20](0,data4);
Array : O5[20](0,data5),H5[20](0,data5),L5[20](0,data5);
Array : O6[20](0,data6),H6[20](0,data6),L6[20](0,data6);
Array : O7[20](0,data7),H7[20](0,data7),L7[20](0,data7);
Array : O8[20](0,data8),H8[20](0,data8),L8[20](0,data8);
Array : O9[11](0,data9),H9[20](0,data9),L9[20](0,data9);
if data2(bdate != bdate[1]) Then {
O2[0] = data2(O);
H2[0] = data2(H);
L2[0] = data2(L);
for cnt = 1 to 19 {
O2[cnt] = O2[cnt-1][1];
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1]; }}
if H2[0] > 0 and data2(H) > H2[0] Then
H2[0] = data2(H);
if L2[0] > 0 and data2(L) < L2[0] Then
L2[0] = data2(L);
if data3(bdate != bdate[1]) Then {
O3[0] = data3(O);
H3[0] = data3(H);
L3[0] = data3(L);
for cnt = 1 to 19 {
O3[cnt] = O3[cnt-1][1];
H3[cnt] = H3[cnt-1][1];
L3[cnt] = L3[cnt-1][1];}}
if H3[0] > 0 and data3(H) > H3[0] Then
H3[0] = data3(H);
if L3[0] > 0 and data3(L) < L3[0] Then
L3[0] = data3(L);
if data4(bdate != bdate[1]) Then {
O4[0] = data4(O);
H4[0] = data4(H);
L4[0] = data4(L);
for cnt = 1 to 19 {
O2[cnt] = O2[cnt-1][1];
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1]; }}
if H4[0] > 0 and data4(H) > H4[0] Then
H4[0] = data4(H);
if L4[0] > 0 and data4(L) < L4[0] Then
L4[0] = data4(L);
if data5(bdate != bdate[1]) Then {
O5[0] = data5(O);
H5[0] = data5(H);
L5[0] = data5(L);
for cnt = 1 to 19 {
O5[cnt] = O5[cnt-1][1];
H5[cnt] = H5[cnt-1][1];
L5[cnt] = L5[cnt-1][1]; }}
if H5[0] > 0 and data5(H) > H5[0] Then
H5[0] = data5(H);
if L5[0] > 0 and data5(L) < L5[0] Then
L5[0] = data5(L);
if data6(bdate != bdate[1]) Then {
O6[0] = data6(O);
H6[0] = data6(H);
L6[0] = data6(L);
for cnt = 1 to 19 {
O6[cnt] = O6[cnt-1][1];
H6[cnt] = H6[cnt-1][1];
L6[cnt] = L6[cnt-1][1]; }}
if H6[0] > 0 and data6(H) > H6[0] Then
H6[0] = data6(H);
if L6[0] > 0 and data6(L) < L6[0] Then
L6[0] = data6(L);
if data7(bdate != bdate[1]) Then {
O7[0] = data7(O);
H7[0] = data7(H);
L7[0] = data7(L);
for cnt = 1 to 19 {
O7[cnt] = O7[cnt-1][1];
H7[cnt] = H7[cnt-1][1];
L7[cnt] = L7[cnt-1][1]; }}
if H7[0] > 0 and data7(H) > H7[0] Then
H7[0] = data7(H);
if L7[0] > 0 and data7(L) < L7[0] Then
L7[0] = data7(L);
if data8(bdate != bdate[1]) Then {
O8[0] = data8(O);
H8[0] = data8(H);
L8[0] = data8(L);
for cnt = 1 to 19 {
O8[cnt] = O8[cnt-1][1];
H8[cnt] = H8[cnt-1][1];
L8[cnt] = L8[cnt-1][1]; }}
if H8[0] > 0 and data8(H) > H8[0] Then
H8[0] = data8(H);
if L8[0] > 0 and data8(L) < L8[0] Then
L8[0] = data8(L);
if data9(bdate != bdate[1]) Then {
O9[0] = data9(O);
H9[0] = data9(H);
L9[0] = data9(L);
for cnt = 1 to 19 {
O9[cnt] = O9[cnt-1][1];
H9[cnt] = H9[cnt-1][1];
L9[cnt] = L9[cnt-1][1]; }}
if H9[0] > 0 and data9(H) > H9[0] Then
H9[0] = data9(H);
if L9[0] > 0 and data9(L) < L9[0] Then
L9[0] = data9(L);
plot1(O2[0],"data2시가");plot7(O4[0],"data4시가");plot13(O6[0],"data6시가");
plot2(H2[0],"data2고가");plot8(O4[0],"data4고가");plot14(O6[0],"data6고가");
plot3(L2[0],"data2저가");plot9(O4[0],"data4저가");plot15(O6[0],"data6시저가");
plot4(O3[0],"data3시가");plot10(O5[0],"data5시가");plot16(O7[0],"data7시가");
plot5(H3[0],"data3고가");plot11(O5[0],"data5고가");plot17(O7[0],"data7고가");
plot6(L3[0],"data3저가");plot12(O5[0],"data5저가");plot18(O7[0],"data7저가");
plot19(O8[0],"data8시가");plot20(O8[0],"data8고가");plot21(O8[0],"data8저가");
plot22(O9[0],"data9시가");plot23(O9[0],"data9고가");plot24(O9[0],"data9저가");
2019-04-30
264
글번호 128285
답변완료
질문 드립니다.
안녕하세요 운영자님.
처음 질문 드립니다.
거래량 이평선으로 진입 청산을 하고 싶습니다.
로직 부탁 드립니다.
거래량 20과 60을 변수로 최적화 할 수 있도록 부탁 드립니다.
거래량이평선 20일선이 60선 위에 있을 때 매수
거래량이평선 20일선이 60선 밑에 있을 때 매도
감사합니다.
2019-04-30
289
글번호 128277
답변완료
예스 글로발
안녕하세요?
한투 예스글로발에서 SGX A50 만기일 이면 1 아니면 0을 return 하는 함수 작성 부탁합니다
감사합니다
2019-04-30
255
글번호 128274
답변완료
수식 수정좀 부탁드립니다.
아래 수식은 일봉상 5, 10, 20, 60, 120선과 일목의 기준선 전환선을 긋는 수식인데
여기에 일봉상 ma120 일선 다음에 일봉상 wma120 일 선을 하나 더 긋고 싶습니다.
input : P1(5),P2(10),P3(20),P4(60),P5(120),Period1(9),Period2(26);
var : count(0);
var : sumV1(0),sumV2(0),sumV3(0),sumV4(0),sumV5(0);
var : mav1(0),mav2(0),mav3(0),mav4(0),mav5(0);
var : H1(0),L1(0),H2(0),L2(0),Standard(0),Turn(0);
sumV1 = 0;
sumV2 = 0;
sumV3 = 0;
sumV4 = 0;
sumV5 = 0;
H1 = DayHigh(0);
L1 = DayLow(0);
H2 = DayHigh(0);
L2 = DayLow(0);
for count = 0 to P5{
if count < P1 Then
sumV1 = sumV1+DayClose(count);
if count < P2 Then
sumV2 = sumV2+DayClose(count);
if count < P3 Then
sumV3 = sumV3+DayClose(count);
if count < P4 Then
sumV4 = sumV4+DayClose(count);
if count < P5 Then
sumV5 = sumV5+DayClose(count);
if count < Period1 Then
{
if DayHigh(count) > H1 Then
H1 = DayHigh(count);
if DayLow(count) < L1 Then
L1 = DayLow(count);
}
if count < Period2 Then
{
if DayHigh(count) > H2 Then
H2 = DayHigh(count);
if DayLow(count) < L2 Then
L2 = DayLow(count);
}
}
maV1 = sumV1 / P1;
maV2 = sumV2 / P2;
maV3 = sumV3 / P3;
maV4 = sumV4 / P4;
maV5 = sumV5 / P5;
turn = (H1+L1)/2;
Standard = (H2+L2)/2;
if DayClose(P1-1) > 0 Then
plot1(mav1,"일봉이평1");
if DayClose(P2-1) > 0 Then
plot2(mav2,"일봉이평2");
if DayClose(P3-1) > 0 Then
plot3(mav3,"일봉이평3");
if DayClose(P4-1) > 0 Then
plot4(mav4,"일봉이평4");
if DayClose(P5-1) > 0 Then
plot5(mav5,"일봉이평5");
if DayClose(Period1-1) > 0 Then
plot6(turn,"일봉전환선");
if DayClose(Period2-1) > 0 Then
plot7(Standard,"일봉기준선");
2019-04-30
279
글번호 128271