public void OANDAサーバーよりキャンドルが取得できる() { var symbol = new TradingSymbol("USD_JPY"); var from = new DateTime(2017, 1, 1, 1, 0, 0, DateTimeKind.Utc); var to = new DateTime(2017, 1, 1, 10, 0, 0, DateTimeKind.Utc); var range = ChartRange.Hourly; var oandaApi = new OandaApi(_server.BaseUri, _server.DefaultAccessToken); var sut = new OandaCandleProvider(oandaApi); var candles = sut.GetCandles(symbol, range, from, to); Assert.AreEqual(10, candles.Length); }
public void OANDAよりデータを取得してチャートが更新されることを確認する() { // 前提条件: // トレードをするクラスはチャートが常に勝手に最新に更新されていること // を想定して同期的にアクセス可能 // データを取得する単位はシンボル・チャートの足単位とする // (TODO: 最適化できれば複数のシンボル・チャート足を同時に取得したいけど、 // OANDA的に難しそうなのでとりあえず...分足から日足を生成するとか // -> ちなみに↑の最適化したい理由はリクエストが発生すると遅いから) // // 1. 更新スケジュールを作り、タイミングでトリガーを発生 // 2. トリガーでプロバイダよりデータを取得する // 3. プロバイダがデータを取得出来たらデータストアを更新 // 4. データストアはチャートマネージャに通知を送信 // 5. チャートマネージャは送られてきたデータによってチャートを更新する // 6. スレッドセーフになるように頑張る var symbol = new TradingSymbol("USD_JPY"); var range = ChartRange.Daily; var from = new DateTime(2017, 12, 1, 0, 0, 0, DateTimeKind.Utc); var to = new DateTime(2017, 12, 1, 0, 2, 0, DateTimeKind.Utc); var apiEndpoint = new OandaApi(_server.BaseUri, _server.DefaultAccessToken); var provider = new OandaCandleProvider(apiEndpoint) as ICandleProvider; var chartManager = new CandleChartManager(from, (s, r) => provider); var chart = chartManager.GetChart(symbol, range); // この時点で100件分のチャートが取得済み chart.AddIndicator("SMA10", new SmaIndicator(10)); var snapshot1 = chart.Snapshot; Assert.AreEqual(100, snapshot1.Candles.Length); Assert.AreEqual(100, snapshot1.Plot <SingleValue>("SMA10").Length); // これでチャートが更新される chartManager.Update(to); var snapshot2 = chart.Snapshot; Assert.AreEqual(100, snapshot2.Candles.Length); Assert.AreEqual(100, snapshot2.Plot <SingleValue>("SMA10").Length); // SNAPSHOT1とSNAPSHOT2のインスタンスが異なることを確認 Assert.AreNotSame(snapshot1, snapshot2); }
private async static Task <int> RunAsync(TradeAppOption option) { using (var file = File.AppendText("log.txt")) { file.WriteLine("Application Started."); } try { var oandaApi = new OandaApi(option.OandaServerBaseUri, option.OandaAccessToken, option.OandaAccountId); var account = await oandaApi.GetAccount(); } catch (Exception e) { Console.WriteLine(e.Message); } return(0); }
public OandaCandleProvider(OandaApi apiEndpoint) { this.apiEndpoint = apiEndpoint; }