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)
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)
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)
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)
def setUp(self): # Fixture Setup self.sizer = FixedRiskSizer(USDJPY)
def setUp(self): # Fixture Setup self.sizer = FixedRiskSizer(TestStubs.instrument_gbpusd())