[코인]나만의 차트 및 데이터 추출방법 (SRSI/RSI) (4)

2025. 1. 7. 15:10코인이야기/PYTHON

 

코드에서는 SRSIRSI의 값을 계산하고, 각각에 대해 특정 기간(4개 시점)의 값들을 추출하여 평균값을 구하는 방식으로 작동하는 구조입니다. 주어진 코드와 설명을 바탕으로, 각 부분에 대한 설명을 드리겠습니다.

 

1. SRSI (Stochastic RSI) 계산

SRSI는 상대강도지수(RSI)를 기반으로 계산된 Stochastic 지표입니다. PANTA.stochrsi() 함수로 SRSI 값을 구한 뒤, 4개의 최근 값(SRSI_1, SRSI_2, SRSI_3, SRSI_4)을 추출하고, 이를 setIsNAN 메서드를 통해 NaN 값을 처리합니다. 이어서, SRSI Smooth (SRSI_SM) 값도 추출합니다.

    def getDataFrameConverter_N1(self, idx, ticker, strDate, df):
        try:
            self.df = df

            ####################################################################################
            # SRSI (수치를 변경시 이상한 값이 나옴 변경하지 말것)
            ####################################################################################
            SRSI = PANTA.stochrsi(self.df['close'], 14, 14, 3, 3)
            SRSI_1 = SRSI.STOCHRSIk_14_14_3_3.iloc[-1]
            SRSI_2 = SRSI.STOCHRSIk_14_14_3_3.iloc[-2]
            SRSI_3 = SRSI.STOCHRSIk_14_14_3_3.iloc[-3]
            SRSI_4 = SRSI.STOCHRSIk_14_14_3_3.iloc[-4]

            SRSI_1 = self.AVGUTIL.setIsNAN(SRSI_1)
            SRSI_2 = self.AVGUTIL.setIsNAN(SRSI_2)
            SRSI_3 = self.AVGUTIL.setIsNAN(SRSI_3)
            SRSI_4 = self.AVGUTIL.setIsNAN(SRSI_4)

            SRSI_SM_1 = SRSI.STOCHRSId_14_14_3_3.iloc[-1]
            SRSI_SM_2 = SRSI.STOCHRSId_14_14_3_3.iloc[-2]
            SRSI_SM_3 = SRSI.STOCHRSId_14_14_3_3.iloc[-3]
            SRSI_SM_4 = SRSI.STOCHRSId_14_14_3_3.iloc[-4]

            SRSI_SM_1 = self.AVGUTIL.setIsNAN(SRSI_SM_1)
            SRSI_SM_2 = self.AVGUTIL.setIsNAN(SRSI_SM_2)
            SRSI_SM_3 = self.AVGUTIL.setIsNAN(SRSI_SM_3)
            SRSI_SM_4 = self.AVGUTIL.setIsNAN(SRSI_SM_4)



            ####################################################################################
            # RSI
            ####################################################################################
            RSI_Value = 14
            ar_RSI = []
            RSI = TA.RSI(self.df, RSI_Value)
            RSI_1 = RSI.iloc[-1]
            RSI_2 = RSI.iloc[-2]
            RSI_3 = RSI.iloc[-3]
            RSI_4 = RSI.iloc[-4]
            RSI_1 = self.AVGUTIL.setIsNAN(RSI_1)
            RSI_2 = self.AVGUTIL.setIsNAN(RSI_2)
            RSI_3 = self.AVGUTIL.setIsNAN(RSI_3)
            RSI_4 = self.AVGUTIL.setIsNAN(RSI_4)

            RSI_SM_1 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "1")
            RSI_SM_2 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "2")
            RSI_SM_3 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "3")
            RSI_SM_4 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "4")
            RSI_SM_1 = self.AVGUTIL.setIsNAN(RSI_SM_1)
            RSI_SM_2 = self.AVGUTIL.setIsNAN(RSI_SM_2)
            RSI_SM_3 = self.AVGUTIL.setIsNAN(RSI_SM_3)
            RSI_SM_4 = self.AVGUTIL.setIsNAN(RSI_SM_4)


            time.sleep(0.2)
        except Exception as e:
            print(f" _____ getDataFrameConverter _____ {ticker} _____ {e}")
        finally:
            pass

 

 

 

SRSI = PANTA.stochrsi(self.df['close'], 14, 14, 3, 3)
SRSI_1 = SRSI.STOCHRSIk_14_14_3_3.iloc[-1]
SRSI_2 = SRSI.STOCHRSIk_14_14_3_3.iloc[-2]
SRSI_3 = SRSI.STOCHRSIk_14_14_3_3.iloc[-3]
SRSI_4 = SRSI.STOCHRSIk_14_14_3_3.iloc[-4]

 

  • STOCHRSIk_14_14_3_3: Stochastic RSI의 "K" 값입니다. 이 값은 %K로도 불리며, 주어진 기간 동안 가격의 위치를 나타냅니다.
  • setIsNAN: NaN 값 처리 함수로, NaN 값이 있을 경우 0으로 변환합니다.
SRSI_SM_1 = SRSI.STOCHRSId_14_14_3_3.iloc[-1]
SRSI_SM_2 = SRSI.STOCHRSId_14_14_3_3.iloc[-2]
SRSI_SM_3 = SRSI.STOCHRSId_14_14_3_3.iloc[-3]
SRSI_SM_4 = SRSI.STOCHRSId_14_14_3_3.iloc[-4]

 


STOCHRSId_14_14_3_3: Stochastic RSI의 "D" 값으로, %D는 %K의 이동 평균값입니다.

2. RSI (Relative Strength Index) 계산

RSI는 가격의 상승과 하락 강도를 비교하여 시장의 과매도 또는 과매수 상태를 판단하는 지표입니다. TA.RSI() 함수로 RSI 값을 계산한 뒤, 역시 최근 4개 값(RSI_1, RSI_2, RSI_3, RSI_4)을 추출하고 setIsNAN 함수로 처리합니다.

RSI = TA.RSI(self.df, RSI_Value)
RSI_1 = RSI.iloc[-1]
RSI_2 = RSI.iloc[-2]
RSI_3 = RSI.iloc[-3]
RSI_4 = RSI.iloc[-4]

또한, RSI의 Smoothing (RSI_SM) 값도 추출하여 이동평균 처리된 값을 구합니다.

RSI_SM_1 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "1")
RSI_SM_2 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "2")
RSI_SM_3 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "3")
RSI_SM_4 = self.AVGUTIL.getRSISM_N1(RSI, RSI_Value, "4")

3. setIsNAN 함수

이 함수는 NaN 값을 0으로 변환하는 역할을 합니다. 데이터 처리 중에 결측값이 발생할 수 있기 때문에 이를 안전하게 처리하기 위해 사용됩니다.

def setIsNAN(self, Value):
    try:
        if np.isnan(Value):
            Value = 0
        return Value
    except Exception as e:
        print(f" _________________ setIsNAN _______________ {e}")

4. getRSISM_N1 함수

def getRSISM_N1(self, intRSI, cnt, flag):
    try:
        flag_offset = int(flag) - 1
        if flag_offset < 0 or flag_offset + cnt > len(intRSI):
            raise ValueError("Invalid flag or cnt value.")
        selected_values = intRSI.iloc[-(flag_offset + cnt): -flag_offset] if flag_offset > 0 else intRSI.iloc[-cnt:]
        totVal = selected_values.sum() / cnt
        return totVal
    except Exception as e:
        print(f" _____ getRSISM _____ {e}")
        return 0

 

5. 전반적인 흐름

이 함수의 전반적인 흐름은 다음과 같습니다:

  1. 주어진 **df**에서 SRSIRSI 값을 계산합니다.
  2. 각 값에 대해 최근 4개 시점의 데이터를 추출합니다.
  3. setIsNAN 메서드를 통해 결측값을 처리합니다.
  4. Smoothing된 SRSI_SMRSI_SM 값을 계산합니다.
  5. 데이터를 처리하여 반환합니다.

이러한 방식으로, SRSIRSI 지표를 추출하고, 이를 기반으로 트렌드를 분석하거나 시각화하는 데 유용한 정보를 제공합니다.

반응형