예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
 public OandaCandleProvider(OandaApi apiEndpoint)
 {
     this.apiEndpoint = apiEndpoint;
 }