前情回顾
在前面我们实现了2中方法进行数字货币交易,同时还能获取到实时行情。数字货币交易接口实现(含源代码)。
在此基础上,我们今天实现一个指标策略自动化交易的功能(以MACD指标为例),并进行2次优化,增加仓位管理以及风险控制的功能,实现一个完成的交易策略。
MACD 策略逻辑
- 获取 5 分钟的 K 线数据
- 计算 MACD 指标
- 买入条件:MACD 越过零线
- 卖出条件:MACD 低于零线
代码实现
import ccxt
import pandas as pd
import ta
import time
# 初始化 Binance 交易所实例
exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY', # 替换为你的 API Key
'secret': 'YOUR_SECRET_KEY', # 替换为你的 Secret Key
})
# 获取 5 分钟的 K 线数据
def fetch_ohlcv(symbol, timeframe='5m', limit=100):
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)
return df
# 计算 MACD 指标
def calculate_macd(df):
macd = ta.trend.MACD(df['close'])
df['macd'] = macd.macd()
df['macd_signal'] = macd.macd_signal()
df['macd_diff'] = macd.macd_diff()
# 检查交易信号
def check_trade_signals(df):
last_row = df.iloc[-1]
previous_row = df.iloc[-2]
# 买入条件:MACD 越过零线
if previous_row['macd'] < 0 and last_row['macd'] > 0:
return 'buy'
# 卖出条件:MACD 低于零线
if previous_row['macd'] > 0 and last_row['macd'] < 0:
return 'sell'
return 'hold'
# 执行交易
def execute_trade(signal, symbol='BTC/USDT', amount=0.001):
if signal == 'buy':
order = exchange.create_market_buy_order(symbol, amount)
print('Buy order executed:', order)

最低0.47元/天 解锁文章
638





