커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

수식 문의드립니다.

안녕하세요. 일전에 만들어주신 수식인데요.. 차트에 장착해보니 Plot3만 보이고 나머지 1,2,4가 보이질 않습니다. Ai에게 물어보니 1. plot1, plot2, plot4 함수 호출 시기 plot1, plot2, plot4 함수는 매 바(bar)마다 호출되어야 하지만, 현재 코드에서는 longtsl, shorttsl, mid 값이 변경될 때만 호출되고 있습니다. 따라서 이들 값이 변경되지 않으면 차트에 표시되지 않습니다. 2. active 변수 사용 plot1, plot2, plot4 함수에서 active 변수를 사용하여 조건부 색상을 지정하고 있습니다. 하지만 active 변수는 longtsl이 변경될 때만 업데이트되므로, shorttsl이 변경되어도 차트 색상이 변경되지 않습니다. 해결 방법 1.plot1, plot2, plot4 함수를 매 바마다 호출하도록 수정합니다. 2.active 변수 대신 pos 변수를 사용하여 조건부 색상을 지정합니다. 이렇게 답변을 하길래 혼자 이래저래 해봤는데 잘 않됩니다. 죄송하지만 선 좀 보일수 있게 다시 한번 검토 부탁드립니다. 아래는 작성해주신 수식입니다. input : stp("Auto"); input : prd(20); input : perc(0.5); input : bias("Auto"); input : upcol(Green); input : dncol(Red); input : upcol1(lime); input : dncol1(maroon); var : b(0),hi(0),lo(0),ph(0),pl(0),phl(0),pll(0),dir(0); var : cnt(0); Array : peaks[1000](0); b = index; hi = highest(high,prd*10); lo = lowest(low,prd*10); ph = iff(NthHighestBar(1,high, prd) == 0 , high , ph); pl = iff(NthLowestBar(1,low, prd) == 0 , low , pl); phL = iff(NthHighestBar(1,high, prd) == 0 , b , phL); plL = iff(NthLowestBar(1,low, prd) == 0 , b , plL); dir = iff(phL>plL , 1 , -1); if dir!=dir[1] Then { In*sertArray(peaks, 0, iff(dir>0 , (ph[1]-pl)/ph[1] , (ph-pl[1])/pl[1])) ; //*삭제 (장착시에는 * 삭제했습니다) cnt = cnt+1; } var : autocalc(0),SwitchTrue(0),SwitchFalse(0); autocalc = iff(cnt == 0 ,0 , MedianArray(peaks, cnt)); if stp == "Auto" Then { SwitchTrue = low-(low*autocalc); Switchfalse = high+(high*autocalc); } if stp == "Percentage" Then { SwitchTrue = low-(low*(perc/100)); Switchfalse = high+(high*(perc)/100); } if stp == "Pivot" Then { SwitchTrue = pl; Switchfalse = ph; } var : longtsl(0),shorttsl(0),pos(0); if low<=longtsl Then { longtsl = Switchtrue; shorttsl = Switchfalse; pos = -1; } if high>=shorttsl then { longtsl = Switchtrue; shorttsl = Switchfalse; pos = 1; } pos = iff(bias=="Bullish",1, IFf(bias=="Bearish",-1,pos)); var : active(False),mid(0); active = longtsl==longtsl[1]; plot1(longtsl,"ltl",iff(active,IFF(pos>0,dncol,upcol),Black)); plot2(shorttsl,"stl",iff(active,iff(pos>0,upcol,dncol),Black)); plot3(close,"c"); mid = Avg(longtsl,shorttsl); plot4(mid,"Mid",iff(active,rgb(125, 196, 255),black));
프로필 이미지
cooparoo
2024-05-19
839
글번호 179687
지표
답변완료

문의드립니다.

1. 5, 20 이평선 마지막 골든크로스와 데드크로스 지점에서부터 옆으로 수평선이 나오는 지표 부탁 드립니다. 2. 5, 20 이평선이 골든크로스한 후 골든크로스한 지점으로부터 10% 이상 상승한 그 고점을 기준봉으로하고 이후 5%이상 하락했다면 이후 그 고점인 기준봉을 돌파할 때 매수신호 나오는 수식 부탁 드립니다. 이때 많이 밀려 5, 20 이평선이 데드크로스가 되어 버린다면 기준봉은 다시 골든크로스가 되고 나서 그 지점으로부터 10% 이상 상승한 고점을 기준봉으로 하고 이후 5%이상 하락한 후 고점인 기준봉을 돌파할 때 매수로 바뀝니다. (즉, 데드크로스가 되면 고점인 기준봉이 바뀝니다) 3.
프로필 이미지
카르마다
2024-05-19
697
글번호 179686
지표
답변완료

문의

Base=(H+L)/2; upper_band=base+atr(period)*multiple; downtrend=valuewhen(1, lowest(upper_band(1),period)>upper_band,upper_band); 예스로는 어떻게 표현하나요?
프로필 이미지
레전드
2024-05-19
859
글번호 179685
지표
답변완료

동시처리 방지 방법 좀 알려주세요

안녕하세요. 두개의 신호 중 한개는 만족하고 다른 한개는 만족하지 않는데 청산 신호에 의하여 동시에 처리되는 이유를 알고 싶습니다. 조건은 5포인트 수익이 날 때 청산해야되는데 1개는 수익 한개는 손실이 발생했습니다. 어떻게 처리해야할까요? 매수 청산 수식은 아래와 같습니다. If BarsSinceEntry>5 and CountIF(CrossUp(Value11,Value12),BarsSinceEntry)>=1 and CrossDown(C,Value12) Then ExitShort("ES3",AtLimit,EntryPrice-6);
프로필 이미지
후따오
2024-05-19
753
글번호 179684
시스템
답변완료

지표식,,검색식.. 종목검색

a=avg(c,5); b=highest(a,15)==a; M=valuewhen(1,b,a); a=avg(c,1); b=lowest(a,15)==a; N=valuewhen(1,b,a); (M+N)*1 위는 키움수식 임니다 이를 예스스탁 에서 1, 지표식과 2 ,검색식 3 ,종목검색 으로어떻게 표현되는지 궁금합니다 . 항상 선언부와 마지막 IF 문장이 자신없어서요, 감사합니다.
프로필 이미지
ijko7656
2024-05-19
837
글번호 179683
지표
답변완료

중간값 라인을 계단식이 아닌 수평선으로 나타내기

input : 시가(DayOpen), 고가(DayHigh), 저가(DayLow) ; var : 중간(0) ; 중간 = (고가+저가)/2 ; plot1 (중간,"중간값"); 분봉차트에서 당일의 고가 저가 라인을 그리고 중간값을 작성하면 그림1 파일처럼 중간값(검정색라인)이 계단식으로 나타나게 됩니다. 이 중간값 라인을 그림2에서와 같이 직선의 수평라인(밤색선)으로 나타나게 하려면, 수식을 어찌 변경 해야 할까요 ?
프로필 이미지
강심장
2024-05-19
851
글번호 179682
지표
답변완료

87124 관련 재질문드립니다

항상 수고가 많으십니다. 재질문드립니다 ----------------------------------------------------------------------- 87124 에서 제가 원하는 결과가 나오지 않아서 다시 질문드립니다. 이번에는 이렇게 해주시면 고맙겠습니다. 선물 가격은 8:45 부터 들어오지만 개인의 거래소 가격은 9:00 부터 들어오므로 9:00시 부터 11:00 까지에서 개인의 최고매수금액 - 최고매수금액일때 선물현재가 9:00시 부터 11:00 까지에서 개인의 2번째 최고매수금액- 2번째최고매수금액일때 선물현재가 9:00시 부터 11:00 까지에서 개인의 최고매도금액 - 최고매도금액일때 선물현재가 9:00시 부터 11:00 까지에서 개인의 2번째 최고매도금액 - 2번째최고매도금액일째 선물현재가 여기서 주의 할 점은 최고매도금액 < 2번째 최고매도금액 이며 최고매수금액 > 2번째최고 매수금액 이라는 점입니다. 제가 말씀드리는 2번째최고매도금액이라는 말과 2번째최고매수금액이라는 의미가 제가 의도하는 정확한 의미전달하기 위해서 수치로 예를 들어 보겠습니다. 100 -> 200 -> 300 -> 200 -> 300 -> 500 -> 350 -> 300 -> 400 -> 300 ^ ^ 최고매수금액 2번째최고매수금액 -100 -> -200 -> -300 -> -200 -> -300 -> -500 -> -350 -> -300 -> -400 -> -300 ^ ^ 최고매도금액 2번째최고매도금액 위와 같은 상황을 확인해야하니 신호는 11시 이후에 나오겠습니다. 즉, input : 당일최대진입횟수(1); var : T1(0), count(0); if Data1(DayIndex == 0) Then { 변수 초기화 ... T1 = TotalTrades; } if Data1(DayIndex > 0 and stime < 152000) Then { ~~~ ~~~ //------ 진입횟수제한식 ---------------------------------------------------- if MarketPosition == 0 Then { count = TotalTrades - T1; } Else { count = TotalTrades - T1 + 1; } //-------------------------------------------------------------------------- if stime >= 090000 and stime <= 110000 then { 상기 조건을 확인하는 전략식 } if count < 당일최대진입횟수 Then { if stime > 110000 then { if 최고매도금액일때 선물현재가 > 2번째최고매도금액일때 선물현재가 then { buy("b1") } if 최고매수금액일때 선물현재가 < 2번째최고매수금액일때 선물현재가 then { sell("b1") } } } // end of count < 당일최대진입횟수 } // end of 전략식 죄송하지만, 위 서식대로 수식을 부탁드리며, 상기 서식이 잘못되었다면 임의로 하셔도 괜찮습니다. 또한, 각 수식에 대한 주석도 첨부하여 주셨으면 고맙겠습니다. ------------------------------------------------------------------------------------ 감사합니다. 항상 좋은 일만 생기시길를 ~~
프로필 이미지
샐리짱
2024-05-19
758
글번호 179681
시스템
답변완료

진입가격별 청산수식

진입가격에 따른 청산수식 작성해보았습니다. 바른지요? #포지션 있을 때 if MarketPosition != 0 Then { if Entryprice >= dayopen and Entryprice < dayopen+1.25 Then { SetStopLoss(1,PointStop); SetStopTrailing(2,0,PointStop,1); } Else if Entryprice >= dayopen+1.25 and Entryprice < dayopen+2.5 Then { SetStopLoss(1.5,PointStop); SetStopTrailing(2.5,0,PointStop,1); } Else { SetStopLoss(2,PointStop); SetStopTrailing(3,0,PointStop,1); } } Else #무포지션이면 해제 { SetStopLoss(0); SetStopTrailing(0,0); }
프로필 이미지
목마와숙녀
2024-08-01
657
글번호 179680
시스템
답변완료

문의드립니다.

늘 고맙습니다. 가르쳐주신 것을 보고 또 보면서 뭐에 막혀서 진도가 못나가고 있는지 조금은 알 거 같습니다. 그런데 말씀해주실 때는 알 거 같은데 아직도 헤매고 있는 부분이 있어 가르침을 부탁드립니다. *** 원격준비하고 있겠습니다. 제 차례가 되면 전화드리겠습니다. A. 금일 현재봉에서 전일고가, 전일저가와의 거리를 찾고 싶습니다. 전일고가 발생후 전일저가가 발생하고 금일 현재가가 나온건지 반대인건지 비교하고 싶어서입니다. 가르쳐주신 돌파자리 찾는 방법을 응용해서 만들어 봤는데 맞는지 모르겠습니다. 검토 부탁드립니다. DL과 DH를 비교해서 돌려보면 맞게 나오는 것 같긴 합니다. ### 전일고가, 전일저가와의 거리 비교 var :dh(-1),dL(-1),Dhi(0),DLi(0); # 전일고가와 전일저가는 반드시 있는 값인데-1을 써도 되는건지??? if DayHigh(1)==H Then dh=0; dhi=Index; if dh==1 and dhi>0 and DayHigh(1)!=H Then dh=dh+1; # 전일고가 찍은 자리와의 거리 ##################### if DayLow(1)==L Then dL=0; dLi=Index; if dL==0 and dLi>0 and DayLow(1)!=L Then dL=dL+1; # 전일저가 찍은 자리와의 거리 위의 값을 저장해놓고 다른 조건식에서 아래와 같이 사용하려고 합니다. if dL<dH then ## 전일고점을 먼저 찍은 후 저점을 찍었다면. B. 가르침에 의거해서 진입과 청산의 기본적인 틀을 만들어보았습니다. # 종가진입했을 때 청산법은 이해가 다 되었습니다. 그래서 생략. 진입캔들에서만 급등락시 청산이 아니라 이후 시간이 지나도 하나의 캔들에서 급등락이 나오면 청산이 되는 방식이더군요. # 청산이 어떻게 될 지 모르니 경우의 수를 일단 3가지 방식으로 병기해서 작성하고 나열해놓았습니다. # 여기서 제가 아직 해결하지 못한 것이 아래 진입식을 보면 조건이 상태를 나타내는 방식입니다. 이때는 "가" 상태였다가 "나" 상태로 바뀌고 "다" 상태로 바뀌면 문제없이 진입이 됩니다. 그런데 "가" - "나" - "가" - "다" 이런 식으로 전개가 되게 되면 최종적인 "다"로 넘어가지 않습니다. 설명을 해주셨는데 아직 제 꺼로 못만들었습니다. # 또 한가지는 청산식 마지막 방식을 보면 조건이 상태가 아니라 사건 발생으로 되어 있습니다. 사건발생으로 조건을 만들어서 돌려보면 단절이 되어 끝까지 이어지질 않습니다. 이경우 처리를 어떻게 해야 하는지요? countif 함수를 써서 사건이 있었다. 로 만들어야 되나요? 다른 방법은 뭐가 있는지요? # 또다른 한가지는 진입과 청산이후 초기화 하는 방법입니다. 진입에서는 진입방법이 한가지니까 초기화를 진입실행 바로 다음에 한번만 해주면 될 거 같은데요. 진입후 즉시 청산 위의 자리에 해주나요? 아래 t1=0; 해준것처럼요. t1만 초기화 해주면 되나요? 다른 값들도 초기화 해주어야 되나요? 돌려봤을 땐 t1만 해줘도 될 것 같긴 한데 경우의 수를 다 알수가 없어서요. 그리고 청산식에서 초기화는 맨 아래 한번만 해주면 되나요? 아니면 아래식처럼 각각 청산실행자리 아래에 모두 해주어야 되나요? # 진입과 청산이후 초기화를 해주면 재진입을 제한하기 위해 사용했던 condithon1 을 사용하지 않아도 되나요? 1. 진입 가. if 이평60>이평120 and 이평20>이평60 and 이평5<이평20 then { t1=1; i1=index; } 나. if t1==1 and i1>0 and 이평5>이평20 then { t1=2 i2=index; } 다. if t1==2 and i2>0 then { buy("bb"); t1=0; # onclose일때 청산법 생략 } if MarketPosition == 1 Then { # atlimit,atstop일때 청산법 생략 t1=0; } if MarketPosition == 1 Then # 위 2가지가 아닌 경우 청산법 { if crossup(이평5,이평240) then { k1=1; r1=index; } if crossdown(이평5,이평20) then { k1=2; r2=index; } if crossup(이평5,이평20) then { k1=3; r3=index; } if k1==3 and re>0 then exitlong(); k1=0; {
프로필 이미지
산골소년
2024-05-20
671
글번호 179679
시스템
답변완료

부탁드립니다.

1. 매시간 거래량을 마지막 봉에 숫자로 구현해 주세요, 그러면서 전 시간대보다 거래량이 늘어났을 경우에는 마지막 봉 위에 빨강색으로 거래량 숫자를, 전 시간대보다 거래량이 줄었을 경우에는 마지막 봉 아래에 파란색으로 거래량 숫자로 구현해 주세요 2. 매시간 위 꼬리가 가장 길게 갱신될 때마다 해당 봉 위 꼬리에 빨강색으로, 매시간 아래 꼬리가 가장 길게 갱신될 때마다 해당 봉 아래 꼬리에 파란색으로 구현해 주세요 2. 매시간 양봉 몸통이 가장 길게 갱신될 때마다 해당 봉에 빨강색으로, 매시간 음봉 몸통이 가장 길게 갱신될 때마다 해당 봉에 파란색으로 구현해 주세요 고맙습니다.
프로필 이미지
서태공
2024-05-18
710
글번호 179678
지표