/// <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);