|
6 | 6 | tqsdk.tafunc 模块包含了一批用于技术指标计算的函数
|
7 | 7 | """
|
8 | 8 |
|
| 9 | +import datetime |
9 | 10 | import pandas as pd
|
10 | 11 | import numpy as np
|
11 | 12 |
|
@@ -624,3 +625,149 @@ def mad(x):
|
624 | 625 |
|
625 | 626 | avedev_data = series.rolling(window=n).apply(mad, raw=True)
|
626 | 627 | return avedev_data
|
| 628 | + |
| 629 | + |
| 630 | +def _to_ns_timestamp(input_time): |
| 631 | + """ |
| 632 | + 辅助函数: 将传入的时间转换为int类型的纳秒级时间戳 |
| 633 | +
|
| 634 | + Args: |
| 635 | + input_time (str/ int/ float/ datetime.datetime): 需要转换的时间: |
| 636 | + * str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000) |
| 637 | +
|
| 638 | + * int: int 类型纳秒级或秒级时间戳 |
| 639 | +
|
| 640 | + * float: float 类型纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18) |
| 641 | +
|
| 642 | + * datetime.datetime: datetime 模块中 datetime 类型 |
| 643 | +
|
| 644 | + Returns: |
| 645 | + int : int 类型纳秒级时间戳 |
| 646 | + """ |
| 647 | + |
| 648 | + if type(input_time) in {int, float}: # 时间戳 |
| 649 | + if input_time > 2 ** 32: # 纳秒( 将 > 2*32数值归为纳秒级) |
| 650 | + return int(input_time) |
| 651 | + else: # 秒 |
| 652 | + return int(input_time * 1e9) |
| 653 | + |
| 654 | + elif isinstance(input_time, str): # str 类型时间 |
| 655 | + d = datetime.datetime.strptime(input_time, "%Y-%m-%d %H:%M:%S.%f") |
| 656 | + d = int(d.timestamp() * 1e9) |
| 657 | + return d |
| 658 | + elif isinstance(input_time, datetime.datetime): # datetime 类型时间 |
| 659 | + d = int(input_time.timestamp() * 1e9) |
| 660 | + return d |
| 661 | + else: |
| 662 | + raise TypeError("暂不支持此值的转换,返回原时间数据") |
| 663 | + |
| 664 | + |
| 665 | +def time_to_ns_timestamp(input_time): |
| 666 | + """ |
| 667 | + 将传入的时间转换为int类型的纳秒级时间戳 |
| 668 | +
|
| 669 | + Args: |
| 670 | + input_time (str/ int/float/ datetime.datetime): 需要转换的时间: |
| 671 | + * str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000) |
| 672 | +
|
| 673 | + * int: int 类型的纳秒级或秒级时间戳 |
| 674 | +
|
| 675 | + * float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18) |
| 676 | +
|
| 677 | + * datetime.datetime: datetime 模块中的 datetime 类型时间 |
| 678 | +
|
| 679 | + Returns: |
| 680 | + int : int 类型的纳秒级时间戳 |
| 681 | +
|
| 682 | + Example:: |
| 683 | +
|
| 684 | + print(time_to_ns_timestamp("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型转为纳秒时间戳 |
| 685 | + print(time_to_ns_timestamp(1571103122)) # 将秒级转为纳秒时间戳 |
| 686 | + print(time_to_ns_timestamp(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为纳秒时间戳 |
| 687 | + """ |
| 688 | + return _to_ns_timestamp(input_time) |
| 689 | + |
| 690 | + |
| 691 | +def time_to_s_timestamp(input_time): |
| 692 | + """ |
| 693 | + 将传入的时间转换为int类型的秒级时间戳 |
| 694 | +
|
| 695 | + Args: |
| 696 | + input_time (str/ int/float/ datetime.datetime): 需要转换的时间: |
| 697 | + * str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000) |
| 698 | +
|
| 699 | + * int: int 类型的纳秒级或秒级时间戳 |
| 700 | +
|
| 701 | + * float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18) |
| 702 | +
|
| 703 | + * datetime.datetime: datetime 模块中的 datetime 类型时间 |
| 704 | +
|
| 705 | + Returns: |
| 706 | + int : int类型的秒级时间戳 |
| 707 | +
|
| 708 | + Example:: |
| 709 | +
|
| 710 | + print(time_to_s_timestamp(1.57103449e+18)) # 将纳秒级时间戳转为秒级时间戳 |
| 711 | + print(time_to_s_timestamp("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型时间转为秒级时间戳 |
| 712 | + print(time_to_s_timestamp(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为秒时间戳 |
| 713 | + """ |
| 714 | + return int(_to_ns_timestamp(input_time) / 1e9) |
| 715 | + |
| 716 | + |
| 717 | +def time_to_str(input_time): |
| 718 | + """ |
| 719 | + 将传入的时间转换为 %Y-%m-%d %H:%M:%S.%f 格式的 str 类型 |
| 720 | +
|
| 721 | + Args: |
| 722 | + input_time (int/ float/ datetime.datetime): 需要转换的时间: |
| 723 | +
|
| 724 | + * int: int 类型的纳秒级或秒级时间戳 |
| 725 | +
|
| 726 | + * float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18) |
| 727 | +
|
| 728 | + * datetime.datetime: datetime 模块中的 datetime 类型时间 |
| 729 | +
|
| 730 | + Returns: |
| 731 | + str : %Y-%m-%d %H:%M:%S.%f 格式的 str 类型时间 |
| 732 | +
|
| 733 | + Example:: |
| 734 | +
|
| 735 | + print(time_to_str(1.57103449e+18)) # 将纳秒级时间戳转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间 |
| 736 | + print(time_to_str(1571103122)) # 将秒级时间戳转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间 |
| 737 | + print(time_to_str(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间 |
| 738 | + """ |
| 739 | + # 转为秒级时间戳 |
| 740 | + ts = _to_ns_timestamp(input_time) / 1e9 |
| 741 | + # 转为 %Y-%m-%d %H:%M:%S.%f 格式的 str 类型时间 |
| 742 | + dt = datetime.datetime.fromtimestamp(ts) |
| 743 | + dt = dt.strftime('%Y-%m-%d %H:%M:%S.%f') |
| 744 | + return dt |
| 745 | + |
| 746 | + |
| 747 | +def time_to_datetime(input_time): |
| 748 | + """ |
| 749 | + 将传入的时间转换为 datetime.datetime 类型 |
| 750 | +
|
| 751 | + Args: |
| 752 | + input_time (int/ float/ str): 需要转换的时间: |
| 753 | +
|
| 754 | + * int: int 类型的纳秒级或秒级时间戳 |
| 755 | +
|
| 756 | + * float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18) |
| 757 | +
|
| 758 | + * str: str 类型的时间,如Quote行情时间的 datetime 字段 (eg. 2019-10-14 14:26:01.000000) |
| 759 | +
|
| 760 | + Returns: |
| 761 | + datetime.datetime : datetime 模块中的 datetime 类型时间 |
| 762 | +
|
| 763 | + Example:: |
| 764 | +
|
| 765 | + print(time_to_datetime(1.57103449e+18)) # 将纳秒级时间戳转为datetime.datetime时间 |
| 766 | + print(time_to_datetime(1571103122)) # 将秒级时间戳转为datetime.datetime时间 |
| 767 | + print(time_to_datetime("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型时间转为datetime.datetime时间 |
| 768 | + """ |
| 769 | + # 转为秒级时间戳 |
| 770 | + ts = _to_ns_timestamp(input_time) / 1e9 |
| 771 | + # 转为datetime.datetime类型 |
| 772 | + dt = datetime.datetime.fromtimestamp(ts) |
| 773 | + return dt |
0 commit comments