0

私はPythonのルールを使用して取引時間を計算しています。何日も簡単です。このサイトで見つけたわずかに変更された例を使用しています。

def get_rset(start_date):    
    # Create a rule to recur every weekday starting today
    r = rrule.rrule(rrule.DAILY,
                    byweekday=[rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR],
                    dtstart=start_date)
    # Create a rruleset
    rs = rrule.rruleset()
    # Attach our rrule to it
    rs.rrule(r)
    # Add holidays as exclusion days
    for exdate in holidays:
        rs.exdate(exdate)
    return rs

問題は、これは株式にはうまく機能しますが、外国為替の日付を別の方法で計算する必要があることです。時間単位で作業したり、祝日を追加したりする必要があります。

UTCでは、市場は日曜日の午後10時から次の金曜日の午後10時まで開いていると思います。

これをルールにするために、日曜日と金曜日には特別な時間が必要で、残りの平日はすべての時間と見なされるように、6つの異なる日が必要になりました。日ごとと時間ごとにrruleを混ぜる必要があると確信していますが、これを行う良い例はありません。

どんな助けでも大歓迎です!

4

1 に答える 1

1

私は、Google、コード、およびクラスのドキュメントをしばらく使った後、より簡単な方法を見つけました。わずかな(しかし適切な)チートを使用します。以下のソリューション例をご覧ください。

from dateutil import rrule
from datetime import  timedelta , datetime
holidays = [] # This is just a list of dates to exclude

def datetime_in_x_trading_hours(start_dt,future_hours):
    # First we add two hours. This is because its simpler to view the timeset
    # as 24hrs MON - FRI. (This also helps align the dates for the holidays)
    print start_dt
    start_dt += timedelta(hours=2)
    rs = get_fx_rset(start_dt)
    # Now using the set get the desired time and put the the missing hours
    future_time = rs[future_hours]
    future_time -= timedelta(hours=2)
    return future_time

def get_fx_rset(start_date_time):

    # Create a rule to recur every weekday starting today
    r = rrule.rrule(rrule.HOURLY,
                    byweekday=[rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR],
                    byhour=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],
                    byminute=[0],
                    bysecond=[0],
                    dtstart=start_date_time)

    # Create a rruleset
    rs = rrule.rruleset()
    # Attach our rrule to it
    rs.rrule(r)
    # Add holidays as exclusion days
    for exdate in holidays:
        rs.exdate(exdate)

    return rs

today = datetime.now() - timedelta(days=2)
print datetime_in_x_trading_hours(today, 7)
于 2013-03-18T12:11:00.450 に答える