커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6192
글번호 230811
답변완료
문의드립니다
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),
Text1(0),처리구분(""),T(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
{
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);
TL_Delete(TL2);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
TL2 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],
NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
TL_SetColor(TL2,MAGENTA);
}
}
If 처리구분 == "저점처리" Then
{
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);
TL_Delete(TL2);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
TL2 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],
NumToStr(저점[1,1],1));
Text_SetStyle(Text1, 2, 10);
TL_SetColor(TL2,BLUE);
}
}
TL_SetSize(TL1,3);
TL_SetColor(TL1,CYAN);
위수식에서 그림과같이 수평선을한파동건너뛰어서나오게했으면합니다,A자모형으로 원으로표시한것처럼 한번은안나오고 그다음엔 나오게(표사한부분이나오게) 부탁드립니다 ~~항상감사드립니다
2017-11-25
249
글번호 114488
답변완료
수식문의
안녕하세요
4개의 이평선중 현재가가 2개의 이평선을 돌파하면 매수 2개의 이평선을 하락하면 매도 그리고 다시돌파되면 매수 수식부탁합니다
2017-11-26
187
글번호 114485
답변완료
stochastics 골든 크로스, 데드 크로스에서 화살표
1.아래는 예스스탁에서 작성해주신 stochastics 골든 크로스, 데드 크로스에서 화살표 나오는 수식입니다
2. 이 수식을 기준선 20아래에서만 매수 신호가 나오고, 기준선 80이상에서만 매도 신호가 나오도록 수식 작성을 부탁드립니다.
Input : Period(12), Period1(5), Period2(5);
value1 = StochasticsK(Period,Period1);
value2 = StochasticsD(Period,Period1,Period2);
If CrossUP(value1, value2) Then Buy();
If CrossDown(value1, value2) Then sell();
2017-11-24
241
글번호 114482
답변완료
문의드립니다.
양봉이면 1, 음봉이면 -1 이렇게 값을 주고
120일간 누적한 값을 표현할 수 있는 방법 좀 알려주세요!!
2017-11-24
198
글번호 114478
답변완료
지표식 부탁드립니다
거래량 가중 이동 평균(Volumn Weighted Average Price)을 지표식으로 하려고 합니다
아래 식에서 오류가 나오는데 수정 부탁 드립니다
(for 문이나 array로 만들어야 하는 건지 모르겠네요)
Input : Period1(5), Period2(20);
Variables: TypicalPrice(0), TypicalPriceVolumn(0), Sum(0), VWAP(0), Var1(0), Var2(0);
TypicalPrice = (High + Low + Close) / 3
TypicalPriceVolumn = (TypicalPrice * Volume); //TypicalPice*Volumn
VWAP = Sum(TypicalPriceVolumn / Volume) //Volumn Weighted Average Price
Var1 = ma(VWAP, Period1);
Var2 = ma(VWAP, Period2);
Plot1(Var1, "VWAP1");
Plot2(Var2, "VWAP2");
수고하세요
2017-11-24
275
글번호 114477
답변완료
수식문의드립니다.
어제 질문했던 것을 보니 제가 질문을 잘못했더군요.
매수든 매도든 다수의 계약으로 한번에 진입한 이후,
청산을 여러가지 경우로 나누어 청산하는 전략을 세우려고 합니다.
예를 들어,
매수로 N계약만큼 진입 이후,
1. 체결된 계약(또는 남아 있는 계약)의 1/2은 0.5P(10틱)에서 청산
2. A라는 조건을 만족시 남아 있는 계약의 1/2은 청산
3. B라는 조건을 만족시 남아 있는 계약의 1/2은 청산
4. 체결된 계약(또는 남아 있는 계약 전부)에 대해서 C라는 조건을 만족시에는 모두 청산
위 1~4의 조건은 어떤 것이 먼저 만족할 지는 상황에 따라 다릅니다.
이와 같이 청산 전략을 세울경우 수식을 어떻게 만들어야 되나요?
(4번에서, C라는 조건이었는데, B라는 조건이라고 써놔서 혼란을 야기한 것 같습니다.)
알려주신 수식에서
var : count(0);
if MarketPosition == 1 then{
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "bx1" Then
Condition1 = true;
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "bx2" Then
Condition2 = true;
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "bx3" Then
Condition3 = true;
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "bx4" Then
Condition4 = true;
부분이 꼭 필요한가요?
각조건 별로...exitlong함수에서 currentcontracts*0.5나 currentcontracts를 써서 그냥 작성하면 오류가 나나요?
이래저래 청산되고 남은 계약수가 0이 되었을때는, exitlong이나 exitshort 함수가 실행되지 않도록 하는 작업이 꼭 필요한 것인지요? 그냥 currentcontracts 나 marketposition이 0이 되면 어차피 실행이 안되니 상관없는 것 아닌지 궁금합니다.
그냥, 위 예시에서.
if 진입 then
exitlong("",atlimit,EntryPrice+PriceScale*10,"",Floor(CurrentContracts*0.5),1);
if A조건 then
exitlong("",OnClose,def,"",Floor(CurrentContracts*0.5),1);
if B조건 then
exitlong("",OnClose,def,"",Floor(CurrentContracts*0.5),1);
if C조건 then
exitlong("",OnClose,def,"",Floor(CurrentContracts),1);
이런 식으로 해버리면 오류가 나나요?
2017-11-24
192
글번호 114476
답변완료
문의드립니다
아래 수식은 매수 매수청산, 매도 매도청산 수식을 하나로 통합하였으나
수식을 실제로 적용하니 일정구간은 계속 매수진입만 또는 일정구간은 매도진입만 실행이 됩니다
구현하고자 하는 수식은
매수진입후 매수청산, 매도진입후 매도청산 순으로 반복적으로 실행하여야 합니다
예를 들자면 매수진입-- 매수청산,
매수청산 후(또는 동시에) 매도진입-- 매도청산
매도청산 후(또는 동시에) 매수진입 순으로 구현하는 방법입니다
아울러 통합된 수식에서 구현이 불가능하다면 매수수식 한가지만을 이용하여 만들어 주세요
현재 매수수식은 매수진입-매수청산만 있습니다
이것을 매수진입 - 매수청산 동시에 매도진입 - 매도청산 동시에 매수진입 순으로 진행하고자 합니다
항상 감사합니다
input : b1(9),b2(9),X1(9),X2(9),진입눌림(3),진입돌파(1),청산눌림(3),청산돌파(1),거래횟수(20),시작시간(090000) ;
var : T1(0),entry(0),LL(0),EH(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0);
var : sHH(0),sEL(0),sE1(0),sH1(0),si1(0),sS1(0),sL1(0),sV1(0);
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime > 시작시간 and stime[1] < 시작시간) Then{
T1 = TotalTrades;
E1 = 0;
LL = L;
}
if stime >= 시작시간 then{
if L < LL Then
LL = L;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if E1 == 0 and C >= LL+PriceScale*B1 and C[1] < LL+PriceScale*B1 Then{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림 Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파 Then{
buy("b1");
}
}
if TotalTrades > TotalTrades[1] Then{
E1 = 0;
LL = L;
}
if L < LL Then
LL = L;
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if E1 == 0 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2 Then{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림 Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파 Then{
buy("b2");
}
}
if MarketPosition == 1 Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = H;
E1 = 0;
}
if H > EH Then{
EH = H;
E1 = 0;
}
if E1 == 0 and C <= EH-PriceScale*X1 Then{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*청산눌림 Then{
E1 = 2;
I1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파 Then{
exitlong("bx1");
E1 = 0;
}
}
}
if MarketPosition == 1 Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = H;
E1 = 0;
}
if H > EH Then{
EH = H;
E1 = 0;
}
if E1 == 0 and C <= EH-PriceScale*X2 Then{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*청산눌림 Then{
E1 = 2;
I1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파 Then{
exitlong("bx2");
E1 = 0;
}
}
}
}
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime > 시작시간 and stime[1] < 시작시간) Then{
T1 = TotalTrades;
sHH = H;
sE1 = 0;
}
if stime >= 시작시간 then{
if H > sHH Then
sHH = H;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if sE1 == 0 and C <= sHH-PriceScale*B1 and C[1] > sHH-PriceScale*B1 Then{
sE1 = 1;
sL1 = L;
si1 = index;
sV1 = sHH;
}
if sE1 == 1 and index > si1 then{
if L < sL1 Then
sL1 = L;
if H <= sV1 and H >= sH1+PriceScale*진입눌림 Then{
sE1 = 2;
si1 = index;
sS1 = sL1;
}
}
if sE1 >= 1 and H > sV1 Then{
sE1 = 0;
sHH = H;
}
if sE1 == 2 and index > si1 and C <= sS1-PriceScale*진입돌파 Then{
sell("s1");
}
}
if TotalTrades > TotalTrades[1] Then{
sE1 = 0;
sHH = H;
}
if H > sHH Then
sHH = H;
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if sE1 == 0 and C <= sHH-PriceScale*B2 and C[1] > sHH-PriceScale*B2 Then{
sE1 = 1;
sL1 = L;
si1 = index;
sV1 = sHH; //시작점 종가
}
if sE1 == 1 and index > si1 then{
if L < sL1 Then
sL1 = L;
if H <= sV1 and H >= sL1+PriceScale*진입눌림 Then{
sE1 = 2;
si1 = index;
sS1 = sL1;
}
}
if sE1 >= 1 and H > sV1 Then{
sE1 = 0;
sHH = H;
}
if sE1 == 2 and index > si1 and C <= sS1-PriceScale*진입돌파 Then{
sell("s2");
}
}
if MarketPosition == -1 Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
sEL = L;
sE1 = 0;
}
if L < sEL Then{
sEL = L;
sE1 = 0;
}
if sE1 == 0 and C >= sEL+PriceScale*X1 Then{
sE1 = 1;
sH1 = H;
si1 = index;
}
if sE1 == 1 and index > si1 Then{
if H > sH1 Then
sH1 = H;
if L <= sH1-PriceScale*청산눌림 Then{
sE1 = 2;
sI1 = index;
sS1 = sH1;
}
}
if sE1 == 2 and index > si1 and C >= sS1+PriceScale*청산돌파 Then{
ExitShort("sx1");
sE1 = 0;
}
}
}
if MarketPosition == -1 Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
sEL = L;
sE1 = 0;
}
if L < sEL Then{
sEL = L;
sE1 = 0;
}
if sE1 == 0 and C >= sEL+PriceScale*X2 Then{
sE1 = 1;
sH1 = H;
si1 = index;
}
if sE1 == 1 and index > si1 Then{
if H > sH1 Then
sH1 = H;
if L <= sH1-PriceScale*청산눌림 Then{
sE1 = 2;
sI1 = index;
sS1 = sH1;
}
}
if sE1 == 2 and index > si1 and C >= sS1+PriceScale*청산돌파 Then{
ExitShort("sx2");
sE1 = 0;
}
}
}
}
2017-11-24
184
글번호 114473
해월정 님에 의해서 삭제되었습니다.
2017-11-24
2
글번호 114467
답변완료
수식부탁드립니다
1.
daylow 에서 7번째 양 캔들 고가가 양 캔들 고가 중 가장 고가일 때
daylow 에서 5번째 양 캔들 시가 표시
dayhigh 에서 7번째 음 캔들 저가가 음 캔들 저가 중 가장 저가일 때
dayhigh 에서 5번째 음 캔들 시가 표시
감사합니다
2017-11-24
224
글번호 114466