커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6066
글번호 230811
신대륙발견 님에 의해서 삭제되었습니다.
2021-11-08
8
글번호 153446
2wnwn 님에 의해서 삭제되었습니다.
2021-11-07
9
글번호 153445
답변완료
문의 드립니다.~~~~
아래 식은 역추세 진입 역추세 청산 재진입식입니다.
이 식을 반대로
1,추세 진입
2,추세 청산과 동시에 추세 재진입식으로
바꾸어 보려고 하는데 잘 되지 않아
도움을 요청합니다.
if Tcond == true Then
{
if MarketPosition == 0 and OO > 0 and LL > OO-PriceScale*진입틱수 Then
Sell("하루시작매도",AtLimit,LL+PriceScale*진입틱수);
if MarketPosition == 0 and OO > 0 and HH < OO+PriceScale*진입틱수 Then
Buy("하루시작메수",AtLimit,HH-PriceScale*진입틱수);
}
if MarketPosition == 1 Then
{
if Tcond == true Then
Sell("Bp1",AtLimit,EntryPrice+PriceScale*진입틱수);
Else
ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*진입틱수);
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*최소손실틱 Then
{
if Tcond == true Then
Sell("sx1",AtLimit,Lowest(L,BarsSinceEntry)+PriceScale*손실감소틱);
Else
ExitLong("sx2",AtLimit,Lowest(L,BarsSinceEntry)+PriceScale*손실감소틱);
}
}
if MarketPosition == -1 Then
{
if Tcond == true Then
Buy("sp1",AtLimit,EntryPrice-PriceScale*진입틱수);
Else
ExitShort("sp2",AtLimit,EntryPrice-PriceScale*진입틱수);
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*최소손실틱 Then
{
if Tcond == true Then
Buy("bx1",AtLimit,highest(H,BarsSinceEntry)-PriceScale*손실감소틱);
Else
ExitShort("bx2",AtLimit,highest(H,BarsSinceEntry)-PriceScale*손실감소틱);
}
}
2021-11-08
732
글번호 153444
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
아래 조건에 맞는 시스템식 부탁드립니다.
요청수식1 :
종목 : 해외선물(오일)
차트 : 틱차트 100
매수 : MACD가 0선 크로스 업 매수진입
단, 매수는 바로 이전 진입이 매도 일때만 가능
포지션 진입후 10틱 하락하면 추가 매수
매도 : MACD가 0선 크로스 다운 매도진입
단, 매도는 바로 이전 진입이 매수 일때만 가능
포지션 진입후 10틱 상승하면 추가 매도
즉 이전 포지션이 매수면 그 다음은 매도, 이전 포지션이 매도면 그 다음은 매수
이런식으로 교차했으면 합니다.
단, 그 다음날 (익일 7시)은 다시 초기화 했으면 합니다.
예)
var : MACDV(0) ;
# 매일 장 시작전 진입조건 초기화
if marketpositon == 0 and crossup(MACDv,0) then {
# 여기조건에 바로이전 포지션이 매도 인경우에만 매수진입 가능
buy("b");
}
# 매수진입 후 진입가격에서 10틱하락하면 추가 1계약 매수
if marketpositon == 0 and crossdown(MACDv,0) then {
# 여기조건에 바로이전 포지션이 매수 인경우에만 매도진입 가능
sell("s");
}
# 매도진입 후 진입가격에서 10틱상승하면 추가 1계약 매도
요청수식2)
종목 : 해외선물(오일)
차트 : 틱차트 100
매수 : MACD가 0선 크로스 업 매수진입
단, 아침 7시 장시작부터 새벽 6시 장 끝날때까지 매수는 1번만 진입
그리고 진입가격에서 10틱 하락하면 추가 매수
매도 : MACD가 0선 크로스 다운 매도진입
단, 아침 7시 장시작부터 새벽 6시 장 끝날때까지 매도는 1번만 진입
그리고 진입가격에서 10틱 상승하면 추가 매도
단, 그 다음날 (익일 7시)은 다시 초기화 했으면 합니다.
예)
var : MACDV(0) ;
# 매일 장 시작전 진입횟수 초기화
# 진입횟수는 변경할수 있도록 변수화 부탁드립니다.
if marketpositon == 0 and crossup(MACDv,0) then {
buy("b");
}
# 매수 진입후 10틱 하락하면 추가 매수
if marketpositon == 0 and crossdown(MACDv,0) then {
sell("s");
}
# 매도 진입후 10틱 하락하면 추가 매도
요청질문)
input : StartTime(070000),EndTime(010000);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
제가 초보라 위 수식에 대해 이해가 안됩니다.
죄송하지만 수식에 대한 설명좀 부탁드립니다.
1. sdate != sdate[1] 무슨 뜻인가요?
2. sdate == sdate[1] 무슨 뜻인가요?
3. stime >= StartTime and stime[1] < StartTime 무슨 뜻인가요?
4. 전체적으로 무슨 뜻인가요?
시스템식 부탁드립니다.
감사합니다.
2021-11-06
826
글번호 153443
답변완료
지표식좀 요청 드립니다.
* 항상 많은 도움에 고맙습니다.
* 신고가 갱신 지표 4개 좀 부탁 드립니다.
당일 시작봉 부터 COUNT 시작(총봉갯수)
1. var1 = 고가갱신 봉수 / 총 봉갯수
# 고가갱신 봉수 = 고가 가 갱신된 봉의 횟수
# 총봉수 = 당일 시가 부터 직전(C[1]) 봉 까지 갯수
2.var2 = 신고가갱신누적봉수 합 / 총봉수
#신고가갱신누적봉수 =
당일시가보다 크고 전고가 갱신 봉 부터 신고가 갱신봉까지 봉갯수 누적
즉 신고가 갱신시 마다 당일 시가 보다 큰 봉수만 더해서 합산
3. var3 = 저가갱신 봉수 / 총 봉수
#저가갱신 봉수 = 저가 가 갱신된 봉의 횟수
4. var4 = 신저가 갱신누적봉수 합 / 총봉수
#신저가갱신봉수 =
당일시가보다 작고 전저가 갱신 봉 부터 신저가 갱신봉 까지 봉갯수 합
* 매번 많은 도움에 고맙습니다. 수고하십시요.
2021-11-09
1001
글번호 153442
답변완료
수식 문의 드립니다.
관리자님,
Volume power(5) , volume Ratio(20) , Volume OSC(10, 20, 9)를 programe에 적용코저 합니다.
Volume power(5) 적용식을 알려 주십시오
Volume Ratio(20) 적용식을 알려 주십시오
Volume OSC (10,20,9) 적용식을 알려 주십시오
2021-11-08
1267
글번호 153441
회원 님에 의해서 삭제되었습니다.
2021-11-06
0
글번호 153440
답변완료
문의드립니다
추가 문의드립니다.
아래 내용에 대한 수식 부탁드립니다.
감사합니다.
input : StartTime(233000),EndTime(030000);
var : 전환선(0),단기추세선(0);
var1 = 가중이동평균(5);
전환선 = (highest(H,1)+lowest(L,1))/2;
단기추세선 = (highest(H,26)+lowest(L,26))/2;
익절 및 손절은 스위칭으로 합니다.
1.
전환선(0)이 가중이동평균(5)을 크로스해서 돌파할 때 즉시 매수,
가중이동평균(5)이 전환선(0)을 크로스 해서 돌파할 때 즉시 매도로 스위칭 되게 해주세요.
2.
전환선(0)이 단기추세선을 크로스 해서 돌파할 때 즉시 매수,
단기추세선이 전환선(0)을 크로스해서 돌파할 때 즉시 매도로 스위칭 되게 해주세요.
3.
1번과 2번이 동시에 충족할 때만 즉시 매수, 매도 진입하며 스위칭 되게 해주세요.
4. 스위칭 외에 익절 100틱, 손절 50틱으로 할시 수식도 추가 부탁드립니다.
2021-11-08
1152
글번호 153439
답변완료
문의드립니다
항상 감사드립니다.
아래 두개의 수식에도 신호 나온 캔들의 종가에 진입하는데,
n틱 이상 조정 받고 다시 종가를 돌파할때 매수 매도 들어가는 수식을
추가해서 수정 부탁드립니다.
1.
input : StartTime(205500),EndTime(222000);
input : Length(20), D1(2);
input : 익절(20),손절(15),익절연속횟수(3),손절연속횟수(2);
var : Tcond(false),profit(0),loss(0);
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
{
Tcond = true;
profit = 0;
loss = 0;
}
if TotalTrades > TotalTrades[1] Then
{
if IsExitName("bp.",1) or IsExitName("bp",1) or IsExitName("sp.",1) or IsExitName("sp",1) Then
profit = profit+1;
Else
profit = 0;
if IsExitName("bl.",1) or IsExitName("bl",1) or IsExitName("sl.",1) or IsExitName("sl",1) Then
loss = loss+1;
Else
loss = 0;
}
var1 = BollBandUp(Length,D1);
var2 = BollBandDown(Length,D1);
if Tcond == true Then
{
If CrossUP(H,var1) and c > o and profit < 익절연속횟수 and loss < 손절연속횟수 then
{
Buy("b",OnClose,DEF,1);
ExitLong("bp.",AtLimit,C+PriceScale*익절,"",1,1);
ExitLong("bl.",AtStop,C-PriceScale*손절,"",1,1);
}
If CrossDown(L,Var2) and C < O and profit < 익절연속횟수 and loss < 손절연속횟수 then
{
Sell("s",OnClose,DEF,1);
ExitShort("sp.",AtLimit,C-PriceScale*익절,"",1,1);
ExitShort("sl.",AtStop,C+PriceScale*손절,"",1,1);
}}
if MarketPosition == 1 Then
{
ExitLong("bp",AtLimit,EntryPrice+PriceScale*익절,"",1,1);
ExitLong("bl",AtStop,EntryPrice-PriceScale*손절,"",1,1);
}
if MarketPosition == -1 Then
{
ExitShort("sp",AtLimit,EntryPrice-PriceScale*익절,"",1,1);
ExitShort("sl",AtStop,EntryPrice+PriceScale*손절,"",1,1);
}
2.
input : StartTime(223000),EndTime(234000);
input : Length(20), D1(2);
input : 익절(50),손절(30),익절연속횟수(3),손절연속횟수(2);
var : Tcond(false),profit(0),loss(0);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
profit = 0;
loss = 0;
}
if TotalTrades > TotalTrades[1] Then
{
if IsExitName("bp.",1) or IsExitName("bp",1) or IsExitName("sp.",1) or IsExitName("sp",1) Then
profit = profit+1;
Else
profit = 0;
if IsExitName("bl.",1) or IsExitName("bl",1) or IsExitName("sl.",1) or IsExitName("sl",1) Then
loss = loss+1;
Else
loss = 0;
}
var1 = BollBandUp(Length,D1);
var2 = BollBandDown(Length,D1);
if Tcond == true Then
{
If CrossUP(H,var1) and c > o and profit < 익절연속횟수 and loss < 손절연속횟수 then
{
Buy("b",OnClose,DEF,1);
ExitLong("bp.",AtLimit,C+PriceScale*익절,"",1,1);
ExitLong("bl.",AtStop,C-PriceScale*손절,"",1,1);
}
If CrossDown(L,Var2) and C < O and profit < 익절연속횟수 and loss < 손절연속횟수 then
{
Sell("s",OnClose,DEF,1);
ExitShort("sp.",AtLimit,C-PriceScale*익절,"",1,1);
ExitShort("sl.",AtStop,C+PriceScale*손절,"",1,1);
}
}
if MarketPosition == 1 Then
{
ExitLong("bp",AtLimit,EntryPrice+PriceScale*익절,"",1,1);
ExitLong("bl",AtStop,EntryPrice-PriceScale*손절,"",1,1);
}
if MarketPosition == -1 Then
{
ExitShort("sp",AtLimit,EntryPrice-PriceScale*익절,"",1,1);
ExitShort("sl",AtStop,EntryPrice+PriceScale*손절,"",1,1);
}
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2021-11-05
912
글번호 153438