Chuyển đổi tỷ giá biểu tượng¶
Chuyển đổi tỷ giá biểu tượng là một hành động thiết yếu nếu bạn muốn ứng dụng của mình bao gồm chức năng liên quan đến tính toán Lãi & Lỗ.
Các trường hợp sử dụng
Thực hiện chuyển đổi tỷ giá biểu tượng là cần thiết khi tính toán hoa hồng, phí qua đêm và cổ tức. Hoa hồng, phí qua đêm và cổ tức thường được biểu thị bằng USD. Tuy nhiên, tùy thuộc vào nhà môi giới và sở thích của bạn, loại tiền nạp tài khoản của bạn có thể là bất kỳ tài sản nào khác ngoài USD. Để xác định chính xác hoa hồng, phí qua đêm và cổ tức, bạn sẽ cần biết tỷ giá hối đoái giữa USD và loại tiền nạp tài khoản của bạn.
Chuỗi chuyển đổi
Hãy nghĩ về giá của mỗi biểu tượng riêng lẻ như một tỷ giá chuyển đổi giữa tài sản cơ sở và tài sản báo giá của nó. Nhiệm vụ đạt được tỷ giá chuyển đổi trở nên phức tạp nếu không có biểu tượng nào liên kết trực tiếp một tài sản nhất định với một tài sản khác. May mắn thay, backend cTrader có thể tự động tạo các chuỗi chuyển đổi hoạt động như các đường dẫn chuyển đổi ngắn nhất có thể từ một tài sản đến một tài sản khác.
Ví dụ: nếu bạn muốn chuyển đổi EUR sang NZD và không có biểu tượng EURNZD trên máy chủ giao dịch, cTrader sẽ đề xuất một chuỗi sẽ đóng vai trò là các bước trung gian trong quá trình chuyển đổi. Tùy thuộc vào sự sẵn có của biểu tượng, một chuỗi như vậy có thể trông giống như EURUSD-USDCAD-CADNZD, EURCFH-CFHUSD-USDNZD, hoặc thậm chí EURCAD-CADUSD-USDCFH-CFHNZD.
Để chuyển đổi giữa hai tài sản, ứng dụng của bạn cần thực hiện các hành động sau:
- Truy cập ID của các tài sản mà bạn muốn chuyển đổi giữa.
- Đạt được một chuỗi chuyển đổi bao gồm một hoặc nhiều ký hiệu nhẹ.
- Đăng ký và xử lý các sự kiện spot.
- Theo dõi chuỗi chuyển đổi và trả về tỷ lệ chuyển đổi cuối cùng.
Dưới đây, chúng tôi giải thích chi tiết từng hành động này.
Truy cập ID tài sản ¶
ID tài sản có thể được truy cập trực tiếp như các thuộc tính của thực thể ký hiệu nhẹ (được biểu diễn bằng thông điệp mô hình ProtoOALightSymbol). Ngoài ra, bạn có thể đạt được ID của tiền gửi tài khoản trực tiếp từ thực thể liên quan ProtoOaTrader.
Lưu ý rằng ví dụ dưới đây chỉ đạt được ID tài sản cho một ký hiệu. Để thực hiện cùng một thao tác cho nhiều ký hiệu, bạn sẽ cần thêm một vòng lặp hoặc sử dụng một giải pháp phù hợp khác (ví dụ: phương thức map() hoặc tương đương).
Làm việc với JSON
Khi làm việc với JSON, bạn vẫn có thể tái sử dụng mã bên dưới và các đoạn mã khác trong hướng dẫn này. Tuy nhiên, hãy đảm bảo thay thế tên của các lớp Proto... bằng tên của các lớp tùy chỉnh của bạn và thực hiện các thay đổi cần thiết để phù hợp với TCP và WebSocket client mà bạn ưa thích.
symbol là một biến thuộc kiểu ProtoOALightSymbol. Nếu bạn đang sử dụng JSON, nó có thể thuộc bất kỳ kiểu tùy chỉnh nào đại diện cho thông điệp ProtoOALightSymbol.
1 2 | |
Trong ví dụ dưới đây, chúng tôi đạt được ID của tiền gửi của đối tượng account thuộc kiểu ProtoOATrader.
1 | |
symbol là một biến đại diện cho một thông điệp thuộc kiểu ProtoOALightSymbol.
1 2 | |
Trong ví dụ dưới đây, chúng tôi đạt được ID của tiền gửi của đối tượng account đại diện cho thông điệp mô hình ProtoOATrader.
1 | |
Đạt được chuỗi chuyển đổi ¶
Để đạt được một chuỗi chuyển đổi hợp lệ, ứng dụng của bạn cần gửi thông điệp ProtoOASymbolsForConversionReq với các trường firstAssetId và lastAssetId được đặt thành ID của các tài sản mà bạn muốn chuyển đổi giữa. Khi bạn nhận được phản hồi thuộc kiểu ProtoOASymbolsForConversionRes, hãy lưu trữ trường symbol lặp lại của nó trong một tập hợp.
Dưới đây là cách bạn có thể thực hiện hành động này thông qua các SDK chính thức.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
1 2 3 4 5 | |
Cũng thêm điều kiện sau vào callback onMessageReceived.
1 2 3 | |
Ghi chú
Chúng tôi khuyến nghị cao việc đạt được tất cả các ký hiệu chuỗi chuyển đổi cho mỗi tài sản khi bạn yêu cầu và nhận dữ liệu tài sản từ máy chủ lần đầu tiên. Nếu không, bạn sẽ phải gửi thông điệp ProtoOASymbolsForConversionReq mỗi khi bạn cần chuyển đổi tỷ lệ, trong một số trường hợp, có thể là nhiều lần mỗi giây.
Ghi chú
Vì các thực thể ProtoOALightSymbol không chứa bất kỳ trường nào đại diện cho giá bid hoặc ask, chúng tôi khuyến nghị cao việc tạo các lớp Symbol tùy chỉnh hoặc tương đương để bạn có thể dễ dàng tạo các ký hiệu mới một cách lập trình và cập nhật các thuộc tính của chúng khi các sự kiện nhất định được kích hoạt. Bạn sẽ phải chuyển đổi các ký hiệu nhẹ thành các đối tượng của lớp này một cách riêng biệt.
Đăng ký và xử lý các sự kiện spot ¶
Để theo dõi chuỗi chuyển đổi từ đầu đến cuối, bạn cần đăng ký ProtoOASpotEvent cho tất cả các ký hiệu có trong chuỗi. Điều này được thực hiện như sau thông qua các SDK chính thức.
Trước khi bạn thực hiện các thao tác được liệt kê bên dưới, hãy tạo một lớp Symbol hoặc tương đương để bạn có thể dễ dàng tạo các ký hiệu mới một cách lập trình và cập nhật các thuộc tính của chúng khi các sự kiện nhất định được kích hoạt. Trong các ví dụ dưới đây, lớp Symbol của chúng tôi bao gồm các đối tượng ProtoOASymbol và ProtoOALightSymbol như các thuộc tính.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Chúng tôi cũng phải đăng ký các sự kiện spot và xử lý chúng. Trong ví dụ dưới đây, chúng tôi truy cập tập hợp symbols lưu trữ các ký hiệu nhẹ của chúng tôi. Chúng tôi tìm đối tượng ký hiệu có ID khớp với trường symbolId của ProtoOASpotEvent mà chúng tôi vừa nhận được. Cuối cùng, chúng tôi cập nhật các thuộc tính bid và ask của symbol bằng phương thức hỗ trợ GetPriceFromRelative.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Chúng tôi có thể sử dụng hàm sau để đăng ký ProtoOASpotEvent cho một ký hiệu cụ thể. Lưu ý rằng nó chỉ đăng ký một ký hiệu, có nghĩa là bạn sẽ cần gọi hàm này cho mỗi ký hiệu nhẹ trong tập hợp các ký hiệu chuyển đổi của bạn.
1 2 3 4 5 6 7 | |
Để xử lý các sự kiện spot, chúng tôi có thể thêm các điều kiện sau vào callback onMessageReceived của chúng tôi.
1 2 3 | |
Cuối cùng, đây là callback onSpotEvent của chúng tôi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Trong lớp Symbol của chúng tôi, hàm getPipsFromRelative được định nghĩa như sau:
1 2 3 4 | |
Lưu ý rằng giá trị của các thuộc tính pipPosition và digits phải được đạt được một cách riêng biệt.
Theo dõi chuỗi chuyển đổi và trả về tỷ lệ chuyển đổi cuối cùng ¶
Tại thời điểm này, tất cả các ký hiệu trong chuỗi chuyển đổi của bạn sẽ nhận được tỷ giá spot và bạn sẽ có thể truy cập giá bid và ask chính xác cho mỗi ký hiệu. Tất cả những gì còn lại là đi dọc theo chuỗi chuyển đổi và trả về tỷ lệ cuối cùng. Điều này có thể được thực hiện như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |