커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6327
글번호 230811
답변완료
문의드립니다.
안녕하세요.
차트에 표시되는 최저점과 최고점을 기준으로 진입하는 시스템 수식을 여쭈어 봅니다.
가능 하다면 힘드시드라도 아래 2가지 수식으로 부탁을 드리겟습니다.
당일 종가기준 캔들에 최저점 표시이후 <=> 최고점 표시이후 매수 및 매도진입 방법
1번수식 매수진입::최저점 표시이후 가중이평(wma) 5일선이 10일선을 상승돌파할때 매수
매도진입::최고점 표시이후 가중이평(wma) 5일선이 10일선을 하락 돌파할때 매도
공통 => 진입 후 종가기준 캔들갯수 카운터 후 15개이후부터 매수가 대비 고점 또는 저점 대비 50% 하락시 청산 후 다음 신호에서 재진입
진입가대비 손절은 25틱으로 하고싶습니다.
2번수식 당일 종가기준 최저점이 표시된캔들 다음 2번째 캔들에서 매수진입
당일 종가기준 최고점이 표시된캔들 다음 2번째 캔들에서 매도진입
공통=> 진입후 고점 또는 저점대비 50% 하락 또는 상승시 청산 후 다음 신호에서 진입
진입후 손절 25틱으로 하고싶습니다.
감사합니다.
2017-04-05
211
글번호 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
286
글번호 108515
답변완료
수식의뢰 드려요
해보다가 안되서 전문가님께 도움을 받으려고 합니다!
국선, 해선, 상관없이 30분 챠트에서 변곡점을 찾아보려고 합니다!
위꼬리나 아래 꼬리가 길개 달린 패턴식 봉챠트를 만들고 조건에 성립된다면
강조식으로 표시도 되고 신호도 같이 나타나게 부탁드립니다!
첨부파일에 최대한 상세히 적었습니다!
만약에 꼭 아래 조건되로 안된다면 비슷한 상황이라도 진입식을 부탁드립니다!
부탁드립니다!
2017-04-05
259
글번호 108514
답변완료
오류메세지
예스트레이드 로그인 후 오류메세지가 계속 반복해서 뜨는데 처리방법 좀 알려주시면 감사하게습니다
4월 이후 교육 일정은 어떻게 되나요?
일요일에 하실 예정이면 좋겠습니다^^
2017-04-05
320
글번호 108512
답변완료
시스탬식
안녕하세요
시스템식 부탁좀 드립니다
교차기법
매수=해외오일기준 입니다
현재1분봉 종가가 볼린저 밴드 중심선 위에있고
이평30선이 75선 교차돌파
거래량이 1분봉기준 30봉이내 1000개이상 발생(양봉 거래량)
30봉합산 거래량이 아니고 1분봉 개별 기준임
그리고 30분봉이 양봉상태
거래시작시간-오후18시
매도=매수의 반대
익절천산=0.8프로
감사합니다
2017-04-06
225
글번호 108511
답변완료
시스템에서 아래의 산식을 넣으니 "수식에서 참조할 첫번째 종목데이터가 없습니다" 라고 나오
아래의 산식을 넣으니 "수식에서 참조할 첫번째 종목데이터가 없습니다" 라고 나옵니다 왜그런지 알려주세용
var : intCBuy(0), intStop(18); // intCBuy (buy band), intCSell (Sell band) ; intStop : 손절 틱수 --->>>>>>>>>>>>>>>>>>>>
var : intCSell(0);
var : intPft(100); // 익절 틱수
var : NoTick(2); // /* 매직넘버 라인 몇틱 앞에서 청산할지를 알려주는 변수 : 1틱 */
var : sngMx(295.05), sngDt(0.90) ; // 매직넘버라인의 제일 큰 숫자와 그 사이 간격을 저장할 변수: 278.85: 0.9 | 278.85 : 1.8 | 277.95 : 1.8
var : WH(0), WL(0); // WH : 연중 최고점, WL : 연중 최저점
var : i(0), j(0), intN(0); // 임시변수
var : sngNum(5); // 매직넘버라인의 갯수
var : sngNo(0); // sngNo = sngNum -1
var : sngT(100), sngPos(0); // 현재봉과 가장 가까운 매직넘버라인을 찾기 위해 사용하는 임시 변수, sngPos : 현재봉과 가장 가까운 라인의 배열상의 위치
var : intBB(0), intSB(0); // 스위칭을 피하기 위해 손절을 늘리는 변수 추가 : intBB = intCBuy* onetick, intSB = intCSell * onetick --->>>>>>>>>>>>>>>>>>>>
var : sngC1(0, data2); // 당일 첫봉일때, C[1] 을 O 로 바꾸기 위한 변수
array : MagicNum[5](0); // 랜덤 라인값을 저장할 변수
array : MNPos[2](0); // 매직넘버라인의 위치 저장 변수 : queue 개념 도입
// 주문의 조건을 판단하는 과정에서 쓰이는 변수 : 주문 결정이 되면,
// 1) MNPos[0] -> MNPos[1]
// 2) i -> MNPos[0]
// 매직넘버라인 최신값이 항상 MNPos[0], 직전값은 MNPos[1] 에 저장됨
array : sngMN[70](0); // 매직넘버라인 값을 저장할 변수
var : cond0(false), cond1(false); // 선부근 매수 : cond1(True), 선부근 매도 : cond2(True) (2017/04/01)
input: sngA(-2), sngB(-4); // 지지선 간격 조정 변수 <<<<<<<<<<<<<<<<<<<<<<<<<------------------------------------>>>>
input : sngC(-1); // 지지선 간격 조정 변수 <<<<<<<<<<<<<<<<<<<<<<<<<------------------------------------>>>>
input : sngD(2), sngE(3); // 지지선 간격 조정 변수 <<<<<<<<<<<<<<<<<<<<<<<<<------------------------------------>>>>
// future
// 매직넘버라인의 제일 큰 숫자와 그 사이 간격
sngNum = 60 ; // 매직넘버라인 갯수
sngNo = sngNum - 1; // 매직넘버라인 갯수 - 1
// 초기화할 변수
intCSell = intCBuy;
intBB = intCBuy * PriceScale;
intSB = intCSell * PriceScale;
// 매직넘버라인 값들을 배열에 모두 저장
for intN = 0 to sngNo
{
sngMN[intN] = sngMx -sngDt * intN;
}
// 매직넘버라인들 간격을 조정해서 배열에 저장(5개)
MagicNum[0] = sngMN[0] - sngDt * sngA;
MagicNum[1] = MagicNum[0] - sngDt * sngB;
MagicNum[2] = MagicNum[1] - sngDt * sngC;
MagicNum[3] = MagicNum[2] - sngDt * sngD;
MagicNum[4] = MagicNum[3] - sngDt * sngE;
// 0,0,0,9,10
// 당일 첫봉일 때 조건 삭제
sngC1 = data2(C[1]); // sngC1 = data2(O);
// 손절매(자동 손절) : 10 tick
SetStopLoss(intStop * pricescale, Pointstop);
// 손절매(자동 익절) : 106 - 1385 tick
SetStopProfittarget(intPft * pricescale, Pointstop);
for i = 0 to sngNo
{
if(MarketPosition == 0 ) then
{
// >>> 매수 <<<
// 1분전의 1분봉 종가가 매직넘버선(18틱 간격의 지지선) 밑에 있다가 현재 1분봉의 종가가 파란선(매직넘버선) 위로 올라온 경우에는 buy()
// if (C[1] <= MagicNum[i] ) and ( C > MagicNum[i]) then ( 원본) >>>>>>>>>>>>>>>>>>>>
if (sngC1 <= MagicNum[i]) and ( data2(C) > MagicNum[i] ) then
{
MNPos[1] = MNPos[0]; // queue 개념 사용
MNPos[0] = i;
cond0 = True;
cond1 = False;
}
// >>> 매도 <<<
// 1분전의 1분봉 종가가 매직 넘버선 위에 있다가 종가가 매직넘버선 아래로 내려간 경우 sell()
// if(C[1] >= MagicNum[i]) and ( C < MagicNum[i]) then >>>>>>>>> 원본
if(sngC1 >= MagicNum[i] ) and ( data2(C) < MagicNum[i]) then
{
MNPos[1] = MNPos[0]; // queue 개념 사용
MNPos[0] = i;
cond0 = False;
cond1 = True;
}
if cond0 and (C <= MagicNum[i] + NoTick * PriceScale) and (C >= MagicNum[i]) Then
{
buy("buy_UV"); // , Atstop, MagicNum[i] + NoTick * PriceScale); // "buy_UV" 라는 이름으로 트레이딩 시스템 차트에 표출되도록 합니다.
}
if cond1 and (C >= MagicNum[i] - NoTick * PriceScale) and (C <= MagicNum[i]) Then
{
sell("sell_UV"); // , Atstop, MagicNum[i] - NoTick * PriceScale);
}
// >>> 지지선 매수 <<<
// 매직넘버선 1틱 위까지에 지금봉의 저가가 있고 지금봉의 종가와 시가가 매직넘버선 위인 경우 buy() ----->>>>>>>>>>>>>>>>>>>>>
if(L >= MagicNum[i] + Notick * pricescale) and (L >= MagicNum[i]) and ( data2(C) > MagicNum[i] ) and ( data2(O) > MagicNum[i] ) then
{
MNPos[1] = MNPos[0]; // queue 개념 사용
MNPos[0] = i;
buy("counter_buy_UV");
}
// >>> 저항선 매도 <<<
// 매직넘버선 1틱 아래에까지 고가가 있고 종가와 시가가 매직넘버선 아래인 경우 sell()
if (H >= MagicNum[i] - Notick * pricescale) and (H <= MagicNum[i]) and ( data2(C) < MagicNum[i]) and ( data2(O) < MagicNum[i]) then
{
MNPos[1] = MNPos[0]; // queue 개념 사용
MNPos[0] = i;
sell("counter_sell_UV");
}
}
if(MarketPosition == 1) then
{
// >>> 매수 청산 <<<
// 매직넘버선이 이전 진입시 보다 위에 있으면서
// 현재봉의 고점이 매직넘버선 보다 한틱아래까지 터치하면 매수 청산
if (MNPos[0] > i) and (H >= MagicNum[i] - Notick * pricescale) and (H <= MagicNum[i]) then // MNPOS[0] -> MNPOS[1] (2017/04/02)
{
ExitLong("exit_buy_UV_NoSW");
cond0 = False;
}
// >>> 스위칭 매도 <<<
// 매직넘버선이 이전 진입시와 같고
// 1분전의 1분봉 종가가 매직 넘버선 위에 있다가 종가가 매직넘버선 아래로 내려간 경우 sell()
if (MNPos[0] == i) and (sngC1 >= MagicNum[i] - intSB) and (data2(C) < MagicNum[i] - intSB) then // MNPOS[0] -> MNPOS[1] (2017/04/02)
{
MNPos[1] = MNPos[0]; // queue 개념 사용
MNPos[0] = i;
cond0 = False;
cond1 = True;
}
if cond1 and (C == MagicNum[i] - NoTick * PriceScale) Then
{
sell("SW_to_sell"); // , Atstop, MagicNum[i] - NoTick * PriceScale);
}
}
if (MarketPosition == -1) then
{
// >>> 매도 청산 <<<
// 매직넘버선이 이전 진입시 보다 아래에 있으면서
// 현재봉의 저점이 매직넘버선 보다 한틱위까지 터치하면 매수 청산
if (MNPos[0] < i) and (L == MagicNum[i] + Notick * pricescale) then // MNPOS[0] -> MNPOS[1] (2017/04/02)
{
ExitShort("exit_sell_UV_NoSW");
cond1 = false;
}
// >>> 스위칭 매수 <<<
// 매직넘버선이 이전 진입시와 같고
// 1분전의 1분봉 종가가 매직 넘버선 아래에 있다가 종가가 매직넘버선 위로 올라간 경우 sell()
if (MNPos[0] == i) and (sngC1 <= MagicNum[i] + intBB) and (data2(C) > MagicNum[i] + intBB) then // MNPOS[0] -> MNPOS[1] (2017/04/02)
{
MNPos[1] = MNPos[0]; // queue 개념 사용
MNPos[0] = i;
cond0 = True;
cond1 = False;
}
if cond0 and (C <= MagicNum[i] + NoTick * PriceScale) and (C >= MagicNum[i]) Then
{
buy("SW_to_buy");
}
}
}
// MessageLog("pos1 : %.2f pos0 : %.2f i : %.2f" , MNPos[1], MNPos[0], i);
// 주간장 마감 1630분 5분 전 1625분 청산
//if ((marketposition == 1) or (MarketPosition == -1)) and (stime == 162500) then
//{
// SetStopEndofday(1530); // 2016.8월 이후 1530
2017-04-05
368
글번호 108503
답변완료
ask
아래 수식은 모두 2개이며 09시부터 거래하게 되어있는데
13시부터 거래하고 싶습니다.
해당 조건을 넣어주셨으면 합니다.
항상 고맙습니다.
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),H2(0,data1),DH2(0,data1);
C2 = data2(C);
H2 = data2(H);
DH2 = data2(HighD(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
C2 <= DH2-data2(PriceScale*B1) and C2[1] > DH2-data2(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 C2 >= EL+data2(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 C2 <= HH-PriceScale*B2 and C[1] > HH-data2(PriceScale*B2) Then
buy("b2");
if MarketPosition== -1 and entry == 2 and H2 >= C2[BarsSinceEntry]+data2(PriceScale*X2) 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),L2(0,data1),DL2(0,data1);
C2 = data2(c);
L2 = data2(L);
DL2 = data2(LowD(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
C2 >= DL2+data2(PriceScale*B1) and C2[1] < DL2+data2(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 C2 <= EH-data2(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 C2 >= LL+data2(PriceScale*B2) and C2[1] < LL+data2(PriceScale*B2) Then
buy("b2");
if MarketPosition== 1 and entry == 2 and L2 <= C2[BarsSinceEntry]-data2(PriceScale*13) Then
exitlong("bx2");
2024-09-02
208
글번호 108496
답변완료
문의 드립니다.
안녕하세요.
매번 수고해 주셔서 감사합니다.
만들고자 하는 지표는
240 이동평균선을 따라 +/-25 과 +/- 50틱 되는위치에 선을 그릴 수 있도록 해 주세요.
240선을 따라 위/아래로 각각 2개씩의 선이 나란히 움직이도록 하고 그사이에 첨부된 그림파일과같이 색을 넣어 주시면 감사하겠습니다.
수고하세요
2017-04-06
260
글번호 108495