커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7324
글번호 230811
답변완료
ask
보조차트를 이용하는 2개의 수식을 요청드렸는데
첫번째 수식(보조차트 for kodex인버스 ETF_선물 SELL 이용)에서 오류가 발생했습니다.
두번째 수식(보조차트 for kodex200 ETF_선물 BUY 이용)은 문제가 없습니다.
첨부파일 1(당일 청산 13시 세팅)은 보조차트 이용 거래이며 선물 SELL 수식에 기초합니다.
1회 거래만 하고 끝내고 있습니다.
첨부파일 2는 선물 SELL 수식 거래로서 2번의 거래를 합니다.
첨부파일 2와 동일하게 보조차트 이용 거래도 동일한 지점에서 2번의 거래를 해야 합니다.
첨부파일 3(당일 청산 13시 세팅)은 보조차트 이용 거래이며 선물 BUY 수식에 기초합니다.
선물 BUY 수식 거래와 보조차트 이용 거래 모두 동일한 지점에서 2번의 거래를 합니다.
살펴주시기 바랍니다.
******
안녕하세요
예스스탁입니다.
수식에 atstop이나 atlimit등의 타입은 기본차트에만 적용되는 내용입니다.
지정된 값과 기본차트의 실시간 현재가와만 비교를 합니다.
해당 내용을 참조데이터로 변경하면 봉안성시로만 가능합니다.
이용에 참고하시기 바랍니다.
1
input : b1(11),b2(13),X1(13),X2(13);
var : T1(0,data1),entry(0,data1),HH(0,data1),EL(0,data1),C2(0,data1);
C2 = data2(C);
if Bdate != Bdate[1] Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 and
data2(C <= HighD(0)-PriceScale*B1 and C[1] > HighD(0)-PriceScale*B1) Then
buy("b1");
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then
EL = data2(L);
if data2(L) < EL Then
EL = data2(L);
if entry == 1 and MarketPosition == -1 and data2(C >= EL+PriceScale*X1) Then
ExitLong("sx1");
}
if TotalTrades > TotalTrades[1] Then
HH = data2(H);
if data2(H) > HH Then
HH = data2(H);
if MarketPosition == 0 and entry == 1 and data2(C <= HH-PriceScale*B2 and C[1] > HH-PriceScale*B2) Then
buy("b2");
if MarketPosition== -1 and entry == 2 and data2(H >= C2[BarsSinceEntry]+PriceScale*13) Then
ExitLong("bx2");
2
input : b1(11),b2(13),X1(13),X2(13);
var : T1(0,data1),entry(0,data1),LL(0,data1),EH(0,data1),C2(0,data1);
C2 = data2(c);
if Bdate != Bdate[1] Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 and
data2(C >= lowD(0)+PriceScale*B1 and C[1] < lowD(0)+PriceScale*B1) Then
buy("b1");
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then
EH = data2(H);
if data2(H) > EH Then
EH = data2(H);
if entry == 1 and data2(C <= EH-PriceScale*X1) Then
exitlong("bx1");
}
if TotalTrades > TotalTrades[1] Then
LL = data2(L);
if data2(L) < LL Then
LL = data2(L);
if MarketPosition == 0 and entry == 1 and data2(C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2) Then
buy("b2");
if MarketPosition== 1 and entry == 2 and data2(L <= C2[BarsSinceEntry]-PriceScale*13) Then
exitlong("bx2");
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 주차트 /보조차트 수식
> 아래 수식을 주차트 / 보조차트 수식으로 변경바랍니다.
1. sell 전용 수식
2. buy 전용 수식
항상 고맙습니다.
1) sell 전용 수식(주차트 kodex인버스, 보조차트 kospi200선물)
input : b1(11),b2(13),X1(13),X2(13);
var : T1(0),entry(0),HH(0),EL(0);
if Bdate != Bdate[1] Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 and
C <= DayHigh-PriceScale*B1 and C[1] > DayHigh-PriceScale*B1 Then
sell("s1");
if MarketPosition == -1 Then{
if CurrentContracts > CurrentContracts[1] Then
EL = L;
if L < EL Then
EL = L;
if entry == 1 and MarketPosition == -1 and C >= EL+PriceScale*X1 Then
ExitShort("sx1");
}
if TotalTrades > TotalTrades[1] Then
HH = H;
if H > HH Then
HH = H;
if MarketPosition == 0 and entry == 1 and C <= HH-PriceScale*B2 and C[1] > HH-PriceScale*B2 Then
sell("s2");
if MarketPosition== -1 and entry == 2 Then
ExitShort("sx3",AtStop,EntryPrice+PriceScale*13);
2) buy 전용 수식(주차트 kodex200, 보조차트 kospi200선물)
input : b1(11),b2(13),X1(13),X2(13);
var : T1(0),entry(0),LL(0),EH(0);
if Bdate != Bdate[1] Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 and C >= daylow+PriceScale*B1 and C[1] < daylow+PriceScale*B1 Then
buy("b1");
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then
EH = H;
if H > EH Then
EH = H;
if entry == 1 and C <= EH-PriceScale*X1 Then
exitlong("bx1");
}
if TotalTrades > TotalTrades[1] Then
LL = L;
if L < LL Then
LL = L;
if MarketPosition == 0 and entry == 1 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2 Then
buy("b2");
if MarketPosition== 1 and entry == 2 Then
exitlong("bx3",AtStop,EntryPrice-PriceScale*13);
2024-09-02
378
글번호 108531
답변완료
수식문의
1.
신호 발생후 50틱 수익났다가 본전 청산은 가능하게 되었는데
여기서 추가적으로 100틱까지 수익났을시에 50틱 청산은 불가능한건가요?
중복으로 시스템에 넣고 싶은데 계속 안되네요~
2.
신호 발생후 100틱 손실중이다가 20틱까지 오면 자동청산도 부탁드립니다.
2017-04-06
208
글번호 108521
답변완료
이동평균의 평균
안녕하세요. 특정구간의 모든 ema에 대해서 평균을 구하려고 합니다.
아래와 같이 작성했는데, 평균이 구해지지 않네요.
무엇이 잘못됬을까요? ema대신 ma를 사용하면 평균이 잘 구해집니다..
value1 = 0;
For count = StartMaPeriod to StartMaPeriod+NumPeriod-1 {
value1 = value1 + ema(Close, count);
}
value1 = value1 / NumPeriod;
2017-04-06
233
글번호 108520
답변완료
수식부탁합니다
안녕하세요-
아래수식에서
#,조건만족시 매수 진입후 1차청산을 못하고 진입자리로 되돌림시 진입자리에서 매수 청산
매도 진입후 1차청산을 못하고 진입자라로 되돌림시 진입자리에서 매도 청산
하는식을 추가하면 좋겠습니다.(다른조건은 기존수식과 동일 유지)
#,위의 되돌림 청산이후 기존수식(추가수식포함) 조건으로 매매시간 범위내에서 3회(변수)만
연속 재 진입하는 수식 부탁합니다.
input : Per1(28.2),시작시간(103000),종료시간(40000);
Var : S1(0),S2(1),S3(1),S4(1),Tcond(false),T1(0),entry(0);
if 시작시간 == 0 and sdate != sdate[1] Then{
Tcond = true;
T1 = TotalTrades;
}
if 시작시간 > 0 and (stime == 시작시간 or (stime > 시작시간 and stime[1] < 시작시간)) Then{
Tcond = true;
T1 = TotalTrades;
}
if 종료시간 == 0 and sdate != sdate[1] Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
if 종료시간 > 0 and (stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간)) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
if MarketPosition == 0 Then
entry = TotalTrades -T1;
Else
entry = (TotalTrades -T1)+1;
S1 = (dayhigh(0)+daylow(0))/2;
S2 = (dayhigh(1)+daylow(1))/2;
S3 = dayhigh(1);
S4 = daylow(1);
var1 = dayclose(1)+abs(S3-S4)*(Per1/100);
var2 = dayclose(1)-abs(S3-S4)*(Per1/100);
if MarketPosition == 0 and Tcond == true and entry < 1 Then{
if NextBarOpen <= var2 Then
buy("b1",AtStop,var2,2);
Else
buy("b2",Atlimit,var2,2);
if NextBarOpen >= var1 Then
sell("s1",AtStop,var1,2);
Else
sell("s2",Atlimit,var1,2);
}
if MarketPosition == 1 Then{
exitlong("bx1",atlimit,EntryPrice+PriceScale*27,"",1,1);
exitlong("bx2",atlimit,var1,"",1,1);
if CurrentContracts < MaxContracts Then
exitlong("bx3",AtStop,var2,"",1,1);
}
if MarketPosition == -1 Then{
ExitShort("sx1",atlimit,EntryPrice-PriceScale*27,"",1,1);
ExitShort("sx2",atlimit,var2,"",1,1);
if CurrentContracts < MaxContracts Then
ExitShort("sx3",AtStop,var1,"",1,1);
}
SetStopLoss(PriceScale*15,PointStop);
##,언제나 늘 감사합니다.
2017-04-06
240
글번호 108519
답변완료
문의 드립니다.
안녕하세요
아래 파동 수식에서
지나간 고점과 고점, 저점과 저점들은 계속
연결되고 오른쪽 연장은 되지 않고
현재고점과 전고점 추세선과 전고점과 전전고점 추세선 2개
현재 저점과 전저점 추세선, 전저점과 전전저점 추세선 2개만
오른쪽으로 연장되게 부탁드립니다.
미리 감사 드립니다
==========================
Input:length(5);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),처리구분(""),
TL_Val1(0),TL_Val2(0);
var : T(0),LTL1(0);
var : HTL1(0);
Array:고점[10,2](0),저점[10,2](0);
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{ If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
T = 1;
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
if T[1] != 1 Then{
TL_SetExtRight(LTL1,False);
LTL1 = TL_New(sDate[index-저점[2,2]],sTime[index-저점[2,2]],저점[2,1],sDate[index-저점[1,2]],sTime[index-저점[1,2]],저점[1,1]);
TL_SetExtRight(LTL1,true);
}
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
}
}
}
If 처리구분 == "저점처리" Then
{
T = -1;
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
if T[1] != -1 then{
TL_SetExtRight(HTL1,false);
HTL1 = TL_New(sDate[index-고점[2,2]],sTime[index-고점[2,2]],고점[2,1],sDate[index-고점[1,2]],sTime[index-고점[1,2]],고점[1,1]);
TL_SetExtRight(HTL1,true);
}
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
}
}
}
TL_SetSize(TL1,0.5);
TL_SetColor(TL1,white);
TL_SetColor(LTL1,green);
TL_SetColor(HTL1,yellow);
TL_SetSize(LTL1,1);
TL_SetSize(HTL1,1);
=================================
2017-04-05
341
글번호 108518
답변완료
문의드립니다.
안녕하세요.
차트에 표시되는 최저점과 최고점을 기준으로 진입하는 시스템 수식을 여쭈어 봅니다.
가능 하다면 힘드시드라도 아래 2가지 수식으로 부탁을 드리겟습니다.
당일 종가기준 캔들에 최저점 표시이후 <=> 최고점 표시이후 매수 및 매도진입 방법
1번수식 매수진입::최저점 표시이후 가중이평(wma) 5일선이 10일선을 상승돌파할때 매수
매도진입::최고점 표시이후 가중이평(wma) 5일선이 10일선을 하락 돌파할때 매도
공통 => 진입 후 종가기준 캔들갯수 카운터 후 15개이후부터 매수가 대비 고점 또는 저점 대비 50% 하락시 청산 후 다음 신호에서 재진입
진입가대비 손절은 25틱으로 하고싶습니다.
2번수식 당일 종가기준 최저점이 표시된캔들 다음 2번째 캔들에서 매수진입
당일 종가기준 최고점이 표시된캔들 다음 2번째 캔들에서 매도진입
공통=> 진입후 고점 또는 저점대비 50% 하락 또는 상승시 청산 후 다음 신호에서 진입
진입후 손절 25틱으로 하고싶습니다.
감사합니다.
2017-04-05
219
글번호 108517
마르뚝 님에 의해서 삭제되었습니다.
2017-04-05
1
글번호 108516
답변완료
수식부탁드립니다.
input : 텍스트소수점자리수(5);
Var:jjjjj(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL6(0),Tx(0),trnd(0),tx22(0);
var : TL11(0),TL22(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For jjjjj = 0 To 9
{
barArr[jjjjj] = barArr[jjjjj] + 1;
}
Condition1 = Highest(H,26) == H and lastHiVal <> H;
Condition2 = Lowest(L,26) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
// 전환점구분 null값으로 초기화;
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for jjjjj = 8 downto 1
{
valArr[jjjjj+1] = valArr[jjjjj];
barArr[jjjjj+1] = barArr[jjjjj];
turnPntArr[jjjjj+1] = turnPntArr[jjjjj];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
Tx = Text_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],NumToStr(valArr[2],텍스트소수점자리수));
if turnPntArr[1][0] == "Hi" then
Text_SetStyle(tx,0,0);
Else
Text_SetStyle(tx,0,1);
//TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
var1 = valArr[1];
var2 = valArr[2];
var3 = valArr[3];
TL11 = TL_New(sDate[barArr[3]],sTime[barArr[3]],valArr[3],sDate[barArr[1]],sTime[barArr[1]],valArr[3]);
TL_SetSize(TL11,1);
if turnPntArr[1][0] == "Hi" Then
TL_SetColor(TL11,RED);
Else
TL_SetColor(TL11,blue);
}
if turnPntArr[1][0] == "Lo" Then
trnd = -1;
if turnPntArr[1][0] == "hi" Then
trnd = 1;
}
}
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetEnd(TL11,sDate[barArr[1]],sTime[barArr[1]],valArr[3]);
Text_Delete(tx22);
tx22 = Text_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],NumToStr(valArr[1],텍스트소수점자리수));
TL_Delete(TL22);
if turnPntArr[1][0] == "Lo" Then{
TL22 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate,sTime,valArr[2]);
TL_SetSize(TL22,1);
TL_SetColor(TL22,RED);
}
if turnPntArr[1][0] == "hi" Then{
TL22 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate,sTime,valArr[2]);
TL_SetSize(TL22,1);
TL_SetColor(TL22,blue);
}
TL_SetSize(TL1[1],1);
TL_SetColor(TL1[1],BLACK);
첨부한 그림은 위 수식을 적용했을 때 나오는 지표입니다. 첨부파일에 나오는
적색라인과 청색라인을 plot으로 나타낼 수 있도록 부탁드립니다.
감사합니다.
2017-04-05
298
글번호 108515
답변완료
수식의뢰 드려요
해보다가 안되서 전문가님께 도움을 받으려고 합니다!
국선, 해선, 상관없이 30분 챠트에서 변곡점을 찾아보려고 합니다!
위꼬리나 아래 꼬리가 길개 달린 패턴식 봉챠트를 만들고 조건에 성립된다면
강조식으로 표시도 되고 신호도 같이 나타나게 부탁드립니다!
첨부파일에 최대한 상세히 적었습니다!
만약에 꼭 아래 조건되로 안된다면 비슷한 상황이라도 진입식을 부탁드립니다!
부탁드립니다!
2017-04-05
271
글번호 108514