커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1734
글번호 230811
답변완료
문의
늘 감사드립니다.
아래 수식을 두가지 버전으로 부탁드립니다.
①월고 월저 기준가 근처 오차범위 1%(변수) 근접했을 때 알람소리나게
②월고 월저 기준가 근처 오차범위 10틱(변수) 근접했을 때 알람소리나게
input : 입력일(20210115);
var : 기준가(0),월고(0),월저(0);
if data2(sdate == 입력일) Then
기준가 = data2(lowD(0));
if data2(sdate >= 입력일) Then
{
if Data2(월고 == 0 or (월고 > 0 and H > 월고)) Then
월고 = data2(h);
if data2(월저 == 0 or (월저 > 0 and L < 월저)) Then
월저 = data2(l);
}
if 기준가 > 0 Then
Plot1(기준가);
if 월고 > 0 Then
Plot2(월고);
if 월저 > 0 Then
Plot3(월저);
2021-03-05
744
글번호 146808
답변완료
수식관련 문의드립니다.
시스템 수식관련해서 도움을 받고자 문의를 드립니다.
제가 하고자하는 수식은 해외선물 나스닥 기준으로 단방향 (매수 혹은 매도) 매매만 하는
프로그램을 만들고자 하며 간단하게 규칙을 설명하자면 다음과 같습니다.
규칙1: MACD 골드 크로스가 나면 진입을 해라
규칙2: MACD 데드 크로스가 나면 매도를 하되 진입가격보다 일정수치 이상 높을 경우에만 매도해라 (익절만 하고 손절은 없음 데드크로스 떠도 손절위치면 그냥 물량 보유)
규칙3: 첫 번째 진입한 계약이 익절이 안되고 손절이나고 있는 상태면 첫번째 진입가격의 예를 들어 -500포인트 이하이면서 MACD 골드크로스가 뜨면 추가 매수를 해라
규칙4: 추가매수분에 대해 규칙2와 같이 데드크로스가 뜨면 매도를 하나 익절위치가 아니면 그냥 보유
이런식의 프로그램을 짜고 싶으며 이를 반영하기 위해 제가 짠 수식은 다음과 같습니다.
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : MACDv(0), MACDsig(0),macdosc(0), Value1(0), value2(0), cnt(0) ;
MACDv = MACD(shortPeriod, longPeriod);
MACDsig = ema(MACDv,Period);
macdosc = MACDv-ema(MACDv,Period);
if crossup(MACDv,MACDsig) then {
BuY("첫쨰",AtLimit,c);
Value1=c;
}
if isentryname("첫쨰") and CrossDown(MACDv,MACDsig) then
ExitLong("청산1",AtLimit,EntryPrice+30);
if MarketPosition == 1 and crossup(MACDv,MACDsig) and c < EntryPrice(1)-500 then {
BuY("둘쨰",AtLimit,c);
Value2=c;
}
if isentryname("둘쨰") and CrossDown(MACDv,MACDsig) then
ExitLong("청산2",AtLimit,EntryPrice+10);
현재 시뮬레이션 돌려보면 두번째 진입까지는 진행이되는것 같은데 두번째 진입이
첫번째 청산규칙위치에서 계속 매도가 되는 것 같아 전체적인 수식점검을 해주시면
감사하겠습니다.
2021-03-05
810
글번호 146806
2wnwn 님에 의해서 삭제되었습니다.
2021-03-05
8
글번호 146804
답변완료
문의드립니다
안녕하세요 시스템 수식부탁드립니다.
macd 1 시그널값이 20 40 30 골든크로스 일때 매수이고 (매수진입)
macd 2 시그널값이 30 50 20 이 데드크로스 일때 매도청산후 매도스위칭(매도청산 스위칭)
macd 1 시그널값이 20 40 30 골든크로스 일때 매수 (매수진입)
스위칭 구조이고 손절은 50pt 입니다
2021-03-04
781
글번호 146803
답변완료
수고 많습니다
제가 설명이 부족했네요,,다시 부탁 드립니다
1)20일 기간중 상승시 거래량이 하락시 거래량 보다 큰것
2) 20일 기간중 양봉 거래량이 음봉 거래량보다 큰것 을 찾는 식을 부탁드립니다
미리 감사드립니다
2021-03-04
671
글번호 146802
답변완료
질문드립니다
안녕하세요
아래는 보조지표 스토캐스틱 수치를 이용한 청산식입니다.
if MarketPosition == -1 Then{
if IsEntryName("S") == true Then
if Stok <= 15.0 Then
ExitShort("S청산", OnClose, DEF, "S", 1,1);
if Stok <= 10.0 Then
ExitShort("S청산2", OnClose, DEF, "S", 1,1);
}
"Onclose" 조건이기 때문에 캔들이 끝나야만 청산이 이루어집니다.
이것을 스토캐스틱 수치가 '15' 과 '10'을 닿는 순간 청산되도록 하려면 어떻게 해야 하는지 알려주시면 감사하겠습니다.
2021-03-04
846
글번호 146801
답변완료
부탁드립니다
$,안녕하세요
1,첨부파일의 내용은 일봉차트에 아래식을 적용하여 지표속성차트표시에서 사각형그래프
를 굵기최대로 적용한 사례입니다.첨부파일처럼 분봉이나 틱봉에서도 같은 스타일로
현재봉 위아래에 점이나 사각그래프와 같은 하나의 모양으로만 표시하고 싶은데 방법을
모르겠습니다,타주기분봉으로 식을짜야 할지 잘 모르겠습니다,도움부탁드립니다.
input : N(0);
var1 = DateToJulian(CurrentDate);
if var1 > 0 and DateToJulian(sDate) >= var1-N Then
{
Plot1(DayHigh(1)+(DayHigh(1)-DayLow(1)),"HL상");
plot2(DayClose(1)+(DayHigh(1)-DayLow(1)),"CHL상");
Plot3(DayLow(1)-(DayHigh(1)-DayLow(1)),"HL하");
plot4(DayClose(1)-(DayHigh(1)-DayLow(1)),"CHL하");
}
2,최근 N일동안의 시가평균선과 종가평균선을 직선으로 오른쪽그리기 하고싶습니다,
함수로직 부탁드립니다.
$,관리자님의 도움주심에 항상 고맙습니다.
2021-03-05
945
글번호 146800
답변완료
MA그물망 일정조건이상 충족시 매수 매도
안녕하세요
다름이 아니라 그물망 차트를 한번 이용해서 시스템을 한번 만들어볼려고하는데
이동평균선 그물망중 5개중 3개 이상이 전봉보다 크다면 매수
이동평균선 그물망중 5개중 3개 이상이 전봉보다 작다면 매도
예를 들어
var1 = ma(c,20);
var2 = ma(c,30);
var3 = ma(c,40);
var4 = ma(c,50);
var5 = ma(c,60);
5개 변수중 3개 이상이 조건이 충족된다면 매수를 어떻게 표현해야할까요..
일단 제가 해본방법은
if var1[1] < var1 then A1 = 1;
if var2[1] < var2 then A2 = 1;
if var3[1] < var3 then A3 = 1;
if var4[1] < var4 then A4 = 1;
if var5[1] < var5 then A5 = 1;
if A1 + A2 + A3 + A4 + A5 >= 3 then buy();
이렇게 해도 수식이 안되고 condition을 넣어도 안됩니다.
초보인 저에게 고견 주시면 감사하겠습니다 좋은 하루 되세요
2021-03-04
822
글번호 146799
답변완료
전략변환~
안녕하세요?
시그널메이커에서 예스로 이사중입니다.변환 부탁드립니다.^^
Params : Exit_Loss(200), Exit_Profit_Today(900), Exit_Loss_Today(240), BuyProfit(450), SellProfit(450);
Params : TradingStartTime(111800), TradingEndTIME(034500);
Params : trailing_up_price1(150), trailing_stop_price1(130),trailing_up_price2(90), trailing_stop_price2(80),trailing_up_price3(50), trailing_stop_price3(1), up_price_high(145), up_price_high_stop(20), x_value(60);
vars : t1(1), Today_P(0), Pre_NetProfit(0), LossPoint(0), ProfitPoint(0), myOpenProfit(0), TickPoint(0);
Vars : SP(0), R(0), R_1(0), S(0), S_1(0);
Vars : st(0), et(0);
V1 = Dayofweek((10000 * Year(D)) + (100 * 3) + 1);
If V1 = 0 Then Value2 = 8
Else Value2 = 15 - V1; // 3월 두번째 일요일 날짜
V2 = Dayofweek((10000 * Year(D)) + (100 * 11) + 1);
If V2 = 0 Then Value4 = 1
Else value4 = 8 - V2; // 11월 첫번째 일요일 날짜
If date > (10000 * Year(D)) + (100 * 3) + value2
And date < (10000 * Year(D)) + (100 * 11) + value4 Then
Begin
st = 070000; // 써머타임 적용 시, 장시작 시간
et = 060000; // 써머타임 적용 시, 장종료 시간
End
Else
Begin
st = 080000; // 장 시작 시간
et = 070000; // 장 종료 시간
End;
condition1 = (IntPortion(time/10000) > IntPortion(et/10000) And IntPortion(time[1]/10000) <= IntPortion(et/10000)) Or st <> st[1];
R = highest(H, X_value);
R_1 = R[1];
S = lowest(L, X_value);
S_1 = S[1];
SP = SignalPosition;
TickPoint = OneTick * PriceScale;
Vars : PPosit(0);
if condition1 Then
Begin
ProfitPoint = 0;
Today_P = 0;
Pre_NetProfit = NetProfit[1];
Cond99 = false;
pPosit = 0;
End;
IF ExitDate(1) = Date Then pPosit = SignalPosition(1)
Else pPosit = 0;
Today_P = NetProfit - Pre_NetProfit; // 하루 누적 수익
myOpenProfit = OpenPositionProfit;
If (Today_P + myOpenProfit) >= (Exit_Profit_Today * TickPoint) Then Cond99 = true
Else If (Today_P + myOpenProfit) <= -(Exit_Loss_Today * TickPoint) Then Cond99 = True;
if TradingStartTime < TradingEndTIME Then
Begin
If TradingStartTime <= TIME And TIME <= TradingEndTIME Then COND44 = True
Else COND44 = False;
End
Else
Begin
If TradingStartTime <= TIME Or TIME <= TradingEndTIME Then COND44 = True
Else COND44 = False;
End;
If Cond44 = False Then
Begin
if SP <> 0 Then
Begin
ExitLong("마감 매수 청산",OnClose,def,def,CurrentContracts);
ExitShort("마감 매도 청산",OnClose,def,def,CurrentContracts);
End;
Cond44 = False;
End;
LossPoint = -Exit_Loss_Today * TickPoint - Today_P - myOpenProfit;
ProfitPoint = Exit_Profit_Today * TickPoint - Today_P - myOpenProfit;
if 1 = Sp then
Begin
ExitLong("매수 익절마감", Atlimit, close + ProfitPoint);
ExitLong("매수 손절마감", Atstop, close + LossPoint);
ExitLong("매수청산", Atlimit, EntryPrice + BuyProfit * TickPoint );
End
Else if -1 = Sp then
Begin
ExitShort("매도 익절마감", Atlimit, close - ProfitPoint);
ExitShort("매도 손절마감", Atstop, close - LossPoint);
ExitShort("매도 청산", Atlimit, EntryPrice - SellProfit * TickPoint );
End;
//지정한 시간대에만 거래
if Cond44 And false = Cond99 Then
Begin
// 매수 진입
If SP[1] <> 1 And PPosit <> 1 And time >= T1 And (CrossUp(c, R_1) Or CrossDown(C, S_1)) And C > R_1 Then Buy();
//매도 진입
If SP[1] <> -1 And PPosit <> -1 And CrossDown(C, S_1) Then Sell();
End;
SetStopLoss(Exit_Loss * tickpoint);
var : TickSize(0);
TickSize = OneTick * PriceScale;
If MaxContractProfit < TickSize * (trailing_up_price1 + 10) Then SetStopTrailing(TickSize * trailing_stop_price1, TickSize * trailing_up_price1)
Else if MaxContractProfit < TickSize * (trailing_up_price2 + 10) Then setstopTrailing(TickSize * trailing_stop_price2, TickSize * trailing_up_price2)
Else SetStopTrailing(TickSize * trailing_stop_price3, TickSize * trailing_up_price3);
var : TickSize2(0), oC(0), oC_b1(0), oC_s1(0), oC_b2(0), oC_s2(0), oC_b3(0), oC_s3(0);
TickSize2 = OneTick * PriceScale;
If MaxPositionProfit >= up_price_high * TickSize2 Then
Begin
ExitLong("EXB12", AtStop, EntryPrice + up_price_high_stop * TickSize2);
ExitShort("EXS12", AtStop, EntryPrice - up_price_high_stop * TickSize2);
End;
2021-03-04
833
글번호 146798