從零開始獨自研發炒幣程式第一章

更新於 發佈於 閱讀時間約 11 分鐘
投資理財內容聲明

其實一直以來都很喜歡研究量化交易 自動化交易 或是任何用程式邏輯來做交易的領域

但是一直沒做出一個很大型的python套件 或是持久運行的網站

最近給自己一個目標 來寫部落格 從零開始記錄自己實現每個元件的過程

我的想法是先從每個元件功能開始著手 例如做一個"策略"類別

策略類別是一個父類別 又可以衍伸出 MACD策略 RSI策略等等

然後實例化一個策略之後可以用這個實例化之後的策略來產生交易訊號

甚至把策略丟到一個回測函數 可以產生回測結果

是的我打算每個元件自己慢慢刻

最後整合的事情才交給AI

包括整合成一包python套件 開源的任何人都可以pip install安裝

甚至整合前端跟資料庫做成一個網站服務

最終目標希望是做出真的有用的程式能夠提供準確判斷賺錢

萬事起頭難 先整理一下自己會的技術

我目前會的有基於規則的交易

例如玩股網的選股百寶袋功能我幾乎都能python山寨出類似的東西

基於監督學習的交易

例如給CNN神經網路看一張"圖"讓他告訴我該買還是該賣

基於強化學習的交易

定義好模擬的交易環境 獎勵函數 強化學習算法

丟台GPU給他訓練

自動化交易

利用github workflow或render webservice 自動化爬資料 預測買賣 自動下單

目前感覺許多技術都有碰過

但一直沒有好好整合所以這篇是當起頭 開始做這個專案

至於專案名稱好多很酷的名字都有人取過了 邊做邊想吧

第一章手搓策略

什麼是策略 想像一下 常見的技術指標 MACD RSI等等

如果用這些技術指標判斷進出場的策略 在python理應該怎麼定義跟使用

首先創建一個通用策略父類別 (BaseStrategy)

from abc import ABC, abstractmethod
import pandas as pd

class BaseStrategy(ABC):
def __init__(self, data: pd.DataFrame):
"""
:param data: 包含收盤價等欄位的歷史資料 DataFrame
"""
self.data = data
self.signals = pd.Series(index=self.data.index, dtype="object")

@abstractmethod
def generate_signals(self):
"""
子類別實作策略邏輯,填入 self.signals('buy', 'sell', 'hold'
"""
pass

def get_signals(self) -> pd.Series:
return self.signals

MACD 策略子類別 (MACDStrategy)

class MACDStrategy(BaseStrategy):
def __init__(self, data: pd.DataFrame, fast=12, slow=26, signal=9):
super().__init__(data)
self.fast = fast
self.slow = slow
self.signal_period = signal

def generate_signals(self):
close = self.data['close']
ema_fast = close.ewm(span=self.fast, adjust=False).mean()
ema_slow = close.ewm(span=self.slow, adjust=False).mean()
macd = ema_fast - ema_slow
signal_line = macd.ewm(span=self.signal_period, adjust=False).mean()

self.signals = pd.Series(index=self.data.index, dtype="object")
self.signals[macd > signal_line] = 'buy'
self.signals[macd < signal_line] = 'sell'
self.signals[macd == signal_line] = 'hold'

RSI 策略子類別 (RSIStrategy)

class RSIStrategy(BaseStrategy):
def __init__(self, data: pd.DataFrame, period=14, overbought=70, oversold=30):
super().__init__(data)
self.period = period
self.overbought = overbought
self.oversold = oversold

def generate_signals(self):
delta = self.data['close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)

avg_gain = gain.rolling(self.period).mean()
avg_loss = loss.rolling(self.period).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))

self.signals = pd.Series(index=self.data.index, dtype="object")
self.signals[rsi < self.oversold] = 'buy'
self.signals[rsi > self.overbought] = 'sell'
self.signals[(rsi >= self.oversold) & (rsi <= self.overbought)] = 'hold'

使用方式

import yfinance as yf

import datetime

import pandas as pd



# 下載多幣種也沒問題

df = yf.download("BTC-USD", start="2023-01-01", end=datetime.datetime.now())



# 通用欄位標準化

if isinstance(df.columns, pd.MultiIndex):

    df.columns = ['_'.join([str(c).lower() for c in col]) for col in df.columns]

    tickers = set(col.split('_')[-1] for col in df.columns)

    if len(tickers) == 1:

        ticker_suffix = list(tickers)[0]

        df.columns = [col.replace(f"_{ticker_suffix}", '') for col in df.columns]

else:

    df.columns = df.columns.str.lower()



# 檢查是否有 close

assert 'close' in df.columns, "找不到 close 欄位"



# 套用策略

strategy = MACDStrategy(df)

strategy.generate_signals()

strategy.get_signals()

執行結果

raw-image
import matplotlib.pyplot as plt

signals = strategy.get_signals()
close = df['close']

plt.figure(figsize=(14, 7))
plt.plot(close.index, close, label='Close Price', color='black')

# 買點用綠色三角形標記
buy_signals = signals == 'buy'
plt.scatter(close.index[buy_signals], close[buy_signals], marker='^', color='green', label='Buy Signal', s=100)

# 賣點用紅色倒三角形標記
sell_signals = signals == 'sell'
plt.scatter(close.index[sell_signals], close[sell_signals], marker='v', color='red', label='Sell Signal', s=100)

plt.title('Price Chart with Buy/Sell Signals')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

畫圖

raw-image

完整程式碼

https://github.com/skywalker0803r/AlphaCoin/tree/main

留言
avatar-img
留言分享你的想法!
avatar-img
于正龍(Ricky)的沙龍
39會員
69內容數
人工智能工作經驗跟研究
2025/04/15
這個簡陋的網站是我做的簡單幾個功能 1.股票走勢圖配上買賣點 2.近期買賣信號機率 參考自這篇論文: https://www.researchgate.net/profile/Omer-Sezer/publication/324802031_Algorithmic_Financial_T
Thumbnail
2025/04/15
這個簡陋的網站是我做的簡單幾個功能 1.股票走勢圖配上買賣點 2.近期買賣信號機率 參考自這篇論文: https://www.researchgate.net/profile/Omer-Sezer/publication/324802031_Algorithmic_Financial_T
Thumbnail
2025/04/11
Backtrader 是一個非常受歡迎且功能強大的 Python 回測框架,主要用於量化交易策略的開發、測試與實盤交易。它支援各種市場資料(如股票、期貨、外匯、加密貨幣等)以及多種回測功能,並且能夠輕鬆地擴展以適應各種交易策略。 Backtrader 的核心概念與結構 Backtrader 主要
Thumbnail
2025/04/11
Backtrader 是一個非常受歡迎且功能強大的 Python 回測框架,主要用於量化交易策略的開發、測試與實盤交易。它支援各種市場資料(如股票、期貨、外匯、加密貨幣等)以及多種回測功能,並且能夠輕鬆地擴展以適應各種交易策略。 Backtrader 的核心概念與結構 Backtrader 主要
Thumbnail
2025/03/12
最近發現一個雲端 Cloud Application Platform | Render 非常的好用可以把我之前做的自動化交易程式做部屬 用不到150行python代碼打造專屬你自己的自動化binance自動下單交易程式 使用教學 1.建立專案 2.選Cron job
Thumbnail
2025/03/12
最近發現一個雲端 Cloud Application Platform | Render 非常的好用可以把我之前做的自動化交易程式做部屬 用不到150行python代碼打造專屬你自己的自動化binance自動下單交易程式 使用教學 1.建立專案 2.選Cron job
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
数字货币是一种新型的电子货币,不受国家货币政策的影响,其交易也十分方便,现在,越来越多的人开始关注数字货币,但是对于如何购买不甚了解,本文将为您提供购买数字货币的入门教程 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R8
Thumbnail
数字货币是一种新型的电子货币,不受国家货币政策的影响,其交易也十分方便,现在,越来越多的人开始关注数字货币,但是对于如何购买不甚了解,本文将为您提供购买数字货币的入门教程 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R8
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#157篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#157篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
本文將分享加密貨幣的基礎知識、比特幣的工作原理以及加密貨幣的投資策略。如果你對加密貨幣有興趣,這篇文章將為你提供有價值的資訊。
Thumbnail
本文將分享加密貨幣的基礎知識、比特幣的工作原理以及加密貨幣的投資策略。如果你對加密貨幣有興趣,這篇文章將為你提供有價值的資訊。
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#152篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#152篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
參考來源 本文章參考自《所謂「我不投資」,就是-all-in-在法定貨幣》。 前言 虛擬貨幣作為一種新興的數字資產,正逐漸改變我們的金融世界。本文將深入探討虛擬貨幣的基礎知識、去中心化金融(DeFi)、投資策略以及未來發展趨勢,旨在幫助讀者全面了解這一領域。 章節一:虛擬貨幣的基礎知識
Thumbnail
參考來源 本文章參考自《所謂「我不投資」,就是-all-in-在法定貨幣》。 前言 虛擬貨幣作為一種新興的數字資產,正逐漸改變我們的金融世界。本文將深入探討虛擬貨幣的基礎知識、去中心化金融(DeFi)、投資策略以及未來發展趨勢,旨在幫助讀者全面了解這一領域。 章節一:虛擬貨幣的基礎知識
Thumbnail
錢進幣圈超基礎概念入門介紹,都是作者親身嘗試後的經驗談!什麼是一級市場?什麼是二級市場?該如何入金?怎麼轉帳?通通一次介紹給你看!
Thumbnail
錢進幣圈超基礎概念入門介紹,都是作者親身嘗試後的經驗談!什麼是一級市場?什麼是二級市場?該如何入金?怎麼轉帳?通通一次介紹給你看!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#143篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#143篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
最近會試著寫一些統整類的文章, 幫助讀者、觀眾整理、吸收、複習已經學習到的演算法框架。 找零錢框架 在以前學過的題目中,我們已經學會了考零錢的抽象思考邏輯與框架,就是試著用每一種銅板去湊出n元(也就是找零錢的過程) 寫成虛擬碼或演算法,找零錢用了幾枚銅板可以這樣表達 # 銅板數目累加​
Thumbnail
最近會試著寫一些統整類的文章, 幫助讀者、觀眾整理、吸收、複習已經學習到的演算法框架。 找零錢框架 在以前學過的題目中,我們已經學會了考零錢的抽象思考邏輯與框架,就是試著用每一種銅板去湊出n元(也就是找零錢的過程) 寫成虛擬碼或演算法,找零錢用了幾枚銅板可以這樣表達 # 銅板數目累加​
Thumbnail
這篇文章介紹了加密貨幣術語,幫助新手們學習幣圈專用術語,並且導讀了相關的市場分析、國際熱點和投資教學。內容包括幣圈術語、ACG好聲音前情提要、獎勵減半、HODL、合約、中本聰、Gamefi、私鑰和算力等,有興趣投資加密貨幣的讀者可以瞭解更多。
Thumbnail
這篇文章介紹了加密貨幣術語,幫助新手們學習幣圈專用術語,並且導讀了相關的市場分析、國際熱點和投資教學。內容包括幣圈術語、ACG好聲音前情提要、獎勵減半、HODL、合約、中本聰、Gamefi、私鑰和算力等,有興趣投資加密貨幣的讀者可以瞭解更多。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News