커뮤니티

랜덤함수

프로필 이미지
데미안
2021-01-24 15:08:18
766
글번호 145752
답변완료
랜덤함수가 포함된 지표가 있습니다. 시작은 If Date<>Date[1] then begin aaa=Int(Rangdom(30)); End;로 하여 랜덤하게 aaa값을 구하고이를 이용하여 지표를 계산합니다. 매일매일 전체의 기간에 대하여. 예를 들면 이를 bbb=Average(Close,aaa)처럼. 그런데 원하는 것은 전체의 프로세서를 처음부터 끝까지 100회 반복하여, 100회 동안 발생한 랜덤값을 이용하여 계산된 지표(bbb)의, 최저,최고 혹은 평균값을 구하고자 하는데, 어찌하면 랜덤함수가 포함된 전체의 내용을 원하는 횟수만큼 반복하여 계산하여 원하는 값을 구할 수 있을까요?
지표
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2021-01-25 13:49:26

안녕하세요 예스스탁입니다. for루프문 이용해서 반복계산하게 하셔야 합니다. input : N(100); var : i1(0),i2(0),hv(0),lv(0),aaa(0),sum(0),mav(0); If Date<>Date[1] then { hv = 0; Lv = 0; For i1 = 0 to 99 { aaa = Int(Random(30)); sum = 0; For i2 = 0 to aaa-1 { sum = sum + C[i2]; } if aaa > 0 Then { mav = sum/aaa; if hv == 0 or (hv > 0 and mav > hv) Then hv = aaa; if lv == 0 or (lv > 0 and mav < lv) Then lv = aaa; } } } 즐거운 하루되세요 > 데미안 님이 쓴 글입니다. > 제목 : 랜덤함수 > 랜덤함수가 포함된 지표가 있습니다. 시작은 If Date<>Date[1] then begin aaa=Int(Rangdom(30)); End;로 하여 랜덤하게 aaa값을 구하고이를 이용하여 지표를 계산합니다. 매일매일 전체의 기간에 대하여. 예를 들면 이를 bbb=Average(Close,aaa)처럼. 그런데 원하는 것은 전체의 프로세서를 처음부터 끝까지 100회 반복하여, 100회 동안 발생한 랜덤값을 이용하여 계산된 지표(bbb)의, 최저,최고 혹은 평균값을 구하고자 하는데, 어찌하면 랜덤함수가 포함된 전체의 내용을 원하는 횟수만큼 반복하여 계산하여 원하는 값을 구할 수 있을까요?
프로필 이미지

데미안

2021-01-26 12:38:23

제 질문이 처음부터 잘못된 것이 아닌가 하여 다시 문의 드립니다. 제가 하고자 하는 것은 시스템 개발시 사용하는 옵티마이제이션 하듯이 되기를 원하는 것입니다. 즉 특정 변수값의 변동에 따른 전체 실적의 변화를 보여주듯이, 변수값이 1에서 100으로 변화하는 동안 각각의 변수값에 대응하는 전체 기간에 대한 실적을 확인하고, 해당 실적들의 최저실적, 최고실적 혹은 평균실적을 구하여, 이를 통해 로버스트니스를 확인하고자 하는 것입니다. 다만 여기에서 변수값을 랜덤으로 만들거나 1씩 증가하도록 하는 것일 뿐입니다. 지금은 예스랭귀지를 열어서 매번 검증을 실시하여, 매번의 결과를 별도로 확인하고 있습니다.(랜덤의 경우). 이 과정이 너무 불편하여 질의드립니다. 제가 아래에 올려드린 예제에서, (제가 이렇게 해보니 안되긴 합니다) 변수값은 랜덤으로 발생한 봉의 번호이거나 아니면 특정계산으로 산출된 봉의 번호입니다. 이렇게 산출된 변수값(봉의 번호)를 가지고 전체 데이터를 대상으로 그 실적을 계산합니다. 즉 변수값이 1에서 100이면, 변수값 1을 가지고 1차로 전체구간에 대한 손익을 계산하여 저장하고, 그 다음 2의 변수값을 가지고 역시 이에 해당하는 전체구간에 대한 손익을 계산,저장하고. 이렇게 100번이 반복된 손익에 대한 정보들을 얻고자 하는 것입니다. 다시 한번 답변을 부탁드립니다. 감사합니다. 혹 필요시 전화로 문의드릴 수도 있을런지요 예제 Array : Book[100,10](0); Var : StartBarNo(0); Var : RandNo(0),BarNo(0); var : HPro(0),LPro(0),PnL(0),EntP(0),ExtP(0); var : SumPro(0),AvgPro(0),TradeNo(0); Var : Counter(0); /* if Date<>Date[1] then begin RandNo=Int(Random(360)); if RandNo>1 Then StartBarNo=RandNo; if RandNo<=1 Then StartBarNo=1; End; */ For StartBarNo = 1 To 30 Begin If Date<>Date[1] then begin BarNo=1; End; If Date==Date[1] then begin BarNo=BarNo+1; End; If Date==Date[1] and StartBarNo==BarNo Then begin EntP=Data1(Close); TradeNo=TradeNo+1; For Counter=99 downto 1 begin Book[Counter+1,1]=Book[Counter,1]; Book[Counter+1,8]=Book[Counter,8]; End; Book[1,1]=EntP; Book[1,8]=StartBarNo; End; If Date==Date[1] and BarNo==StartBarNo+1 Then Begin ExtP=Data1(Close); PnL=EntP-ExtP; SumPro=PnL+PnL; AvgPro=SumPro/TradeNo; if HPro<=PnL Then HPro=PnL; if LPro>=PnL Then LPro=PnL; For Counter=99 downto 1 begin Book[Counter+1,2]=Book[Counter,2]; Book[Counter+1,3]=Book[Counter,3]; Book[Counter+1,4]=Book[Counter,4]; Book[Counter+1,5]=Book[Counter,5]; Book[Counter+1,1]=Book[Counter,6]; Book[Counter+1,2]=Book[Counter,7]; Book[Counter+1,3]=Book[Counter,8]; Book[Counter+1,4]=Book[Counter,9]; End; Book[1,2]=ExtP; Book[1,3]=PnL; Book[1,4]=SumPro; Book[1,5]=AvgPro; Book[1,6]=HPro; Book[1,7]=LPro; End; /* For Counter=99 downto 1 begin Book[Counter+1,1]=Book[Counter,1]; Book[Counter+1,2]=Book[Counter,2]; Book[Counter+1,3]=Book[Counter,3]; Book[Counter+1,4]=Book[Counter,4]; Book[Counter+1,5]=Book[Counter,5]; Book[Counter+1,1]=Book[Counter,6]; Book[Counter+1,2]=Book[Counter,7]; Book[Counter+1,3]=Book[Counter,8]; Book[Counter+1,4]=Book[Counter,9]; End; Book[1,1]=EntP; Book[1,2]=ExtP; Book[1,3]=PnL; Book[1,4]=SumPro; Book[1,5]=AvgPro; Book[1,6]=HPro; Book[1,7]=LPro; Book[1,8]=StartBarNo; */ End; plot1(Book[2,1],"EntP"); > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 랜덤함수 > 안녕하세요 예스스탁입니다. for루프문 이용해서 반복계산하게 하셔야 합니다. input : N(100); var : i1(0),i2(0),hv(0),lv(0),aaa(0),sum(0),mav(0); If Date<>Date[1] then { hv = 0; Lv = 0; For i1 = 0 to 99 { aaa = Int(Random(30)); sum = 0; For i2 = 0 to aaa-1 { sum = sum + C[i2]; } if aaa > 0 Then { mav = sum/aaa; if hv == 0 or (hv > 0 and mav > hv) Then hv = aaa; if lv == 0 or (lv > 0 and mav < lv) Then lv = aaa; } } } 즐거운 하루되세요 > 데미안 님이 쓴 글입니다. > 제목 : 랜덤함수 > 랜덤함수가 포함된 지표가 있습니다. 시작은 If Date<>Date[1] then begin aaa=Int(Rangdom(30)); End;로 하여 랜덤하게 aaa값을 구하고이를 이용하여 지표를 계산합니다. 매일매일 전체의 기간에 대하여. 예를 들면 이를 bbb=Average(Close,aaa)처럼. 그런데 원하는 것은 전체의 프로세서를 처음부터 끝까지 100회 반복하여, 100회 동안 발생한 랜덤값을 이용하여 계산된 지표(bbb)의, 최저,최고 혹은 평균값을 구하고자 하는데, 어찌하면 랜덤함수가 포함된 전체의 내용을 원하는 횟수만큼 반복하여 계산하여 원하는 값을 구할 수 있을까요?