커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 부탁합니다.

쿠르드 오일 해외선물 1분봉 기준입니다. 매도진입-청산 수식 1. 당일 매수 당일 청산기준입니다. 2. 1일 1회 진입 청산입니다. ( 1회만 진입후 진입 금지 ) 3. 진입조건 " 시가 + 100 tick 도달시 즉시 진입 " 매도 진입 " 4. 청산조건: 30tick 이익 발생시 바로 청산 -30tick 손실발생시 바로 청산 5. 새벽 6시까지 청산이 안될때는 강제 청산 (6시) 매수진입-청산 수식 1. 당일 매수 당일 청산기준입니다. 2. 1일 1회 진입 청산입니다. ( 1회만 진입후 진입 금지 ) 3. 진입조건 " 시가 - 100 tick 도달시 즉시 진입 " 매수 진입 " 4. 청산조건: 30tick 이익 발생시 바로 청산 -30tick 손실발생시 바로 청산 5. 새벽 6시까지 청산이 안될때는 강제 청산 (6시)
프로필 이미지
이형지
2019-02-21
131
글번호 126439
시스템
답변완료

재문의드립니다.

답변으로 인하여 매수, 청산 파일에 적용하여 61419 문제가 어느정도 해결되었습니다. 그런데 매수, 청산 조건에서 start2의 수식이 적용되지 않는것 같습니다. start1은 적용이 되어 매매가 되는데 start2가 적용이 되지 않습니다.T.T Input : 당일손실틱수(500); input : start1(163000),end1(233000); input : start2(000000),end2(050000); Var : N1(0),dayPl(0),당일손실(0),Xcond(false); var : Tcond(false); if Bdate != Bdate[1] Then { Xcond = false; N1 = NetProfit[1]; } if (sdate != sdate[1] and stime >= start1) or (sdate == sdate[1] and stime >= start1 and stime[1] < start1) then { Tcond = true; SetStopEndofday(end1); } if (sdate != sdate[1] and stime >= end1) or (sdate == sdate[1] and stime >= end1 and stime[1] < end1) then { Tcond = false; SetStopEndofday(0); } if (sdate != sdate[1] and stime >= start2) or (sdate == sdate[1] and stime >= start2 and stime[1] < start2) then { Tcond = true; SetStopEndofday(end2); } if (sdate != sdate[1] and stime >= end2) or (sdate == sdate[1] and stime >= end2 and stime[1] < end2) then { Tcond = false; SetStopEndofday(0); } 당일손실 = PriceScale*당일손실틱수; daypl = NetProfit-N1; if TotalTrades > TotalTrades[1] and (IsExitName("dbl",1) == true or IsExitName("dsl",1) == true or daypl <= -당일손실) then Xcond = true; if MarketPosition == 1 then { ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts)); } if MarketPosition == -1 then { ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts)); } If DayIndex == 0 Then { K_Value_Pos_Flag = 0; 매매조건_K_Flag = 0; 현재진입이후봉개수 = 0; } If Tcond == true and Xcond == false Then { //******************************************************************************************************* //******************************************************************************************************* If MarketPosition(0) == 1 Then { // 청산: LMS_ADX_STK_G If (LMSADXSTKPGP_Color == -1) || (ADX_2015_Flag == -1) Then { ExitLong("청산", OnClose, Close, DEF, 매수_수량, 1); 매매조건_K_Flag = 0; } // 호가청산 If 호가청산사용 == 1 Then { ExitLong(".청산", AtLimit, (EntryPrice + (호가Pt)), DEF, 매수_수량, 1); 호가청산_Flag = 1; } } If (UPDOWN_Flag == 1) && (LMSADXSTKPGP_Flag == 1) Then { If (MarketPosition(0) == 0) Then { If (호가청산_Flag == 0) Then { Buy("매수", OnClose, DEF, 매수_수량); 매매조건_K_Flag = 1; } } } If (LMSADXSTKPGP_Color == -1) || (ADX_2015_Flag == -1) Then { 호가청산_Flag = 0; } } ======================================================================================= 또 문의 드릴것은 매도, 청산 시스템에 동일하게 적용하였는데 호가pt를 지정하여 호가pt에 청산이 되지 않아 다시 문의를 드립니다. 매수,청산만 있는 수식과 매도,청산만 있는 수식에 차이가 있나요? 매수수식을 그대로 매도수식에 적용하니 호가pt가 적용되지 않고 좀 에러가 있는것 같습니다. 도와주십시오 매도, 청산 기준을 아래 시간대와 당일손실로 다시한번 더 부탁드리겠습니다. 호가PT를 지정하여 청산이 되지 않는 이유는 무엇인가요? Input : 시작시간(000000), 종료시간(240000); Var : K_Value_Pos_Flag(0); Var : 매매조건_K_Flag(0); Var : 현재진입이후봉개수(0); If DayIndex == 0 Then { K_Value_Pos_Flag = 0; 매매조건_K_Flag = 0; 현재진입이후봉개수 = 0; } If (sTime >= 시작시간) And (sTime <= 종료시간) Then { If MarketPosition(0) == -1 Then { If (LMSADXSTKPGP_Color == 1) || (ADX_2015_Flag == 1) Then { ExitShort("청산", OnClose, Close, DEF, 매도_수량, 1); 매매조건_K_Flag = 0; } If 호가청산사용 == 1 Then { ExitShort(".청산", AtLimit, (EntryPrice - (호가Pt)), DEF, 매도_수량, 1); 호가청산_Flag = 1; } } If (UPDOWN_Flag == -1) && (LMSADXSTKPGP_Flag == -1) Then { If (MarketPosition(0) == 0) Then { If (호가청산_Flag == 0) Then { Sell("매도", OnClose, DEF, 매도_수량); 매매조건_K_Flag = 1; } } } If (LMSADXSTKPGP_Color == 1) || (ADX_2015_Flag == 1) Then { 호가청산_Flag = 0; } } SetStopEndofday(StrToNum(LeftStr(NumToStr(종료시간, 0), 4))); 위와 같이 되어있는데 위 조건을 아래와 같이 시간을 나누려고 합니다. Input : 시작시간1(103000), 종료시간1(133000); Input : 시작시간2(000000), 종료시간2(020000); Input : 시작시간3(050000), 종료시간2(060000); 수식부탁드립니다. 2번째 질문은 위 수식기준 당일순손실 50틱 이하면 거래중단 식을 부탁드립니다. 감사합니다.
프로필 이미지
에쓰엠씨
2019-02-22
139
글번호 126438
시스템

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

프로필 이미지
2wnwn
2019-02-21
30
글번호 126437
지표
답변완료

수식문의

61388 답변 재문의 드립니다. 답변 주신 내용으로 확인하니 추세선뿐만 아니라 매수/매도 신호마저 나오지 않습니다. 아래와 같이 조건문에 0이 빠져 나갈수 없도록 하면 되기는 하는데.. 추세선이 제대로 그어지지가 않네요.. 번거로우시겠지만 다시 한번 검토 부탁드립니다. 감사합니다. input:Period(60),Multiplier(2); var:dAtr(0),UpperLevel(0),LowerLevel(0),Direction(0); input : P(5),P2(60); var : T(0),TL1(0),TL2(0); var : HD(0),HT(0),HH(0),HD1(0),HT1(0),HH1(0); var : LD(0),LT(0),LL(0),LD1(0),LT1(0),LL1(0); dAtr=ATR(Period); UpperLevel=(High+Low)/2+Multiplier*dAtr; LowerLevel=(High+Low)/2-Multiplier*dAtr; Direction = Direction[1]; if close >= UpperLevel[1] then Direction = 1; //수정 if close <= LowerLevel[1] then Direction = -1; //수정 #매수/매도 if Direction > 0 then { LowerLevel = Max(LowerLevel,LowerLevel[1]); Buy("매수"); T = 1; HD = sdate; HT = stime; HH = H; HD1 = HD[1]; HT1 = HT[1]; HH1 = HH[1]; if LL1 > 0 then { TL_Delete(TL1); TL1 = TL_New(LD1,LT1,LL1,LD,LT,LL); TL_SetExtLeft(TL1,true); TL_SetExtRight(TL1,true); TL_SetColor(TL1,RED); } } else { UpperLevel = Min(UpperLevel,UpperLevel[1]); Sell("매도"); T = -1; LD = sdate; LT = stime; LL = L; LD1 = LD[1]; LT1 = LT[1]; LL1 = LL[1]; if HH1 > 0 then { TL_Delete(TL2); TL2 = TL_New(HD1,HT1,HH1,HD,HT,HH); TL_SetExtLeft(TL2,true); TL_SetExtRight(TL2,true); TL_SetColor(TL2,BLUE); } } if T == 1 and H > HH Then { HH = H; HD = Sdate; HT = stime; } if T == -1 and L < LL Then { LL = L; LD = Sdate; LT = stime; } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식문의 > 안녕하세요 예스스탁입니다. 진입의 조건이 Direction이 0보다 크거나 작을때입니다. Direction은 1 아니면 -1값만 가지므로 해당 부분도 크로스로 정의하시면 됩니다. 1값으로 변하는 첫봉에 매수진입, -1로 변경되는 첫봉에 매도진입입니다. input:Period(60),Multiplier(2); var:dAtr(0),UpperLevel(0),LowerLevel(0),Direction(0); input : P(5),P2(60); var : T(0),TL1(0),TL2(0); var : HD(0),HT(0),HH(0),HD1(0),HT1(0),HH1(0); var : LD(0),LT(0),LL(0),LD1(0),LT1(0),LL1(0); dAtr=ATR(Period); UpperLevel=(High+Low)/2+Multiplier*dAtr; LowerLevel=(High+Low)/2-Multiplier*dAtr; Direction = Direction[1]; if close > UpperLevel[1] then Direction = 1; if close < LowerLevel[1] then Direction = -1; #매수/매도 if crossup(direction,0) then { LowerLevel = Max(LowerLevel,LowerLevel[1]); Buy("매수"); T = 1; HD = sdate; HT = stime; HH = H; HD1 = HD[1]; HT1 = HT[1]; HH1 = HH[1]; if LL1 > 0 then { TL_Delete(TL1); TL1 = TL_New(LD1,LT1,LL1,LD,LT,LL); TL_SetExtLeft(TL1,true); TL_SetExtRight(TL1,true); TL_SetColor(TL1,RED); } if T == 1 and H > HH Then { HH = H; HD = Sdate; HT = stime; } if T == -1 and L < LL Then { LL = L; LD = Sdate; LT = stime; } } if crossdown(direction,0) then { UpperLevel = Min(UpperLevel,UpperLevel[1]); Sell("매도"); T = -1; LD = sdate; LT = stime; LL = L; LD1 = LD[1]; LT1 = LT[1]; LL1 = LL[1]; if HH1 > 0 then { TL_Delete(TL2); TL2 = TL_New(HD1,HT1,HH1,HD,HT,HH); TL_SetExtLeft(TL2,true); TL_SetExtRight(TL2,true); TL_SetColor(TL2,BLUE); } if T == 1 and H > HH Then { HH = H; HD = Sdate; HT = stime; } if T == -1 and L < LL Then { LL = L; LD = Sdate; } } 즐거운 하루되세요 > 프리윌 님이 쓴 글입니다. > 제목 : 수식문의 > 61309번 답변에 대해 재문의 드립니다. ----------------------------------------------------------------------------------- 답변 주신 부분을 적용해보았습니다. 시스템 신호의 스위칭 방식이 CrossUp/Down 방식이 아니라 아래와 같을 경우 direction이 "0"인 경우가 있어서인지 제대로 추세라인이 그려지지 않습니다. 아래식과 같이 이럴경우 한번 검토 부탁드립니다. 답변 감사드립니다. input:Period(60),Multiplier(2); var:dAtr(0),UpperLevel(0),LowerLevel(0),Direction(0); input : P(5),P2(60); var : T(0),TL1(0),TL2(0); var : HD(0),HT(0),HH(0),HD1(0),HT1(0),HH1(0); var : LD(0),LT(0),LL(0),LD1(0),LT1(0),LL1(0); dAtr=ATR(Period); UpperLevel=(High+Low)/2+Multiplier*dAtr; LowerLevel=(High+Low)/2-Multiplier*dAtr; Direction = Direction[1]; if close > UpperLevel[1] then Direction = 1; if close < LowerLevel[1] then Direction = -1; #매수/매도 if Direction > 0 then { LowerLevel = Max(LowerLevel,LowerLevel[1]); Buy("매수"); T = 1; HD = sdate; HT = stime; HH = H; HD1 = HD[1]; HT1 = HT[1]; HH1 = HH[1]; if LL1 > 0 then { TL_Delete(TL1); TL1 = TL_New(LD1,LT1,LL1,LD,LT,LL); TL_SetExtLeft(TL1,true); TL_SetExtRight(TL1,true); TL_SetColor(TL1,RED); } if T == 1 and H > HH Then { HH = H; HD = Sdate; HT = stime; } if T == -1 and L < LL Then { LL = L; LD = Sdate; LT = stime; } } else { UpperLevel = Min(UpperLevel,UpperLevel[1]); Sell("매도"); T = -1; LD = sdate; LT = stime; LL = L; LD1 = LD[1]; LT1 = LT[1]; LL1 = LL[1]; if HH1 > 0 then { TL_Delete(TL2); TL2 = TL_New(HD1,HT1,HH1,HD,HT,HH); TL_SetExtLeft(TL2,true); TL_SetExtRight(TL2,true); TL_SetColor(TL2,BLUE); } if T == 1 and H > HH Then { HH = H; HD = Sdate; HT = stime; } if T == -1 and L < LL Then { LL = L; LD = Sdate; } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 지표문의 > 안녕하세요 예스스탁입니다. 고점과 저점은 자의적인 판단이므로 해당 내용에 대해 명확한 내용이 필요합니다. 올려주신 그림으로 보아 신호가 매수와 매도진입을 번갈아하는 스위칭 수식이고 고점은 매수구간에서 최고점, 저점은 매도구간에서 최저점인것 같습니다. 위 내용으로 판단하고 작성해 드립니다. 스위칭 신호는 일반 이평 골드 데드이므로 사용하시는 스위칭 수식에 맞게 변경하시면 됩니다. input : P(5),P2(60); var : T(0),TL1(0),TL2(0); var : HD(0),HT(0),HH(0),HD1(0),HT1(0),HH1(0); var : LD(0),LT(0),LL(0),LD1(0),LT1(0),LL1(0); var1 = ma(C,5); var2 = ma(c,20); if crossup(var1,var2) Then { buy("b"); T = 1; HD = sdate; HT = stime; HH = H; HD1 = HD[1]; HT1 = HT[1]; HH1 = HH[1]; if LL1 > 0 then { TL_Delete(TL1); TL1 = TL_New(LD1,LT1,LL1,LD,LT,LL); TL_SetExtLeft(TL1,true); TL_SetExtRight(TL1,true); TL_SetColor(TL1,RED); } } if CrossDown(var1,var2) Then { sell("s"); T = -1; LD = sdate; LT = stime; LL = L; LD1 = LD[1]; LT1 = LT[1]; LL1 = LL[1]; if HH1 > 0 then { TL_Delete(TL2); TL2 = TL_New(HD1,HT1,HH1,HD,HT,HH); TL_SetExtLeft(TL2,true); TL_SetExtRight(TL2,true); TL_SetColor(TL2,BLUE); } } if T == 1 and H > HH Then { HH = H; HD = Sdate; HT = stime; } if T == -1 and L < LL Then { LL = L; LD = Sdate; LT = stime; } 즐거운 하루되세요 > 프리윌 님이 쓴 글입니다. > 제목 : 지표문의 > 첨부한 그림과 같이 가령 매도 시그날이 발생할시 현재 발생한 위치의 직전 전고와 그 이전 매도시그날이 발생한 직전 고점을 연결하는 추세라인을 만들고 싶습니다. 반대로, 매수시그날의 경우는 최근 매수시그날의 직전 저점과 그 이전 매수 시그날이 발생한 직전 저점을 연결한 추세선이 될테고요... 가장 최근의 매수/매도 추세선만 남기고 이전 추세선은 삭제되어야 합니다. 관련 지표 문의 드립니다.
프로필 이미지
프리윌
2019-02-21
125
글번호 126435
시스템
답변완료

부탁드립니다.

아래는 지그재그(전환비율) 지표를 본 게시판에서 찾아본 수식입니다. 추가희망사항 1.선두께를 변경지정할 수 있도록 부탁드립니다. 2.현재 최종 파동의 피보나치 비율에 따라 피보나치조정대(위아래 확장 포함)를 표시되도록 부탁드립니다.(최종파동에 대한 조정대는 우측으로 확장 파동선과 색깔을 다르게) 3. 2번의 조정대를 최종이 아닌 모든 파동선에 표시하는 수식도 별도로 부탁드립니다. 감사합니다.. ========== Input:chngRate(0.3); Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0); Array:valArr[10](0),barArr[10](0),turnPntArr[10](""); For j = 0 To 9 { barArr[j] = barArr[j] + 1; } Condition1 = Min(valArr[1],valArr[2]) * (1 + (chngRate/100)) < H and lastHiVal < H; Condition2 = Max(valArr[1],valArr[2]) * (1 - (chngRate/100)) > L and (lastLoVal > L || lastLoVal == 0); If Condition1 Then { lastHiVal = H; lastLoVal = 0; } If Condition2 Then { lastLoVal = L; lastHiVal = 0; } 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 j = 8 downto 1 { valArr[j+1] = valArr[j]; barArr[j+1] = barArr[j]; turnPntArr[j+1] = turnPntArr[j]; } } 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{ TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } Else TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } } TL_SetSize(TL1,1); TL_SetColor(TL1,black);
프로필 이미지
당일선물
2019-02-21
360
글번호 126428
지표

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

프로필 이미지
회원
2019-02-21
11
글번호 126421
시스템
답변완료

문의 드립니다

안녕하세요! 일전에 만들어주신 옵션관련 지표 매우 잘 활용하고있습니다 ^^ 아래내용으로 한가지만 더 부탁드리겠습니다 옵션의 특정한 지정가격이 국선차트에서 가로선으로 표시될수있으면 좋겠습니다 이 지정가격은 필요에따라 수시로 바꿀수있고 콜 풋을 별도로 표시했으면 합니다 그리고 콜 풋별로 각각 5개정도의 가로선을 표시할수있으면 좋겠습니다 예를들어 콜 행사가 287.50에서 2.5의 자리, 그리고 풋행사가 285.00에서 2.5의 자리등 각각 최대 5개의 가격선을 국선챠트에 미리 표시를하고자함입니다 감사합니다 ^^
프로필 이미지
유로파54
2019-02-21
137
글번호 126416
지표

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

프로필 이미지
2wnwn
2019-02-21
23
글번호 126415
지표
답변완료

수정부탁드립니다

안녕하세요! 지난번에 만들어 주신 이동평균선입니다! 이 이평선을 저가이평과 고가이평으로 각각 하나씩 만들어 주시길 부탁드립니다 감사합니다! Input : Period1(3),Period2(7),Period3(14),Period4(28),Period5(40),Period6(56),Period7(112),Period8(224),Period9(540); var : Xma1(0),Xma2(0),Xma3(0),Xma4(0),Xma5(0),Xma6(0),Xma7(0),Xma8(0),Xma9(0); Xma1 = ema(C,Period1); Xma2 = ema(C,Period2); Xma3 = ema(C,Period3); Xma4 = ema(C,Period4); Xma5 = ema(C,Period5); Xma6 = ema(C,Period6); Xma7 = ema(C,Period7); Xma8 = ema(C,Period8); Xma9 = ema(C,Period9); Plot1(Xma1, "지수이동평균1"); Plot2(Xma2, "지수이동평균2"); Plot3(Xma3, "지수이동평균3"); Plot4(Xma4, "지수이동평균4"); Plot5(Xma5, "지수이동평균5"); Plot6(Xma6, "지수이동평균6"); Plot7(Xma7, "지수이동평균7"); Plot8(Xma8, "지수이동평균8"); Plot9(Xma9, "지수이동평균9"); plot10(0,"하단값");
프로필 이미지
qha71
2019-02-21
150
글번호 126414
지표