소스파일은 github.com/galaxywiz/StockCrawler_py 에서 확인 가능합니다.

 

단기 변동성 돌파는 레리 윌리엄 (Larry R Williams) 라는 기술 투자의 대가로 유명 하신 분이 만드신 매매 방법인데, 일일 단위로 보고 있다가, 오늘 시작가가 전날 range (고가-저가) * 노이즈 이상을 돌파 시, 매수 신호라고 판단하여 진입. 다음날 시가에 정리하는 매매 방법입니다.

 

보통 노이즈 값은 0.7, 0.8 값을 사용하는 편이며,

몇몇 방법들 보니 20, 30일치 분봉들의 평균을 내서 노이즈를 계산하는 등 여러 방법으로 조절 할 수 있습니다

 

[2020-10-31][LG화학]

[LarryRTradeStrategy] short(매도) 신호 잡혔을 때 차트입니다

 

#//---------------------------------------------------//
class LarryRTradeStrategy(TradeStrategy):
    RANGE = 20

    def noice(self, timeIdx):
        return 0.7

    def __buySignal(self, timeIdx):
        chartData = self.stockData_.chartData_
        noice = self.noice(timeIdx)
        candle = chartData.iloc[timeIdx]
        startPrice = candle["start"]
        closePrice = candle["close"]
        stand = startPrice + ((candle["high"] - candle["low"]) * noice)

        if closePrice > stand:
            return True
        return False

    def __sellSignal(self, timeIdx):
        chartData = self.stockData_.chartData_
        noice = self.noice(timeIdx)
        candle = chartData.iloc[timeIdx]
        startPrice = candle["start"]
        closePrice = candle["close"]
        stand = startPrice - ((candle["high"] - candle["low"]) * noice)

        if closePrice < stand:
            return True
        return False

    def buy(self, timeIdx):
        chartData = self.stockData_.chartData_
        if len(chartData) <= self.RANGE:
            return False

        if self.stockData_.position_ == BuyState.STAY:
            if self.__buySignal(timeIdx):
                return True
        return False

    def sell(self, timeIdx):
        chartData = self.stockData_.chartData_
        if len(chartData) <= self.RANGE:
            return False

        if self.stockData_.position_ == BuyState.STAY:
            if self.__sellSignal(timeIdx):
                return True
        return False

    def buyList(self):
        signalList = []
        for i in range(0, self.RANGE):
            signalList.append(np.nan)
        
        chartData = self.stockData_.chartData_

        for i in range(self.RANGE, len(chartData)):
            nowCandle = chartData.iloc[i]
            if self.__buySignal(i):
                signalList.append(nowCandle["close"])
            else:
                signalList.append(np.nan)

        return signalList

    def sellList(self):
        signalList = []
        for i in range(0, self.RANGE):
            signalList.append(np.nan)
        
        chartData = self.stockData_.chartData_

        flag = False
        for i in range(self.RANGE, len(chartData)):
            nowCandle = chartData.iloc[i]
            if flag:
                signalList.append(nowCandle["close"])
                flag = False
                continue

            if self.__buySignal(i):
                flag = True
            
            signalList.append(np.nan)

        return signalList     

지금까지 매매 전략을 코드로 녹여내는 방법에 대해서 기술해 보았습니다.

여기에 양념 토핑 하 듯이, 몇몇 규칙을 더 추가해서 나만의 전략을 만들어 보시다 보면 좋을 결과가 나올 것입니다.

(예를 들어 전날 양봉이 뜨기 전까지 매수를 대기한다든가…)

'재테크 > 주식 알람 시스템 만들기' 카테고리의 다른 글

10. Bot  (0) 2020.11.08
9. 머신 러닝에 대해서  (0) 2020.11.08
8-2. MACD 전략  (0) 2020.11.08
8-1. 골든 크로스 전략  (0) 2020.11.08
8. 매매 전략에 대해서  (0) 2020.11.08

+ Recent posts