커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6138
글번호 230811
답변완료
이격? 식요청
안녕하세요
첮째 이격도56선 상승돌파 하였고
둘째 전일 일봉기준 종가선 상승돌파 이면 매수
이격도 56선 하락돌파 하였고
전일 일봉기준 종가선 하락돌파 하면 매도
그리고 당일 장마감 청산
내일은 이격도 상승되었고 일봉기준종가선
상승되어 시작이면 시초가매수
이격도 하락되었고 일봉기준 종가선
하락되어 시작이면 시초가매도
그리고 위전략대로진행합니다
감사합니다 ^^
2018-06-19
157
글번호 119875
답변완료
수식재문의
아랫식을 선물진입에 쓰고싶습니다.
시뮬레이션 돌려보니까 4000계약 이런식으로 들어가 있더라고요.. 계약수만 잘들어갈 수 있게만 부탁드립니딘
ㅍ// 작성자 : 수식지왕
Input: 원계정(100000000)
, S1HiPeriod(20)
, S1LoPeriod(10)
, S2HiPeriod(55)
, S2LoPeriod(20)
, AtrPeriod(20)
, S2비율(50)
, N배수(2)
;
Var: 명목계정(0), 계정배분완료(False), S1Hi(0), S1Lo(0), S2Hi(0), S2Lo(0),
j(0), SumTr(0), DayAtr(0), Unit(0), 진입구분(0), 진입횟수(0), N(0),
추가진입가격(0), 단기돌파무시(False),
sumV0(0), sumV1(0), maV0(0), maV1(0), DeadCnt(0),
휩소여부(False);
Array : 손절가격[5](0), 진입가격[5](0), 계정크기[5](0), 계정체크[5](0);
/*=============================================*/
/* 계정관리 */
/*=============================================*/
If 계정배분완료 == False Then //최초 한번만 실행
{
계정체크[0] = 원계정 * 0.9; //10% 손실나면
계정크기[0] = 원계정 * 0.8; //명목계정은 20% 감소 시켜서 운용
For j = 0 To 3
{
계정체크[j+1] = 계정크기[j] * 0.9;
계정크기[j+1] = 계정크기[j] * 0.8;
}
계정배분완료 = True;
}
If NetProfit() >= 0 Then
{
명목계정 = 원계정;
}
Else
{
For j = 0 To 4
{
If 원계정 + NetProfit() < 계정체크[j] Then //10% 손실나면
{
명목계정 = 계정크기[j]; //명목계정은 20% 감소시켜서 운용
}
}
}
/*=============================================*/
/* 변동성 계산 */
/*=============================================*/
// 분봉에서 일봉의 ATR계산, 전일의 ATR이 산출됨
SumTr = 0;
For j = 1 To AtrPeriod
{
SumTr = SumTr + Max(DayHigh(j)-DayLow(j),Abs(DayClose(j+1)-DayHigh(j)),Abs(DayClose(j+1)-DayLow(j)));
}
DayAtr = SumTr/AtrPeriod;
/*=============================================*/
/* 채널 계산 */
/*=============================================*/
// 분봉에서 일봉의 고,저점 계산, 전일의 고,저점임
S1Hi = 0; S1Lo = 0; S2Hi = 0; S2Lo = 0;
For j = 1 To S2HiPeriod
{
If j <= S1LoPeriod && (S1Lo == 0 || S1Lo > DayLow(j)) Then S1Lo = DayLow(j);
If j <= S2LoPeriod && (S2Lo == 0 || S2Lo > DayLow(j)) Then S2Lo = DayLow(j);
If j <= S1HiPeriod && S1Hi < DayHigh(j) Then S1Hi = DayHigh(j);
If S2Hi < DayHigh(j) Then S2Hi = DayHigh(j);
}
/*=============================================*/
/* 휩소 판단 */
/*=============================================*/
//이평선 데드카운트가 일정 수 이상일 때 휩소로 판단
sumV0 = 0; sumV1 = 0;
For j = 0 To S1HiPeriod - 1
{
sumV0 = sumV0 + DayClose(j);
sumV1 = sumV1 + DayClose(j+1);
}
maV0 = sumV0 / S1HiPeriod;
maV1 = sumV1 / S1HiPeriod;
DeadCnt = 0;
For j = 0 To S1HiPeriod - 1
{
if maV1 <= DayClose(j+1) && maV0 > DayClose(j) then
DeadCnt = DeadCnt + 1;
}
##############
# 진입식 #
##############
/*=============================================*/
/* 시스템 1(S1) : 20일 최고가 돌파시 매수 진입 */
/*=============================================*/
If 진입구분 == 0 &&
진입횟수 == 0 &&
CrossUp(C,S1Hi) &&
단기돌파무시 == False Then
{
진입구분 = 1;
N = DayAtr;
Unit = int((명목계정 * 0.01)/N); //거래단위 계산
추가진입가격 = S1Hi + (N * N배수 * 0.25);
진입횟수 = 1;
진입가격[1] = C;
If DeadCnt >= 4 Then //이평 데드크로스 횟수를 4회 이상일 경우 휩소로 봄
휩소여부 = True;
Else
휩소여부 = False;
If 휩소여부 == False Then
손절가격[1] = C - (N * N배수);
Else
손절가격[1] = C - (N * N배수 * 0.25);
Buy("S1매수1",OnClose,DEF,int(Unit/4));
}
/*=============================================*/
/* S1 기준으로 최초 진입 이후 추가 진입 */
/*=============================================*/
If 진입구분 == 1 Then
{
If 진입횟수 == 1 && //CurrentEntries()함수를 써도 되나 단계를 체크하기 위해 별도 변수 사용
추가진입가격 > 0 &&
CrossUp(C,추가진입가격) Then
{
추가진입가격 = 추가진입가격 + (N * N배수 * 0.25);
진입횟수 = 2;
진입가격[2] = C;
If 휩소여부 == False Then
{
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4);
손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3);
}
Else
{
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25);
}
Buy("S1매수2",OnClose,DEF,int(Unit/4));
}
If 진입횟수 == 2 &&
추가진입가격 > 0 &&
CrossUp(C,추가진입가격) Then
{
추가진입가격 = 추가진입가격 + (N * N배수 * 0.25);
진입횟수 = 3;
진입가격[3] = C;
If 휩소여부 == False Then
{
손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4);
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3);
손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2);
}
Else
{
손절가격[3] = 진입가격[3] - (N * N배수 * 0.25);
}
Buy("S1매수3",OnClose,DEF,int(Unit/4));
}
If 진입횟수 == 3 &&
추가진입가격 > 0 &&
CrossUp(C,추가진입가격) Then
{
추가진입가격 = 추가진입가격 + (N * N배수 * 0.25);
진입횟수 = 4;
진입가격[4] = C;
If 휩소여부 == False Then
{
손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4);
손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3);
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2);
손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1);
}
Else
{
손절가격[4] = 진입가격[4] - (N * N배수 * 0.25);
}
Buy("S1매수4",OnClose,DEF,int(Unit/4));
}
}
/*=============================================*/
/* 시스템 2(S2) : 55일 최고가 돌파시 매수 진입 */
/*=============================================*/
If 진입구분 == 0 &&
진입횟수 == 0 &&
CrossUp(C,S2Hi) Then
{
진입구분 = 2;
N = DayAtr;
Unit = (명목계정 * 0.01)/N; //거래단위 계산
Unit = int(Unit * S2비율 * 0.01); //S2거래비중 조정
추가진입가격 = S2Hi + (N * N배수 * 0.25);
진입횟수 = 1;
진입가격[1] = C;
단기돌파무시 = False; //단기돌파무시가 True로 설정되었다면 초기화
If DeadCnt >= 4 Then
휩소여부 = True;
Else
휩소여부 = False;
If 휩소여부 == False Then
손절가격[1] = C - (N * N배수);
Else
손절가격[1] = C - (N * N배수 * 0.25);
Buy("S2매수1",OnClose,DEF,int(Unit/4));
}
/*=============================================*/
/* S2 기준으로 최초 진입 이후 추가 진입 */
/*=============================================*/
If 진입구분 == 2 Then
{
If 진입횟수 == 1 &&
추가진입가격 > 0 &&
CrossUp(C,추가진입가격) Then
{
추가진입가격 = 추가진입가격 + (N * N배수 * 0.25);
진입횟수 = 2;
진입가격[2] = C;
If 휩소여부 == False Then
{
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 4);
손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 3);
}
Else
{
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25);
}
Buy("S2매수2",OnClose,DEF,int(Unit/4));
}
If 진입횟수 == 2 &&
추가진입가격 > 0 &&
CrossUp(C,추가진입가격) Then
{
추가진입가격 = 추가진입가격 + (N * N배수 * 0.25);
진입횟수 = 3;
진입가격[3] = C;
If 휩소여부 == False Then
{
손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 4);
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 3);
손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 2);
}
Else
{
손절가격[3] = 진입가격[3] - (N * N배수 * 0.25);
}
Buy("S2매수3",OnClose,DEF,int(Unit/4));
}
If 진입횟수 == 3 &&
추가진입가격 > 0 &&
CrossUp(C,추가진입가격) Then
{
추가진입가격 = 추가진입가격 + (N * N배수 * 0.25);
진입횟수 = 4;
진입가격[4] = C;
If 휩소여부 == False Then
{
손절가격[4] = 진입가격[4] - (N * N배수 * 0.25 * 4);
손절가격[3] = 진입가격[3] - (N * N배수 * 0.25 * 3);
손절가격[2] = 진입가격[2] - (N * N배수 * 0.25 * 2);
손절가격[1] = 진입가격[1] - (N * N배수 * 0.25 * 1);
}
Else
{
손절가격[4] = 진입가격[4] - (N * N배수 * 0.25);
}
Buy("S2매수4",OnClose,DEF,int(Unit/4));
}
}
##############
# 청산식 #
##############
/*=============================================*/
/* S1 단기 시스템의 청산 */
/*=============================================*/
If 진입구분 == 1 Then
{
If C < S1Lo Then
{
If OpenPositionProfit() < 0 Then //이익이 발생했다면 다음번 단기돌파시 진입 무시
{
단기돌파무시 = False;
}
Else
{
단기돌파무시 = True;
}
진입구분 = 0;
추가진입가격 = 0;
진입횟수 = 0;
ExitLong("S1추세종료");
}
If 진입횟수 == 4 &&
C < 손절가격[4] Then
{
추가진입가격 = 0; //추가 진입을 막기 위해 초기화
진입횟수 = 3;
손절가격[4] = 0;
진입가격[4] = 0;
단기돌파무시 = False; //손절포인트를 돌파했다면 다음번 단기돌파 때 진입
ExitLong("S1손절4",OnClose,DEF,"S1매수4",DEF);
}
If 진입횟수 == 3 &&
C < 손절가격[3] Then
{
추가진입가격 = 0; //4번 다 진입하지 못하고 손절포인트 만날 수 있으므로
진입횟수 = 2; //각 청산식마다 초기화
손절가격[3] = 0;
진입가격[3] = 0;
단기돌파무시 = False;
ExitLong("S1손절3",OnClose,DEF,"S1매수3",DEF);
}
If 진입횟수 == 2 &&
C < 손절가격[2] Then
{
추가진입가격 = 0;
진입횟수 = 1;
손절가격[2] = 0;
진입가격[2] = 0;
단기돌파무시 = False;
ExitLong("S1손절2",OnClose,DEF,"S1매수2",DEF);
}
If 진입횟수 == 1 &&
C < 손절가격[1] Then
{
진입구분 = 0;
추가진입가격 = 0;
진입횟수 = 0;
손절가격[1] = 0;
진입가격[1] = 0;
단기돌파무시 = False;
ExitLong("S1손절1",OnClose,DEF,"S1매수1",DEF);
}
}
/*=============================================*/
/* S2 장기 시스템의 청산 */
/*=============================================*/
If 진입구분 == 2 Then
{
If C < S2Lo Then
{
진입구분 = 0;
추가진입가격 = 0;
진입횟수 = 0;
ExitLong("S2추세종료");
}
If 진입횟수 == 4 &&
C < 손절가격[4] Then
{
추가진입가격 = 0;
진입횟수 = 3;
손절가격[4] = 0;
진입가격[4] = 0;
ExitLong("S2손절4",OnClose,DEF,"S2매수4",DEF);
}
If 진입횟수 == 3 &&
C < 손절가격[3] Then
{
추가진입가격 = 0;
진입횟수 = 2;
손절가격[3] = 0;
진입가격[3] = 0;
ExitLong("S2손절3",OnClose,DEF,"S2매수3",DEF);
}
If 진입횟수 == 2 &&
C < 손절가격[2] Then
{
추가진입가격 = 0;
진입횟수 = 1;
손절가격[2] = 0;
진입가격[2] = 0;
ExitLong("S2손절2",OnClose,DEF,"S2매수2",DEF);
}
If 진입횟수 == 1 &&
C < 손절가격[1] Then
{
진입구분 = 0;
추가진입가격 = 0;
진입횟수 = 0;
손절가격[1] = 0;
진입가격[1] = 0;
ExitLong("S2손절1",OnClose,DEF,"S2매수1",DEF);
}
}
If DayAtr >= 명목계정 * 0.01 * N배수 Then
{
ExitLong();
}
2018-06-20
180
글번호 119872
답변완료
부탁드립니다
분봉챠트에서
매수진입후
매수청산 수식 부탁드립니다
조건은
당일 고가 - ATR(10) 값 과 5이평선값을 비교해서
큰값에서 청산
부탁드립니다
2018-06-19
151
글번호 119871
답변완료
부탁 드립니다.
그림처럼 이동하고 싶습니다.
미리 감사 드립니다.
2018-06-19
200
글번호 119868
답변완료
수식문의드립니다
1. 지정가 매매가능 한가요?
미니 S&P라고 한다면 소숫점위에 가격이랑 상관없이 .75 포인트오면 무조건 매수진입하고 .25 오면 매수청산동시에 매도진입하고 싶은데 어떻게 작성해야 되는지요? 도저히 감이 안오네요
var1 = Floor(c);
if MarketPosition <= 0 and H < var1+0.75 Then
buy("b",AtStop,var1+0.75);
if MarketPosition >= 0 and L > var1-0.25 Then
sell("s",AtStop,var1-0.75);
이렇게 답변주셨는데요 이렇게되면 청산동시에 다시 진입하는건가요? 저렇게 되면 기존에 포지션있으면 청산만 되는거 아닌가해서요
2018-06-19
160
글번호 119865
답변완료
수식문의
1.당일시가를 기준으로 시가위는 매수만 아래는 매도포지션만을 원칙으로합니다.
2.당일 피보나치의 23.6%와 76.4%를 이용합니다.(끝과끝)
---
ex) 현재가(5분봉) 당일 시가 위, 23.6%or76.4%를 1틱이상 돌파했다면 매수 /23.6%or76.4 1틱 하양돌파 매도
위 반대는 매도진입 매수청산 부탁드리겠습니다.
2018-06-19
161
글번호 119859
답변완료
피보나치 수식 점검 부탁드립니다.
아래의 수식에서 추매부분을 수정하고 싶습니다. 도움 주시면 감사하겠습니다.
1) 0.618 매수이후 주가가 흘러내려서 0.618 이하에 있고
3거래일 동안 돌파를 하지 못하면 음봉종가(150000)에 매수를 하되 2회까지
즉, 4거래일째 음봉이면 1회 매수, 5거래일째 또 음봉이면 2회째 매수입니다.
2) 매수포인트중에서 피보나치 0.5와 0.618은 돌파시 매수로 수정 부탁드리겠습니다.
부탁드리겠습니다.
- 아 래 -
input : n(120),진입금액(3000000),지정일(20180601);
var : cnt(0),hh(0),ll(0),rr(0),dd(0),d1(0);
if bdate != bdate[1] Then
dd = dd+1;
if DayHigh(n) > 0 and DayLow(n) > 0 and sdate >= 지정일 Then
{
hh = DayHigh(1);
ll = DayLow(1);
for cnt = 1 to n
{
if DayHigh(cnt) > hh Then
hh = DayHigh(cnt);
if DayLow(cnt) < ll Then
ll = DayHigh(cnt);
}
rr = (HH-LL);
if MarketPosition == 0 and L > hh-rr*0.5 Then
Buy("매수_0.5",AtLimit,hh-rr*0.5,Floor(진입금액/C));
if MarketPosition == 1 Then
{
ExitLong("수익",atlimit,AvgEntryPrice*1.10);
if MaxEntries == 1 and L > hh-rr*0.618 Then
Buy("매수_0.618",AtLimit,hh-rr*0.618,Floor(진입금액/C));
if CurrentContracts > CurrentContracts and MaxEntries == 1 Then
d1 = dd;
if dd >= d1+4 and MaxEntries >= 2 and MaxEntries < 4 and
stime >= 150000 and stime[1] < 150000 and
c < dayopen Then
Buy("추매",OnClose,def,Floor(진입금액/C));
}
}
2018-06-19
211
글번호 119857
답변완료
수식점검부탁드립니다
###,58250 질문에 텍스트 컬러까지 신경써주신 답변수식에 대해 진심으로 감사드립니다,*꾸벅*
수식을 적용해보니까 첨부파일처럼 양운과음운이 교차시점이 제가 체크한부분(사각박스)을
자세히 보시면 차트에 표현된 시점과 구름떼 교차시점이 오차가 있네요,틱봉이나 분봉이
공히 오차범위의 차이가 조금다를뿐 같은 현상이고 그림2와 같이 여러선이 표현되기도
합니다 무슨이유일까요?
도움 부탁드립니다.
2018-06-18
262
글번호 119856
답변완료
문의
키움 C(10)을 어떡식으로 표현하나요,여기서 PLoT((C(10)); 으로 하니까 잘못되었다고 나와서 어떤식으로 표현해야되는지 부탁드립니다
2018-06-18
171
글번호 119855