コード例 #1
0
ファイル: strategies.py プロジェクト: alexanu/nautilus_trader
    def on_start(self):
        """
        This method is called when self.start() is called, and after internal start logic.
        """
        # Put custom code to be run on strategy start here (or pass)
        instrument = self.get_instrument(self.symbol)

        self.precision = instrument.price_precision
        self.entry_buffer = instrument.tick_size.as_double() * 3.0
        self.SL_buffer = instrument.tick_size * 10.0
        self.position_sizer = FixedRiskSizer(instrument)
        self.quote_currency = instrument.quote_currency

        # Register the indicators for updating
        self.register_indicator(data_source=self.bar_type,
                                indicator=self.fast_ema,
                                update_method=self.fast_ema.update)
        self.register_indicator(data_source=self.bar_type,
                                indicator=self.slow_ema,
                                update_method=self.slow_ema.update)
        self.register_indicator(data_source=self.bar_type,
                                indicator=self.atr,
                                update_method=self.atr.update)

        # Get historical data
        self.get_ticks(self.symbol)
        self.get_bars(self.bar_type)

        # Subscribe to live data
        self.subscribe_instrument(self.symbol)
        self.subscribe_bars(self.bar_type)
        self.subscribe_ticks(self.symbol)
コード例 #2
0
    def test_can_calculate_for_usdjpy(self):
        # Arrange
        sizer = FixedRiskSizer(TestStubs.instrument_usdjpy())
        equity = Money(1000000, Currency.USD)

        # Act
        result = sizer.calculate(
            equity,
            10,  # 0.1%
            Price(107.703, 3),
            Price(107.403, 3),
            exchange_rate=0.0093,
            units=1,
            unit_batch_size=1000)

        # Assert
        self.assertEqual(Quantity(358000), result)
コード例 #3
0
    def test_calculate_for_usdjpy(self):
        # Arrange
        sizer = FixedRiskSizer(
            InstrumentLoader.default_fx_ccy(TestStubs.symbol_usdjpy_fxcm()))
        equity = Money(1000000, USD)

        # Act
        result = sizer.calculate(
            equity,
            10,  # 0.1%
            Price("107.703"),
            Price("107.403"),
            exchange_rate=0.0093,
            units=1,
            unit_batch_size=1000,
        )

        # Assert
        self.assertEqual(Quantity(358000), result)
コード例 #4
0
    def test_calculate_for_usdjpy_with_commission(self):
        # Arrange
        sizer = FixedRiskSizer(
            TestInstrumentProvider.default_fx_ccy(TestStubs.symbol_usdjpy()))
        equity = Money(1_000_000, USD)

        # Act
        result = sizer.calculate(
            entry=Price("107.703"),
            stop_loss=Price("107.403"),
            equity=equity,
            risk=Decimal("0.01"),  # 1%
            commission_rate=Decimal("0.0002"),
            exchange_rate=Decimal(str(1 / 107.403)),
            unit_batch_size=Decimal(1000),
            units=1,
        )

        # Assert
        self.assertEqual(Quantity(3578000), result)
コード例 #5
0
 def setUp(self):
     # Fixture Setup
     self.sizer = FixedRiskSizer(USDJPY)
コード例 #6
0
 def setUp(self):
     # Fixture Setup
     self.sizer = FixedRiskSizer(TestStubs.instrument_gbpusd())