赌桌上的技术分析 - 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 相对强弱指标?使用时要注意什麽?四大解读一次看!


<<:  使用 Template Message 替 Line Bot 加上同意条款的功能(1)

>>:  Day 18 | Frame Animation

day20 在ui蒐集flow,能取代liveData吗?

好的,前一篇讲到了flow可以完全取代liveData,其实错!! 直接从结论开始讲,flow并不支...

Day 06: Creational patterns - Factory Method

目的 不再限制一个工厂(物件)建立许多产品(物件),而是转变成一个产品(物件)对应一个工厂(物件),...

[Day 6] .Net WhenAll 底层(1)

前言 这系列教学文的目的是要探索具备非同步功能的框架在底层发生了什麽事, 甚至写一个简单的框架出来,...

[Day 22] 计算属性computed趴搭搭

嗨各位!!!又是我,那个小可爱又来了,今天要来讲的是—计算属性,如果你的模板需要加入很多逻辑运算,可...

[第25天]理财达人Mx. Ada-ADX指标

前言 本文说明使用TA-Lib函式库计算ADX指标。 ADX 指标 平均趋向指标:ADX(Avera...