커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
3732
글번호 230811
지표
답변완료

수정부탁드립니다.

변곡점에서 텍스트 표시부탁드립니다. var:length(150); Var : uTL1(0),uTL2(0),TL2_exist(0),color(0),uT(0), 종가사용여부(1), // 종가로 계산하려면 1로 설정한다. TL_NewBit(0), // 1:NewLine 2:SetEndLine slope(0),mid_idx(0),mid_val(0); var : TL11(0),TL12(0),TL13(0),TL14(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit); // HiLoLineZigZag는 사용자함수입니다. 링크에서 내려받으세요.. If Value1 == 1 Then { // 고점 uT = 1; If TL_NewBit == 1 Then { // 신규 If 고[2,1] < 고[1,1] Then { // 신규 고점이 이전 고점을 상향 돌파 // y = 기울기 * x + 절편 // x = (y - 절편) / 기울기 // y = 고[2,1] // 절편 = 저[1,1] slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); // 추세선의 기울기 mid_idx = Floor((고[2,1] - 저[1,1]) / slope); // 고[2,1]과 만나는 지점 mid_val = slope * mid_idx + 저[1,1]; Var1 = Index - (저[1,2] + mid_idx); // 추세선의 중간지점 x좌표 uTL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val); uTL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]); Var2 = Index - 저[1,2]; // 이전 색깔을 따라감 TL_SetColor(uTL1,color[Var2]); color = RED; // 상향 돌파했으므로 빨간색으로 전환 TL_SetColor(uTL2,color); TL2_exist = 1; // 추세선 2개를 연결해서 그린 것이므로 추세선이 2개임을 저장 } Else { uTL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetColor(uTL1,color); TL2_exist = 0; } } If TL_NewBit == 2 Then { // 연장 TL_Delete(uTL1); If TL2_exist == 1 Then TL_Delete(uTL2); // 추세선이 2개면 두번째 추세선도 삭제 If 고[2,1] < 고[1,1] Then { slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); mid_idx = Floor((고[2,1] - 저[1,1]) / slope); mid_val = slope * mid_idx + 저[1,1]; Var1 = Index - (저[1,2] + mid_idx); uTL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val); uTL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]); Var2 = Index - 저[1,2]; TL_SetColor(uTL1,color[Var2]); color = RED; TL_SetColor(uTL2,color); TL2_exist = 1; } Else { uTL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetColor(uTL1,color); TL2_exist = 0; } } } Else If Value1 == -1 Then { // 저점 uT = -1; If TL_NewBit == 1 Then { // 신규 If 저[2,1] > 저[1,1] Then { slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]); mid_idx = Floor((저[2,1] - 고[1,1]) / slope); mid_val = slope * mid_idx + 고[1,1]; Var1 = Index - (고[1,2] + mid_idx); uTL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val); uTL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]); Var2 = Index - 고[1,2]; TL_SetColor(uTL1,color[Var2]); color = BLUE; TL_SetColor(uTL2,color); TL2_exist = 1; } Else { uTL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetColor(uTL1,color); TL2_exist = 0; } } If TL_NewBit == 2 Then { // 연장 TL_Delete(uTL1); If TL2_exist == 1 Then TL_Delete(uTL2); If 저[2,1] > 저[1,1] Then { slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]); mid_idx = Floor((저[2,1] - 고[1,1]) / slope); mid_val = slope * mid_idx + 고[1,1]; Var1 = Index - (고[1,2] + mid_idx); uTL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val); uTL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]); Var2 = Index - 고[1,2]; TL_SetColor(uTL1,color[Var2]); color = BLUE; TL_SetColor(uTL2,color); TL2_exist = 1; } Else { uTL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetColor(uTL1,color); TL2_exist = 0; } } } TL_SetSize(uTL1,6); TL_SetSize(uTL2,1); if uT != uT[1] and uT == 1 then { TL11 = TL_New(sdate[index-저[1,2]],stime[index-저[1,2]],고[2,1],sdate[index-고[2,2]],stime[index-고[2,2]],고[2,1]); TL12 = TL_New(sdate[index-저[1,2]],stime[index-저[1,2]],저[1,1],sdate[index-고[2,2]],stime[index-고[2,2]],저[1,1]); TL13 = TL_New(sdate[index-고[2,2]],stime[index-고[2,2]],고[2,1],sdate[index-고[2,2]],stime[index-고[2,2]],저[1,1]); TL14 = TL_New(sdate[index-저[1,2]],stime[index-저[1,2]],고[2,1],sdate[index-저[1,2]],stime[index-저[1,2]],저[1,1]); // PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); TL_SetColor(Tl11,BLUE); TL_SetColor(Tl12,BLUE); TL_SetColor(Tl13,BLUE); TL_SetColor(Tl14,BLUE); TL_SetSize(Tl11,1); TL_SetSize(Tl12,1); TL_SetSize(Tl13,1); TL_SetSize(Tl14,1); } if uT != uT[1] and uT == -1 then { TL11 = TL_New(sdate[index-저[2,2]],stime[index-저[2,2]],고[1,1],sdate[index-고[1,2]],stime[index-고[1,2]],고[1,1]); TL12 = TL_New(sdate[index-저[2,2]],stime[index-저[2,2]],저[2,1],sdate[index-고[1,2]],stime[index-고[1,2]],저[2,1]); TL13 = TL_New(sdate[index-고[1,2]],stime[index-고[1,2]],고[1,1],sdate[index-고[1,2]],stime[index-고[1,2]],저[2,1]); TL14 = TL_New(sdate[index-저[2,2]],stime[index-저[2,2]],고[1,1],sdate[index-저[2,2]],stime[index-저[2,2]],저[2,1]); // PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); TL_SetColor(Tl11,RED); TL_SetColor(Tl12,RED); TL_SetColor(Tl13,RED); TL_SetColor(Tl14,red); TL_SetSize(Tl11,1); TL_SetSize(Tl12,1); TL_SetSize(Tl13,6); TL_SetSize(Tl14,6); }
프로필 이미지
외국인
2024-09-27
936
글번호 183796
지표
답변완료

문의드립니다.

청산식이 잘 안 먹힙니다. 한번 봐주시면 좋겠습니다. false, true 쪽이 잘못인지, 아니면 다른 문제가 있는건지 모르겠습니다. 예를 들어 "B_2"이 한번 나오면 바로 뒤에 "B_2" 청산이 다시 나오면 안되는데 나옵니다. 전체적으로 수식이 잘못된 게 있는지 확인 부탁 드리겠습니다. 제가 궁극적으로 원하는 것은 한번 나온 청산식은 진입신호가 종료되기 전까지 두번 나오지 않는 것을 원합니다. 그게 안된다면 연달아서라도 같은 신호가 나오지 않기를 바랍니다. if MarketPosition == 1 Then { if CurrentContracts < CurrentContracts[1] Then { if LatestExitName(0) == "B_1" Then Condition1 = true; if LatestExitName(0) == "B_2" Then Condition2 = true; if LatestExitName(0) == "B_3" Then Condition3 = true; } if Condition1 == False and DParity2 < 99.90 Then Exitlong("B_1",AtStop,NextBarOpen-PriceScale*15,"",1,1); if Condition2 == False and DParity2 < 99.80 Then Exitlong("B_2",AtStop,NextBarOpen-PriceScale*20,"",1,1); if Condition3 == False and DParity2 < 99.70 Then Exitlong("B_3",AtStop,NextBarOpen-PriceScale*25,"",1,1); } Else { Condition1 = False; Condition2 = False; Condition3 = False; } //----------------------------------------------------------------- if MarketPosition == -1 Then { if CurrentContracts < CurrentContracts[1] Then { if LatestExitName(0) == "S_1" Then Condition1 = true; if LatestExitName(0) == "S_2" Then Condition2 = true; if LatestExitName(0) == "S_3" Then Condition3 = true; } if Condition1 == False and DParity2 > 100.10 Then ExitShort("S_1",AtStop,NextBarOpen+PriceScale*15,"",1,1); if Condition2 == False T and DParity2 > 100.20 then ExitShort("S_2",AtStop,NextBarOpen+PriceScale*20,"",1,1); if Condition3 == False and DParity2 > 100.30 Then ExitShort("S_3",AtStop,NextBarOpen+PriceScale*25,"",1,1); } Else { Condition1 = False; Condition2 = False; Condition3 = False; }
프로필 이미지
카르마다
2024-09-27
770
글번호 183791
시스템

목마와숙녀 님에 의해서 삭제되었습니다.

프로필 이미지
목마와숙녀
2024-09-27
7
글번호 183790
사용자 함수

nams60 님에 의해서 삭제되었습니다.

프로필 이미지
nams60
2024-09-27
0
글번호 183789
시스템
답변완료

수식 부탁 드립니다. 항상 감사드립니다.

수식 부탁 드립니다. 항상 감사드립니다. 포지션 없을 때에, <5이평 20이평 골든 크로스일 때의 가격 - 8틱(변수로. 변수명 V1)> 에 매도 주문. 이 후 진입되면, 즉 숏포지션일 때에, 0틱 이익 후 5틱(변수로. 변수명 V2) 이익감소시 매수로 청산 (추적청산임) 포지션 없을 때에, 5이평 20이평 골든 크로스일 때의 가격에 매수 주문. 이 후 진입되면, 즉 롱포지션일 때에, 0틱 이익 후 5틱(변수로. 변수명 V2) 이익감소시 매도로 청산 (추적청산임) 감사합니다.
프로필 이미지
즐겁게
2024-09-27
806
글번호 183788
시스템
답변완료

수식 부탁 드립니다. 감사합니다.

수식 부탁 드립니다. 매수식: 진입: 5이평 20이평이 정배열일 경우에, 가격이 현재 가격보다 40틱(변수로 처리 = 변수명 V1) 넘게 하락한 후, 그 후의 최저점에서 20틱(변수로 처리 = 변수명 V2) 상승하면 매수. 청산: 진입 가격 이후 최고 가격에서 12틱(변수로 처리 = 변수명 V3) 하락하면 매도로 청산 (추적 스탑임) 매도식: 위의 역논리로 작성 (변수명은 V1, V2, V3를 그대로 사용) 감사합니다.
프로필 이미지
즐겁게
2024-09-26
695
글번호 183787
시스템

타요 님에 의해서 삭제되었습니다.

프로필 이미지
타요
2024-09-26
49
글번호 183786
종목검색
답변완료

오류

안녕하세요 시그널메이커에서는 대부분 구현이 제대로 되지않아서 예스이용해보려고합니다. 사용자함수 입력하려고합니다 근데 오류가 나옵니다 수정좀 부탁드립니다 Inputs: ATRLength(NumericSimple), ATRMult(NumericSimple), Strength(NumericSimple), STrend(NumericRef); Vars: vATR(0), vAvg(0), DN(0), UP(0), Trend(1), flag(0), flagh(0), ST(0), hl(0); hl = Highest(High, ATRLength) - Lowest(Low, ATRLength); vATR = Ema(hl, ATRLength); vAvg = ( Ema(High, Strength) + Ema(Low, Strength) ) / 2; UP = vAvg + vATR; DN = vAvg - vATR; If C > UP[1] And C > Highest(High, Strength)[1] Then Trend = 1 Else If C < DN[1] And C < Lowest(Low, Strength)[1] Then Trend = -1; If Trend < 0 And Trend[1] > 0 Then flag = 1 Else flag = 0; If Trend > 0 And Trend[1] < 0 Then flagh = 1 Else flagh = 0; If Trend > 0 And DN < DN[1] Then DN = DN[1]; If Trend < 0 And UP > UP[1] Then UP = UP[1]; If flag = 1 Then UP = vAvg + vATR; If flagh = 1 Then DN = vAvg - vATR; If Trend = 1 Then ST = DN Else ST = UP; SuperTrend = ST; STrend = Trend; 이 사용자 함수를 만든뒤 아래 자동매매만들고싶습니다 // Inputs inputs: ATRLength1(14), ATRMult1(3), Strength1(20); // Variables vars: strend1(0), st1(0); // Calculate SuperTrend st1 = SuperTrend(ATRLength1, ATRMult1, Strength1, strend1); // Trading Logic // Buy when the close price crosses above the SuperTrend If CrossUp(C, st1) Then Buy("매수"); // Sell when the close price crosses below the SuperTrend If CrossDown(C, st1) Then Sell("매도"); 자동매매로 전환하고싶습니다
프로필 이미지
몽탄
2024-09-26
617
글번호 183785
사용자 함수

회원 님에 의해서 삭제되었습니다.

프로필 이미지
회원
2024-09-26
334
글번호 183784
지표