Example #1
0
        /// <summary>
        /// 運行 CloseChangeSum 策略的參數
        /// </summary>
        /// <param name="dataProvider"> 回測資料 </param>
        /// <param name="environmentParams"> 回測環境的參數 </param>
        /// <param name="observationTimes"> 使用歷史多久的時間觀察 </param>
        /// <param name="tradingIntervals"> 交易頻率(多久交易一次) </param>
        /// <param name="savePath"> 存檔位置 </param>
        /// <returns></returns>
        public static async Task RunCloseChangeAllParams(ThreeMarketsDataProvider dataProvider, EnvironmentParams environmentParams, int[] observationTimes, int[] tradingIntervals, string savePath)
        {
            List <(int observationTime, int tradingInterval)> combinations = new();
            ConcurrentBag <ThreeMarketsCombinationModels>     results      = new();

            foreach (int observationTime in observationTimes)
            {
                foreach (int tradingInterval in tradingIntervals)
                {
                    combinations.Add((observationTime, tradingInterval));
                }
            }

            Parallel.ForEach(combinations, new ParallelOptions {
                MaxDegreeOfParallelism = 6
            }, (combination) =>
            {
                CloseChange strategy   = new(combination.observationTime, combination.tradingInterval);
                string combinationName = $"{Utils.MinuteToHrOrDay(combination.observationTime)}-{Utils.MinuteToHrOrDay(combination.tradingInterval)}";
                ThreeMarketsCombinationModels result = RunAllDatasetParams <CloseChangeRecordModel>(dataProvider, strategy, environmentParams, combinationName, savePath).Result;
                results.Add(result);
                counter++;
                Console.WriteLine(counter);
            });
 public static void ClassInit(TestContext _)
 => provider = new(ThreeMarketsDataLoader.LoadCsvDataAsync(Utils.btc_usdtPath, Utils.eth_usdtPath, Utils.eth_btcPath).Result);