커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4355
글번호 230811
답변완료
수식부탁드립니다
매번 고맙습니다
아래수식을
1) 전일의 양봉중 가장 큰 양봉(꼬리제외몸통만)의 중심과 종가를 현재까지
오른쪽 추세선 그리기로 현재값(우측끝에)출력하면 좋겠습니다
2) 전일의 음봉중 가장 큰 음봉(꼬리제외몸통만)의 중심과 종가를 현재까지
오른쪽 추세선 그리기로 현재값(우측끝에)출력하면 좋겠습니다
3) 만일 당일에 전일의 양봉,음봉을 갱신하는 양봉,음봉 출현시 1),2)와 동일조건
으로 추세선 그리기하면 좋겠습니다,
$$ 이때 전일의 캔들을 당일에 갱신하는 경우일때 전일추세선이 삭제되고 당일
갱신된 캔들에만 추세선 그리기하는 식과
(전일추세선과 당일추세선을 현재까지 동시표현하는 식을 추가삽입방식으로
주석과 함께 부탁드립니다).
미리 감사드립니다.
var : D1(0),T1(0),TL1(0),TL2(0),TL3(0),TL4(0);
var : tx1(0),tx2(0),tx3(0),tx4(0);
if Bdate != bdate[1] Then{
var1 = 0;
var2 = 0;
D1 = sdate[1];
T1 = stime[1];
TL_Delete(TL1);
TL_Delete(TL2);
TL_Delete(TL1);
TL_Delete(TL2);
}
if C > O and abs(C-O) > var1 Then{
var1 = abs(c-O);
value1 = (C+O)/2;
value2 = C;
TL_Delete(TL1);
TL_Delete(TL2);
TL1 = TL_New(D1,T1,value1,sdate,stime,value1);
TL2 = TL_New(D1,T1,value2,sdate,stime,value2);
//색상지정
TL_SetColor(TL1,RED);
TL_SetColor(TL2,RED);
TL_SetExtRight(TL1,True);
TL_SetExtRight(TL2,True);
Text_Delete(Tx1);
Text_Delete(Tx2);
Tx1 = Text_New(sdate,stime,value1,NumToStr(value1,2));
Tx2 = Text_New(sDate,sTime,value2,NumToStr(value2,2));
//색상지정
Text_SetColor(Tx1,RED);
Text_SetColor(Tx2,RED);
}
if C < O and abs(C-O) > var2 Then{
var2 = abs(c-O);
value3 = (C+O)/2;
value4 = C;
TL_Delete(TL3);
TL_Delete(TL4);
//색상지정
TL3 = TL_New(D1,T1,value3,sdate,stime,value3);
TL4 = TL_New(D1,T1,value4,sdate,stime,value4);
TL_SetColor(TL3,BLUE);
TL_SetColor(TL4,BLUE);
TL_SetExtRight(TL3,True);
TL_SetExtRight(TL4,True);
Text_Delete(Tx3);
Text_Delete(Tx4);
Tx3 = Text_New(sdate,stime,value3,NumToStr(value3,2));
Tx4 = Text_New(sDate,sTime,value4,NumToStr(value4,2));
//색상지정
Text_SetColor(Tx3,BLUE);
Text_SetColor(Tx4,BLUE);
}
Text_SetLocation(tx1,sdate,stime,value1);
Text_SetLocation(tx2,sdate,stime,value2);
Text_SetLocation(tx3,sdate,stime,value3);
Text_SetLocation(tx4,sdate,stime,value4);
2018-02-18
170
글번호 116665
답변완료
수식문의
안녕하세요
하기 수식에서 보안 부탁드립니다.
1.
input : Period(20),dv(2);
var : BBmd(0),BBdn(0),bbup(0),BandB(0),HH(0),LL(0);
BBmd = ma(C,Period);
BBdn = BollBandDown(Period,Dv);
BBUp = BollBandUp(Period,Dv);
BandB = ((C-BBDn)/(BBUp-BBdn))*100;
if crossup(BandB,90) Then
HH = BandB;
if BandB > 90 and BandB > HH Then
HH = BandB;
if CrossDown(BandB,10) Then
LL = BandB;
if BandB < 10 and BandB < LL Then
LL = BandB;
if HH > 100 and CrossDown(BandB,90) Then
sell("s4");
if LL < 0 and crossup(BandB,10) Then
buy("b4");
- 상기 수식에서 data 2를 추가해서 진행합니다.
data 2 의 볼린져 상단밴드가 data 1 의 볼린져 상단밴드 밖에 있으면,
s4 매도 금지, data 2 의 볼린져 상단이 data 1 의 볼린져 밴드 안쪽으로
들어온 다음에 진입하는 조건 부탁드립니다.
data 2의 볼린져 하단밴드가 data 1 의 볼린져 하단밴드 밖에 있으면,
b4 매수 금지, data 2의 볼린져 하단이 data 1의 볼린져 밴드 안쪽으로
들어온 다음에 진입하는 조건으로 부탁드립니다.
2.
data 2 의 볼린져 중앙이평이 data 1의 볼린져 밴드 중앙이평을 상향 돌파하면 매수
하향 돌파하면 매도 수식 부탁드립니다.
조건은 매수의 경우 전봉대비 중앙이평값이 상승해야 합니다.
매도의 경우 전봉대비 중앙이평값이 하향해야 합니다.
3.
input : short(12),long(26),sig(9);
value1 = MACD(short, long);
value2 = ema(value1, Period);
# 매수/매도청산
If CrossUP(value1, value2) and C <= bbmd-PriceScale*10 Then
{
buy("b2");
}
# 매도/매수청산
If CrossDown(value1, value2) and C >= bbmd+PriceScale*10 Then
{
sell("s2");
}
상기 수식에서 한가지 별도의 수식을 추가하고 싶습니다.
예를 들어, 현재 신규봉이 생성되고 시간이 흘러 봉 완성이 되었을 때 ,
오실레이터가 음에서 양으로 바뀌는 첫번재 봉이 볼린져 밴드 하단을 터치하면 매도 진입
오실에이터가 양에서 음오로 바뀌는 첫번째 봉이 볼린져 밴드 상단을 터치하면 매수 진입.
상기 수식 구현이 가능한지 확인 부탁드립니다.
감사합니다.
2018-02-18
163
글번호 116664
답변완료
문의 드립니다.
아래의 종목 검색식 좀 부탁드립니다.
1. [일봉] 5억원 이상의 거래대금이 발생하면서 전일대비 3%이상 상승했다가 다시 내려와서 윗꼬리가 (몸통+아랫꼬리)보다 길게 끝난 양봉이 최근 10봉 이내에 2번 이상 있는 종목
2018-02-14
159
글번호 116663
답변완료
수식 문의 드립니다.
이제 트레이딩 입문한 초보입니다.!!
코스피나 코스닥 또는 기타 선물지수에 관한 조건에 따라 특정 종목을 매매하는 조건식을
만들려고 합니다.
*****기간기준은 일봉기준입니다.(주변 지인은 5분봉으로 하고 고가,저가,시가 등은 dayhigh 와 같이 하루
값을 쓰라고 하던데..그렇게 해도 시뮬레이션은 이상합니다.*****
(전략실행 차트 및 시뮬레이션 차트에서
종목선택창에는 매매하려는 종목, 종목추가창에는 KOSPI종합 or KOSDAQ 종합을 띄었습니다.)
다음 식에서 뭐가 잘 못된 건가요? (검증은 완료됐으나, 시뮬레이션이 영 이상해서요.)
제가 만들고자 한것은
1. 하루전 (KOSDAQ or KOSPI 지수) 종가가 20이평선위에 있고,
오늘, (KOSDAQ or KOSPI 지수)의 시초가에서 전날 (KOSDAQ or KOSPI 지수)의 고가-저가폭의 2배수를
넘을 때 특정 종목을 매수하라
는 매수식을 만들고
2. 매수 당일 종가에 매도하라와
3. 매수 다음날 시초가에 매도하라는 매도식을 만들고 싶습니다.
매도식은 if 조건을 뭐라고 넣을지, sell 은 어떻게 해야 하는지도 궁금합니다.
4. 덧붙여서 최근 20일봉의 고가-저가폭의 평균은 어떻게 식을 쓸 수 있을까요?
Input : p1(20), r(2);
var : value(0,Data2), 종가(0,Data2), 고가(0,Data2), 저가(0,Data2), 현재가(0,Data2), 시초가(0,Data2);
value = Data2(ma(C,p1)[1]);
종가 = Data2(Close[1]);
고가 = Data2(High[1]);
저가 = Data2(Low[1]);
현재가 = Data2(C);
시초가 = Data2(Open);
If 종가 - value > 0 and (현재가 - 시초가 - (고가-저가)*r) > 0 Then
Buy();
2018-02-15
187
글번호 116662
답변완료
Re : 수식 추가요청 드립니다.
안녕하세요
수정해주신 아래수식을 차트에 적용하니 진입과 청산이 계속나오네요.
( 추가 요청전 수식은 선물 1계약 진입으로
-> 당일 진입식이 매수로 1차 진입할 경우, 매수로만 2차, 3차.....진입 -> 매수 목표청산, 당일 매도진입 금지.
-> 당일 진입식이 매도로 1차 진입할 경우, 매도로만 2차, 3차.....진입 -> 매도 목표청산, 당일 매수진입 금지.
그리고 목표청산후 진입은 목표 청산한봉의 다음봉 시가에 진입하는 사용중인 수식 입니다.)
이수식에 추가하여
1차 진입이 당일손실로 손절하는 경우우에 한하여 손절한봉 다음봉 시가에 1차진입 반대방향으로 스위칭, 2계약으로 추가진입 하고 2계약 합산수익 0.7PT이거나, 2계약 합산 추가손실 0.6PT 일경우 당일매매가 종료 되도록 수정요청 드립이다.
감사합니다.
//---------------------------------------------------------------------------------
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 추가요청 드립니다.
> 안녕하세요
예스스탁입니다.
Input : Period(12), sigPeriod(9),SSPT1(0.5),당일손실(1.0);
var : N1(0),daypl(0),Xcond(false),T1(0),entry(0);
if Bdate != Bdate[1] Then{
Xcond = false;
N1 = NetProfit;
T1 = TotalTrades;
Condition1 = false;
}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then {
if entry == 1 and IsExitName("dbl1",1) == true Then{
Sell("BS",AtMarket,def,2);
Condition1 = true;
}
if entry == 1 and IsExitName("dsl1",1) == true then{
Buy("SB",AtMarket,def,2);
Condition1 = true;
}
if entry >= 2 and
(IsExitName("dbl",1) == true or IsExitName("dsl",1) == true or
IsExitName("bl",1) == true or IsExitName("bl",1) == true ) then
Xcond = true;
}
daypl = NetProfit-N1;
value1 = TRIX(Period);
value2 = ema(value1, sigPeriod);
if MarketPosition == 0 and TotalTrades > TotalTrades[1] and
(IsExitName("sp1",1) == true or IsExitName("bp1",1) == true) and
Xcond == false then
{
if MarketPosition(1) == 1 and Condition1 == false Then
buy("bb",AtMarket);
if MarketPosition(1) == -1 and Condition1 == false Then
sell("ss",AtMarket);
}
If CrossUP(value1, value2) and Xcond == false and entry < 1 Then
{
Buy();
}
If CrossDown(value1, value2) and Xcond == false and entry < 1 Then
{
Sell();
}
if MarketPosition == 1 then
{
if entry == 1 Then
ExitLong("dbl1",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
if entry >= 2 then{
if Condition1 == true then
{
ExitLong("bl",AtStop,EntryPrice-(0.6/CurrentContracts));
ExitLong("bp",AtLimit,EntryPrice+(0.7/CurrentContracts));
}
if Condition1 == false then
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if Condition1 == false then
ExitLong("bp1",Atlimit,EntryPrice+(SSPT1/CurrentContracts));
}
if MarketPosition == -1 then
{
if entry == 1 then
ExitShort("dsl1",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
if entry >= 2 then{
if Condition1 == true then
{
ExitShort("sl",AtStop,EntryPrice+(0.6/CurrentContracts));
ExitShort("sp",Atlimit,EntryPrice-(0.7/CurrentContracts));
}
if Condition1 == false then
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
if Condition1 == false then
ExitShort("sp1",Atlimit,EntryPrice-(SSPT1/CurrentContracts));
}
SetStopEndofday(150000);
즐거운 하루되세요
> dandy 님이 쓴 글입니다.
> 제목 : 수식 추가요청 드립니다.
> > 안녕하세요.
아래 수식에서 선물 1계약 진입수량 매매하고, 1차 진입이 당일손실로 손절하는 경우우에 한하여 손절한봉 다음봉 시가에 1차진입 반대방향으로 스위칭, 2계약으로 추가진입 하고 2계약 합산수익 0.7PT이거나, 2계약 합산 추가손실 0.6PT 일경우 당일매매 종료 수식만 추가요청 드립니다.
감사합니다.
//--------------------------------------------------------------------------------------------------
Input : Period(12), sigPeriod(9),SSPT1(0.5),당일손실(1.0);
var : N1(0),daypl(0),Xcond(false),T1(0),entry(0);
if Bdate != Bdate[1] Then{
Xcond = false;
N1 = NetProfit;
T1 = TotalTrades;
}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] and
(IsExitName("dbl",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
daypl = NetProfit-N1;
value1 = TRIX(Period);
value2 = ema(value1, sigPeriod);
if MarketPosition == 0 and TotalTrades > TotalTrades[1] and IsExitName("StopProfitTarget",1) == true and Xcond == false then{
if MarketPosition(1) == 1 Then
buy("bb",AtMarket);
if MarketPosition(1) == -1 Then
sell("ss",AtMarket);
}
If CrossUP(value1, value2) and Xcond == false and entry < 1 Then
{
Buy();
}
If CrossDown(value1, value2) and Xcond == false and entry < 1 Then
{
Sell();
}
if MarketPosition == 1 then{
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
SetStopPosition;
SetStopProfittarget(SSPT1,PointStop);
SetStopEndofday(150000);
//--------------------------------------------------------------------------------------------------
2018-02-15
154
글번호 116661
답변완료
추가 문의 드립니다.
안녕하세요?
오전에 시스템문의 답변 감사합니다.
신호발생시에 신호위에 가격표시하는 문제는 처리되었습니다.
추가로 해당 가격에 라인을 긋고 싶습니다.
어떻게 해야 하나요?
참고가능하게 이미지 첨부합니다.
아 그리고,,,
다음 신호가 나올때까지만 라인이 보였으면 좋겠습니다.
2018-02-14
240
글번호 116658
정상에서야 님에 의해서 삭제되었습니다.
2018-02-14
66
글번호 116655
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 시스템
Strategy: Darvas by Guppy
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low
then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_Low, Date[3], Time[3],
D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[3], Time[3],
D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[BarsSinceDH],
Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,
Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High
then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end ;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close >
D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end ;
if Close crosses under D_Low then
DownTrend = 0
else if BreakoutEntry and Close crosses over D_High then
DownTrend = 1
else if BreakoutEntry and DownTrend = 1 and
BarsSinceDL = 3 then
DownTrend = 2 ;
if ( BreakoutEntry and DownTrend = 2 ) or
BreakoutEntry = false then
begin
if VolumeEntry then
begin
if Close crosses over MyTrigger and Volume >
Average( Volume, VolumeAvgLen ) * VolumeFactor
then
Buy next bar market ;
end
else if Close < MyTrigger then
Buy next bar MyTrigger stop ;
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell next bar at market ;
end
else
Sell next bar at MyStop stop ;
end ;
2. 기타
이전에 begin end는 중괄호라고 말씀해주셨던 것 같은데요. 트레이드스테이션 코드는 Sell next bar at market 이런 주문식 빼고 대부분 동일한가요?
2018-02-14
250
글번호 116648
답변완료
스톡케스팅
스톡케스팅 슬로우 수치좀 가능할까요?
2018-02-14
173
글번호 116647