커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5322
글번호 230811
답변완료
청산식 좀 봐주십시요.
* 많은 도움에 고맙습니다.
* 아래 식에서 마지막 거래가 외 이루어 지죠?
끝나면 40틱 이상인데 마지막 거래가 한번 더 매매가 되네요 ???
Input : 당일수익틱수(40);
Var : N1(0),dayPl(0),당일수익(0),Xcond(false);
당일수익 = PriceScale*당일수익틱수;
if Bdate != Bdate[1] Then {Xcond = false; N1 = NetProfit; }
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] and (IsExitName("목표40만원달성1",1) == true or IsExitName("목표40만원달성2",1) == true) then Xcond = true;
if Xcond == false then {
### 매매식
A (매수1)
B (매수66)
C (매도2)
## 청산식
if MarketPosition==1 and IsEntryName("매수66") == true then{ ExitLong("수청66",AtLimit,EntryPrice+PriceScale*32); }
########################################################################################################################### highest(H,BarsSinceEntry) Lowest(L,BarsSinceEntry)
SetStopProfittarget(PriceScale*92,PointStop);
SetStopLoss(PriceScale*28,PointStop);
}
}
if sdate != sdate[1] Then SetStopEndofday(043000);
if bdate != bdate[1] Then SetStopEndofday(0);
###########################################################################################################################
if MarketPosition == 1 then{ExitLong("목표40만원달성1",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts)); }
if MarketPosition == -1 then{ExitShort("목표40만원달성2",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts)); }
* 고맙습니다.
2019-07-30
278
글번호 130769
답변완료
수식질문드려요
기본차트 3분봉
참조차트1 30분봉
참조차트2 60분봉
참조1과 참조2의 차트에서 종가기준 20일선보다 크면 매수 신호 발생
참조1과 참조2의 차트에서 종가기준 20일선보다 작으면 매도 신호 발생
2019-07-30
263
글번호 130768
답변완료
질문입니다.
안녕하세요
수고 많으십니다.
900틱차트에서 60분봉 스톡케스트 수치값이나 모양 그대로 900 틱차트에 적용할 수있는 수식이 무엇인지요?
부탁드립니다 ㅠㅠ
2019-07-30
271
글번호 130767
태양같이 님에 의해서 삭제되었습니다.
2019-07-29
0
글번호 130765
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1.
같은 전략인데 변수만 다른 시스템 신호를 하나의 시스템 속에 넣을 수가 있나요?
가령 5,20 이평 전략인데 20, 40 이평 전략 이렇게 전략은 똑같은데 신호를 하나의 시스템에서 각각 나오게 하는 방법이 있나요?
그러니까 시스템관리자로 여러 전략 합성한 것과 같은 효과를 하나의 전략에서 낼 수 있는가 해서요.
2.
외부변수 수치를 n~ n2 중에 랜덤으로 쓰게 하려면 어떻게 해야 하나요?
가령 이평선 돌파 전략인데 이평수치를 5~ 30 사이서 랜덤으로 나오게 하려면 어떻게 하나요?
2019-07-30
274
글번호 130764
답변완료
재질문 (글번호 63514번)
안녕하세요?
아래 글번호 63514번 답변 감사드립니다.
다시 질문 합니다.
단순하게 and 로 조건을 추가 하는 것이 아니라,
Vars : SP(0,data1), TickSize(0,data1);
Vars : fstHH(0,data1), fstLL(0,data1), sndHH(0,data2), sndLL(0,data2);
var : v1(0,data2),v2(0,data2);
SP = MarketPosition;
TickSize = PriceScale;
v1 = data2(H);
v2 = data2(L);
IF v1[10] > 0 Then
Begin
fstHH = data1(Highest(H, 5));
fstLL = data1(Lowest(L, 3));
sndHH = Max(v1, v1[1], v1[2], v1[3], v1[4], v1[5], v1[6], v1[7], v1[8], v1[9], v1[10]);
sndLL = Min(v2, v2[1], v2[2], v2[3], v2[4], v2[5], v2[6], v2[7], v2[8], v2[9], v2[10]);
End;
IF MarketPosition == 0 and data2(C) > sndHH[1] Then Buy("B", AtStop, fstHH - TickSize);
IF MarketPosition == 0 and data2(C) < sndLL[1] Then Sell("S", AtStop, fstLL + TickSize);
상기의 전략에서 생성된 신호가 BB안에 있을 때에만 생성하고자 합니다.
즉 기존 전략에서 매매신호가 A,B, C, D가 생성되었는데
그 신호가가 A와 B는 BB 안에 위치해 있으며, C와 D는 밖에 있을 경우에 실질적으로 A와 B에서만 매매를 하고자 합니다.
2019-07-29
255
글번호 130763
답변완료
re:re: 파라볼릭 지표 이용 실시간 매수청산
아래 답변 감사드립니다.
다시 질문드리자면,
파라볼릭 값은 현재(미완성)봉 시가에 바로 확정이 되므로, 그 값과 현재값 비교는 되요.
LastBarOnChart도 담당자님 말씀데로라면 안되야 될텐데 됩니다. 현재봉(챠트 마지막봉) 감시도 됩니다.
현재봉에서 매수청산신호도 뜹니다. 시스템모니터링 창에 예비신호 칼럼에 <on close> 라고 뜹니다.
다만 그게 왜 실제 매수청산주문이 나가지 않는지가 궁금해요.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 파라볼릭 지표 이용 실시간 매수청산
> 안녕하세요
예스스탁입니다.
1
atstop, atlimit은 최근 완성봉(전봉)에서 특정값을 지정하고
다음봉의 미완성시의 현재가와 비교해 신호를 발생합니다.
미완성봉인 현재봉의 특정값과 현재가를 비교해서는 신호발생이 발가능하므로
현재봉의 파라볼릭과 현재가를 비교해서는 가능하지 않습니다.
매수이후에 직전봉의 파라볼릭값보다 낮은 시세 발생하면 청산하고자 하시면
아래와 같이 작성하시면 됩니다.
2
청산함수에 수량을 지정하지 않으면 자동으로 진입수량 전량을 청산합니다.
3
LastBarOnChart는 지표수식등 마지막봉에만 표시하고자 할떄 사용합니다.
시스템수식에서는 사용이 의미가 없습니다.
봉완성이 다음봉 시가수신될때인데
차트에 다음봉 시가가 들어오면 봉이완성되어 신호발생을 못하게 막게 됩니다.
4
Input : af(0.15), maxAF(0.2), stock_quantity(50);
Var : trailing_stop(0);
trailing_stop = sar(af,maxAF);
if dayindex() == 0 Then
{
buy("b",OnClose,DEF,stock_quantity);
}
if MarketPosition == 1 then
{
ExitLong("trailing_stop", Atstop, trailing_stop);
}
즐거운 하루되세요
> no208 님이 쓴 글입니다.
> 제목 : 파라볼릭 지표 이용 실시간 매수청산
> 안녕하세요,
Parabolic 지표에 가격이 하락하면 실시간으로 매수청산하고 싶습니다. (다음 봉에서 매도 아니고, 현재 미완성 봉에서 매수청산)
아래와 같이 식을 작성해 적용해 보았는데
챠트에서는 ExitLong 이라고 뜨고, 시스템모니터링 창의 "예비신호" 에는 <On Close> 라고 뜹니다만 실제 현재봉에서 매수청산이 되지 않았습니다
Input : af(0.15), maxAF(0.2), stock_quantity(50);
Var : trailing_stop(0);
trailing_stop = sar(af,maxAF);
#차트상 첫봉에 가상으로 매수 진입 - 수기로 이미 매수하였으므로.
if dayindex() == 0 Then{
buy("b",OnClose,DEF,stock_quantity);
}
#차트상 마지막 봉 감시.
if MarketPosition ==1 and LastBarOnChart==1 then {
if C >= trailing_stop then{
ExitLong("trailing_stop", Atstop, trailing_stop, "", stock_quantity, 0);
} Else {
ExitLong();
}
}
가격이 Parabolic stop 가격까지 하락할 경우 (다음 봉이 아닌) 실시간으로 매수청산 하는 방법이 있을까요??
2019-07-29
398
글번호 130762
답변완료
재문의드립니다
63510 2번 수식이 전전봉에 안 나오는데 다시한번 검토부탁드립니다
2019-07-29
303
글번호 130760
답변완료
수식부탁드립니다
안녕하세요
아래수식은 고저점발생파동수식입니다
이수식에서 각각의 고점이 새로이 발생될때마다 각 고점 저점이 기준선이되어 첨부그림과 같이
고점기준으로 이평선이 그려지고 반대로 저점기준으로 이평선이 그려지게 할수없을까요
부탁드립니다
Input:length(2),종가사용여부(0),파동선두께(5),파동선두께고저선(5),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),tl2(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,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
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
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL2 = TL_New(고[2,3],고[2,4],고[2,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, 2);
Text_SetColor(Text1,RED);
Text_SetSize(Text1, 15);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,RED);
TL_SetSize(TL2,파동선두께고저선);
TL_SetColor(TL2,RGB(129,129,129));
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
TL_SetEnd(TL2,고[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
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL2 = TL_New(저[2,3],저[2,4],저[2,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);
Text_SetColor(Text1,BLUE);
Text_SetSize(Text1, 15);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,BLUE);
TL_SetSize(TL2,파동선두께고저선);
TL_SetColor(TL2,RGB(129,129,129));
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
TL_SetEnd(TL2,저[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));
}
}
최종꼭지점 = "저점";
}
2019-07-29
478
글번호 130740