ข้ามไปที่เนื้อหา

WebSocket Sample

ภาพรวม

ปลั๊กอิน WebSocket Sample ช่วยให้สามารถบูรณาการข้อมูลแบบเรียลไทม์ใน cTrader ผ่านฟังก์ชันหลักดังต่อไปนี้:

  • เชื่อมต่อ cTrader กับเซิร์ฟเวอร์ WebSocket ภายนอกเพื่อรับสตรีมข้อมูลแบบเรียลไทม์
  • แสดงเนื้อหาแบบสด เช่น ข่าวหรือการแจ้งเตือนการเทรดโดยตรงในแผงสัญลักษณ์ที่ใช้งานอยู่โดยใช้บล็อกข้อความที่กำหนดเอง
  • อัปเดตแผงด้วยข้อความใหม่โดยอัตโนมัติเมื่อได้รับข้อมูล ช่วยให้ได้รับข้อมูลทันเวลา

ปลั๊กอินทำงานผ่านแผงที่ผู้ใช้สามารถกำหนดค่าได้ ปลั๊กอินจะยังคงทำงานอยู่ขณะที่ cTrader Windows หรือ Mac กำลังทำงาน และจะปล่อยทรัพยากรระบบโดยอัตโนมัติเมื่อหยุดทำงาน

การสร้างปลั๊กอิน

เรียนรู้วิธี สร้าง แก้ไข และสร้าง ปลั๊กอินจากเทมเพลตหรือจากศูนย์ในคู่มือทีละขั้นตอนของเรา

คุณสามารถค้นหารหัสของปลั๊กอิน WebSocket Sample ได้ที่GitHub หรือเพียงคัดลอกด้านล่างนี้

ตัวอย่างโค้ด
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class WebSocketSample : Plugin
    {
        // Declaring our TextBlock that will display the news contents
        private TextBlock _textBlock = new TextBlock
        {
            Text = "Starting news feed...",
            FontSize = 20,
            FontWeight = FontWeight.ExtraBold,
            TextAlignment = TextAlignment.Center,
            Padding = new Thickness(5, 5, 5, 5),
        };

        // _webSocketClientOptions allow us to define several settings
        // such as the keep-alive interval of the WebSocket connection
        private static WebSocketClientOptions _webSocketClientOptions = new WebSocketClientOptions 
        {
            KeepAliveInterval = new TimeSpan(0, 1, 30),
            UseDefaultCredentials = true,
        };

        // Passing our _webSocketClientOptions to the WebSocketClient
        // constructor
        private WebSocketClient _webSocketClient = new WebSocketClient(_webSocketClientOptions);

        // This API is entirely fictional
        private readonly Uri _targetUri = new Uri("ws://amazingnews.com:8000");

        protected override void OnStart()
        {
            // Connecting to the API and sending the initial message
            _webSocketClient.Connect(_targetUri);
            _webSocketClient.Send("Hello");

            // Declaring a custom handler for the TextReceived event
            _webSocketClient.TextReceived += NewsReceived;

            // Adding our TextBlock as a child of a custom
            // AspBlock
            var aspBlock = Asp.SymbolTab.AddBlock("News");
            aspBlock.Height = 300;
            aspBlock.Child = _textBlock;
        }

        protected override void OnStop()
        {
            // The WebSocketClient must be disposed of in OnStop,
            // otherwise it will consume system resources
            _webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);
        }

        private void NewsReceived(WebSocketClientTextReceivedEventArgs args) 
        {
            // Updading the text inside the TextBlock on every
            // piece of news received
            if (args.Text.Length != 0) 
            {
                _textBlock.Text = args.Text;
            }
        }
    }        
}

ตัวเลือกการปรับแต่ง

ปลั๊กอินนี้รวมการตั้งค่า WebSocket กับองค์ประกอบ UI เพื่อส่งเนื้อหาข้อความแบบสด ด้านล่างนี้คือรายละเอียดของส่วนประกอบหลักและหน้าที่ของแต่ละส่วน:

พารามิเตอร์ คำอธิบาย ค่าที่เป็นไปได้
Text แสดงเนื้อหาเริ่มต้นในบล็อกข้อความ Starting news feed…
AddBlock เพิ่มบล็อกไปยังแผงสัญลักษณ์ที่ใช้งานอยู่ asp.symboltab.addblock(news)
_textBlock.Text อัปเดตบล็อกข้อความด้วยข้อความ WebSocket ที่ได้รับ args.text
FontSize กำหนดขนาดของข้อความ 16, 18, 20, เป็นต้น
FontWeight กำหนดความหนาของข้อความ regular, bold, extrabold, เป็นต้น
TextAlignment จัดตำแหน่งข้อความภายในบล็อกข้อความ left, centre, เป็นต้น
Padding กำหนดพื้นที่รอบๆ บล็อกข้อความ (5, 5, 5, 5), (8, 8, 8, 8), เป็นต้น
aspBlock.Height กำหนดความสูงของบล็อกที่ปรับแต่งเองในส่วนติดต่อผู้ใช้ 300px, 350px, เป็นต้น
_targetUri ให้จุดปลายทาง WebSocket สำหรับการส่งข้อมูล wss://marketdata.tradermade.com/feedadv
KeepAliveInterval กำหนดช่วงเวลาสำหรับการส่ง ping keep-alive ของ WebSocket (0, 1, 30) (ชั่วโมง, นาที, วินาที)
_webSocketClient.Send ส่งข้อความสมัครสมาชิกเริ่มต้นไปยังเซิร์ฟเวอร์ WebSocket {userkey:..., symbol:eurusd}
UseDefaultCredentials กำหนดการตั้งค่าการตรวจสอบสิทธิ์สำหรับการเชื่อมต่อ WebSocket true หรือ false

หมายเหตุ

ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ WebSocket รองรับโปรโตคอลและรูปแบบข้อความที่คาดหวังโดยการใช้งานของคุณ

กรณีการใช้งาน

WebSocket Sample ให้วิธีการที่ทรงพลังและยืดหยุ่นในการขยาย cTrader ด้วยการส่งข้อมูลแบบเรียลไทม์ มันรองรับการผสานรวมที่หลากหลายซึ่งปรับให้เหมาะกับความต้องการการเทรดต่างๆ ด้านล่างนี้คือกรณีการใช้งานจริงที่แสดงให้เห็นว่าปลั๊กอินสามารถปรับปรุงประสบการณ์การเทรดได้อย่างไร

กรณีการใช้งาน สถานการณ์ คุณค่า
ฟีดข่าว ดูข่าวเศรษฐกิจแบบเรียลไทม์ หัวข้อข่าวที่เคลื่อนตลาด และเหตุการณ์สำคัญโดยตรงในแพลตฟอร์ม ทำให้คุณทราบข่าวด่วนที่อาจส่งผลต่อการเคลื่อนไหวของตลาด
ข้อมูลจากตลาดคริปโต สตรีมการอัปเดตการเทรดแบบสด ตารางราคา การเปลี่ยนแปลงในสมุดคำสั่ง หรือการแจ้งเตือนความผันผวนสำหรับสินทรัพย์คริปโต เพิ่มความตระหนักรู้แบบเรียลไทม์เกี่ยวกับสภาพตลาดคริปโตและการเคลื่อนไหวของราคาอย่างฉับพลัน
ตัวชี้วัดความผันผวนและมหภาค แสดงระดับความผันผวนแบบเรียลไทม์หรือตัวชี้วัดกิจกรรมผิดปกติสำหรับเครื่องมือเป้าหมายในแผงสัญลักษณ์ที่ใช้งานอยู่ สนับสนุนความตระหนักรู้ในระดับมหภาคและช่วยระบุโอกาสการเทรดในช่วงสุดขั้วของตลาด
ตัวแสดงผลลัพธ์ของโมเดลเชิงปริมาณ ดูผลลัพธ์ของโมเดลแบบไดนามิก (เช่น การเพิ่มขึ้นของโมเมนตัมใน EURUSD) เชื่อมโยงการวิเคราะห์เชิงปริมาณกับการตัดสินใจเทรดในรูปแบบที่เข้าถึงได้ทางสายตา
สตรีมสัญญาณการเทรดจากภายนอก สตรีมสัญญาณอัตโนมัติจากบริการภายนอกหรือโมเดลการเรียนรู้ของเครื่อง (ML) ที่ส่งผ่าน WebSocket เปิดใช้งานการส่งสัญญาณทันทีสำหรับผู้ใช้ที่ติดตามกลยุทธ์อัลกอริทึมหรือบอทจากบุคคลที่สาม

สรุป

ตัวอย่างปลั๊กอินนี้แสดงวิธีการผสานรวมเนื้อหาภายนอกแบบเรียลไทม์เข้าไปใน cTrader โดยใช้การเชื่อมต่อ WebSocket ในขณะที่ตัวอย่างแสดงการส่งข่าวสดในแผงสัญลักษณ์ที่ใช้งานอยู่ วิธีการเดียวกันนี้ยังรองรับสัญญาณ การแจ้งเตือน การวิเคราะห์ และอื่นๆ

สำหรับรายละเอียดการพัฒนาเพิ่มเติม โปรดดูที่เอกสารปลั๊กอิน ของเรา