커뮤니티

예스랭귀지 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분 챠트에서 변곡점을 찾아보려고 합니다! 위꼬리나 아래 꼬리가 길개 달린 패턴식 봉챠트를 만들고 조건에 성립된다면 강조식으로 표시도 되고 신호도 같이 나타나게 부탁드립니다! 첨부파일에 최대한 상세히 적었습니다! 만약에 꼭 아래 조건되로 안된다면 비슷한 상황이라도 진입식을 부탁드립니다! 부탁드립니다!
프로필 이미지
qha71
2017-04-05
259
글번호 108514
시스템
답변완료

오류메세지

예스트레이드 로그인 후 오류메세지가 계속 반복해서 뜨는데 처리방법 좀 알려주시면 감사하게습니다 4월 이후 교육 일정은 어떻게 되나요? 일요일에 하실 예정이면 좋겠습니다^^
프로필 이미지
mirror05
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
프로필 이미지
ds2335
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개씩의 선이 나란히 움직이도록 하고 그사이에 첨부된 그림파일과같이 색을 넣어 주시면 감사하겠습니다. 수고하세요
프로필 이미지
고박사122
2017-04-06
260
글번호 108495
지표