联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> Python编程Python编程

日期:2024-01-28 07:01


Coding Project Test

Project Goal:

- The goal of the coding project is to create a general event-driven back-testing framework that can test various tradingor allocation strategies. The strategies can be based on fundamental, macro or technical signals.

Language:

- Python

Use of Third-party Library:

- No constraints

Notes:

- As the framework need to be able to handle various types of strategies (as you can see in the examples in the Details section), ideally it should be written in Object Oriented Programming style

- The back-testing framework should be event-driven instead of vector based, as the latter is hard to get generalized to different types of strategies

- The framework should be able to handle both cases 1) and 2) provided in the details below

Details:

General Guidelines:

The back-testing project will be divided into two parts. Each part is separate from the other, but they should share a common underlying framework. Part 1) is to test a simpler one asset, one signal case. Part 2) is to test a more complicated multi-asset, systematic rebalancing case. The part 2) also tests your derivatives knowledge and involves a few technical details. If you don't know how to handle some of the details, please code based on your own assumptions and make sure you highlight the assumptions in commentary sections of your code. If given your background, you have no clue about the part 2), then please focus on the part 1) and make sure it can be expanded to a multi-asset case easily and show in an example.

The starting balance of the portfolio in both cases is $1 million.The back-testing time horizon is from June 2005 to December 2023.

Description of Strategies:

1) Back-test a trend following strategy on S&P 500 ETF (Ticker: SPY):

The strategy is based on the common moving average crossing signal. The rule of the strategy is: if 50-day moving average crosses above 200-day moving average, invest all money in S&P 500; if 50-day moving average crosses below 200-day moving average, sell the existing position; if nothing happened, park the money in cash, earning money market rate. No short or leverage is allowed.

2) Back-test a systematic derivative portfolio strategy based on S&P 500 ETF (Ticker: SPY):

The systematic strategy is based on a common collar derivative strategy below (Note: the total portfolio is a) + b) + c). Don’t treat them as separate portfolios)

a) Long SPY

b) Buy SPY 95% strike OTM put. The put notional is 100% of the long position to provide protection. The maturities of the contracts are evenly spread across 3, 6, 9 and 12-month. The positions are rolled every 3 months to keep the structure stable.

c) Sell SPY 105% strike OTM call. The call notional is 100% of the long position to generate income. The maturity of the contracts is 1 month. They are rolled every month when they expire.

? (Bonus) Apply the same strategies as in part 1) and 2), but this time with transaction cost. For S&P 500 index ETF trading, please assume 3 cents per share transaction cost. For SPY derivatives contract trading, please assume 4 cents per share (note: contract multiplier is 100 shares, which means $4 per contract)

Output Requirements:

- Show portfolio net asset value in a time series chart

- Clearly logging all transactions made in following the strategies

- Briefly analyze the results generated from the code and comment on why the strategies worked or did not work. Provide caveat or highlight potential issues in deploying the strategies

Data Files: (Note: you don't have to use all the data if there is redundancy)

- Data needed to test strategies is in the file: Coding_Proj_Data.xls

- Tab 1: SPY price and dividend yield data

- Tab 2: SPY quarterly dividend data

- Tab 3: Interest rate of various maturities: from 1-day to 360-day. If you need interest rates from other maturities, feel free to interpolate.

- Rest of tabs: SPY implied volatility of various maturities. For example, "30IV" tab is the 30-day implied volatility of various strikes. If any maturity or strike level is missing, please linear interpolate/extrapolate yourself from two adjacent maturities or strikes.

Internal


版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp