커뮤니티

수식을 부탁드립니다

프로필 이미지
장보고153
2025-07-16 01:47:56
191
글번호 192524
답변완료
늘 친절히 답해 주셔서 감사를 드립니다. 1분,5분,10분 모두 ADX 상승, +DI>-DI일 때 매수하고, 1분,5분 에서 ADX가 하락하면 매수 청산, 그리고 반대의 경우는 매도와 매도 청산하는 수식을 작성하고자 합니다.넓으신 마음으로 이해해 주시면 감사하겠습니다. 늘 건강하시기를 기원합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-16 11:02:50

안녕하세요 예스스탁입니다. input : Length(14),타분봉1(5),타분봉2(10); var : S1(0),D1(0),TM(0),cnt(0); var : xTF(0),xTL(0),xTH(0),xi(0),xCB(0); var : xMyRange(Length),xTRange(0),prexTRange(0); var : xPlusDM(0),xPlusDM14(0),prexPlusDM14(0); var : xMinusDM(0),xMinusDM14(0),prexMinusDM14(0); Var : xCummDMI(0),xADX(0),prexADX(0),xDP(0),xDM(0),x1(0),x2(0); Array : xH[61](0),xL[61](0),xC[61](0),xTR[61](0),xDMI[61](0); var : yTF(0),yTL(0),yTH(0),yi(0),yCB(0); var : yMyRange(Length),yTRange(0),preyTRange(0); var : yPlusDM(0),yPlusDM14(0),preyPlusDM14(0); var : yMinusDM(0),yMinusDM14(0),preyMinusDM14(0); Var : yCummDMI(0),yADX(0),preyADX(0),yDP(0),yDM(0),y1(0),y2(0); Array : yH[61](0),yL[61](0),yC[61](0),yTR[61](0),yDMI[61](0); var : ADXv(0),DP(0),DM(0); ADXV = ADX(length); DP = DiPlus(length); DM = DiMinus(length); if bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; xTF = TM%타분봉1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타분봉1 > 1 and xTF < xTF[1]) or (Bdate == Bdate[1] and 타분봉1 > 1 and TM >= TM[1]+타분봉1) or (Bdate == Bdate[1] and 타분봉1 == 1 and TM > TM[1]) Then { xi = xi+1; if xi >= Length+2 Then xCB = xCB+1; xH[0] = H; xL[0] = L; xC[0] = C; prexTRange = xTRange[1]; prexPlusDM14 = xPlusDM14[1]; prexMinusDM14 = xMinusDM14[1]; PrexADX = xADX[1]; for cnt = 1 to 60 { xH[cnt] = xH[cnt-1][1]; xL[cnt] = xL[cnt-1][1]; xC[cnt] = xC[cnt-1][1]; xTR[cnt] = xTR[cnt-1][1]; xDMI[cnt] = xDMI[cnt-1][1]; } } if H > xH[0] Then xH[0] = H; if L < xL[0] Then xL[0] = L; xC[0] = C; if xC[1] > 0 Then{ If xC[1] > xH[0] then xTH = xC[1]; else xTH = xH[0]; If xC[1] < xL[0] then xTL = xC[1]; else xTL = xL[0]; xTR[0] = xTH-xTL; } If xCB == 1 Then { xMyRange = Length; xDP = 0; xPlusDM14 = 0; xTRange = 0; xDM = 0; xMinusDM14 = 0; For cnt = 0 To xMyRange - 1 { If xH[cnt] - xH[cnt+1] < 0 Then xPlusDM = 0 ; Else xPlusDM = xH[cnt] - xH[cnt+1]; If xL[cnt+1] - xL[cnt] < 0 Then xMinusDM = 0; Else xMinusDM = xL[cnt+1] - xL[cnt]; x1 = xPlusDM; x2 = xMinusDM; If x1 >= x2 Then xMinusDM = 0; If x2 >= x1 Then xPlusDM = 0; xTRange = xTRange + xTR[cnt]; xPlusDM14 = xPlusDM14 + xPlusDM; xMinusDM14 = xMinusDM14 + xMinusDM; } If xTRange <> 0 Then xDP = 100 * xPlusDM14 / xTRange; Else xDP = 0 ; If xTRange <> 0 Then xDM = 100 * xMinusDM14 / xTRange; Else xDM = 0; If xDP + xDM == 0 Then xDMI[0] = 0; Else xDMI[0] = 100 * AbsValue(xDP - xDM) / (xDP + xDM); } Else If xCB > 1 Then { If xH[0] - xH[1] < 0 Then xPlusDM = 0; Else xPlusDM = xH[0] - xH[1]; If xL[1] - xL[0] < 0 Then xMinusDM = 0; Else xMinusDM = xL[1] - xL[0]; x1 = xPlusDM; x2 = xMinusDM; If x1 >= x2 Then xMinusDM = 0; If x2 >= x1 Then xPlusDM = 0; If xMyRange > 0 Then { xTRange = prexTRange - (prexTRange / xMyRange) + xTR[0]; xPlusDM14 = prexPlusDM14 - (prexPlusDM14 / xMyRange) + xPlusDM; xMinusDM14 = prexMinusDM14 - (prexMinusDM14 / xMyRange) + xMinusDM; } If xTRange <> 0 Then xDP = 100 * xPlusDM14 / xTRange; Else xDP = 0 ; If xTRange <> 0 Then xDM = 100 * xMinusDM14 / xTRange; Else xDM = 0; If xDP + xDM == 0 Then xDMI[0] = 0; Else xDMI[0] = 100 * AbsValue(xDP - xDM) / (xDP + xDM); } If xCB >= 1 AND Length > 0 Then { If xCB < Length Then { xCummDMI = 0; for cnt = 0 To xCB - 1 { xCummDMI = xCummDMI + xDMI[cnt]; } xADX = xCummDMI / xCB; } Else xADX = (PrexADX * (Length - 1) + xDMI[0]) / Length; } yTF = TM%타분봉1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타분봉1 > 1 and yTF < yTF[1]) or (Bdate == Bdate[1] and 타분봉1 > 1 and TM >= TM[1]+타분봉1) or (Bdate == Bdate[1] and 타분봉1 == 1 and TM > TM[1]) Then { yi = yi+1; if yi >= Length+2 Then yCB = yCB+1; yH[0] = H; yL[0] = L; yC[0] = C; preyTRange = yTRange[1]; preyPlusDM14 = yPlusDM14[1]; preyMinusDM14 = yMinusDM14[1]; PreyADX = yADX[1]; for cnt = 1 to 60 { yH[cnt] = yH[cnt-1][1]; yL[cnt] = yL[cnt-1][1]; yC[cnt] = yC[cnt-1][1]; yTR[cnt] = yTR[cnt-1][1]; yDMI[cnt] = yDMI[cnt-1][1]; } } if H > yH[0] Then yH[0] = H; if L < yL[0] Then yL[0] = L; yC[0] = C; if yC[1] > 0 Then{ If yC[1] > yH[0] then yTH = yC[1]; else yTH = yH[0]; If yC[1] < yL[0] then yTL = yC[1]; else yTL = yL[0]; yTR[0] = yTH-yTL; } If yCB == 1 Then { yMyRange = Length; yDP = 0; yPlusDM14 = 0; yTRange = 0; yDM = 0; yMinusDM14 = 0; For cnt = 0 To yMyRange - 1 { If yH[cnt] - yH[cnt+1] < 0 Then yPlusDM = 0 ; Else yPlusDM = yH[cnt] - yH[cnt+1]; If yL[cnt+1] - yL[cnt] < 0 Then yMinusDM = 0; Else yMinusDM = yL[cnt+1] - yL[cnt]; y1 = yPlusDM; y2 = yMinusDM; If y1 >= y2 Then yMinusDM = 0; If y2 >= y1 Then yPlusDM = 0; yTRange = yTRange + yTR[cnt]; yPlusDM14 = yPlusDM14 + yPlusDM; yMinusDM14 = yMinusDM14 + yMinusDM; } If yTRange <> 0 Then yDP = 100 * yPlusDM14 / yTRange; Else yDP = 0 ; If yTRange <> 0 Then yDM = 100 * yMinusDM14 / yTRange; Else yDM = 0; If yDP + yDM == 0 Then yDMI[0] = 0; Else yDMI[0] = 100 * AbsValue(yDP - yDM) / (yDP + yDM); } Else If yCB > 1 Then { If yH[0] - yH[1] < 0 Then yPlusDM = 0; Else yPlusDM = yH[0] - yH[1]; If yL[1] - yL[0] < 0 Then yMinusDM = 0; Else yMinusDM = yL[1] - yL[0]; y1 = yPlusDM; y2 = yMinusDM; If y1 >= y2 Then yMinusDM = 0; If y2 >= y1 Then yPlusDM = 0; If yMyRange > 0 Then { yTRange = preyTRange - (preyTRange / yMyRange) + yTR[0]; yPlusDM14 = preyPlusDM14 - (preyPlusDM14 / yMyRange) + yPlusDM; yMinusDM14 = preyMinusDM14 - (preyMinusDM14 / yMyRange) + yMinusDM; } If yTRange <> 0 Then yDP = 100 * yPlusDM14 / yTRange; Else yDP = 0 ; If yTRange <> 0 Then yDM = 100 * yMinusDM14 / yTRange; Else yDM = 0; If yDP + yDM == 0 Then yDMI[0] = 0; Else yDMI[0] = 100 * AbsValue(yDP - yDM) / (yDP + yDM); } If yCB >= 1 AND Length > 0 Then { If yCB < Length Then { yCummDMI = 0; for cnt = 0 To yCB - 1 { yCummDMI = yCummDMI + yDMI[cnt]; } yADX = yCummDMI / yCB; } Else yADX = (PreyADX * (Length - 1) + yDMI[0]) / Length; } Condition1 = ADXV > ADXV[1] and DP > DM and xADX > PrexADX and xDP > xDM and yADX > PreyADX and yDP > yDM; Condition2 = ADXV < ADXV[1] and DP < DM and xADX < PrexADX and xDP < xDM and yADX < PreyADX and yDP < yDM; if Condition1 == true Then Buy(); if ADXV < ADXV[1] and xADX < PrexADX Then ExitLong(); if Condition2 == true Then Sell(); if ADXV > ADXV[1] and xADX > PrexADX Then ExitShort(); } 즐거운 하루되세요 > 장보고153 님이 쓴 글입니다. > 제목 : 수식을 부탁드립니다 > 늘 친절히 답해 주셔서 감사를 드립니다. 1분,5분,10분 모두 ADX 상승, +DI>-DI일 때 매수하고, 1분,5분 에서 ADX가 하락하면 매수 청산, 그리고 반대의 경우는 매도와 매도 청산하는 수식을 작성하고자 합니다.넓으신 마음으로 이해해 주시면 감사하겠습니다. 늘 건강하시기를 기원합니다.