커뮤니티

안녕하세요

프로필 이미지
돈을잃자
2024-05-03 09:41:19
695
글번호 179114
답변완료
시스템에서 필터로 사용하려고 합니다. 아래의 1,2번이 특정 수치보다 높거나 또는 낮을때를 활용하려고요 1. 분봉이나 틱봉에서 일봉의 adx수치를 가져오기 2. 분봉이나 틱봉에서 일봉의 adx수치(갭을 뺀것) 가져오기 2개를 부탁드립니다 ----------------------------------------------------- 3. 5/ 20 / 60 이평선이 정배열일때만 5일 이평선 두께가 굻어지는 지표 부탁드립니다. 4. 시뮬레이션차트에서 옵션 데이터를 검증하고 싶은데요 선물연결처럼 옵션도 예전꺼 연결해서 볼 수 있는 방법이 있을까요?? 즐거운 주말 되십쇼 ^^
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-05-03 14:48:33

안녕하세요 예스스탁입니다. 1 input : Length(14); var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),MinusDM14(0),TRange1(0),preMinusDM14(0); Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0),preADX(0); Var : CummDMI(0), Return(0); Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),DMIv[61](0),ADXv[61](0); Array : DPlus[61](0),DMinus[61](0); if bdate != bdate[1] Then { Dcnt = Dcnt+1; HH[0] = H; LL[0] = L; CC[0] = C; preTRange = TRange[1]; prePlusDM14 = PlusDM14[1]; preMinusDM14 = MinusDM14[1]; for cnt = 1 to 60 { HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; TR[cnt] = TR[cnt-1][1]; DMIv[cnt] = DMIv[cnt-1][1]; ADXv[cnt] = ADXv[cnt-1][1]; Dplus[cnt] = Dplus[cnt-1][1]; Dminus[cnt] = Dminus[cnt-1][1]; } } if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; CC[0] = C; if CC[1] > 0 Then{ If CC[1] > HH[0] then TH = CC[1]; else TH = HH[0]; If CC[1] < LL[0] then TL = CC[1]; else TL = LL[0]; TR[0] = TH-TL; } If Dcnt == Length+1 Then { MyRange = Length; DPlus[0] = 0; PlusDM14 = 0; TRange = 0; DMinus[0] = 0; MinusDM14 = 0; TRange1 = 0; For Counter = 0 To MyRange - 1 { If HH[Counter] - HH[Counter+1] < 0 Then PlusDM = 0 ; Else PlusDM = HH[Counter] - HH[Counter+1]; If LL[Counter+1] - LL[Counter] < 0 Then MinusDM = 0; Else MinusDM = LL[Counter+1] - LL[Counter]; var1 = PlusDM; var2 = MinusDM; If var1 >= var2 Then MinusDM = 0; If var2 >= var1 Then PlusDM = 0; TRange = TRange + TR[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then DPlus[0] = 100 * PlusDM14 / TRange; Else DPlus[0] = 0 ; If TRange <> 0 Then DMinus[0] = 100 * MinusDM14 / TRange; Else DMinus[0] = 0; If Dplus[0] + Dminus[0] == 0 Then DMIv[0] = 0; Else DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]); } Else If Dcnt > Length+1 Then { If HH[0] - HH[1] < 0 Then PlusDM = 0; Else PlusDM = HH[0] - HH[1]; If LL[1] - LL[0] < 0 Then MinusDM = 0; Else MinusDM = LL[1] - LL[0]; var1 = PlusDM; var2 = MinusDM; If var1 >= var2 Then MinusDM = 0; If var2 >= var1 Then PlusDM = 0; If MyRange > 0 Then { TRange = preTRange - (preTRange / MyRange) + TR[0]; PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM; MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM; } If TRange <> 0 Then DPlus[0] = 100 * PlusDM14 / TRange; Else DPlus[0] = 0 ; If TRange <> 0 Then DMinus[0] = 100 * MinusDM14 / TRange; Else DMinus[0] = 0; If Dplus[0] + Dminus[0] == 0 Then DMIv[0] = 0; Else DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]); } If DMIV[Length] == 0 Then{ CummDMI = 0; for Counter = 0 To Length-1 Begin if DMiV[counter] > 0 Then CummDMI = CummDMI + DMIV[Counter]; End; ADXv[0] = CummDMI / CurrentBar; } Else ADXv[0] = (ADXv[1] * (Length - 1) + DMIv[0]) / Length; plot1(adxv[0]); plot2(DMIv[0]); plot3(DPlus[0]); plot4(DMinus[0] ); 2 수식의 갭보정은 기본차트속성에서 지정하는 갭보정과 다릅니다. 기본차트속성에서 갭보정한것과 같이는 수식계산이 불가능합니다. 속성의 갭보정은 당일 데이타를 고정한 상태에서 과거로 가면서 갭만큼 데이타를 보정하게 되고 수식은 이 데이터를 이용하지만 수식은 차트과거에서 현재로만 계산이 되므로 수식에서 갭보정은 과거에서 현재로 오면서 갭을 누적해서 지표를 계산합니다. input : Length(14); var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),MinusDM14(0),TRange1(0),preMinusDM14(0); Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0),preADX(0); Var : CummDMI(0), Return(0); var : gap(0),sumgap(0),GO(0),GH(0),GL(0),GC(0); Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),DMIv[61](0),ADXv[61](0); Array : DPlus[61](0),DMinus[61](0); if bdate != bdate[1] THen { gap = Open-Close[1]; sumGap = sumGap+gap; } GO = O - sumGap; GH = H - sumGap; GL = L - sumGap; GC = C - sumGap; if bdate != bdate[1] Then { Dcnt = Dcnt+1; HH[0] = GH; LL[0] = GL; CC[0] = GC; preTRange = TRange[1]; prePlusDM14 = PlusDM14[1]; preMinusDM14 = MinusDM14[1]; for cnt = 1 to 60 { HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; TR[cnt] = TR[cnt-1][1]; DMIv[cnt] = DMIv[cnt-1][1]; ADXv[cnt] = ADXv[cnt-1][1]; Dplus[cnt] = Dplus[cnt-1][1]; Dminus[cnt] = Dminus[cnt-1][1]; } } if GH > HH[0] Then HH[0] = GH; if GL < LL[0] Then LL[0] = GL; CC[0] = GC; if CC[1] > 0 Then { If CC[1] > HH[0] then TH = CC[1]; else TH = HH[0]; If CC[1] < LL[0] then TL = CC[1]; else TL = LL[0]; TR[0] = TH-TL; } If Dcnt == Length+1 Then { MyRange = Length; DPlus[0] = 0; PlusDM14 = 0; TRange = 0; DMinus[0] = 0; MinusDM14 = 0; TRange1 = 0; For Counter = 0 To MyRange - 1 { If HH[Counter] - HH[Counter+1] < 0 Then PlusDM = 0 ; Else PlusDM = HH[Counter] - HH[Counter+1]; If LL[Counter+1] - LL[Counter] < 0 Then MinusDM = 0; Else MinusDM = LL[Counter+1] - LL[Counter]; var1 = PlusDM; var2 = MinusDM; If var1 >= var2 Then MinusDM = 0; If var2 >= var1 Then PlusDM = 0; TRange = TRange + TR[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then DPlus[0] = 100 * PlusDM14 / TRange; Else DPlus[0] = 0 ; If TRange <> 0 Then DMinus[0] = 100 * MinusDM14 / TRange; Else DMinus[0] = 0; If Dplus[0] + Dminus[0] == 0 Then DMIv[0] = 0; Else DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]); } Else If Dcnt > Length+1 Then { If HH[0] - HH[1] < 0 Then PlusDM = 0; Else PlusDM = HH[0] - HH[1]; If LL[1] - LL[0] < 0 Then MinusDM = 0; Else MinusDM = LL[1] - LL[0]; var1 = PlusDM; var2 = MinusDM; If var1 >= var2 Then MinusDM = 0; If var2 >= var1 Then PlusDM = 0; If MyRange > 0 Then { TRange = preTRange - (preTRange / MyRange) + TR[0]; PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM; MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM; } If TRange <> 0 Then DPlus[0] = 100 * PlusDM14 / TRange; Else DPlus[0] = 0 ; If TRange <> 0 Then DMinus[0] = 100 * MinusDM14 / TRange; Else DMinus[0] = 0; If Dplus[0] + Dminus[0] == 0 Then DMIv[0] = 0; Else DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]); } If DMIV[Length] == 0 Then{ CummDMI = 0; for Counter = 0 To Length-1 Begin if DMiV[counter] > 0 Then CummDMI = CummDMI + DMIV[Counter]; End; ADXv[0] = CummDMI / CurrentBar; } Else ADXv[0] = (ADXv[1] * (Length - 1) + DMIv[0]) / Length; plot1(adxv[0]); plot2(DMIv[0]); plot3(DPlus[0]); plot4(DMinus[0] ); 3 var1 = ma(C,5); Var2 = ma(C,20); Var3 = ma(C,60); Condition1 = var1 > Var2 and Var2 > Var3; Plot1(var1,"이평1",Blue,Def,IFf(Condition1==true,3,0)); 4 차트 종목선택화면의 참조탭에 ATM연결옵션들이 제공됩니다. 연결옵션은 ATM기준으로 +-2단계까지만 연결한 데이터를 제공합니다. 즐거운 하루되세요 > 돈을잃자 님이 쓴 글입니다. > 제목 : 안녕하세요 > 시스템에서 필터로 사용하려고 합니다. 아래의 1,2번이 특정 수치보다 높거나 또는 낮을때를 활용하려고요 1. 분봉이나 틱봉에서 일봉의 adx수치를 가져오기 2. 분봉이나 틱봉에서 일봉의 adx수치(갭을 뺀것) 가져오기 2개를 부탁드립니다 ----------------------------------------------------- 3. 5/ 20 / 60 이평선이 정배열일때만 5일 이평선 두께가 굻어지는 지표 부탁드립니다. 4. 시뮬레이션차트에서 옵션 데이터를 검증하고 싶은데요 선물연결처럼 옵션도 예전꺼 연결해서 볼 수 있는 방법이 있을까요?? 즐거운 주말 되십쇼 ^^