커뮤니티

adx와 di 관련 수정부탁드립니다.

프로필 이미지
바둑이
2020-09-07 23:53:36
1027
글번호 142153
답변완료
안녕하세요. 아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다. 전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다. 감사합니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if dayindex <= dix then{ If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop);
시스템
답변 4
프로필 이미지

예스스탁 예스스탁 답변

2020-09-08 14:59:31

안녕하세요 예스스탁입니다. 1 상향돌파/하향이탈은 현재봉상태와 전봉상태를 보게 됩니다. 전봉상태를 볼때 전봉이 당일봉일때만 보고자 하시면 아래와 같이 작성하시면 됩니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if Bdate == Bdate[1] and dayindex <= dix Then { If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 2 지표값을 모두 당일데이타로만 계산하고자 하시면 아래식 이용하시면 됩니다. 다만 24기간의 DIPlus,DIMinus,adx를 계산하기 위해서는 계산상 당일 봉갯수가 최소 26개 이상이 발생한 후부터 계산할수가 있습니다. 즉 장시작후 최초 26개봉은 신호가 발생할수 없습니다. 현재 수식이 dix로 당일 10개봉 안에만 신호가 발생하게 되어 있는데 해당 값을 뒤로 많이 미루셔야 합니다. 해당 내용 감안해서 dix를 조정하셔야 합니다. Inputs : dix(36), Period(24); Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0); var : PlusDM(0), MinusDM(0),DMIv(0); var : DP(0),DM(0),entry(0); if bdate != Bdate[1] Then { idx = 0; DP = 0; DM = 0; } else idx = idx+1; If idx == Period+1 Then { DP = 0; DM = 0; PlusDM14 = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Period - 1 { If High[Counter] - High[Counter+1] < 0 Then PlusDM = 0; Else PlusDM = High[Counter] - High[Counter+1]; If Low[Counter+1] - Low[Counter] < 0 Then MinusDM = 0; Else MinusDM = Low[Counter+1] - Low[Counter]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If idx > Period+1 Then { If High[0] - High[1] < 0 Then PlusDM = 0; Else PlusDM = High[0] - High[1]; If Low [1] - Low [0] < 0 Then MinusDM = 0; Else MinusDM = Low[1] - Low[0]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; If Period > 0 Then Begin TRange = TRange[1] - (TRange[1] / Period) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM; End; If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); var : CummDMI(0),ADXV(0); If idx >= Period+1 and idx <= period*2+1 Then { CummDMI = 0; for Counter = 0 To idx-(Period+1) { CummDMI = CummDMI + DMIV[Counter]; } ADXV = CummDMI / (idx-(Period+1)+1); } Else ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period; If idx > Period+1 Then { If CrossUp(ADXV, DP) or CrossDown(ADXV, DP) Then if entry < 5 Then Buy(); If CrossUp(ADXV, DM) or CrossDown(ADXV, DM) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 즐거운 하루되세요 > 바둑이 님이 쓴 글입니다. > 제목 : adx와 di 관련 수정부탁드립니다. > 안녕하세요. 아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다. 전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다. 감사합니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if dayindex <= dix then{ If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop);
프로필 이미지

바둑이

2020-09-09 02:56:02

안녕하세요. 작성해주신 2가지 식은 전혀 제가 의도한 바가 아니었습니다. 아래식을 이용하여 첨부파일1에서 노란색 동그라미 부분에 진입신호가 나오게 하고싶습니다. 빨간색 엑스표시는 전일 DIMinus를 당일ADX가 돌파하고 있으므로 진입이 안나오게 하여주시고, 꼭 당일부터의 DI선을 ADX가 돌파시 진입하게 해주십시오. 진입 후 청산은 DIPlus 와 DIMinus가 반대로 교차시 청산신호 나오게 부탁드립니다. 감사합니다. Input: dix(1), s2(6.4); Input : Period(14); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if dayindex <= dix then{ If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 1 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 1 Then Sell(); } If marketposition<>0 then { exitlong("추적스탑B",Atstop,highest(high,barsSinceEntry +2)-atr(6)*s2); exitshort("추적스탑S",Atstop,lowest(low,barsSinceEntry +2)+atr(6)*s2); } SetStopProfittarget(12.6,PointStop); SetStopLoss(2.0,PointStop); > 예스스탁 님이 쓴 글입니다. > 제목 : Re : adx와 di 관련 수정부탁드립니다. > 안녕하세요 예스스탁입니다. 1 상향돌파/하향이탈은 현재봉상태와 전봉상태를 보게 됩니다. 전봉상태를 볼때 전봉이 당일봉일때만 보고자 하시면 아래와 같이 작성하시면 됩니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if Bdate == Bdate[1] and dayindex <= dix Then { If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 2 지표값을 모두 당일데이타로만 계산하고자 하시면 아래식 이용하시면 됩니다. 다만 24기간의 DIPlus,DIMinus,adx를 계산하기 위해서는 계산상 당일 봉갯수가 최소 26개 이상이 발생한 후부터 계산할수가 있습니다. 즉 장시작후 최초 26개봉은 신호가 발생할수 없습니다. 현재 수식이 dix로 당일 10개봉 안에만 신호가 발생하게 되어 있는데 해당 값을 뒤로 많이 미루셔야 합니다. 해당 내용 감안해서 dix를 조정하셔야 합니다. Inputs : dix(36), Period(24); Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0); var : PlusDM(0), MinusDM(0),DMIv(0); var : DP(0),DM(0),entry(0); if bdate != Bdate[1] Then { idx = 0; DP = 0; DM = 0; } else idx = idx+1; If idx == Period+1 Then { DP = 0; DM = 0; PlusDM14 = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Period - 1 { If High[Counter] - High[Counter+1] < 0 Then PlusDM = 0; Else PlusDM = High[Counter] - High[Counter+1]; If Low[Counter+1] - Low[Counter] < 0 Then MinusDM = 0; Else MinusDM = Low[Counter+1] - Low[Counter]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If idx > Period+1 Then { If High[0] - High[1] < 0 Then PlusDM = 0; Else PlusDM = High[0] - High[1]; If Low [1] - Low [0] < 0 Then MinusDM = 0; Else MinusDM = Low[1] - Low[0]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; If Period > 0 Then Begin TRange = TRange[1] - (TRange[1] / Period) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM; End; If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); var : CummDMI(0),ADXV(0); If idx >= Period+1 and idx <= period*2+1 Then { CummDMI = 0; for Counter = 0 To idx-(Period+1) { CummDMI = CummDMI + DMIV[Counter]; } ADXV = CummDMI / (idx-(Period+1)+1); } Else ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period; If idx > Period+1 Then { If CrossUp(ADXV, DP) or CrossDown(ADXV, DP) Then if entry < 5 Then Buy(); If CrossUp(ADXV, DM) or CrossDown(ADXV, DM) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 즐거운 하루되세요 > 바둑이 님이 쓴 글입니다. > 제목 : adx와 di 관련 수정부탁드립니다. > 안녕하세요. 아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다. 전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다. 감사합니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if dayindex <= dix then{ If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop);
프로필 이미지

예스스탁 예스스탁 답변

2020-09-09 11:00:41

안녕하세요 예스스탁입니다. 답변드린 수식 중 1번수식을 Period를 14로 지정해서 적용하시면 첨부하신 그림과 같이 진입신호가 발생합니다. 1번에 청산식 추가해 드립니다. Input : dix(10),Period(14); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if Bdate == Bdate[1] Then { If CrossUp(value3, value1) or CrossDown(value3, value1) Then { if entry < 5 and dayindex <= dix Then Buy(); } If CrossUp(value3, value2) or CrossDown(value3, value2) Then { if entry < 5 and dayindex <= dix Then Sell(); Else ExitLong(); } if MarketPosition == 1 and CrossDown(Value1,Value2) Then ExitLong(); if MarketPosition == -1 and CrossUp(Value1,Value2) Then ExitShort(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 즐거운 하루되세요 > 바둑이 님이 쓴 글입니다. > 제목 : Re : Re : adx와 di 관련 수정부탁드립니다. > 안녕하세요. 작성해주신 2가지 식은 전혀 제가 의도한 바가 아니었습니다. 아래식을 이용하여 첨부파일1에서 노란색 동그라미 부분에 진입신호가 나오게 하고싶습니다. 빨간색 엑스표시는 전일 DIMinus를 당일ADX가 돌파하고 있으므로 진입이 안나오게 하여주시고, 꼭 당일부터의 DI선을 ADX가 돌파시 진입하게 해주십시오. 진입 후 청산은 DIPlus 와 DIMinus가 반대로 교차시 청산신호 나오게 부탁드립니다. 감사합니다. Input: dix(1), s2(6.4); Input : Period(14); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if dayindex <= dix then{ If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 1 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 1 Then Sell(); } If marketposition<>0 then { exitlong("추적스탑B",Atstop,highest(high,barsSinceEntry +2)-atr(6)*s2); exitshort("추적스탑S",Atstop,lowest(low,barsSinceEntry +2)+atr(6)*s2); } SetStopProfittarget(12.6,PointStop); SetStopLoss(2.0,PointStop); > 예스스탁 님이 쓴 글입니다. > 제목 : Re : adx와 di 관련 수정부탁드립니다. > 안녕하세요 예스스탁입니다. 1 상향돌파/하향이탈은 현재봉상태와 전봉상태를 보게 됩니다. 전봉상태를 볼때 전봉이 당일봉일때만 보고자 하시면 아래와 같이 작성하시면 됩니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if Bdate == Bdate[1] and dayindex <= dix Then { If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 2 지표값을 모두 당일데이타로만 계산하고자 하시면 아래식 이용하시면 됩니다. 다만 24기간의 DIPlus,DIMinus,adx를 계산하기 위해서는 계산상 당일 봉갯수가 최소 26개 이상이 발생한 후부터 계산할수가 있습니다. 즉 장시작후 최초 26개봉은 신호가 발생할수 없습니다. 현재 수식이 dix로 당일 10개봉 안에만 신호가 발생하게 되어 있는데 해당 값을 뒤로 많이 미루셔야 합니다. 해당 내용 감안해서 dix를 조정하셔야 합니다. Inputs : dix(36), Period(24); Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0); var : PlusDM(0), MinusDM(0),DMIv(0); var : DP(0),DM(0),entry(0); if bdate != Bdate[1] Then { idx = 0; DP = 0; DM = 0; } else idx = idx+1; If idx == Period+1 Then { DP = 0; DM = 0; PlusDM14 = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Period - 1 { If High[Counter] - High[Counter+1] < 0 Then PlusDM = 0; Else PlusDM = High[Counter] - High[Counter+1]; If Low[Counter+1] - Low[Counter] < 0 Then MinusDM = 0; Else MinusDM = Low[Counter+1] - Low[Counter]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If idx > Period+1 Then { If High[0] - High[1] < 0 Then PlusDM = 0; Else PlusDM = High[0] - High[1]; If Low [1] - Low [0] < 0 Then MinusDM = 0; Else MinusDM = Low[1] - Low[0]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; If Period > 0 Then Begin TRange = TRange[1] - (TRange[1] / Period) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM; End; If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); var : CummDMI(0),ADXV(0); If idx >= Period+1 and idx <= period*2+1 Then { CummDMI = 0; for Counter = 0 To idx-(Period+1) { CummDMI = CummDMI + DMIV[Counter]; } ADXV = CummDMI / (idx-(Period+1)+1); } Else ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period; If idx > Period+1 Then { If CrossUp(ADXV, DP) or CrossDown(ADXV, DP) Then if entry < 5 Then Buy(); If CrossUp(ADXV, DM) or CrossDown(ADXV, DM) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop); 즐거운 하루되세요 > 바둑이 님이 쓴 글입니다. > 제목 : adx와 di 관련 수정부탁드립니다. > 안녕하세요. 아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다. 전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다. 감사합니다. Input : dix(10),Period(24); value1 = DIPlus(Period); value2 = DIMinus(Period); value3 = ADX(Period); var : T1(0),entry(0); if Bdate != bdate[1] Then T1 = TotalTrades[1]; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; if dayindex <= dix then{ If CrossUp(value3, value1) or CrossDown(value3, value1) Then if entry < 5 Then Buy(); If CrossUp(value3, value2) or CrossDown(value3, value2) Then if entry < 5 Then Sell(); } SetStopEndofday(150000); SetStopProfittarget(100,PointStop); SetStopLoss(10.0,PointStop);
프로필 이미지

바둑이

2020-09-09 14:24:59

바둑이 님에 의해 삭제된 답변입니다.