diff --git a/__pycache__/multi_timeframe.cpython-312.pyc b/__pycache__/multi_timeframe.cpython-312.pyc index ecc9704..bc1a9c4 100644 Binary files a/__pycache__/multi_timeframe.cpython-312.pyc and b/__pycache__/multi_timeframe.cpython-312.pyc differ diff --git a/data/multi_tf_cache.json b/data/multi_tf_cache.json index ed518e5..2a55fca 100644 --- a/data/multi_tf_cache.json +++ b/data/multi_tf_cache.json @@ -55030,5 +55030,1262 @@ } ], "updated_at": 1782100900.6796172 + }, + "sh000001": { + "daily": [ + { + "date": "2025-12-18", + "open": 3857.26, + "close": 3876.37, + "high": 3888.29, + "low": 3856.42, + "volume": 461172625.0 + }, + { + "date": "2025-12-19", + "open": 3878.23, + "close": 3890.45, + "high": 3902.67, + "low": 3871.78, + "volume": 513511893.0 + }, + { + "date": "2025-12-22", + "open": 3900.54, + "close": 3917.36, + "high": 3920.01, + "low": 3900.52, + "volume": 522938992.0 + }, + { + "date": "2025-12-23", + "open": 3919.11, + "close": 3919.98, + "high": 3937.13, + "low": 3910.74, + "volume": 521156952.0 + }, + { + "date": "2025-12-24", + "open": 3920.35, + "close": 3940.95, + "high": 3947.04, + "low": 3912.31, + "volume": 474896447.0 + }, + { + "date": "2025-12-25", + "open": 3937.72, + "close": 3959.62, + "high": 3964.07, + "low": 3936.08, + "volume": 469313093.0 + }, + { + "date": "2025-12-26", + "open": 3957.83, + "close": 3963.68, + "high": 3977.71, + "low": 3945.52, + "volume": 555489592.0 + }, + { + "date": "2025-12-29", + "open": 3964.65, + "close": 3965.28, + "high": 3983.98, + "low": 3956.95, + "volume": 563687197.0 + }, + { + "date": "2025-12-30", + "open": 3947.87, + "close": 3965.12, + "high": 3979.99, + "low": 3947.42, + "volume": 525932588.0 + }, + { + "date": "2025-12-31", + "open": 3968.73, + "close": 3968.84, + "high": 3977.54, + "low": 3955.49, + "volume": 490751490.0 + }, + { + "date": "2026-01-05", + "open": 3986.97, + "close": 4023.42, + "high": 4025.26, + "low": 3983.58, + "volume": 596950455.0 + }, + { + "date": "2026-01-06", + "open": 4026.02, + "close": 4083.67, + "high": 4083.67, + "low": 4025.09, + "volume": 702472270.0 + }, + { + "date": "2026-01-07", + "open": 4083.84, + "close": 4085.77, + "high": 4098.78, + "low": 4069.44, + "volume": 683384352.0 + }, + { + "date": "2026-01-08", + "open": 4077.72, + "close": 4082.98, + "high": 4093.87, + "low": 4067.12, + "volume": 666131337.0 + }, + { + "date": "2026-01-09", + "open": 4086.76, + "close": 4120.43, + "high": 4121.72, + "low": 4083.62, + "volume": 729837985.0 + }, + { + "date": "2026-01-12", + "open": 4134.89, + "close": 4165.29, + "high": 4168.36, + "low": 4119.88, + "volume": 839456089.0 + }, + { + "date": "2026-01-13", + "open": 4169.7, + "close": 4138.76, + "high": 4179.7, + "low": 4126.23, + "volume": 868382717.0 + }, + { + "date": "2026-01-14", + "open": 4138.65, + "close": 4126.09, + "high": 4190.87, + "low": 4103.62, + "volume": 952551289.0 + }, + { + "date": "2026-01-15", + "open": 4106.22, + "close": 4112.6, + "high": 4133.07, + "low": 4096.85, + "volume": 680250791.0 + }, + { + "date": "2026-01-16", + "open": 4127.06, + "close": 4101.91, + "high": 4140.23, + "low": 4091.81, + "volume": 763588465.0 + }, + { + "date": "2026-01-19", + "open": 4090.72, + "close": 4114.0, + "high": 4126.52, + "low": 4090.06, + "volume": 688905870.0 + }, + { + "date": "2026-01-20", + "open": 4116.37, + "close": 4113.65, + "high": 4128.93, + "low": 4080.29, + "volume": 734362496.0 + }, + { + "date": "2026-01-21", + "open": 4103.53, + "close": 4116.94, + "high": 4135.96, + "low": 4103.53, + "volume": 666989507.0 + }, + { + "date": "2026-01-22", + "open": 4126.07, + "close": 4122.58, + "high": 4140.84, + "low": 4109.92, + "volume": 709695409.0 + }, + { + "date": "2026-01-23", + "open": 4130.11, + "close": 4136.16, + "high": 4143.75, + "low": 4120.2, + "volume": 782115454.0 + }, + { + "date": "2026-01-26", + "open": 4144.78, + "close": 4132.61, + "high": 4160.99, + "low": 4124.7, + "volume": 887439731.0 + }, + { + "date": "2026-01-27", + "open": 4125.22, + "close": 4139.9, + "high": 4158.8, + "low": 4101.83, + "volume": 754990869.0 + }, + { + "date": "2026-01-28", + "open": 4150.22, + "close": 4151.24, + "high": 4170.15, + "low": 4138.02, + "volume": 823026748.0 + }, + { + "date": "2026-01-29", + "open": 4155.92, + "close": 4157.98, + "high": 4170.21, + "low": 4138.3, + "volume": 905908371.0 + }, + { + "date": "2026-01-30", + "open": 4131.99, + "close": 4117.95, + "high": 4152.85, + "low": 4064.78, + "volume": 804342746.0 + }, + { + "date": "2026-02-02", + "open": 4079.71, + "close": 4015.75, + "high": 4103.41, + "low": 4013.66, + "volume": 732953698.0 + }, + { + "date": "2026-02-03", + "open": 4043.91, + "close": 4067.74, + "high": 4069.42, + "low": 4002.78, + "volume": 637684249.0 + }, + { + "date": "2026-02-04", + "open": 4064.68, + "close": 4102.2, + "high": 4104.62, + "low": 4062.68, + "volume": 674254244.0 + }, + { + "date": "2026-02-05", + "open": 4075.03, + "close": 4075.92, + "high": 4088.9, + "low": 4048.94, + "volume": 596722236.0 + }, + { + "date": "2026-02-06", + "open": 4040.3, + "close": 4065.58, + "high": 4095.03, + "low": 4029.97, + "volume": 556709801.0 + }, + { + "date": "2026-02-09", + "open": 4103.54, + "close": 4123.09, + "high": 4123.16, + "low": 4093.06, + "volume": 572632582.0 + }, + { + "date": "2026-02-10", + "open": 4127.77, + "close": 4128.37, + "high": 4134.34, + "low": 4117.56, + "volume": 524620969.0 + }, + { + "date": "2026-02-11", + "open": 4124.43, + "close": 4131.98, + "high": 4142.56, + "low": 4122.43, + "volume": 500685278.0 + }, + { + "date": "2026-02-12", + "open": 4136.99, + "close": 4134.02, + "high": 4140.59, + "low": 4124.13, + "volume": 529370116.0 + }, + { + "date": "2026-02-13", + "open": 4115.92, + "close": 4082.07, + "high": 4123.84, + "low": 4079.77, + "volume": 500799472.0 + }, + { + "date": "2026-02-24", + "open": 4129.13, + "close": 4117.41, + "high": 4131.55, + "low": 4105.94, + "volume": 566322249.0 + }, + { + "date": "2026-02-25", + "open": 4123.78, + "close": 4147.23, + "high": 4167.84, + "low": 4122.7, + "volume": 724787214.0 + }, + { + "date": "2026-02-26", + "open": 4151.07, + "close": 4146.63, + "high": 4152.19, + "low": 4127.15, + "volume": 651702826.0 + }, + { + "date": "2026-02-27", + "open": 4128.9, + "close": 4162.88, + "high": 4166.23, + "low": 4128.36, + "volume": 682047646.0 + }, + { + "date": "2026-03-02", + "open": 4151.8, + "close": 4182.59, + "high": 4188.77, + "low": 4131.37, + "volume": 861579218.0 + }, + { + "date": "2026-03-03", + "open": 4189.41, + "close": 4122.68, + "high": 4197.23, + "low": 4116.01, + "volume": 921139170.0 + }, + { + "date": "2026-03-04", + "open": 4087.63, + "close": 4082.47, + "high": 4106.04, + "low": 4055.41, + "volume": 765169531.0 + }, + { + "date": "2026-03-05", + "open": 4109.78, + "close": 4108.57, + "high": 4125.62, + "low": 4090.62, + "volume": 689746535.0 + }, + { + "date": "2026-03-06", + "open": 4085.9, + "close": 4124.19, + "high": 4129.46, + "low": 4085.9, + "volume": 646765760.0 + }, + { + "date": "2026-03-09", + "open": 4098.7, + "close": 4096.6, + "high": 4106.53, + "low": 4052.55, + "volume": 797803556.0 + }, + { + "date": "2026-03-10", + "open": 4098.59, + "close": 4123.14, + "high": 4123.96, + "low": 4098.59, + "volume": 674922194.0 + }, + { + "date": "2026-03-11", + "open": 4123.67, + "close": 4133.43, + "high": 4135.84, + "low": 4112.8, + "volume": 707727169.0 + }, + { + "date": "2026-03-12", + "open": 4133.2, + "close": 4129.1, + "high": 4141.65, + "low": 4103.16, + "volume": 786151182.0 + }, + { + "date": "2026-03-13", + "open": 4117.57, + "close": 4095.45, + "high": 4134.08, + "low": 4086.85, + "volume": 792054764.0 + }, + { + "date": "2026-03-16", + "open": 4092.25, + "close": 4084.79, + "high": 4096.13, + "low": 4048.09, + "volume": 732227098.0 + }, + { + "date": "2026-03-17", + "open": 4086.3, + "close": 4049.91, + "high": 4108.4, + "low": 4049.58, + "volume": 678771224.0 + }, + { + "date": "2026-03-18", + "open": 4053.31, + "close": 4062.98, + "high": 4065.37, + "low": 4023.03, + "volume": 623873102.0 + }, + { + "date": "2026-03-19", + "open": 4028.54, + "close": 4006.55, + "high": 4042.02, + "low": 3994.17, + "volume": 667255422.0 + }, + { + "date": "2026-03-20", + "open": 4004.57, + "close": 3957.05, + "high": 4022.7, + "low": 3955.71, + "volume": 666798387.0 + }, + { + "date": "2026-03-23", + "open": 3904.95, + "close": 3813.28, + "high": 3906.62, + "low": 3794.68, + "volume": 804738850.0 + }, + { + "date": "2026-03-24", + "open": 3849.63, + "close": 3881.28, + "high": 3881.42, + "low": 3807.99, + "volume": 680622039.0 + }, + { + "date": "2026-03-25", + "open": 3892.27, + "close": 3931.84, + "high": 3933.06, + "low": 3891.82, + "volume": 688343626.0 + }, + { + "date": "2026-03-26", + "open": 3924.96, + "close": 3889.08, + "high": 3937.1, + "low": 3880.57, + "volume": 615973981.0 + }, + { + "date": "2026-03-27", + "open": 3852.09, + "close": 3913.72, + "high": 3924.11, + "low": 3852.09, + "volume": 561342963.0 + }, + { + "date": "2026-03-30", + "open": 3884.28, + "close": 3923.29, + "high": 3924.29, + "low": 3872.78, + "volume": 595589479.0 + }, + { + "date": "2026-03-31", + "open": 3924.07, + "close": 3891.86, + "high": 3948.81, + "low": 3891.86, + "volume": 606704983.0 + }, + { + "date": "2026-04-01", + "open": 3939.57, + "close": 3948.55, + "high": 3955.94, + "low": 3929.92, + "volume": 564611598.0 + }, + { + "date": "2026-04-02", + "open": 3940.8, + "close": 3919.29, + "high": 3952.58, + "low": 3900.12, + "volume": 544212835.0 + }, + { + "date": "2026-04-03", + "open": 3927.59, + "close": 3880.1, + "high": 3929.53, + "low": 3871.3, + "volume": 492699082.0 + }, + { + "date": "2026-04-07", + "open": 3884.15, + "close": 3890.16, + "high": 3902.61, + "low": 3875.68, + "volume": 473615076.0 + }, + { + "date": "2026-04-08", + "open": 3930.25, + "close": 3995.0, + "high": 3995.0, + "low": 3926.25, + "volume": 644135352.0 + }, + { + "date": "2026-04-09", + "open": 3967.63, + "close": 3966.17, + "high": 3979.13, + "low": 3955.25, + "volume": 541569801.0 + }, + { + "date": "2026-04-10", + "open": 3985.46, + "close": 3986.22, + "high": 4011.02, + "low": 3979.81, + "volume": 546415541.0 + }, + { + "date": "2026-04-13", + "open": 3971.2, + "close": 3988.56, + "high": 3991.26, + "low": 3966.2, + "volume": 545781768.0 + }, + { + "date": "2026-04-14", + "open": 4006.73, + "close": 4026.63, + "high": 4026.63, + "low": 3992.41, + "volume": 570259003.0 + }, + { + "date": "2026-04-15", + "open": 4039.47, + "close": 4027.21, + "high": 4050.62, + "low": 4020.9, + "volume": 569458589.0 + }, + { + "date": "2026-04-16", + "open": 4030.14, + "close": 4055.55, + "high": 4057.83, + "low": 4028.91, + "volume": 545876967.0 + }, + { + "date": "2026-04-17", + "open": 4043.38, + "close": 4051.43, + "high": 4058.6, + "low": 4038.43, + "volume": 548791406.0 + }, + { + "date": "2026-04-20", + "open": 4053.37, + "close": 4082.13, + "high": 4083.19, + "low": 4051.69, + "volume": 589841379.0 + }, + { + "date": "2026-04-21", + "open": 4075.85, + "close": 4085.08, + "high": 4086.64, + "low": 4062.13, + "volume": 576689450.0 + }, + { + "date": "2026-04-22", + "open": 4074.81, + "close": 4106.26, + "high": 4106.84, + "low": 4074.68, + "volume": 582466346.0 + }, + { + "date": "2026-04-23", + "open": 4110.79, + "close": 4093.25, + "high": 4114.84, + "low": 4070.46, + "volume": 671166092.0 + }, + { + "date": "2026-04-24", + "open": 4081.03, + "close": 4079.9, + "high": 4092.61, + "low": 4061.15, + "volume": 605031798.0 + }, + { + "date": "2026-04-27", + "open": 4074.81, + "close": 4086.34, + "high": 4092.83, + "low": 4071.08, + "volume": 589950867.0 + }, + { + "date": "2026-04-28", + "open": 4076.14, + "close": 4078.64, + "high": 4090.2, + "low": 4062.87, + "volume": 600507498.0 + }, + { + "date": "2026-04-29", + "open": 4061.82, + "close": 4107.51, + "high": 4112.15, + "low": 4061.82, + "volume": 614221451.0 + }, + { + "date": "2026-04-30", + "open": 4107.3, + "close": 4112.16, + "high": 4118.76, + "low": 4100.97, + "volume": 656912728.0 + }, + { + "date": "2026-05-06", + "open": 4135.45, + "close": 4160.17, + "high": 4166.15, + "low": 4129.91, + "volume": 701177480.0 + }, + { + "date": "2026-05-07", + "open": 4168.45, + "close": 4180.09, + "high": 4180.21, + "low": 4163.14, + "volume": 685574249.0 + }, + { + "date": "2026-05-08", + "open": 4163.85, + "close": 4179.95, + "high": 4183.06, + "low": 4154.25, + "volume": 697019094.0 + }, + { + "date": "2026-05-11", + "open": 4201.35, + "close": 4225.02, + "high": 4229.58, + "low": 4186.08, + "volume": 762736287.0 + }, + { + "date": "2026-05-12", + "open": 4229.28, + "close": 4214.49, + "high": 4230.18, + "low": 4199.34, + "volume": 718984002.0 + }, + { + "date": "2026-05-13", + "open": 4192.31, + "close": 4242.57, + "high": 4245.07, + "low": 4192.31, + "volume": 705018739.0 + }, + { + "date": "2026-05-14", + "open": 4256.16, + "close": 4177.92, + "high": 4258.86, + "low": 4177.92, + "volume": 764235004.0 + }, + { + "date": "2026-05-15", + "open": 4174.18, + "close": 4135.39, + "high": 4191.81, + "low": 4114.09, + "volume": 733162357.0 + }, + { + "date": "2026-05-18", + "open": 4120.14, + "close": 4131.53, + "high": 4145.66, + "low": 4108.6, + "volume": 627233137.0 + }, + { + "date": "2026-05-19", + "open": 4122.96, + "close": 4169.54, + "high": 4170.29, + "low": 4107.99, + "volume": 617611067.0 + }, + { + "date": "2026-05-20", + "open": 4152.7, + "close": 4162.18, + "high": 4169.85, + "low": 4139.97, + "volume": 624152035.0 + }, + { + "date": "2026-05-21", + "open": 4174.38, + "close": 4077.28, + "high": 4199.53, + "low": 4074.22, + "volume": 727218701.0 + }, + { + "date": "2026-05-22", + "open": 4096.17, + "close": 4112.9, + "high": 4120.09, + "low": 4067.75, + "volume": 589459644.0 + }, + { + "date": "2026-05-25", + "open": 4126.34, + "close": 4152.57, + "high": 4153.88, + "low": 4119.8, + "volume": 615930861.0 + }, + { + "date": "2026-05-26", + "open": 4137.32, + "close": 4145.37, + "high": 4150.29, + "low": 4104.46, + "volume": 654777756.0 + }, + { + "date": "2026-05-27", + "open": 4138.81, + "close": 4093.73, + "high": 4153.56, + "low": 4077.62, + "volume": 660467399.0 + }, + { + "date": "2026-05-28", + "open": 4080.3, + "close": 4098.64, + "high": 4110.78, + "low": 4055.83, + "volume": 621179950.0 + }, + { + "date": "2026-05-29", + "open": 4110.52, + "close": 4068.57, + "high": 4112.96, + "low": 4055.89, + "volume": 731597710.0 + }, + { + "date": "2026-06-01", + "open": 4067.16, + "close": 4057.74, + "high": 4093.04, + "low": 4045.69, + "volume": 676025806.0 + }, + { + "date": "2026-06-02", + "open": 4061.46, + "close": 4075.1, + "high": 4089.57, + "low": 4032.58, + "volume": 642244656.0 + }, + { + "date": "2026-06-03", + "open": 4068.34, + "close": 4083.97, + "high": 4107.05, + "low": 4059.91, + "volume": 668452583.0 + }, + { + "date": "2026-06-04", + "open": 4053.67, + "close": 4057.78, + "high": 4080.72, + "low": 4043.43, + "volume": 621194774.0 + }, + { + "date": "2026-06-05", + "open": 4044.83, + "close": 4027.74, + "high": 4078.93, + "low": 4015.06, + "volume": 662918577.0 + }, + { + "date": "2026-06-08", + "open": 3938.71, + "close": 3959.34, + "high": 4007.49, + "low": 3927.85, + "volume": 659293555.0 + }, + { + "date": "2026-06-09", + "open": 3977.54, + "close": 4010.03, + "high": 4010.87, + "low": 3955.91, + "volume": 576570090.0 + }, + { + "date": "2026-06-10", + "open": 3985.12, + "close": 3993.23, + "high": 4006.31, + "low": 3963.44, + "volume": 598694739.0 + }, + { + "date": "2026-06-11", + "open": 3979.71, + "close": 3987.01, + "high": 3997.48, + "low": 3958.44, + "volume": 568545244.0 + }, + { + "date": "2026-06-12", + "open": 4017.86, + "close": 4031.51, + "high": 4060.27, + "low": 4008.18, + "volume": 743131092.0 + }, + { + "date": "2026-06-15", + "open": 4053.58, + "close": 4096.47, + "high": 4097.17, + "low": 4051.07, + "volume": 678907811.0 + }, + { + "date": "2026-06-16", + "open": 4094.21, + "close": 4091.89, + "high": 4103.93, + "low": 4077.87, + "volume": 615668296.0 + }, + { + "date": "2026-06-17", + "open": 4074.29, + "close": 4108.08, + "high": 4109.96, + "low": 4073.73, + "volume": 608077413.0 + }, + { + "date": "2026-06-18", + "open": 4094.23, + "close": 4090.48, + "high": 4117.45, + "low": 4080.29, + "volume": 658116068.0 + }, + { + "date": "2026-06-22", + "open": 4093.95, + "close": 4163.1, + "high": 4164.42, + "low": 4070.17, + "volume": 743699355.0 + } + ], + "weekly": [ + { + "date": "2026-01-09", + "open": 3986.97, + "close": 4120.43, + "high": 4121.72, + "low": 3983.58, + "volume": 3378776399.0 + }, + { + "date": "2026-01-16", + "open": 4134.89, + "close": 4101.91, + "high": 4190.87, + "low": 4091.81, + "volume": 4104229351.0 + }, + { + "date": "2026-01-23", + "open": 4090.72, + "close": 4136.16, + "high": 4143.75, + "low": 4080.29, + "volume": 3582068736.0 + }, + { + "date": "2026-01-30", + "open": 4144.78, + "close": 4117.95, + "high": 4170.21, + "low": 4064.78, + "volume": 4175708465.0 + }, + { + "date": "2026-02-06", + "open": 4079.71, + "close": 4065.58, + "high": 4104.62, + "low": 4002.78, + "volume": 3198324228.0 + }, + { + "date": "2026-02-13", + "open": 4103.54, + "close": 4082.07, + "high": 4142.56, + "low": 4079.77, + "volume": 2628108417.0 + }, + { + "date": "2026-02-27", + "open": 4129.13, + "close": 4162.88, + "high": 4167.84, + "low": 4105.94, + "volume": 2624859935.0 + }, + { + "date": "2026-03-06", + "open": 4151.8, + "close": 4124.19, + "high": 4197.23, + "low": 4055.41, + "volume": 3884400214.0 + }, + { + "date": "2026-03-13", + "open": 4098.7, + "close": 4095.45, + "high": 4141.65, + "low": 4052.55, + "volume": 3758658865.0 + }, + { + "date": "2026-03-20", + "open": 4092.25, + "close": 3957.05, + "high": 4108.4, + "low": 3955.71, + "volume": 3368925233.0 + }, + { + "date": "2026-03-27", + "open": 3904.95, + "close": 3913.72, + "high": 3937.1, + "low": 3794.68, + "volume": 3351021459.0 + }, + { + "date": "2026-04-03", + "open": 3884.28, + "close": 3880.1, + "high": 3955.94, + "low": 3871.3, + "volume": 2803817977.0 + }, + { + "date": "2026-04-10", + "open": 3884.15, + "close": 3986.22, + "high": 4011.02, + "low": 3875.68, + "volume": 2205735770.0 + }, + { + "date": "2026-04-17", + "open": 3971.2, + "close": 4051.43, + "high": 4058.6, + "low": 3966.2, + "volume": 2780167733.0 + }, + { + "date": "2026-04-24", + "open": 4053.37, + "close": 4079.9, + "high": 4114.84, + "low": 4051.69, + "volume": 3025195065.0 + }, + { + "date": "2026-04-30", + "open": 4074.81, + "close": 4112.16, + "high": 4118.76, + "low": 4061.82, + "volume": 2461592544.0 + }, + { + "date": "2026-05-08", + "open": 4135.45, + "close": 4179.95, + "high": 4183.06, + "low": 4129.91, + "volume": 2083770823.0 + }, + { + "date": "2026-05-15", + "open": 4201.35, + "close": 4135.39, + "high": 4258.86, + "low": 4114.09, + "volume": 3684136389.0 + }, + { + "date": "2026-05-22", + "open": 4120.14, + "close": 4112.9, + "high": 4199.53, + "low": 4067.75, + "volume": 3185674584.0 + }, + { + "date": "2026-05-29", + "open": 4126.34, + "close": 4068.57, + "high": 4153.88, + "low": 4055.83, + "volume": 3283953676.0 + }, + { + "date": "2026-06-05", + "open": 4067.16, + "close": 4027.74, + "high": 4107.05, + "low": 4015.06, + "volume": 3270836396.0 + }, + { + "date": "2026-06-12", + "open": 3938.71, + "close": 4031.51, + "high": 4060.27, + "low": 3927.85, + "volume": 3146234720.0 + }, + { + "date": "2026-06-18", + "open": 4053.58, + "close": 4090.48, + "high": 4117.45, + "low": 4051.07, + "volume": 2560769588.0 + }, + { + "date": "2026-06-22", + "open": 4093.95, + "close": 4163.1, + "high": 4164.42, + "low": 4070.17, + "volume": 743699355.0 + } + ], + "monthly": [ + { + "date": "2025-07-31", + "open": 3445.85, + "close": 3573.21, + "high": 3636.17, + "low": 3441.04, + "volume": 13228820536.0 + }, + { + "date": "2025-08-29", + "open": 3568.26, + "close": 3857.93, + "high": 3888.6, + "low": 3547.16, + "volume": 13618337786.0 + }, + { + "date": "2025-09-30", + "open": 3869.75, + "close": 3882.78, + "high": 3899.96, + "low": 3732.84, + "volume": 14336649511.0 + }, + { + "date": "2025-10-31", + "open": 3898.31, + "close": 3954.79, + "high": 4025.7, + "low": 3800.11, + "volume": 10809317556.0 + }, + { + "date": "2025-11-28", + "open": 3954.08, + "close": 3888.6, + "high": 4034.08, + "low": 3816.58, + "volume": 11351739647.0 + }, + { + "date": "2025-12-31", + "open": 3894.21, + "close": 3968.84, + "high": 3983.98, + "low": 3815.84, + "volume": 11717572412.0 + }, + { + "date": "2026-01-30", + "open": 3986.97, + "close": 4117.95, + "high": 4190.87, + "low": 3983.58, + "volume": 15240782951.0 + }, + { + "date": "2026-02-27", + "open": 4079.71, + "close": 4162.88, + "high": 4167.84, + "low": 4002.78, + "volume": 8451292580.0 + }, + { + "date": "2026-03-31", + "open": 4151.8, + "close": 3891.86, + "high": 4197.23, + "low": 3794.68, + "volume": 15565300233.0 + }, + { + "date": "2026-04-30", + "open": 3939.57, + "close": 4112.16, + "high": 4118.76, + "low": 3871.3, + "volume": 12074214627.0 + }, + { + "date": "2026-05-29", + "open": 4135.45, + "close": 4068.57, + "high": 4258.86, + "low": 4055.83, + "volume": 12237535472.0 + }, + { + "date": "2026-06-22", + "open": 4067.16, + "close": 4163.1, + "high": 4164.42, + "low": 3927.85, + "volume": 9721540059.0 + } + ], + "updated_at": 1782143585.2968125 } } \ No newline at end of file diff --git a/multi_timeframe.py b/multi_timeframe.py index e4611fd..d619adb 100644 --- a/multi_timeframe.py +++ b/multi_timeframe.py @@ -57,6 +57,13 @@ def _write_klines_to_db(code: str, daily: list, weekly: list, monthly: list, fun def _market_prefix(code: str) -> str: """根据代码确定市场前缀""" raw = str(code).split("_")[0] + # 指数代码:sh/sz/hk开头 + if raw.startswith("sh"): + return "sh" + if raw.startswith("sz"): + return "sz" + if raw.startswith("hk"): + return "hk" if len(raw) == 5 and raw.isdigit(): return "hk" if raw.startswith("6") or raw.startswith("5"): @@ -138,8 +145,11 @@ def fetch_kline(code: str, period: str = "day", count: int = 120) -> list: return cached_klines market = _market_prefix(code) - url = KLINE_URL.format(market=market, code=code, - period=period, count=count) + is_index = any(code.startswith(p) for p in ["sh", "sz", "hk"]) + + # 指数代码已经自带前缀,API直接用code;普通股票需要加market前缀 + api_code = code if is_index else f"{market}{code}" + url = f"http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param={api_code},{period},,,{count},qfq" try: req = urllib.request.Request(url, headers=_user_agent()) @@ -155,7 +165,10 @@ def fetch_kline(code: str, period: str = "day", count: int = 120) -> list: if not isinstance(api_data, dict): return {"error": f"data field is {type(api_data).__name__}", "raw": str(api_data)[:200]} - stock_key = f"{market}{code}" + # 指数代码已经自带前缀(sh000001/sz399001),直接用 + # 普通股票代码需要加market前缀(sh600036/sz300750) + is_index = any(code.startswith(p) for p in ["sh", "sz", "hk"]) + stock_key = code if is_index else f"{market}{code}" stock_data = api_data.get(stock_key, {}) # 腾讯API的K线字段名: qfqday, qfqweek, qfqmonth