---
id: document_item.export-to-udp-port
page_type: documentation_article
title: "导出到 UDP 端口"
description: "Moonbot 如何通过本地 UDP 端口发送活跃市场的 5 分钟 K 线和成交，并接收文本交易信号，交由 UDP 策略处理。"
section: documentation
category: "补充材料"
url: https://moonbot.eu/zh/documentation/additional-materials/export-to-udp-port?format=md
locale: zh
alternate_ru: https://moonbot.eu/documentation/additional-materials/export-to-udp-port?format=md
alternate_en: https://moonbot.eu/en/documentation/additional-materials/export-to-udp-port?format=md
parent: https://moonbot.eu/zh/documentation/additional-materials?format=md
previous: https://moonbot.eu/zh/documentation/additional-materials/reasons-for-abnormally-low-buy-sell-price?format=md
next: null
status: published
updated_at: 2026-11-11T15:02:02+03:00
---

# 导出到 UDP 端口

Moonbot 终端可以把市场数据（5 分钟 K 线和所有市场的全部成交）发送到 IP 地址为 127.0.0.1 的本地 UDP 端口。数据只按活动交易对更新（BTC、USDT 或 ETH——取决于终端所选的配置）。

终端还可以通过 UDP 端口接收买入交易信号。

要启用此功能，请进入 **Settings** **→ Advanced →** **System**，勾选 **UDP Export**（UDP 导出）复选框。

![](https://moonbot.eu/storage/editor-images/UDP%20export%20eng.jpg)

![(dark)](https://moonbot.eu/storage/editor-images/UDP%20export%20eng.jpg)

数据以二进制格式按数据包发送，每个数据包包含若干元素。在 UDP 参数中需要指定端口 2000 和缓冲区大小 65000。

K 线数组在每次更新时（每 5 分钟一次）完整发送。成交数据只发送新增部分，但一个数据包中可能包含多笔成交。

终端在 1999 端口以文本格式接收信号。收到的信号由 UDP 类型的策略处理（见下图）：

![](https://moonbot.eu/storage/editor-images/UDP%20Test.jpg)

![(dark)](https://moonbot.eu/storage/editor-images/UDP%20Test.jpg)

信号示例：**Key=Test1 Coin=NEO Order=buy BuyPrice=0.0071**

**参数说明：**

- **Key** = 密钥，终端据此选择 **ChannelKey** 字段与之相符的策略（上图示例中为 Test1）。
- **Coin** = 币种
- **Order** =
  - **buy** - 买入命令
  - **sell** - 对此前在终端中买入的币种启动卖出（可以是按任意策略买入的，不一定是 UDP 策略）
- **BuyPrice** = 挂出 Buy 订单的价格。如果未指定，将使用策略中的设置。

下面的示例代码说明如何接收和处理数据（包含源代码和现成示例的压缩包可通过此链接下载 🔗[https://api.moonbot.eu/files/udpTest.zip](https://api.moonbot.eu/files/udpTest.zip)）：

// structures

TOrderType = (O_SELL,O_BUY,O_BuyStop);

TUpdateKind = (UK_Candles, UK_Trades);

TUpdateHeader = packed record

Version: byte; // 1 byte - packet version, currently 1

TimeStamp: dword; // 4 bytes - Unix timestamp

Kind: TUpdateKind; // 1 byte - candles (0) or trades (1) inside

Coin: string\[7\]; // 7 bytes - coin ticker name

Count: word; // 2 bytes - elements count in the data array

reserved1: dword; // 4 bytes currently unused

reserved2: dword; // 4 bytes currently unused

end;

TTradeOrder = record // 8-bytes aligned

ID: integer;

Time: TDateTime;

Price: double;

Quantity: double;

BuyerID: integer;

reserved: integer;

OrderType: TOrderType;

FillType: byte; // 0 - PARTIAL, 1 - FULL

end;

TCandle = record

OpenP,CloseP,MaxP,MinP: double;

Vol: double;

Time: TDateTime;

end;

TTrades = array of TTradeOrder;

TCandles = array of TCandle;

// Data reading and handling

procedure TfrmUDPTest.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;

const AData: TIdBytes; ABinding: TIdSocketHandle);

var

hdr: TUpdateHeader;

Trades: TTrades;

Candles: TCandles;

begin

move(AData\[0\], hdr, SizeOf(hdr));

If hdr.Kind = UK_Trades then begin

SetLength(Trades, hdr.Count);

move(AData\[SizeOf(hdr)\], Trades\[0\], hdr.Count \* SizeOf(TTradeOrder));

If SelectedCoin = hdr.Coin

then lPrice.Caption:=hdr.Coin + ' Last: ' + FloatToStr(Trades\[hdr.Count - 1\].Price);

end;

If hdr.Kind = UK_Candles then begin

SetLength(Candles, hdr.Count);

move(AData\[SizeOf(hdr)\], Candles\[0\], hdr.Count \* SizeOf(TCandle));

lLastCandle.Caption:=' Last candle: ' + hdr.Coin + ' 5m vol: ' + FloatToStr(Candles\[hdr.Count - 1\].Vol);

end;

lLastTrade.Caption:=Format('Last update: %s time: %d', \[hdr.Coin, hdr.TimeStamp\]);

end;

## 导航

路径: [首页](https://moonbot.eu/zh?format=md) / [文档](https://moonbot.eu/zh/documentation?format=md) / [补充材料](https://moonbot.eu/zh/documentation/additional-materials?format=md) / 导出到 UDP 端口

上级栏目: [补充材料](https://moonbot.eu/zh/documentation/additional-materials?format=md)

上一页: [卖出/买入价格异常偏低的原因](https://moonbot.eu/zh/documentation/additional-materials/reasons-for-abnormally-low-buy-sell-price?format=md)
