以编程方式检查今天是否是市场开放交易日

时间:2019-04-19 07:47:04

标签: stock algorithmic-trading

检查当今美国证券交易所是否开放交易的最简单方法是什么?

我希望避免的长期方法是通过创建例程来解析具有https://business.nasdaq.com/trade/US-Options/Holiday-Trading-Hours.html之类的日历信息的供稿

我更喜欢 Ruby ,但是即使使用 curl 进行简单的URL查找以产生对/错,或直到下一个市场开放的时间,也是很棒的。

可选

能够查找任意日期会更好,并且也可以解决此问题。
即甚至像curl google.com/search?q="Is the NYSE open on $(date +%Y-%m-%d)"这样的东西。

5 个答案:

答案 0 :(得分:1)

我正在外壳脚本中使用Tradier's API进行此操作,然后使用jq获取特定日期的状态。

date="your date"
month=$(date -d $date +%-m)
year=$(date -d $date +%Y)
calendar=$(curl -H "Authorization: Bearer "$tradierApi"" -H "Accept: application/json" "https://production-api.tradier.com/v1/markets/calendar?month="$month"&year="$year)
marketStatus=$(echo $calendar | ./jq-linux64 '.calendar.days.day[] | select(.date == "'$date'") | .status')

答案 1 :(得分:0)

在出现更优雅,更可靠的东西之前,我可能会使用

curl -s "https://www.isthemarketopen.com/" |grep -c "** Stock market is closed"

在今天的情况下(耶稣受难日)返回1,并且我可以直接在条件代码中使用它,但必须维护并定期检查URL的基础HTML源可能如何更改。

答案 2 :(得分:0)

我发现Google Calendar个美国市场假期,并在接下来的几年中进行了合理的更新。

我讨厌添加一个单独的答案,这比以前脆弱的URL页面文本搜索器要好得多(顺便说一句,两周后仍然返回“ **股票市场已关闭,耶稣受难日4 / 19/19”,而不仅仅是在某处设置“今天市场开放”。

首先输入代码:(带嵌入式Bash的Ruby)

$marketCal = %x'curl -s "https://www.googleapis.com/calendar/v3/calendars/2jpqg4chp4djba5ea99b22b838@group.calendar.google.com/events?key=[YOUR GOOGLE API KEY]&maxResults=1&timeMin=#{today=`date +%Y-%m-%d`.chomp}T00%3A00%3A01%2B00%3A00&timeMax=#{today}T23%3A59%3A59%2B00%3A00&"'

$isMarketOpenToday = $marketCal !~ /"status":/  # => true  when there exists event "id":, etc.

由于存在资源限制,您需要在以下位置创建自己的免费API密钥 https://console.developers.google.com/apis/credentials

如果今天没有市场假期,则全局变量 $ isMarketOpenToday 产生 true ,否则产生 false 。请注意,它不考虑星期几,因此在周末它可能仍然正确。因此,如果需要,只需进行另一个简单的测试即可。例如。 [[ $(date +%u) < 6 ]] && echo "Weekday, yay!"

编程标准可以改善很多;这样做的目的仅仅是用最少的代码行(从脚本外部的CLI)轻松地测试API来进行测试,无论多么讨厌。

答案 3 :(得分:0)

MSN报价中包含一个属性,用于指示股票上市市场是开放的还是封闭的:

https://www.msn.com/en-us/money/stockdetails/nas-aapl/fi-a1mou2?symbol=AAPL&form=PRMFPS

这是一个获取状态信息的python脚本...如果您担心他们更改其CSS,我想正则表达式可能更可靠,等等。

从bs4导入BeautifulSoup

导入请求

session = requests.session()

response = session.get('https://www.msn.com/en-us/money/stockdetails/nas-aapl/fi-a1mou2?symbol=AAPL&form=PRMFPS')

如果response.status_code == 200:

page = response.text

soup = BeautifulSoup(page, "lxml")

market = soup.find('span', attrs={'class': 'market-status-text'}).text

if market == 'US Markets Closed':

    # do stuff

    print('closed')

else:

    print('open')

    # do different stuff

答案 4 :(得分:0)

PowerShell:

function isMarketOpen(){
    $url = "https://query2.finance.yahoo.com/v7/finance/quote?symbols=MSFT"
    try{
        $response = Invoke-RestMethod $url
        #return $response.quoteResponse.result[0]
        if($response.quoteResponse.result[0].marketState -eq 'CLOSED'){
            return $false
        }else{
            return $true
        }
    }catch{
        $_.exception | Write-Warning
        return $null
    }
}

isMarketOpen