Skip to content
All library documents

Basic CFD Algorithm for Historical Data and Order Handling

Article Strategy library · Author: QuantConnect

Summary

This example demonstrates a minimal algorithm for a CFD asset. It sets the account currency, a short date range, and starting cash, subscribes to a German index CFD, and requests daily historical data. During live or simulated data handling, it reads and logs quote-bar closes and places a full-portfolio target holding when the portfolio has no investment. An order-event handler logs order updates.

The example is useful for seeing how data access, a basic holdings instruction, and order-event reporting fit into an algorithm framework. It does not define a signal, risk limit, stop, or exit rule, so the position is not managed by a trading strategy. The brief run dates and single instrument are demonstration settings, not evidence of profitability or of how CFD financing, leverage, spreads, and execution affect results. The order instruction's sizing and behavior depend on the platform and brokerage model.

Key ideas

  • The example subscribes to a CFD and requests historical daily bars.
  • It reads quote-bar data and logs closing prices as new data arrives.
  • A holdings instruction opens a position when the portfolio is not invested.
  • Order events are logged separately from incoming market data.
  • No entry signal, exit condition, or explicit risk control is demonstrated.

Tags

Full text
# BasicTemplateCfdAlgorithm


# BasicTemplateCfdAlgorithm









The demonstration algorithm shows some of the most common order methods when working with CFD assets.

## Source (Apache-2.0)

```python
# QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
# Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from AlgorithmImports import *

### <summary>
### The demonstration algorithm shows some of the most common order methods when working with CFD assets.
### </summary>
### <meta name="tag" content="using data" />
### <meta name="tag" content="using quantconnect" />
### <meta name="tag" content="trading and orders" />

class BasicTemplateCfdAlgorithm(QCAlgorithm):

    def initialize(self):
        '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
        self.set_account_currency('EUR')

        self.set_start_date(2019, 2, 20)
        self.set_end_date(2019, 2, 21)
        self.set_cash('EUR', 100000)

        self._symbol = self.add_cfd('DE30EUR').symbol

        # Historical Data
        history = self.history(self._symbol, 60, Resolution.DAILY)
        self.log(f"Received {len(history)} bars from CFD historical data call.")

    def on_data(self, data):
        '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
        Arguments:
            slice: Slice object keyed by symbol containing the stock data
        '''
        # Access Data
        if data.quote_bars.contains_key(self._symbol):
            quote_bar = data.quote_bars[self._symbol]
            self.log(f"{quote_bar.end_time} :: {quote_bar.close}")

        if not self.portfolio.invested:
            self.set_holdings(self._symbol, 1)

    def on_order_event(self, order_event):
        self.debug("{} {}".format(self.time, order_event.to_string()))

```

Shown in full with attribution under the source's licence. Licence: Apache-2.0

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.