The general exchange structure has not changed since Part 1 of the Project. The primary new feature of the exchange is the introduction of an ETF.
The ETF "GUILD" consists of 5 copies of "QFIN" and 5 copies of "UEC".
You have the ability to create/redeem with the ConversionRequest object in base.py.
- CREATE: Underlyings -> ETF
- REDEEM: ETF -> Underlyings
class ConversionRequest:
def __init__(self, ticker: str, size: int, direction: str, bot_name: str):
self.ticker = ticker
self.size = size
self.direction = direction
self.bot_name = bot_nameHere, ticker is the ETF (not the underlyings), direction is 'CREATE'/'REDEEM' and size refers to how many of the ETF are created/redeemed.
For example:
ConversionRequest("GUILD", 5, "REDEEM", "PlayerAlgorithm") sends a conversion request that:
- Reduces "GUILD" position by 5
- Increases "UEC" and "QFIN" positions by 25 each
Your bot will be run 20 times over 20,000 iterations each to determine your score. Instead of in Round 1 where the score was merely the mean PnL, the score is now equal to:
Score = Mean PnL - 0.1 × Standard Deviation of Test Runs
PnL is determined as specified in the method for the 1st Project round (i.e. before it was changed to cash with position 0 due to the bug).
-
You now have the option to receive your bot's current position with the book whenever
send_messages()is called. You can change this with thegive_positionsargument inrun_game(). -
We have created a visualiser to allow for easier data analysis. This can be set on/off using the
visualiserflag in theplay_game()method. In your_algo, significant tracking functionality has been added. Please ask me if you have any questions re. these methods, but they shouldn't get in your way at all. The visualiser methods are available to you, so feel free to add functionality if you desire. -
We included the option to have a progress bar when a bot simulation is running, with the
progress_barflag inrun_game(). I find this nice to have, but be careful of having any print statements in your bot if this is on -> it looks ugly. -
When called, your bot can take num_timestamps as input to be fed in by the game engine
Email a single file to qfinorderbot@gmail.com containing your PlayerAlgorithm class. Your bot must be called PlayerAlgorithm, but please name the file itself with your team name. The email must have the subject "Project2 Submission_{team_name}". This is an f string. Please do not have any quotation marks in the subject
- Your bot must not print anything or create any CSVs
- Your bot must not interact with anything outside the program
- Violations will result in arbitrary fines
Submission Date: Thursday the 9th of October @ Midnight