커뮤니티

data2

프로필 이미지
stockric
2018-02-27 12:03:17
214
글번호 116947
답변완료

첨부 이미지

data2에 p1값을 불러올려고할때 dayclose는 for문에서 안된다는 글을 보았습니다. 그래서, var = dayv(0,data2); dayv = data2(closeD(0)); for count = 0 to P5{ if count < P1 Then sumV1 = sumV1+dayv(count); 이렇게하면 dayclose오류를 해결할 줄 알았는데 함수만이 입력값을 가질 수 있다고 나오네요. 저 로직은 data2차트에 일봉이평값을 가져오려고하는 것입니다. 왜 안되는지.. 2. data2에 있는 값을 가져오려면 현재 var로 선언된 내부변수에 모두 x(0,data2)처럼 다 적어야하나요? 3. sig = false; if 매매조건 then{ SIG = TRUE;} if sig then buy(); 이런식의 로직인데요. 이렇게했을때 sig = data2(false); if data2(매매조건) then{ data2(sig) = data2(TRUE);} if data2(sig) then buy(); 이렇게 덮어씌우면 되는지요. 너무 비효율적인데.. 응용되는 보조지표도 마찬가지입니다. var : x(0,data2); x = data2(n); if data2(x and n and a) then 이렇게가야하는지.. 4. 청산질문입니다. 이렇게하면되는지요. 모든걸 이렇게 data2로 진창도배해야하나요?? If data2(MarketPosition == 1) Then{ If data2(CrossUp(Close,openD(0))) Then ExitLong("시가매도청산"); 5. 진입횟수도 이렇게하면되나요? var : BLcnt(0),SLcnt(0),추격횟수(0); if Bdate != Bdate[1] Then{ BLcnt = 0; SLcnt = 0; 추격횟수 = 0; } if data2(TotalTrades > TotalTrades[1] and MarketPosition(1) == 1 and IsExitName("StopLoss",1) == true) Then BLcnt = BLcnt+1; if data2(TotalTrades > TotalTrades[1] and MarketPosition(1) == -1 and IsExitName("StopLoss",1) == true) Then SLcnt = SLcnt+1; 6. 사용자함수질문입니다. 제가만든 i라는 함수가 있습니다. 이것 역시 if data2(조건and i) then 하면 크게 상관은 없는거죠? 물론 함수의 경우 dayclose와같은 함수를 사용하는 구문은 없습니다. 7. 사진 첨부합니다. 오늘 하루동안 5이평을 3번 돌파하면 로직 부탁드립니다. 혹은 for 문으로 하는 방법이있는지요? 몇캔들이내에.. 라는 조건이야countif를 쓰면된다지만, 조건만족캔들범위가 제한적이다보니.. 8. 제가짠 이평하강 로직인데요. 작동이 안되네요. cnt = 0; cnt2 = 0; for cnt = 1 to 10{ if open[cnt] > ma(c,5)[cnt] and close[cnt] < ma(c,5)[cnt] then cnt2 + 1; } if cnt2 < 1 then { plotpaintbar} 이렇게 하면 이전에 나오는 5이평하강된곳에 페인트바가 나오지않습니다. 왜그런건가요? for문을 돌려 cnt2에 for문 조건만족을 하면 cnt2에 1씩 저장하고 if cnt2 < 1 then하면 조건값 저장으로 출력되야하는게 아니었는지요.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-02-27 13:48:02

안녕하세요 예스스탁입니다. 1 작성하신 dayv는 단지 매봉 종가를 저장하는 변수입니다. 이전일의 값을 저장하는 내용이 없습니다/ 변수에 closeD를 할당해도 자동으로 이전일의 값이 들어가는것이 아닙니다/ 이전일에 값이 들어가도록 코딩을 하셔야 합니다. 아래식 참고하시기 바랍니다. input : P1(5); var : cnt(0),sumv1(0,data2),mav1(0,data2); Array : C2[100](0,data2); if data2(bdate != bdate[1]) Then{ for cnt = 1 to 99{ C2[cnt] = C2[cnt-1][1]; } } C2[0] = data2(c); if C2[P1] > 0 then { sumv1 = 0; for cnt = 0 to P1 { sumV1 = sumV1+C2[cnt]; } mav1 = sumv1/P1; } 2 예 모두 처리하셔야 합니다. 3 계산식이 아닌 단지 true나 false를 저장하는 내용이므로 변수의 선언만 data2를 추가하고 아래식과 같이 작성하시면 됩니다,. var : sig(false,data2); sig = false; if data2(매매조건) then sig = TRUE; if sig == true then buy(); 위 내용만이면 sig라는 별도의 변수는 의미 없습니다. if data2(매매조건) then buy(); 4 리턴되는 값이 data2로 받드시 씌울필요가 있는지 확인하시기 바랍니다. 신호가 발생하는 것은 무조건 기본차트(data1)종목이고 포지션관련 내용은 data2를 씌울 필요성이 없습니다. If MarketPosition == 1 Then{ If data2(CrossUp(Close,openD(0))) Then ExitLong("시가매도청산"); 5 4번과 마찬가지 입니다. 포지션은 data1기준이므로 불필요 합니다. 6 사용자함수에 특별시 data1값만 사용하는 내용이 없다면 data2(i) 혹은 data2(조건 and i조건)로 사용하시면 됩니다. 7 var1 = ma(c,5); #날짜 변경 초기화 if bdate != bdate[1] Then value1 = 0 #5이평 상향돌파시 1씩 증가 if crossup(c,var1) Then value1 = value1+1; 8 #전봉기준 최근 10개봉에서 이평하향(시가는 이평보다 크고 종가는 작음) #봉의 갯수 카운트해서 없으면 현재봉에 강조출력 var : cnt(0),cnt2(0); cnt2 = 0; for cnt = 1 to 10{ if open[cnt] > ma(c,5)[cnt] and close[cnt] < ma(c,5)[cnt] then cnt2 = cnt2 + 1; } if cnt2 < 1 then plotpaintbar(H,L,"강조"); 즐거운 하루되세요 > stockric 님이 쓴 글입니다. > 제목 : data2 > data2에 p1값을 불러올려고할때 dayclose는 for문에서 안된다는 글을 보았습니다. 그래서, var = dayv(0,data2); dayv = data2(closeD(0)); for count = 0 to P5{ if count < P1 Then sumV1 = sumV1+dayv(count); 이렇게하면 dayclose오류를 해결할 줄 알았는데 함수만이 입력값을 가질 수 있다고 나오네요. 저 로직은 data2차트에 일봉이평값을 가져오려고하는 것입니다. 왜 안되는지.. 2. data2에 있는 값을 가져오려면 현재 var로 선언된 내부변수에 모두 x(0,data2)처럼 다 적어야하나요? 3. sig = false; if 매매조건 then{ SIG = TRUE;} if sig then buy(); 이런식의 로직인데요. 이렇게했을때 sig = data2(false); if data2(매매조건) then{ data2(sig) = data2(TRUE);} if data2(sig) then buy(); 이렇게 덮어씌우면 되는지요. 너무 비효율적인데.. 응용되는 보조지표도 마찬가지입니다. var : x(0,data2); x = data2(n); if data2(x and n and a) then 이렇게가야하는지.. 4. 청산질문입니다. 이렇게하면되는지요. 모든걸 이렇게 data2로 진창도배해야하나요?? If data2(MarketPosition == 1) Then{ If data2(CrossUp(Close,openD(0))) Then ExitLong("시가매도청산"); 5. 진입횟수도 이렇게하면되나요? var : BLcnt(0),SLcnt(0),추격횟수(0); if Bdate != Bdate[1] Then{ BLcnt = 0; SLcnt = 0; 추격횟수 = 0; } if data2(TotalTrades > TotalTrades[1] and MarketPosition(1) == 1 and IsExitName("StopLoss",1) == true) Then BLcnt = BLcnt+1; if data2(TotalTrades > TotalTrades[1] and MarketPosition(1) == -1 and IsExitName("StopLoss",1) == true) Then SLcnt = SLcnt+1; 6. 사용자함수질문입니다. 제가만든 i라는 함수가 있습니다. 이것 역시 if data2(조건and i) then 하면 크게 상관은 없는거죠? 물론 함수의 경우 dayclose와같은 함수를 사용하는 구문은 없습니다. 7. 사진 첨부합니다. 오늘 하루동안 5이평을 3번 돌파하면 로직 부탁드립니다. 혹은 for 문으로 하는 방법이있는지요? 몇캔들이내에.. 라는 조건이야countif를 쓰면된다지만, 조건만족캔들범위가 제한적이다보니.. 8. 제가짠 이평하강 로직인데요. 작동이 안되네요. cnt = 0; cnt2 = 0; for cnt = 1 to 10{ if open[cnt] > ma(c,5)[cnt] and close[cnt] < ma(c,5)[cnt] then cnt2 + 1; } if cnt2 < 1 then { plotpaintbar} 이렇게 하면 이전에 나오는 5이평하강된곳에 페인트바가 나오지않습니다. 왜그런건가요? for문을 돌려 cnt2에 for문 조건만족을 하면 cnt2에 1씩 저장하고 if cnt2 < 1 then하면 조건값 저장으로 출력되야하는게 아니었는지요.