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

ตัวแปลงสกุลเงิน

ในการเทรดด้วย Algo การให้ความสามารถแก่ cBot และอินดิเคเตอร์ในการแปลงสกุลเงินโดยอัตโนมัติโดยใช้อัตราตลาดปัจจุบันเป็นสิ่งสำคัญ ในคู่มือ API นี้ เราครอบคลุมวิธีการใช้งานฟีเจอร์นี้ใน cTrader

การแปลงสกุลเงินในหนึ่งนาที!

  • เมธอด Convert (double value, Asset from, Asset to และ Convert(double value, string from, string to)) ส่งคืนอัตราการแปลงที่แน่นอนระหว่างสินทรัพย์ที่ระบุหรือสินทรัพย์ที่มีชื่อที่ระบุ เข้าถึงได้ผ่านคุณสมบัติ AssetConverter ใหม่ของคลาส Algo
  • คลาส Asset มีเมธอด Convert(Asset to, double value) และ Convert(string to, double value) ของตัวเองซึ่งสามารถเรียกใช้ได้อย่างง่ายดายจากออบเจกต์ Asset ใด ๆ
  • เมื่อทำ Backtesting cTrader จะใช้อัตราการแปลงในอดีตโดยอัตโนมัติ ซึ่งหมายความว่าคุณสามารถคาดหวังผลลัพธ์ที่ถูกต้องตามประวัติศาสตร์และประเมินประสิทธิภาพของ cBot ของคุณได้อย่างเต็มที่

การแปลงสกุลเงินทำงานอย่างไร

อินเทอร์เฟซ IAssetConverter ในเนมสเปซ cAlgo.API.Internals มีเมธอด Convert() ที่มีโอเวอร์โหลดดังต่อไปนี้:

  • double Convert(double value, Asset from, Asset to) - แปลงค่าที่ระบุจากสินทรัพย์ from เป็นสินทรัพย์ to
  • double Convert(double value, string from, string to) - แปลงค่าที่ระบุจากสินทรัพย์ที่มีชื่อตรงกับสตริง from เป็นสินทรัพย์ที่มีชื่อตรงกับสตริง to

คลาส Algo ตอนนี้มีคุณสมบัติ AssetConverter ของประเภท IAssetConverter คุณสามารถเข้าถึงสองเมธอดด้านบนโดยพิมพ์ดังต่อไปนี้

1
AssetConverter.Convert(double value, Asset from, Asset to)

คลาส Asset ยังมีเมธอด Convert() ของตัวเองซึ่งมีโอเวอร์โหลดดังต่อไปนี้:

  • double Convert(Asset to, double value) - แปลงค่าที่ระบุจากสินทรัพย์ที่เรียกเมธอดนี้เป็นสินทรัพย์ to
  • double Convert(string to, double value) - แปลงค่าที่ระบุจากสินทรัพย์ที่เรียกเมธอดนี้เป็นสินทรัพย์ที่มีชื่อตรงกับสตริง to

ลองพิจารณาตัวอย่างด้านล่างซึ่ง cBot ของเราแปลง GBP เป็น JPY และจากนั้นดำเนินการคำสั่งตลาดใหม่โดยใช้ค่าที่คำนวณได้เป็นปริมาณคำสั่ง

 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
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.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleConversionTestBot : Robot
    {
        [Parameter(DefaultValue = "Hello world!")]
        public string Message { get; set; }

        protected override void OnStart()
        {

            Asset baseAssetForNewOrder = Assets.GetAsset("GBP");

            Asset quoteAssetForNewOrder = Assets.GetAsset("JPY");

            double newOrderVolume = baseAssetForNewOrder.Convert(quoteAssetForNewOrder, 1000.00);

            ExecuteMarketOrder(TradeType.Buy, SymbolName, newOrderVolume);

            Print($"New order has been executed with {newOrderVolume} as its volume");
        }


    }
}

หากเราดูที่บันทึก เราจะเห็นว่า cBot ของเราทำงานตามที่คาดไว้ ในเวลาที่เริ่มต้นอินสแตนซ์ ราคา Bid สำหรับ GBPJPY เท่ากับ 159.619

การแปลงสกุลเงินใน backtesting

cTrader รองรับอัตราแลกเปลี่ยนในอดีตอย่างเต็มรูปแบบใน backtesting

หมายความว่า เมื่อคุณทำ backtest cBot ที่ใช้วิธีการใดๆ ที่อธิบายไว้ข้างต้น การคำนวณการแปลงจะดำเนินการโดยใช้ข้อมูลในอดีตที่ถูกต้องแทนที่จะเป็นอัตราแลกเปลี่ยนปัจจุบันระหว่างสินทรัพย์ที่ระบุ คุณสมบัตินี้ช่วยให้มั่นใจว่าผลลัพธ์ของการ backtest และการปรับให้เหมาะสมมีความแม่นยำมากที่สุดเท่าที่จะเป็นไปได้ภายใต้สภาวะตลาดในอดีต

โปรดทราบว่า cTrader สามารถสร้างห่วงโซ่การแปลงที่แม่นยำโดยใช้เครื่องมือการเทรดที่อาจไม่จำกัดจำนวน ผลลัพธ์คือ แม้ว่าสกุลเงินฝากของบัญชีของคุณจะแตกต่างจากสินทรัพย์ฐานหรือสินทรัพย์อ้างอิงของสัญลักษณ์ที่คุณต้องการทำ backtest cTrader จะจัดการการคำนวณที่จำเป็นทั้งหมดเพื่อให้คุณได้รับผลลัพธ์การ backtest ที่แม่นยำ

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