---
id: "T:cAlgo.API.Internals.MarketHours"
kind: "interface"
namespace: "cAlgo.API.Internals"
url: "https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/"
---

> Documentation index for agents: https://help.ctrader.com/ctrader-algo/llms.txt · machine index: https://help.ctrader.com/ctrader-algo/api.json

# MarketHours (interface)

Access to symbol's trading sessions schedule

Environments: Desktop supported · CLI supported · Cloud supported.

## Definition

```csharp
public interface MarketHours
```

## Examples

C#:

```csharp
using cAlgo.API;
using cAlgo.API.Internals;
using System;

namespace cAlgo
{
    // This sample indicator shows how to use a symbol MarketHours
    public partial class MarketHoursSample : Indicator
    {
        private TextBlock _isOpenedTextBlock;

        private TextBlock _timeTillCloseTextBlock;

        private TextBlock _timeTillOpenTextBlock;

        private Symbol _symbol;

        protected override void Initialize()
        {
            var grid = new Grid(6, 2)
            {
                BackgroundColor = Color.Gold,
                Opacity = 0.6,
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
            };

            var style = new Style();

            style.Set(ControlProperty.Padding, 1);
            style.Set(ControlProperty.Margin, 2);
            style.Set(ControlProperty.BackgroundColor, Color.Black);
            style.Set(ControlProperty.FontSize, 8);

            _symbol = UseCurrentSymbol ? Symbol : Symbols.GetSymbol(OtherSymbolName);

            grid.AddChild(new TextBlock { Text = "Symbol Info", Style = style, HorizontalAlignment = HorizontalAlignment.Center }, 0, 0, 1, 2);

            grid.AddChild(new TextBlock { Text = "Time Till Open", Style = style }, 1, 0);

            _timeTillOpenTextBlock = new TextBlock { Text = _symbol.MarketHours.TimeTillOpen().ToString(), Style = style };

            grid.AddChild(_timeTillOpenTextBlock, 1, 1);

            grid.AddChild(new TextBlock { Text = "Time Till Close", Style = style }, 2, 0);

            _timeTillCloseTextBlock = new TextBlock { Text = _symbol.MarketHours.TimeTillClose().ToString(), Style = style };

            grid.AddChild(_timeTillCloseTextBlock, 2, 1);

            grid.AddChild(new TextBlock { Text = "Is Opened", Style = style }, 3, 0);

            _isOpenedTextBlock = new TextBlock { Text = _symbol.MarketHours.IsOpened().ToString(), Style = style };

            grid.AddChild(_isOpenedTextBlock, 3, 1);

            grid.AddChild(new TextBlock { Text = "Trading Sessions #", Style = style }, 4, 0);

            grid.AddChild(new TextBlock { Text = _symbol.MarketHours.Sessions.Count.ToString(), Style = style }, 4, 1);

            grid.AddChild(new TextBlock { Text = "Trading Session Week Days", Style = style }, 5, 0);

            var weekDays = string.Empty;

            for (var iSession = 0; iSession < _symbol.MarketHours.Sessions.Count; iSession++)
            {
                var currentSessionWeekDays = string.Format("{0}({1})-{2}({3})", _symbol.MarketHours.Sessions[iSession].StartDay, _symbol.MarketHours.Sessions[iSession].StartTime, _symbol.MarketHours.Sessions[iSession].EndDay, _symbol.MarketHours.Sessions[iSession].EndTime);
                weekDays = iSession == 0 ? currentSessionWeekDays : string.Format("{0}, {1}", weekDays, currentSessionWeekDays);
            }

            grid.AddChild(new TextBlock { Text = weekDays, Style = style }, 5, 1);

            Chart.AddControl(grid);

            Timer.Start(TimeSpan.FromSeconds(1));
        }

        protected override void OnTimer()
        {
            _timeTillOpenTextBlock.Text = _symbol.MarketHours.TimeTillOpen().ToString();
            _timeTillCloseTextBlock.Text = _symbol.MarketHours.TimeTillClose().ToString();
            _isOpenedTextBlock.Text = _symbol.MarketHours.IsOpened().ToString();
        }

        public override void Calculate(int index)
        {
        }
    }
}
```

Python:

```python
import clr
clr.AddReference("cAlgo.API")

from cAlgo.API import *

class MarketHoursSample():
    def initialize(self):
        grid = Grid(6, 2)
        grid.BackgroundColor = Color.Gold
        grid.Opacity = 0.6
        grid.HorizontalAlignment = HorizontalAlignment.Center
        grid.VerticalAlignment = VerticalAlignment.Center

        self.style = Style()

        self.style.Set(ControlProperty.Padding, 1)
        self.style.Set(ControlProperty.Margin, Thickness(2))
        self.style.Set(ControlProperty.BackgroundColor, Color.Black)
        self.style.Set(ControlProperty.FontSize, 8)

        self.symbol = api.Symbol if api.UseCurrentSymbol else api.Symbols.GetSymbol(api.OtherSymbolName)

        titleTextBlock = self.get_text_block("Symbol Info")
        titleTextBlock.HorizontalAlignment = HorizontalAlignment.Center

        grid.AddChild(titleTextBlock, 0, 0, 1, 2)
        grid.AddChild(self.get_text_block("Time Till Open"), 1, 0)

        self.timeTillOpenTextBlock = self.get_text_block(str(self.symbol.MarketHours.TimeTillOpen()))

        grid.AddChild(self.timeTillOpenTextBlock, 1, 1)
        grid.AddChild(self.get_text_block("Time Till Close"), 2, 0)

        self.timeTillCloseTextBlock = self.get_text_block(str(self.symbol.MarketHours.TimeTillClose()))

        grid.AddChild(self.timeTillCloseTextBlock, 2, 1)

        grid.AddChild(self.get_text_block("Is Opened"), 3, 0)

        self.isOpenedTextBlock = self.get_text_block(str(self.symbol.MarketHours.IsOpened()))

        grid.AddChild(self.isOpenedTextBlock, 3, 1)

        grid.AddChild(self.get_text_block("Trading Sessions #"), 4, 0)
        grid.AddChild(self.get_text_block(str(self.symbol.MarketHours.Sessions.Count)), 4, 1)

        grid.AddChild(self.get_text_block("Trading Session Week Days"), 5, 0)

        weekDays = ""

        for session in range(self.symbol.MarketHours.Sessions.Count):
            currentSessionWeekDays = f"{self.symbol.MarketHours.Sessions[session].StartDay}({self.symbol.MarketHours.Sessions[session].StartTime})-{self.symbol.MarketHours.Sessions[session].EndDay}({self.symbol.MarketHours.Sessions[session].EndTime})"
            weekDays = currentSessionWeekDays if session == 0 else f"{weekDays}, {currentSessionWeekDays}"

        grid.AddChild(self.get_text_block(weekDays), 5, 1)

        api.Chart.AddControl(grid)
        api.Timer.Start(1)

    def on_timer(self):
        self.timeTillOpenTextBlock.Text = str(self.symbol.MarketHours.TimeTillOpen())
        self.timeTillCloseTextBlock.Text = str(self.symbol.MarketHours.TimeTillClose())
        self.isOpenedTextBlock.Text = str(self.symbol.MarketHours.IsOpened())

    def get_text_block(self, text):
        textBlock = TextBlock()
        textBlock.Text = text
        textBlock.Style = self.style
        return textBlock
```

config.json:

```json
{
  "AccessRights": "None",
  "TimeZone": "UTC",
  "IsOverlay": true,
  "Parameters": [
    {
      "Name": "UseCurrentSymbol",
      "DisplayName": "Use Current Symbol",
      "Type": "Boolean",
      "DefaultValue": true
    },
    {
      "Name": "OtherSymbolName",
      "DisplayName": "Other Symbol Name",
      "Type": "String",
      "DefaultValue": "GBPUSD"
    }
  ]
}
```

## Methods

- `bool IsOpened()` — Indicates if trading session is active [details](https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/IsOpened/index.md)
- `bool IsOpened(DateTime datetime)` — Indicates if trading session is active [details](https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/IsOpened/index.md)
- `TimeSpan TimeTillClose()` — Time left till end of current trading session. Returns 0 if session is not active [details](https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/TimeTillClose/index.md)
- `TimeSpan TimeTillOpen()` — Time left till start of new trading session. Returns 0 if session is already active [details](https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/TimeTillOpen/index.md)

## Properties

- `IReadonlyList<TradingHoliday> Holidays {get;}` — List of all symbol's trading holidays [details](https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/Holidays/index.md)
- `IReadonlyList<TradingSession> Sessions {get;}` — List of all symbol's trading sessions [details](https://help.ctrader.com/ctrader-algo/references/MarketData/Symbols/MarketHours/Sessions/index.md)

