انتقل إلى المحتوى

إنشاء اتصال

يمكنك الاتصال بـ وكيل cTrader Open API باستخدام بروتوكول TCP أو بروتوكول WebSocket. يغطي هذا الدليل كلا الخيارين.

استخدام TCP

استخدام SSL

يجب أن يستخدم اتصال عميل TCP بروتوكول SSL، وإلا فلن تتمكن من الاتصال أو التفاعل مع واجهة برمجة التطبيقات API.

يمكنك إنشاء اتصال على النحو التالي باستخدام حزم تطوير البرمجيات SDK الرسمية لـ cTrader Open API.

1
2
_client = new OpenClient("live1.p.ctrader.com", 5035, TimeSpan.FromSeconds(10), useWebSocket: false);
await _client.Connect()

تستدعي طريقة OpenClient.Connect() طريقة OpenClient.ConnectTcp().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private async Task ConnectTcp()
{
    _tcpClient = new TcpClient
    {
        LingerState = new LingerOption(enable: true, 10)
    };
    await _tcpClient.ConnectAsync(Host, Port).ConfigureAwait(continueOnCapturedContext: false);
    _sslStream = new SslStream(_tcpClient.GetStream(), leaveInnerStreamOpen: false);
    await _sslStream.AuthenticateAsClientAsync(Host).ConfigureAwait(continueOnCapturedContext: false);
    Task.Run(delegate
    {
        ReadTcp(_cancellationTokenSource.Token);
    });
}

يحاول عميل Python Open API تلقائياً إنشاء اتصال عند تهيئته.

1
client = Client("live1.p.ctrader.com", 5035, TcpProtocol)

عبر WebSocket

عند الاتصال عبر بروتوكول WebSocket، يكون المضيف والمنفذ هما نفسهما عند الاتصال عبر بروتوكول TCP.

إليك كيف تقوم حزم تطوير البرمجيات SDK الرسمية لـ cTrader Open API بإنشاء اتصال عبر WebSocket.

1
2
_client = new OpenClient("live1.p.ctrader.com", 5035, TimeSpan.FromSeconds(10), useWebSocket: true);
await _client.Connect()

تستدعي طريقة OpenClient.Connect() طريقة OpenClient.ConnectWebSocket().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
private async Task ConnectWebScoket()
{
    DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(7, 2);
    defaultInterpolatedStringHandler.AppendLiteral("wss://");
    defaultInterpolatedStringHandler.AppendFormatted(Host);
    defaultInterpolatedStringHandler.AppendLiteral(":");
    defaultInterpolatedStringHandler.AppendFormatted(Port);
    Uri url = new Uri(defaultInterpolatedStringHandler.ToStringAndClear());
    _websocketClient = new WebsocketClient(url, () => new ClientWebSocket())
    {
        IsTextMessageConversionEnabled = false,
        ReconnectTimeout = null,
        IsReconnectionEnabled = false,
        ErrorReconnectTimeout = null
    };
    _webSocketMessageReceivedDisposable = _websocketClient.MessageReceived.Select((ResponseMessage msg) => ProtoMessage.Parser.ParseFrom(msg.Binary)).Subscribe(new Action<ProtoMessage>(OnNext));
    _webSocketDisconnectionHappenedDisposable = _websocketClient.DisconnectionHappened.Subscribe(new Action<DisconnectionInfo>(OnWebSocketDisconnectionHappened));
    await _websocketClient.StartOrFail();
}

لا تدعم حزمة تطوير البرمجيات SDK لـ Python معيار WebSocket.

للاطلاع على مثال لتطبيق ويب .NET Blazor يستخدم معيار WebSocket لإنشاء اتصال والحفاظ عليه، انقر هنا.

أفضل الممارسات

إليك بعض الإرشادات التي يجب أن تضعها في اعتبارك عند الاتصال بـ cTrader Open API:

  • كحد أقصى، يجب عليك إنشاء اتصالين: واحد للحسابات التجريبية وآخر للحسابات الحقيقية. يمكن لكل اتصال دعم عدد غير محدود من الحسابات من نوع معين.
  • بعد إنشاء الاتصال، يجب عليك اجتياز تدفق تفويض التطبيق. إذا قمت بإرسال أي رسائل قبل تفويض تطبيقك، ستتلقى رسالة خطأ.
  • للحفاظ على الاتصال نشطاً، استمر في إرسال حدث نبض القلب (ProtoHeartbeatEvent) كل 10 ثوانٍ.
  • استخدم قائمة انتظار الرسائل لإرسال واستقبال البيانات لتجنب أحداث الإرسال والاستقبال المتزامنة.