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

更新 發佈閱讀 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()

執行結果

vocus|新世代的創作平台
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()

畫圖

vocus|新世代的創作平台

完整程式碼

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

留言
avatar-img
于正龍(Ricky)的沙龍
57會員
93內容數
人工智能工作經驗跟研究
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
本文將分享加密貨幣的基礎知識、比特幣的工作原理以及加密貨幣的投資策略。如果你對加密貨幣有興趣,這篇文章將為你提供有價值的資訊。
Thumbnail
本文將分享加密貨幣的基礎知識、比特幣的工作原理以及加密貨幣的投資策略。如果你對加密貨幣有興趣,這篇文章將為你提供有價值的資訊。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#157篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#157篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
数字货币是一种新型的电子货币,不受国家货币政策的影响,其交易也十分方便,现在,越来越多的人开始关注数字货币,但是对于如何购买不甚了解,本文将为您提供购买数字货币的入门教程 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R8
Thumbnail
数字货币是一种新型的电子货币,不受国家货币政策的影响,其交易也十分方便,现在,越来越多的人开始关注数字货币,但是对于如何购买不甚了解,本文将为您提供购买数字货币的入门教程 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R8
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#152篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#152篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#143篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
寫作投資永遠不嫌晚,這是雙寶老爹的第#143篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
Thumbnail
參考來源 本文章參考自《所謂「我不投資」,就是-all-in-在法定貨幣》。 前言 虛擬貨幣作為一種新興的數字資產,正逐漸改變我們的金融世界。本文將深入探討虛擬貨幣的基礎知識、去中心化金融(DeFi)、投資策略以及未來發展趨勢,旨在幫助讀者全面了解這一領域。 章節一:虛擬貨幣的基礎知識
Thumbnail
參考來源 本文章參考自《所謂「我不投資」,就是-all-in-在法定貨幣》。 前言 虛擬貨幣作為一種新興的數字資產,正逐漸改變我們的金融世界。本文將深入探討虛擬貨幣的基礎知識、去中心化金融(DeFi)、投資策略以及未來發展趨勢,旨在幫助讀者全面了解這一領域。 章節一:虛擬貨幣的基礎知識
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
錢進幣圈超基礎概念入門介紹,都是作者親身嘗試後的經驗談!什麼是一級市場?什麼是二級市場?該如何入金?怎麼轉帳?通通一次介紹給你看!
Thumbnail
錢進幣圈超基礎概念入門介紹,都是作者親身嘗試後的經驗談!什麼是一級市場?什麼是二級市場?該如何入金?怎麼轉帳?通通一次介紹給你看!
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
最近會試著寫一些統整類的文章, 幫助讀者、觀眾整理、吸收、複習已經學習到的演算法框架。 找零錢框架 在以前學過的題目中,我們已經學會了考零錢的抽象思考邏輯與框架,就是試著用每一種銅板去湊出n元(也就是找零錢的過程) 寫成虛擬碼或演算法,找零錢用了幾枚銅板可以這樣表達 # 銅板數目累加​
Thumbnail
最近會試著寫一些統整類的文章, 幫助讀者、觀眾整理、吸收、複習已經學習到的演算法框架。 找零錢框架 在以前學過的題目中,我們已經學會了考零錢的抽象思考邏輯與框架,就是試著用每一種銅板去湊出n元(也就是找零錢的過程) 寫成虛擬碼或演算法,找零錢用了幾枚銅板可以這樣表達 # 銅板數目累加​
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News