API tempoh masa tersuai menyediakan jenis yang membolehkan anda memaparkan data OHLC tersuai dari mana-mana sumber, termasuk API pihak ketiga, pengiraan sintetik atau fail tempatan, secara langsung dalam carta cTrader. Entiti API, seperti CustomTimeFrame dan TimeFrameManager, membolehkan anda mengalirkan bar dari sumber data tertentu dan memaparkannya dalam cTrader sebagai tempoh yang lengkap.
Jenis penting termasuk:
TimeFrameManager.Custom.Add(name) untuk mendaftarkan tempoh tersuai baharu dengan nama yang ditentukan oleh pengguna.
CustomTimeFrame.BarsNeeded untuk menentukan bagaimana dan bila data dimuatkan untuk carta.
CustomBars.AppendBars(), CustomBars.UpdateLastBar(), CustomBars.PrependBars() untuk menguruskan siri secara dinamik, di mana setiap CustomBar mengandungi enam medan ini: time, open, high, low, close dan volume.
Setelah ditambah, tempoh tersuai disepadukan dengan lancar ke dalam UI Tempoh cTrader dan muncul dalam senarai juntai bersama tempoh terbina dalam. Pengguna kemudian boleh beralih dengan mudah antara tempoh standard dan tersuai.
Petua
Gunakan tempoh tersuai untuk menggambarkan pasaran luar, mensimulasikan jenis bar eksperimen, mencipta carta korelasi/arbitraj lanjutan atau menguji strategi pada data yang diperibadikan.
Objek API tempoh masa tersuai boleh digunakan untuk melakukan perkara berikut:
Ciri atau operasi
Contoh
Memaparkan data pasaran alternatif
Muatkan bar dari API REST (cth. AlphaVantage) Visualisasikan harga di luar platform
Mensimulasikan jenis bar sintetik
Cipta bar Heikin-Ashi, Renko atau volum Jana bar dari sentimen atau indeks ekonomi
Pengujian data luar talian
Muatkan bar tersuai dari fail CSV atau JSON Uji balik pada set data proprietari
Penindihan strategi silang aset
Plot GBP/USD pada carta EUR/USD Bangunkan model arbitraj
Kawalan UI yang dipertingkatkan
Togol, kegemaran atau ubah suai tempoh tersuai
Cipta tempoh tersuai berdasarkan data sedia ada
Plugin di sini menggambarkan cara untuk mencipta dan memaparkan tempoh intrahari sintetik dalam cTrader.
Plugin ini membina tempoh masa 25 minit dengan mengambil bar satu minit asli untuk simbol aktif, mengagregasikannya menjadi lilin OHLC 25 minit dan kemudian mengalirkan hasilnya ke dalam siri CustomBar.
Tempoh masa baharu muncul dalam menu juntai untuk memilih tempoh masa sebagai 25Min.
Apabila pengguna menatal ke belakang pada carta, plugin secara automatik memuatkan lebih banyak data minit, menambah bar 25 minit yang lebih lama dan mengekalkan paparan terkini.
usingSystem;usingSystem.Linq;usingcAlgo.API;usingcAlgo.API.Internals;namespacecAlgo.Plugins{[Plugin(AccessRights = AccessRights.None)]publicclassTF25:Plugin{privateCustomTimeFrame_tf25Min;privatebool_isLoadMoreEnabled=true;protectedoverridevoidOnStart(){// Create the 25-minute TF_tf25Min=TimeFrameManager.Custom.Add("25Min");_tf25Min.Description="25‑minute aggregated from 1‑minute bars";// Hook initial load and on‑scroll‑back_tf25Min.NewChart+=OnNewChart;_tf25Min.BarsNeeded=OnBarsNeeded;}privatevoidOnNewChart(CustomTimeFrameNewChartEventArgsargs){varcb=args.CustomBars;varchart=args.Chart;// Show a loading indicatorvarloading=newTextBlock{Text="Loading 25‑min bars…",FontSize=12};chart.AddControl(loading);// Fetch the 1‑min bars and aggregateMarketData.GetBarsAsync(TimeFrame.Minute,cb.Symbol.Name,minuteBars=>{varaggregated=minuteBars.Select((bar,idx)=>new{bar,idx}).GroupBy(x=>x.idx/25).Select(g=>{varfirst=g.First().bar;varlast=g.Last().bar;returnnewCustomBar(time:first.OpenTime,open:first.Open,high:g.Max(x=>x.bar.High),low:g.Min(x=>x.bar.Low),close:last.Close,volume:g.Sum(x=>(int)x.bar.TickVolume));});chart.RemoveControl(loading);});}privatevoidOnBarsNeeded(CustomTimeFrameBarsNeededArgsargs){varcb=args.CustomBars;// Same logic for explicit BarsNeeded triggersMarketData.GetBarsAsync(TimeFrame.Minute,cb.Symbol.Name,minuteBars=>{varaggregated=minuteBars.Select((bar,idx)=>new{bar,idx}).GroupBy(x=>x.idx/25).Select(g=>newCustomBar(time:g.First().bar.OpenTime,open:g.First().bar.Open,high:g.Max(x=>x.bar.High),low:g.Min(x=>x.bar.Low),close:g.Last().bar.Close,volume:g.Sum(x=>(int)x.bar.TickVolume)));cb.AppendBars(aggregated);args.CustomBars.NeedsMore+=_=>{if(!_isLoadMoreEnabled){Print("Load‑more disabled; skipping additional bars.");return;}Print("NeedsMore fired; loading more history…");minuteBars.LoadMoreHistoryAsync(loadArgs=>{Print($"Loaded {loadArgs.Count} more 1‑min bars");if(loadArgs.Count==0)return;Sleep(TimeSpan.FromSeconds(1));args.CustomBars.PrependBars(minuteBars.Take(loadArgs.Count).Select(bar=>newCustomBar(bar.OpenTime,bar.Open,bar.High,bar.Low,bar.Close,(int)bar.TickVolume)));});};});}protectedoverridevoidOnStop(){}}}
Cipta tempoh tersuai menggunakan data luaran
Plugin di sini menunjukkan cara untuk mengambil dan memaparkan data kewangan luaran dalam carta cTrader menggunakan objek API tempoh masa tersuai.
Plugin ini mencipta tempoh tersuai dalam cTrader dengan mengambil data OHLC harian sejarah untuk IBM dari API AlphaVantage.
Ia menganalisis respons CSV dan memuatkan data ke dalam siri CustomBar, yang kemudian dipaparkan sebagai tempoh tersuai yang boleh dipilih dipanggil AlphaVantage dalam UI carta.
usingSystem;usingSystem.Collections.Generic;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;namespacecAlgo.Plugins{[Plugin(AccessRights = AccessRights.None)]publicclassCustomTimeFrameAlphaVantage:Plugin{privateconststringApiKey="YOUR_ALPHA_VANTAGE_KEY";privateconststringSymbol="IBM";privateconststringEndpoint=$"https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={Symbol}&apikey={ApiKey}&datatype=csv&outputsize=full";privateCustomTimeFrame_customTimeFrame;protectedoverridevoidOnStart(){_customTimeFrame=TimeFrameManager.Custom.Add("AlphaVantage");_customTimeFrame.Description="Loads data from AlphaVantage";_customTimeFrame.BarsNeeded=args=>{varresponse=Http.Get(newUri(Endpoint));if(!response.IsSuccessful){Print($"Error loading data from AlphaVantage, status code: {response.StatusCode}, body: {response.Body}");return;}Print($"Response Received: {response.StatusCode}");varohlcData=response.Body.Split(Environment.NewLine)[1..];Array.Reverse(ohlcData);Print($"ohlcData Count: {ohlcData.Length}");varbars=newList<CustomBar>();foreach(varohlcinohlcData){varohlcSplit=ohlc.Split(',');if(ohlcSplit.Length<6)continue;vartime=DateTime.Parse(ohlcSplit[0]);varopen=double.Parse(ohlcSplit[1]);varhigh=double.Parse(ohlcSplit[2]);varlow=double.Parse(ohlcSplit[3]);varclose=double.Parse(ohlcSplit[4]);varvolume=long.Parse(ohlcSplit[5]);bars.Add(newCustomBar(time,open,high,low,close,volume));}Print($"AppendBars Count: {bars.Count}");args.CustomBars.AppendBars(bars);};}protectedoverridevoidOnStop(){// Handle Plugin stop here}}}