用Python构建交易机器人
本指南将带你逐步创建一个简单而有效的外汇交易机器人,使用Python连接到真实的外汇经纪商。

一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | 跨链桥/跨链兑换
本指南将带你逐步创建一个简单而有效的外汇交易机器人,使用Python连接到真实的外汇经纪商。我们将涵盖从设置环境到执行自动化交易的所有内容,并揭示适合初学者的最佳外汇和差价合约经纪商。
1、设置交易机器人环境
所需条件
- Python 3.7+
- 基础Python知识
- 拥有一个模拟账户的外汇经纪商
安装所需库
pip install pandas numpy matplotlib ccxt ta backtrader oandapyV20
2、连接到经纪商API
我们将使用OANDA的API作为示例,因为它对初学者友好。
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
# 设置API连接
accountID = "your-account-id"
access_token = "your-api-token"
api = API(access_token=access_token)# 获取EUR/USD数据
params = {"count": 100, "granularity": "H1"} # 100小时蜡烛图
r = instruments.InstrumentsCandles(instrument="EUR_USD", params=params)
api.request(r)
print(r.response['candles'][0]) # 查看第一个蜡烛
3、构建简单的移动平均策略
我们将使用:
- 相对强弱指数(RSI)——当RSI < 30(超卖)时买入,当RSI > 70(超买)时卖出。
- 50周期SMA——确认趋势方向。
from ta.momentum import RSIIndicator
from ta.trend import SMAIndicator
df['rsi'] = RSIIndicator(df['close'], window=14).rsi()
df['sma50'] = SMAIndicator(df['close'], window=50).sma_indicator()# 生成信号
df['signal'] = 0 # 0 = 无交易,1 = 买入,-1 = 卖出
df['signal'] = np.where((df['rsi'] < 30) & (df['close'] > df['sma50']), 1, df['signal'])
df['signal'] = np.where((df['rsi'] > 70) & (df['close'] < df['sma50']), -1, df['signal'])
4、动执行交易
这是通过OANDA的API进行交易的方法:
from oandapyV20.endpoints.orders import OrderCreate
def place_trade(instrument, units, stop_loss=None, take_profit=None):
data = {
"order": {
"units": str(units),
"instrument": instrument,
"timeInForce": "FOK",
"type": "MARKET",
"positionFill": "DEFAULT"
}
}
if stop_loss:
data["order"]["stopLossOnFill"] = {"price": str(stop_loss)}
if take_profit:
data["order"]["takeProfitOnFill"] = {"price": str(take_profit)}
r = OrderCreate(accountID, data=data)
api.request(r)
return r.response# 示例交易执行
if df.iloc[-1]['signal'] == 1:
current_price = df.iloc[-1]['close']
place_trade("EUR_USD", 1000,
stop_loss=current_price*0.995,
take_profit=current_price*1.01)
5、回测你的策略
使用Backtrader测试您的策略:
import backtrader as bt
class SmaCross(bt.Strategy):
params = (('fast', 50), ('slow', 200),) def __init__(self):
sma1 = bt.ind.SMA(period=self.p.fast)
sma2 = bt.ind.SMA(period=self.p.slow)
self.crossover = bt.ind.CrossOver(sma1, sma2) def next(self):
if not self.position:
if self.crossover > 0:
self.buy()
elif self.crossover < 0:
self.close()# 运行回测
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=df.set_index('time'))
cerebro.adddata(data)
cerebro.addstrategy(SmaCross)
cerebro.run()
cerebro.plot()
原文链接:Building a Forex trading bot with Python: a step-by-step guide
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。