:2026-03-08 5:48 点击:5
OTC交易所量化交易策略模板:快速上手指南(附实操步骤与代码示例)
OTC(场外)交易所作为数字资产交易的重要场景,具有交易深度大、价格波动相对平滑、规避市场冲击成本等优势,尤其适合大额交易和策略化执行,相比传统现货/期货交易所,OTC市场的做市商机制和定制化交易需求,为量化策略提供了更灵活的“低买高卖”或“套利”空间。
对于新手而言,通过标准化策略模板快速搭建量化交易系统,不仅能降低入门门槛,还能避免重复造轮子,聚焦策略逻辑优化,本文将以“Python+OTC API”为核心,提供从环境搭建到策略回测的全流程模板,助你1小时上手OTC量化交易。
OTC量化交易的本质是通过程序化执行预设规则,实现自动化交易盈利,核心流程可拆解为4步:
以下以“双均线交叉策略”为例(经典趋势跟踪策略,适合OTC中长线交易),提供完整代码模板和实操步骤。
安装必要库:
pip install requests pandas numpy ccxt # ccxt:统一加密货币交易所API库
以某主流OTC交易所为例(需提前申请API Key,开启“交易”权限):
import ccxt
otc_exchange = ccxt.otc({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
'enableRateLimit': True, # 启用频率限制,避免API被封
'options': {
'defaultType': 'spot', # OTC多为现货交易
},
})
# 测试API连接
try:
balance = otc_exchange.fetch_balance()
print("API连接成功,账户余额:", balance['USDT']['free'])
except Exception as e:
print("API连接失败:", e)
OTC交易所通常提供“ticker”(最新行情)和“trades”(历史成交)数据,以下获取BTC/USDT的实时价格和K线数据(1小时周期):
import pandas as pd
# 获取实时行情(ticker)
ticker = otc_exchange.fetch_ticker('BTC/USDT')
current_price = ticker['last'] # 最新成交价
bid_price = ticker['bid'] # 买一价
ask_price = ticker['ask'] # 卖一价
print(f"当前价格:{current_price},买一:{bid_price},卖一:{ask_price}")
# 获取历史K线数据(1小时周期,最近100根)
klines = otc_exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=100)
df = pd.DataFrame(klines, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') # 转换时间戳
df.set_index('timestamp', inplace=True)
print("最近3条K线:\n", df.tail(3))
规则:
def ma_cross_strategy(df, short_window=10, long_window=30):
"""计算双均线交叉信号"""
df['ma_short'] = df['close'].rolling(window=short_window).mean() # 短期均线
df['ma_long'] = df['close'].rolling(window=long_window).mean() # 长期均线
df['signal'] = 0 # 0:持有,1:买入,-1:卖出
df.loc[df['ma_short'] > df['ma_long'], 'signal'] = 1 # 买入信号
df.loc[df['ma_short'] < df['ma_long'], 'signal'] = -1 # 卖出信号
return df
# 应用策略
df = ma_cross_strategy(df)
print("策略信号(最后5条):\n", df[['close', 'ma_short', 'ma_long', 'signal']].tail())
def risk_management(position_size, entry_price, current_price, take_profit=0.05, stop_loss=0.03):
"""计算止盈止损价格和当前盈亏"""
tp_price = entry_price * (1 + take_profit) # 止盈价
sl_price = entry_price * (1 - stop_loss) # 止损价
current_pnl = (current_price - entry_price) / entry_price # 当前收益率
return tp_price, sl_price, current_pnl
# 示例:假设买入时价格为50000 USDT,仓位0.1 BTC
entry_price = 50000
position_size = 0.1
tp_price, sl_price, current_pnl = risk_management(position_size, entry_price, current_price)
print(f"止盈价:{tp_price},止损价:{sl_price},当前收益率:{current_pnl:.2%}")

def place_order(side, amount, symbol='BTC/USDT', order_type='limit', price=None):
"""发送订单(限价单/市价单)"""
try:
if order_type == 'limit' and price is None:
raise ValueError("限价单需指定价格")
order = otc_exchange.create_order(
symbol=symbol,
type=order_type,
side=side,
amount=amount,
price=price,
)
print(f"订单发送成功:{order['id']},方向:{side},数量:{amount}")
return order
except Exception as e:
print("订单发送失败:", e)
return None
# 示例:买入0.1 BTC(市价单)
place_order(side='buy', amount=0.1, order_type='market')
# 示例:卖出0.1 BTC(限价单,价格为当前卖一价+1%)
limit_price = ask_price * 1.01
place_order(side='sell', amount=0.1, order_type='limit', price=limit_price)
def backtest_strategy(df, initial_balance=10000):
"""回测策略并计算收益率"""
balance = initial_balance
position = 0 # 持仓数量
entry_price = 0
trades = []
for i in range(1, len(df)):
current_price = df['close'].iloc[i]
signal = df['signal'].iloc[i]
# 买入信号(无持仓时)
if signal == 1 and position == 0:
position = balance / current_price
balance = 0
entry_price = current_price
trades.append(('buy', current_price, position))
print(f"买入:价格={current_price},持仓={position}")
# 卖出信号(有持仓时)
elif signal == -1 and position > 0:
balance = position * current_price
trades.append(('sell', current_price, position))
print(f"卖出:价格={current_price},收益={(current_price - entry_price) / entry_price:.2%}")
position = 0
# 结束后清仓
if position > 0:
balance = position * df['close'].iloc[-1]
trades.append(('sell', df['close'].iloc[-1],
本文由用户投稿上传,若侵权请提供版权资料并联系删除!