Futu Algorithmic Trading Solution (Python) 基於富途OpenAPI所開發量化交易程序
Highlights
- Supported Platforms and Markets
- Historical K-Line Data
- Backtesting Trading Strategies (BETA)
- Algorithmic Trading
EXAMPLE: 0.01s/STOCK TO DECIDE BUY/SELL ORDER WITH A 3-TECHNICAL INDICATORS STRATEGY (MACD, KDJ AND CLOSE PRICE)
- Advanced Stock Screener
- Trading Strategy Editor
- GUI Support (Upcoming)
Version Guidance
| FutuAlgo Release | Futu OpenAPI Specification | |:-----------------|:---------------------------| | 1.0 | 6.1 |
Deployment
Pre-Requisite: Configuration File (Config.ini)
[FutuOpenD.Config]
Host = <OpenD Host>
Port = <OpenD Port>
WebSocketPort = <OpenD WebSocketPort>
WebSocketKey = <OpenD WebSocketKey>
TrdEnv = <SIMULATE or REAL>
[FutuOpenD.Credential] Username = <Futu Login Username> Password_md5 = <Futu Login Password Md5 Value>
[FutuOpenD.DataFormat] HistoryDataFormat = ["code","timekey","open","close","high","low","peratio","turnoverrate","volume","turnover","changerate","last_close"] SubscribedDataFormat = None
[TradePreference] LotSizeMultiplier = <# of Stocks to Buy per Signal> MaxPercPerAsset = <Maximum % of Capital Allocated per Asset> StockList = <Subscribed Stocks in List Format>
[Backtesting.Commission.HK] FixedCharge = <Fixed Transaction Fee and Tax in HKD - 15.5> PercCharge = <Percentage Transaction Fee in % - 0.1097>
[Email] Port = <Server SMTP Setting> SmtpServer = <Server SMTP Setting> Sender = <Sender Email Address - account1@example.com> Login = <Sender Email Address - account1@example.com> Password = <Sender Email Password> SubscriptionList = ["account1@example.com", "account2@example.com"]
[TuShare.Credential] token = 2134342ABC2D03780772038A7816
IMPORTANT NOTE: The format may be changed in later commits. Please refer to this README if exception is raised.
1. Install Dependencies
Install using conda:
conda env create -f environment.yml
To export current environment, use the following command
conda env export > environment.yml
To update current environment with the latest dependencies, use the following command
conda env update --name futu_trade --file environment.yml --prune
For GitHub Actions - with pip dependencies, use the following command
pip list --format=freeze > requirements.txt
2. Install FutuOpenD
For Windows/MacOS/CentOS/Ubuntu:
https://www.futunn.com/download/OpenAPI
Please do make sure that you have at least a LV1 subscription level on your interested quotes. For details, please refer to https://openapi.futunn.com/futu-api-doc/qa/quote.html
MAKE SURE YOU LOGIN TO FUTU OPEND FIRST BEFORE STARTING FUTU_ALGO!
4. Download Data (e.g. 1M Data for max. 2 Years)
For Windows:
python mainbackend.py --forceupdate
For MacOS/Linux:
python3 mainbackend.py --forceupdate
4. Enjoy :smile:
Command-line Interface Usages
Historical Data Download & Processing
Update all K1M and KDAY interval historical K-line data
python mainbackend.py -u / python mainbackend.py --update
IMPORTANT NOTE: This will not override existing historical data if the file exists. It will automatically detect the latest stock data you have downloaded in the folder and resume from there.
If you want to refresh all data, use the following command instead (WITH CAUTION!)
python mainbackend.py -fu / python mainbackend.py --force_update
Algorithmic Trading
Execute Algorithmic Trading with a Pre-defined Strategy (By default use 1M data)
python mainbackend.py -s MACDCross / python mainbackend.py --strategy MACDCross
If you would like to use another time interval based date (e.g., Day data), use the following command
python mainbackend.py -s MACDCross --timeinterval KDAY
If you do not have a pre-defined stock list in config.ini, then you can just trade the Top 30 HSI stocks
python mainbackend.py -s MACDCross --includehsi --timeinterval K_DAY
IMPORTANT NOTE: The supported time intervals are: K1M, K30M, K5M, K15M, K30M, K60M, KDAY, KWEEK, K_MON, K_YEAR.
Stock Filtering and Email Subscription
Execute Stock Filtering with Pre-defined Filtering Strategies with Email Title "MACDCrossTechnique" in HK and China (Shanghai and Shenzhen) Stock Market
python mainbackend.py -f VolumeThreshold PriceThreshold -en MACDCross_Technique -m HK CHINA
GUI Usages
Start the GUI with main.py (NOT FINISHED YET)
python main.py
Future Plans
- [ ] NEED A GREAT NAME FOR THIS ALGO TRADE!!
- [x] [Custom Backtesting Time Interval]()
- [x] Dynamic Instantiation
Contributor
Disclaimer
Futures, stocks and options trading involves substantial risk of loss and is not suitable for every investor. The valuation of futures, stocks and options may fluctuate, and, as a result, clients may lose more than their original investment. The impact of seasonal and geopolitical events is already factored into market prices. The highly leveraged nature of futures trading means that small market movements will have a great impact on your trading account and this can work against you, leading to large losses or can work for you, leading to large gains.
If the market moves against you, you may sustain a total loss greater than the amount you deposited into your account. You are responsible for all the risks and financial resources you use and for the chosen trading system. You should not engage in trading unless you fully understand the nature of the transactions you are entering into and the extent of your exposure to loss. If you do not fully understand these risks you must seek independent advice from your financial advisor.
All trading strategies are used at your own risk.
Any content in this repository should not be relied upon as advice or construed as providing recommendations of any kind. It is your responsibility to confirm and decide which trades to make. Trade only with risk capital; that is, trade with money that, if lost, will not adversely impact your lifestyle and your ability to meet your financial obligations. Past results are no indication of future performance. In no event should the content of this correspondence be construed as an express or implied promise or guarantee.
This repository and its author are not responsible for any losses incurred as a result of using any of our trading strategies. Loss-limiting strategies such as stop loss orders may not be effective because market conditions or technological issues may make it impossible to execute such orders. Likewise, strategies using combinations of options and/or futures positions such as “spread” or “straddle” trades may be just as risky as simple long and short positions. Information provided in this correspondence is intended solely for informational purposes and is obtained from sources believed to be reliable. Information is in no way guaranteed. No guarantee of any kind is implied or possible where projections of future conditions are attempted.