如何使用 Jupyter Notebook 进行现货交易?

发布于 2023年9月29日更新于 2025年3月6日阅读时长 7 分钟357

本文将指导您如何通过Jupyter Notebook调用 python-okx 库中的函数来进行简单的现货交易。

1. 如何在 Jupyter Notebook 上运行 Python 代码?

CT-web-spottrading-howtoapi-1

Jupyter Notebook是一个功能强大且易于使用的Python开发和数据分析工具。它支持Windows、MacOS和Linux系统。
如果您还不熟悉 Jupyter Notebook,可以参考官方指南进行安装和启动。

2. 如何安装 python-okx 包?

在 Jupyter Notebook 中运行以下命令即可安装 python-okx 包:

CT-web-spottrading-howtoapi-2

3. 如何创建 API 密钥?

  1. 打开官网登录账户,前往【交易】- 【模拟交易】创建 API 密钥进行测试。

CT-web-trade-demo trading

2. 点选【个人资料】头像,选择【模拟交易API】,然后创建 API 密钥。

Demo Trading API_global

3. 为不同的主账户或子账户创建 API 密钥。

CT-web-API-create

4. 在权限设置中勾选【交易】权限。

Demo Trading API_3

5. 创建成功后,保存好您的 API 密钥、密钥密码和 API 密码短语。

Python
1 api_key = "xxxxx"
2 secret_key = "xxxxx"
3 passphrase = "xxxxxx"

4. 如何导入欧易模块?

python-okx 库是基于 REST API 提供不同的模块(欲知更多可点击这里)当中涵盖了:

  • 交易

  • 大宗交易

  • 资金

  • 账户

  • 兑换

  • 收益

  • 子账户

  • 市场数据

  • 公共数据

  • 交易数据

  • 状态

  • ND 经纪商

  • FD 经纪商


例如,导入交易模块:

Python
1 import okx.Trade as Trade


5. 如何获取市场数据?

可以点击这里了解更多,或参考以下信息:

Python
1  import okx.MarketData as MarketData
2  flag = "1"  # live trading: 0, demo trading: 1
3  marketDataAPI = MarketData.MarketAPI(flag=flag)
4  result = marketDataAPI.get_tickers(instType="SPOT")print(result)

6. 如何查看可用的交易对?

可以点击这里了解更多,或参考以下信息:

Python
1   import okx.Account as Account
2
3   # API initialization
4   apikey = "YOUR_API_KEY"
5   secretkey = "YOUR_SECRET_KEY"
6   passphrase = "YOUR_PASSPHRASE"
7    
8   flag = "1" # Production trading: 0, Demo trading: 1
9    
10  accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag)
11
12  result = accountAPI.get_instruments(instType="SPOT")
13  print(result)


7. 如何查询账户余额?

要了解如何读取您的账户余额,请查看我们的专属指南注意: 在现货交易的“cash” tdMode 模式下,您主要需要查看每种币种的 cashBal(可用余额)、frozenBal(冻结余额)参数,以及 totalEq(总资产)参数。

Python
1   import okx.Account as Account
2   flag = "1"  # live trading: 0, demo trading: 1
3
4   accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
5
6   result = accountAPI.get_account_balance()
7   print(result)

8. 如何访问四种不同的账户模式?

平台支持四种账户模式:

  • 现货模式

  • 现货和合约模式

  • 跨币种保证金模式

  • 组合保证金模式

有关账户模式介绍可参阅:统一交易账户介绍在保证金模式或交易模式下,参数 tdMode 决定了您的持仓如何进行保证金管理,您需要在每次下新订单时进行设置。在现货或现货与合约模式下进行现货交易时,请设置 tdMode='cash'。在跨币种保证金或组合保证金模式下进行现货交易时,请设置 tdMode = 'cross'。

9. 如何判断当前账户模式?

要了解如何查看您当前账户的模式配置,请阅读我们的指南并输入 acctLv 参数。

Python
1 import okx.Account as Account
2
3 flag = "1"  # live trading: 0, demo trading: 1
4 
5 accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
6 result = accountAPI.get_account_config()
7 print(result)
8 
9 if result['code'] == "0":
10     acctLv = result["data"][0]["acctLv"]
11     if acctLv == "1":
12         print("Simple mode")
13     elif acctLv == "2":
14        print("Single-currency margin mode")
15     elif acctLv == "3":
16        print("Multi-currency margin mode")
17     elif acctLv == "4":
18        print("Portfolio margin mode")

10. 如何在现货/现货和合约模式下单?


10.1 如何下限价委托单?

欲了解更多请查看我们的专属指南。请参考以下示例:以 19,000 USDT 的价格买入 0.01 BTC。

Python
1    # limit order
2    result = tradeAPI.place_order(
3            instId="BTC-USDT",
4            tdMode="cash",
5            side="buy",
6            ordType="limit",
7            px="19000",
8            sz="0.01"
9    )
10   print(result)
11
12   if result["code"] == "0":
13          print("Successful order request,order_id = ",result["data"][0]["ordId"])
14   else:
 15         print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

10.2 如何下市价委托单?

欲了解更多请查看我们的专属指南

请参考以下示例:按当前市场价格购买价值 100 美元的 BTC。

Python
1   #  market order
2   result = tradeAPI.place_order(
3           instId="BTC-USDT",
4           tdMode="cash",
5           side="buy",
6           ordType="market",
7           sz="100",
8   )
9   print(result)

10.3 在现货交易中,如何使用目标货币参数 tgtCcy ?

在现货交易中,参数 tgtCcy 决定了数量参数 sz 的单位,它可以是交易对的基础货币计价货币。例如,在交易对 BTC-USDT 中,基础货币是 BTC,计价货币是 USDT

默认情况下,tgtCcy = quote_ccy(计价货币)用于买单,这意味着您指定的 sz 是以计价货币为单位的。而对于卖单,tgtCcy 的默认值为 base_ccy,这意味着您指定的 sz 是以基础货币为单位的。

在以下示例中,您将以市价单买入价值 100 USD 的 BTC。

Python

  1   #  market order
  2   result = tradeAPI.place_order(
  3           instId="BTC-USDT",
  4           tdMode="cash",
  5           side="buy",
  6           ordType="market",
  7           sz="100",
  8           tgtCcy="quote_ccy" # this determines the unit of the sz parameter. 
  9   )
10   print(result)

10.4 如何使用客户端订单 ID 参数 clOrdId?

在下单时,您可以通过指定参数 clOrdId 来设置自己的客户端订单 ID。该 ID 可以在后续调用订单取消、修改或查询接口时,作为标识符替代 ordId 使用。

Python
1    #  market order
2    result = tradeAPI.place_order(
3           instId="BTC-USDT",
4           tdMode="cash",
5           side="buy",
6           ordType="market",
7           sz="100",
8           clOrdId="003" # you can define your own client defined order ID
9    )
10  print(result)

11. 如何获取某个订单的详细信息?

欲了解更多请查看我们的专属指南

11. 1使用 ordId

Python
1 result = tradeAPI.get_order(instId="BTC-USDT", ordId="497819823594909696")
2 print(result)

11.2 使用clOrdId

Python
1 result = tradeAPI.get_order(instId="BTC-USDT", clOrdId="002")
2 print(result)

12. 如何取消订单?

欲了解更多请查看我们的专属指南,或通过以下方式操作:

您也可以使用 clOrdId 来替代 ordId

Python
1 result = tradeAPI.cancel_order(instId="BTC-USDT", ordId = "489093931993509888")
2 print(result)

13. 如何修改订单?

欲了解更多请查看我们的专属指南,或通过以下方式操作:

您也可以使用 clOrdId 来替代 ordId

Python
1 result = tradeAPI.amend_order(
2     instId="BTC-USDT",
3     ordId="489103565508685824",
4     newSz="0.012"
5 )
6 print(result)

14. 如何获取当前委托列表?

欲了解更多请查看我们的专属指南,或通过以下方式操作:

Python
1 result = tradeAPI.get_order_list()
2 print(result)

15. 如何获取历史委托?

15.1 过去 7 天的历史委托

欲了解更多请查看我们的专属指南,或通过以下方式操作:

Python
1 result = tradeAPI.get_orders_history(
2     instType="SPOT"
3 )
4 print(result)

15.2 过去 3 个月的历史委托

欲了解更多请查看我们的专属指南,或通过以下方式操作:

Python
1 result = tradeAPI.get_orders_history_archive(
2     instType="SPOT"
3 )
4 print(result)

16. 如何使用 Jupyter Notebook 进一步探索欧易 API?

如需更多示例,请点击此处下载完整的 Jupyter Notebook。

备注:如中英文版本存在不一致,以英文版本为准。