커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8125
글번호 230811
답변완료
수식부탁드립니다.
09:00~10:00 매매중지
10:00 당일저점대비 2% 상승시 매수
당일저점손절
수식부탁드립니다.
2017-06-22
181
글번호 110638
답변완료
수식 부탁드립니다.
오전 09:00~10:00 매매중단
10:00시부터 당일 시가돌파시 1차매수
당일 고점돌파시 2차매수
손절 당일시가돌파시 손절
수식부탁드립니다.
2017-06-22
167
글번호 110637
답변완료
문의드립니다~
if MarketPosition == 1
and tic5<=tic20
and h>=tic20
Then
exitlong("H롱청산");
if MarketPosition == -1
and tic5>=tic20
and L<=tic20
Then
exitshort("H숏청산");
식을 간략하게 적어봤습니다~
청산식을 적어서 적용해 보면 청산글자가 실시간으로는 떴다가 봉이 완성되면서
청산글자가 사라지고 청산이 안되는 경우가 있거든요~
위식이 봉 완성시점에 청산이 되는 식인데요.
완성시점이 아니라 실시간 조건만족했을때 바로 청산이 들어가게 하고 싶은데
도움 부탁드립니다~
감사합니다~ 좋은하루 되세요~^^
2017-06-22
172
글번호 110636
답변완료
부탁드립니다.
아래 수식에 자표식 부탁드립니다.
< 아래수식>
Input : 전환가격(0),종가사용여부(1),파동선두께(1),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부 == 1,C,H);
LL = IFF(종가사용여부 == 1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
고[1,2] = 0;
고[1,3] = sDate;
고[1,4] = sTime;
저[1,1] = LL;
저[1,2] = 0;
저[1,3] = sDate;
저[1,4] = sTime;
}
If Index > 0 Then // Index가 0일때는 이전 봉이 없으므로 Index가 1일때부터 1씩 증가
{
hiBar = hiBar + 1; // 최고점을 찍은 고[저]가의 위치를 저장 해놓기 위해 봉번호를 카운트한다.
loBar = loBar + 1;
}
If HH[hiBar] < HH Then hiBar = 0; // 현재 봉이 최고가이면 봉번호를 0으로 초기화
If LL[loBar] > LL Then loBar = 0;
Condition1 = 저[1,1] + 전환가격 < HH and hiBar == 0;
// 전저점에서 전환가격만큼 더한 값보다 고가가 크다면 추세가 변한 것으로 보고 신규 고점으로 인식
Condition2 = 고[1,1] - 전환가격 > LL and loBar == 0;
// 전고점에서 전환가격만큼 뺀 값보다 저가가 작다면 추세가 변한 것으로 보고 신규 저점으로 인식
처리구분 = "";
If Condition1 and Condition2 Then // 고점과 저점 조건 동시 만족
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
// 다음 봉의 고가가 기준 고가로 인식되려면 hiBar 값이 0이 되어야 한다.
// 봉이 바뀔 때마다 hiBar의 값을 1씩 증가시키므로 다음 봉의 hiBar 값은 0이 된다.
loBar = -1;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,Red);
}
Else If 고[1,1] < HH[hiBar] Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
If 최종꼭지점 == "고점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,Blue);
}
Else If 저[1,1] > LL[loBar] Then
{
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
#=====================================#
#======================================#
# 여기 아래에 지표식 부탁드립니다.
2017-06-21
219
글번호 110635
보니타y 님에 의해서 삭제되었습니다.
2017-06-21
6
글번호 110634
답변완료
부탁합니다
input : 시작시간(101500),종료시간(172500);
input : Period3(3),Period6(6),Period9(5),Period10(10),Period11(20),Period12(40),Period13(80),Period14(120),Period15(160),Period16(300),Period17(600),Period18(10),익절틱수(20),손절틱수(10);
Input : Period(12),sigPeriod(9);
Input : Period50(50), maPeriod51(51);
input : Period33(12),sigPeriod34(9),Period55(50), maPeriod56(51);
var : mav3(0),mav6(0),mav9(0),mav10(0),mav11(0),mav12(0),mav13(0),mav14(0),mav15(0),mav16(0),mav17(0),mav18(0),SROC(0),SROCsig(0),SROC2(0),SROCsig2(0),Bxcond(false),Sxcond(false);
var : Tcond(false);
mav11 = ma(c, Period11);
mav17 = ma(c, Period17);
mav18 = ma(c, Period18);
value1 = TRIX(Period);
value2 = ema(value1, sigPeriod);
value50 = SONAR(Period50);
value51 = ema(value50, maPeriod51);
value3 = TRIX(Period33);
value4 = ema(value3, sigPeriod34);
value52 = SONAR(Period55);
value53 = ema(value52, maPeriod56);
if Bdate != Bdate[1] then
{
Tcond = True;
BXcond = false;
SXcond = false;
}
if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
if TotalTrades > TotalTrades[1] then{
BXcond = false;
SXcond = false;
if (IsExitName("bl",1) == true or IsExitName("bp",1) == true or IsExitName("bx",1) == true) Then
BXcond = true;
if (IsExitName("sl",1) == true or IsExitName("sp",1) == true or IsExitName("sx",1) == true) Then
SXcond = true;
}
if Tcond == true then{
if MarketPosition <= 0 and
Bxcond == false and
(value50 > value51 and mav17[1] < mav17) Then
buy("b",OnClose,def,1);
if MarketPosition == 1 Then{
if mav17[1] < mav17 and mav18[1] < mav18 and CurrentContracts < 2 Then
buy("bb1",OnClose,def,1);
if mav17[1] < mav17 and mav18[3] >= mav18[2] and mav18[2] <= mav18[1] and mav18[1] < mav18 and CurrentContracts < 3 Then
buy("bb2",OnClose,def,1);
if (CrossDown(value1,value2)) or (CrossDown(value50, value51)) or(CrossDown(value3,value4)) or (CrossDown(value52, value53)) Then
ExitLong("bx");
ExitLong("bp",atlimit,AvgEntryPrice+PriceScale*익절틱수);
ExitLong("bl",AtStop,AvgEntryPrice-PriceScale*손절틱수);
}
if MarketPosition >= 0 and
Sxcond == false and
(value50 < value51 and mav17[1] > mav17) Then
sell("s",OnClose,def,1);
if MarketPosition == -1 then{
if mav17[1] > mav17 and mav18[1] > mav18 and CurrentContracts < 2 Then
sell("ss1",OnClose,def,1);
if mav17[1] > mav17 and mav18[3] <= mav18[2] and mav18[2] >= mav18[1] and mav18[1] > mav18 and CurrentContracts < 3 Then
sell("ss2",OnClose,def,1);
if (crossup(value1,value2)) or (CrossUP(value50, value51)) or (crossup(value3,value4)) or (crossup(value52,value53)) Then
ExitShort("sx");
ExitShort("sp",atlimit,AvgEntryPrice-PriceScale*익절틱수);
ExitShort("sl",AtStop,AvgEntryPrice+PriceScale*손절틱수);
}
}
위 수식을 선물(항생)에 적용하면 17시 25분 이후에도 수식이 적용하여 동작합니다
17시 25분(일괄청산) 후 매매중지하고자 합니다
수식을 수정하여 주시기 바랍니다 감사합니다
2017-06-21
221
글번호 110633
답변완료
부탁드립니다
전일의 고점과 당일 고점을 연결하는 추세선(오른쪽연장)
전일의 저점과 당일 저점을 연결하는 추세선(오른쪽연장)
두께는 조절가능하도록 부탁드립니다
2017-06-21
224
글번호 110632
답변완료
수식 부탁드립니다
현재 봉의 50봉이내의
봉의 고점이 전 봉의 고점보다 낮고
저점이 다음봉의 저점보다 낮은 봉을 찾아 저가 를 저가1에 저장 후 선 플롯
봉의 고점이 전 봉의 고점보다 높고,
저점이 다음봉의 저점보다 높은 봉을 찾아 고가를 고가1에 저장후 선 플롯
2017-06-21
224
글번호 110631
답변완료
다시 질문입니다.
답변감사합니다.
if var4 < var4[1] and var5 < var5[1] Then{
if crossup(var1,var2) Then
sell("s1",AtMarket);
if crossup(var1,var3) Then
sell("s2",AtMarket);
if crossdown(var1,var2) Then
sell("s3",AtMarket);
if crossdown(var1,var3) Then
sell("s4",AtMarket);
}
이경우는 1,2,3,4신호가 발생순서는 관계없이 진입이 되는건가요?
#진입별 13틱에서 청산
SetStopProfittarget(PriceScale*13,PointStop);
이경우는 식의 제일 아래에 한번만 써놓으면 진입신호각각에 적용되는건가요?
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : Re : Re : 부탁합니다.
>
안녕하세요
예스스탁입니다.
1
수식에 오류가 있었습니다.
MarketPosition == -1이 되어야 합니다.
if MarketPosition == -1 and MaxEntries == 1 and crossup(var1,var3) Then
sell("s2",AtMarket);
MaxEntries는 진입최대누적횟수입니다.
첫진입후 하고 두번째진입을 의미합니다.
즉 두번째로만 진입이 가능합니다.
2
아래와 같이 작성하신 후에
피라미딩을 다른진입신호만 허용으로 설정하시면 됩니다.
각 진입명로 한번씩만 진입합니다.
즐거운 하루되세요
2017-06-21
209
글번호 110630