發表文章

FTX 量化空間:不敗無限網格自動交易

圖片
更新紀錄 2022.04.06 更新計算單格獲利跟年化獲利的段落,跟之前的算法相比大約只剩一半,有興趣的讀者再請自行評估。 本篇目標 介紹使用 FTX 量化空間執行無限網格交易機器人。 還沒註冊 FTX 的歡迎使用我的推薦碼註冊 FTX 推薦連結 https://ftx.com/profile#a=CTLING 策略特色 以 FTT/USDT 交易對為例,這個策略會維持 FTT 跟 USDT 的價值相等。 策略不需要設定任何參數 ,網格寬度,再平衡比例之類的都不需要。 策略建立在最小交易量之上,會維持當前價格的上下各掛出一筆買賣單。 設定範例 買進策略 策略名稱 觸發邏輯 策略內容 賣出策略 策略名稱 觸發邏輯 跟 Buy 一樣,直接觸發 策略內容 掛單範例 數學概念 假設策略操作的目標是 USDT 跟 FTT 。策略要保持 USDT 跟 FTT 的價值相同。 所以我們可以寫出以下等式: U = F * P U 表示 USDT 的數量,F 表示 FTT 的數量, P 表示 FTT/USDT 的價位。 將 F 從等式右邊換到左邊,可以得到以下等式 U/F = P 這個價位表示根據自己持有的 U 跟 F 可以得到理論上 P 應該是多少。 假設 U = 2000, F = 40 可以算出 P = 2000 / 40 = 50 這時候不管市場上的 P 是多少,你手上的 F 的價位就是 50 。 先看 買進的情況 當價位下跌時,策略會執行買進,但是買進的價位要設定為多少才能繼續保持 U 跟 F 的價值相等呢? 我們可以先假設買進的價位是 P_Buy ,買進的數量為 0.1 ,可以得到以下等式 U - P_Buy * 0.1 = (F + 0.1) * P_Buy 左邊是買進之後剩下的 USDT ,右邊是買進之後 FTT 的價值。 整理等式之後,可以得到 P_Buy = U / (F + 2 * 0.1) 表示我們只要直接在這個價位 掛買單 就可以讓 U 跟 F 的價值保持一致。 接下來是 賣出的情況 假設 P_Sell 是賣出的價位,可以得到以下等式 U + P_Sell * 0.1 = (F - 0.1) * P_Sell 整理等式可以得到 P_Sell = U / (F - 2 * 0.1) 表示我們只要直接在這個價位 掛

使用 python 抓取螢幕截圖(多螢幕適用)

from PIL import ImageGrab img = ImageGrab.grab(all_screens=True) img.save("PIL_grab.png")

【2021.08.03 親測有效】安裝 Chrome Remote Desktop 在 Ubuntu 20.04 headless server

網路文章

WPF ViewModel PropertyChanged

紀錄一個好用的套件:PropertyChanged.Fody 裝了之後呢,在你的 ViewModel 上面加上 [AddINotifyPropertyChangedInterface] 就可以自動產生 NotifyPropertyChanged 的事件囉!

Union-Find 併查集

更新紀錄: 2022.03.01 更新網路資料 2 的連結 網路資料: Link  中文維基百科 Link Robert Sedgewick 教授的 Algorithm 4th 配套投影片 觀念紀錄: Union-Find 是一種 data structure 也可以是一種類型的問題。 問題的主要描述是: Find(x, y): 回傳 x, y 是否屬於同一個 set Union(x, y): 合併 x, y 所屬的 set 之所以會說是一種 data structure 是因為,實務上高效率解決這類問題的作法是一種特定的資料結構。 Python 程式碼: class UnionFind: def __init__(self, n): self.id = [i for i in range(n)] self.sz = [1 for _ in range(n)] def root(self, i): while i != self.id[i]: self.id[i] = self.id[self.id[i]] i = self.id[i]; return i def find(self, p, q): return self.root(p) == self.root(q) def unite(self, p, q): i = self.root(p) j = self.root(q) if self.sz[i] <= self.sz[j]: self.id[i] = j self.sz[j] += self.sz[i] else: self.id[j] = i self.sz[i] += self.sz[j]

python defaultdict 的用法

主要目標: 紀錄 defaultdict 的概念跟常見用法。 說明: 帶有預設值的 dictionary ,第一個參數是一個可呼叫的物件,後面接的參數會直接給 dict 當參數使用。 例如: defaultdict(int, {'a': 10, 'b': 20}) 等同於會呼叫的意思: dict({'a': 10, 'b': 20}) 整理最常用的方法:  1. 要計算所有的東西有多少個:  d = defaultdict(int)  d[x] += 1  2. 要把同一個 key 的東西串在一起:  d = defaultdict(list)  d[x].append(y)  3. 要使用指定的預設值:  d = defaultdict(lambda :False) 參考資料: https://docs.python.org/3/library/collections.html#collections.defaultdict

Python 如何產生指定 bit 數量的 mask

程式碼: def n_mask(n): return 2**n-1 使用: bin(n_mask(45)) 輸出: '0b111111111111111111111111111111111111111111111'