用Python构建交易机器人

本指南将带你逐步创建一个简单而有效的外汇交易机器人,使用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翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。
通过 NowPayments 打赏