iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
永豐金融APIs

在賭場尋求財富是否搞錯了什麼系列 第 3

賭桌上的技術分析 - RSI

身為一個韭菜,進來賭場還是要了解一下牌局的遊戲規則,比如說股票每分每秒都可以交易,有分成內盤成交與外盤成交,以一分鐘形成

RSI 是以某段時間,股價”平均漲幅”與”平均跌幅”所計算出來的數值,可看出股價觀測時間內股票價格強勢或弱勢的指標。

RSI = ( 上升平均數/(上升平均數+下跌平均數) ) × 100

根據公式我們可以得到下面結論:

RSI的範圍一定在0-100之間。
RSI越大,代表過去『漲的機率』越大。

現在我們來假設實作均線RSI順勢策略,抓最近14根K棒去做運算,突破70則市價買進,跌破30則市價賣出

好在 talib 已經有實作 RSI 方法,我們不用再寫計算公式直接套用即可

talib.RSI(df.Close) # 天數參數採用預設值 14 根 K棒
from numpy import append
import pandas as pd
import shioaji
import talib

...

minute_close = pd.Series()

api.quote.subscribe(
    api.Contracts.Stocks["2330"], 
    quote_type = sj.constant.QuoteType.Tick, # or 'tick'
    version = sj.constant.QuoteVersion.v1 # or 'v1'
)

@api.quote.on_quote
def quote_callback(topic: str, quote: dict):
    print(f"Topic: {topic}, Quote: {quote}")

    # 紀錄前14個close
    for i in range(0,14):
        minute_close = minute_close.append(pd.Series(
            [quote['Close'][0]], 
            index=[pd.to_datetime(quote['Time'], unit='ns')]
        ))
        time.sleep(60)

    # 開始算RSI
    for i in range(0,700):
        
        # 存到分k收盤價的series
        minute_close = minute_close.append(pd.Series(
            [quote['Close'][0]], 
            index=[pd.to_datetime(quote['Time'], unit='ns')]
        ))
        
        # 計算rsi
        rsi = talib.RSI(minute_close)

        # 觸發訊號判斷
        if rsi <= 30 and rsi >= 0:
            now = datetime.now()
            current_time = now.strftime("%H:%M:%S")
            print("Current Time =", current_time, "BUY AT ", quote['Close'][0])
        if rsi >= 70:
            now = datetime.now()
            current_time = now.strftime("%H:%M:%S")
            print("Current Time =", current_time, "SELL AT ", quote['Close'][0])
        time.sleep(60)
 

照理說應該會出現

Response Code: 200 | Event Code: 16 | Info: MKT/*/TSE/2330 | Event: Subscribe or Unsubscribe ok

MKT/idcdmzpcr01/TSE/2330 
{
    'AmountSum': [1688787000.0], 
    'Close': [593.0], 
    'Date': '2021/07/01', 
    'TickType': [2], 
    'Time': '09:10:20.628620', 
    'VolSum': [2837], 
    'Volume': [1]
}
Current Time = 10:30:41 BUY AT  602.0

簡單的策略寫出來之後,就要思考一下這個策略的可行性,需要拿過去的資料測試看看是否如預期

RSI指標的另個判斷買進訊號或賣出訊號的方式,是利用短週期的RSI波動會較常週期的波動來的劇烈,

『短週期的RSI』向上突破『長週期的RSI』,稱為黃金交叉,是買進訊號。
『短週期的RSI』向下跌破『長週期的RSI』,稱為死亡交叉,為賣出訊號。

那麼明天就試著研究看看怎麼跑回測,雖然目前的策略比較想用在當日沖銷中,不知道每天的沖銷是否會有所不同,中秋節過後就每天記錄一下這個策略的可行性吧!

參考:
什麼是 RSI 相對強弱指標?使用時要注意什麼?四大解讀一次看!


上一篇
這個賭場在玩什麼把戲 - 金融商品內容
下一篇
賭盤的策略思考 - 菲阿裡四價策略
系列文
在賭場尋求財富是否搞錯了什麼22

尚未有邦友留言

立即登入留言