Intraday Currency Seasonality
Log in to collectAcademic paper
Currency Returns in Different Time Zones
Zhengyang Jiang
- National Bureau of Economic Research
- CAKellogg's (Canada)
- ?Kellogg School of Management - Department of Finance
- ?National Bureau of Economic Research (NBER)
Strategy in a nutshell
This strategy trades EUR/USD daily, shorting during European hours and going long during U.S. hours, capturing intraday patterns and liquidity differences. A 1-pip spread is applied, and execution is consistent to exploit time-based market dynamics.
Economic rationale
Intraday FX patterns arise from exporter activity and time-zone segmentation. Financial intermediaries transfer currencies across sessions and demand a risk premium, causing systematic exchange rate fluctuations aligned with home market business hours.
Backtest performance
Annualised return9.07%
Volatility11.55%
Beta-0.015
Sharpe ratio0.79
Sortino ratio-1.295
Win rate36%
Full Python code
from AlgorithmImports import *
class IntradayCurrencySeasonality(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1)
self.SetCash(100000)
data = self.AddForex("EURUSD", Resolution.Minute, Market.FXCM)
data.SetFeeModel(CustomFeeModel())
self.symbol = data.Symbol
def OnData(self, data):
time = self.Time
if time.hour == 3 and time.minute == 0: # NY
self.SetHoldings(self.symbol,-1)
if time.hour == 11 and time.minute == 0: # NY
self.Liquidate(self.symbol)
self.SetHoldings(self.symbol,1)
if time.hour == 17 and time.minute == 0: # NY
self.Liquidate(self.symbol)
# Custom fee model.
class CustomFeeModel(FeeModel):
def GetOrderFee(self, parameters):
fee = parameters.Security.Price * parameters.Order.AbsoluteQuantity * 0.00005
return OrderFee(CashAmount(fee, "USD"))