【python量化交易】—— 双均线择时策略 - Qteasy自定义交易策略【附源码】

news2025/1/23 0:05:30

使用qteasy自定义并回测双均线交易策略

  • 使用qteasy自定义并回测一个双均线择时策略
    • 策略思想
    • 导入qteasy模块
    • 创建一个新的策略
    • 回测交易策略,查看结果

使用qteasy自定义并回测一个双均线择时策略

我们今天使用qteasy来回测一个双均线择时交易策略,qteasy是一个功能全面且易用的量化交易策略框架,Github地址在这里。使用它,能轻松地获取历史数据,创建交易策略并完成回测和优化,还能实盘运行。项目文档在这里。

为了继续本章的内容,您需要安装qteasy【教程1】,并下载历史数据到本地【教程2、),详情可以参考更多教程【教程3】。

建议您先按照前面教程的内容了解qteasy的使用方法,然后再参考这里的例子创建自己的交易策略。

策略思想

本策略根据交易目标的其日K线数据建立简单移动平均线的双均线交易模型,
交易策略如下:

策略包含两个参数:短周期天数S、长周期天数L
分别以两个不同的周期计算交易标的日K线收盘价的移动平均线,得到两根移动均线,以S为周期计算的均线为快均线,以L为周期计算的均线为慢均线,根据快慢均线的交叉情况产生交易信号:

  1. 当快均线由下向上穿越慢均线时全仓买入交易标的
  2. 当快均线由上向下穿越短均线时平仓

模拟回测交易:

  • 回测数据为:沪深300指数(000300.SH)
  • 回测周期为2011年1月1日到2020年12月31日
  • 生成交易结果图表

策略参数优化:

  • 同样使用HS300指数,在2011年至2020年共十年的历史区间上搜索最佳策略参数
  • 并在2020年至2022年的数据上进行验证
  • 输出30组最佳参数的测试结果

导入qteasy模块

import qteasy as qt

创建一个新的策略

使用qt.RuleIterator策略基类,可以创建规则迭代策略,
这种策略可以把相同的规则迭代应用到投资组合中的所有股票上,适合在一个投资组合
中的所有股票上应用同一种择时规则。

from qteasy import RuleIterator
# 创建双均线交易策略类
class Cross_SMA_PS(RuleIterator):
    """自定义双均线择时策略策略,产生的信号类型为交易信号
        这个均线择时策略有两个参数:
            - FMA 快均线周期
            - SMA 慢均线周期
        策略跟踪上述两个周期产生的简单移动平均线,当两根均线发生交叉时
        直接产生交易信号。
    """
    def __init__(self):
        """
        初始化交易策略的参数信息和基本信息
        """
        super().__init__(
            pars=(30, 60),  # 策略默认参数是快均线周期30, 慢均线周期60
            par_count=2,  # 策略只有长短周期两个参数
            par_types=['int', 'int'],  # 策略两个参数的数据类型均为整型变量
            par_range=[(10, 100), (10, 200)],  # 两个策略参数的取值范围
            name='CROSSLINE',  # 策略的名称
            description='快慢双均线择时策略',  # 策略的描述
            data_types='close',  # 策略基于收盘价计算均线,因此数据类型为'close'
            window_length=200,  # 历史数据窗口长度为200,每一次交易信号都是由它之前前200天的历史数据决定的
        )

    # 策略的具体实现代码写在策略的realize()函数中
    # 这个函数接受多个参数: h代表历史数据, r为参考数据, t为交易数据,pars代表策略参数
    # 请参阅doc_string或qteasy文档获取更多信息
    def realize(self, h, r=None, t=None, pars=None):
        """策略的具体实现代码:
         - f: fast, 短均线计算日期;
         - s: slow: 长均线计算日期;
        """
        from qteasy.tafuncs import sma
        # 获取传入的策略参数
        f, s= pars
        # 计算长短均线的当前值和昨天的值
        # 由于h是一个M行N列的ndarray,包含多种历史数据类型
        # 使用h[:, N]获取第N种数据类型的全部窗口历史数据
        # 由于策略的历史数据类型为‘close’(收盘价),
        # 因此h[:, 0]可以获取股票在窗口内的所有收盘价
        close = h[:, 0]
        # 使用qt.sma计算简单移动平均价
        s_ma = sma(close, s)
        f_ma = sma(close, f)
        
        # 为了考察两条均线的交叉, 计算两根均线昨日和今日的值,以便判断
        s_today, s_last = s_ma[-1], s_ma[-2]
        f_today, f_last = f_ma[-1], f_ma[-2]
        
        # 根据观望模式在不同的点位产生交易信号
        # 在PS信号类型下,1表示全仓买入,-1表示卖出全部持有股份
        # 关于不同模式下不同信号的含义和表示方式,请查阅
        # qteasy的文档。
        
        # 当快均线自下而上穿过上边界,发出全仓买入信号
        if (f_last < s_last) and (f_today > s_today):  
            return 1
        # 当快均线自上而下穿过上边界,发出全部卖出信号
        elif (f_last > s_last) and (f_today < s_today):  
            return -1
        else:  # 其余情况不产生任何信号
            return 0

回测交易策略,查看结果

使用历史数据回测交易策略,使用历史数据生成交易信号后进行模拟交易,记录并分析交易结果

# 定义好策略后,定一个交易员对象,引用刚刚创建的策略,根据策略的规则
# 设定交易员的信号模式为PS
# PS表示比例交易信号,此模式下信号在-1到1之间,1表示全仓买入,-1表示
# 全部卖出,0表示不操作。
op = qt.Operator([Cross_SMA_PS()], signal_type='PS')

# 设置op的策略参数
op.set_parameter(0, 
                 pars= (20, 60)  # 设置快慢均线周期分别为10天、166天
                )

# 设置基本回测参数,开始运行模拟交易回测
res = qt.run(op, 
             mode=1,  # 运行模式为回测模式
             asset_pool='000300.SH',  # 投资标的为000300.SH即沪深300指数
             invest_start='20110101',  # 回测开始日期
             visual=True  # 生成交易回测结果分析图
            )

交易结果如下;

     ====================================
     |                                  |
     |       BACK TESTING RESULT        |
     |                                  |
     ====================================

qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 36.2ms
time consumption for operation back looping:  718.5ms

investment starts on      2011-01-04 00:00:00
ends on                   2021-02-01 00:00:00
Total looped periods:     10.1 years.

-------------operation summary:------------

          Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH    24       25     49   52.8%      0.0%     47.2%   

Total operation fee:     ¥      861.65
total investment amount: ¥  100,000.00
final value:              ¥  117,205.20
Total return:                    17.21% 
Avg Yearly return:                1.59%
Skewness:                         -1.11
Kurtosis:                         13.19
Benchmark return:                69.85% 
Benchmark Yearly return:          5.39%

------strategy loop_results indicators------ 
alpha:                           -0.044
Beta:                             1.001
Sharp ratio:                     -0.029
Info ratio:                      -0.020
250 day volatility:               0.153
Max drawdown:                    47.88% 
    peak / valley:        2015-06-08 / 2017-06-16
    recovered on:         Not recovered!


===========END OF REPORT=============

从上面的交易结果可以看到,十年间买入25次卖出24次,持仓时间为52%,最终收益率只有17.2%。

下面是交易结果的可视化图表展示

在这里插入图片描述

交叉线交易策略的长短周期选择很重要,可以使用qteasy来搜索最优的策略参数:

# 策略参数的优化
# 
# 设置op的策略参数
op.set_parameter(0, 
                 opt_tag=1  # 将op中的策略设置为可优化,如果不这样设置,将无法优化策略参数
                )
res = qt.run(op, mode=2, 
             opti_start='20110101',  # 优化区间开始日期
             opti_end='20200101',  # 优化区间结束日期
             test_start='20200101',  # 独立测试开始日期
             test_end='20220101',  # 独立测试结束日期
             opti_sample_count=1000  # 一共进行1000次搜索
            )

策略优化可能会花很长时间,qt会显示一个进度条:

[########################################]1000/1000-100.0%  best performance: 226061.246
Optimization completed, total time consumption: 28"964
[########################################]30/30-100.0%  best performance: 226061.246

优化完成,显示最好的30组参数及其相关信息:

==================================== 
|                                  |
|       OPTIMIZATION RESULT        |
|                                  |
====================================

qteasy running mode: 2 - Strategy Parameter Optimization

investment starts on 2011-01-04 00:00:00
ends on 2021-12-31 00:00:00
Total looped periods: 11.0 years.
total investment amount: ¥   100,000.00
Reference index type is 000300.SH at IDX
Total Benchmark rtn: 54.89% 
Average Yearly Benchmark rtn rate: 4.06%
statistical analysis of optimal strategy messages indicators: 
total return:        98.11% ± 8.85%
annual return:       6.41% ± 0.42%
alpha:               -inf ± nan
Beta:                -inf ± nan
Sharp ratio:         -inf ± nan
Info ratio:          0.004 ± 0.002
250 day volatility:  0.150 ± 0.005
other messages indicators are listed in below table

   Strategy items Sell-outs Buy-ins ttl-fee      FV      ROI   Benchmark rtn  MDD 
0     (13, 153)      14.0     14.0    687.05 190,792.39  90.8%     54.9%     32.8%
1     (22, 173)       8.0      8.0    395.88 190,814.17  90.8%     54.9%     31.6%
2     (39, 153)       9.0      9.0    472.15 192,264.81  92.3%     54.9%     32.4%
3     (40, 161)      11.0     11.0    560.40 191,355.89  91.4%     54.9%     31.6%
4     (25, 117)      12.0     13.0    628.58 192,098.97  92.1%     54.9%     31.6%
5     (28, 177)       7.0      7.0    330.99 192,535.14  92.5%     54.9%     31.6%
6     (19, 183)       8.0      8.0    393.19 191,723.19  91.7%     54.9%     31.6%
7     (19, 185)       7.0      7.0    321.65 192,112.23  92.1%     54.9%     31.6%
8     (16, 165)       8.0      8.0    367.36 192,663.11  92.7%     54.9%     31.6%
9     (37, 170)       8.0      8.0    406.04 192,756.35  92.8%     54.9%     31.6%
10    (24, 167)       9.0      9.0    434.69 193,170.89  93.2%     54.9%     31.6%
11    (33, 173)       6.0      6.0    296.75 194,352.40  94.4%     54.9%     31.6%
12    (35, 172)       6.0      6.0    296.42 194,090.45  94.1%     54.9%     31.6%
13     (81, 82)      66.0     67.0  4,074.64 193,209.43  93.2%     54.9%     43.3%
14    (18, 192)       8.0      8.0    375.54 194,179.11  94.2%     54.9%     32.0%
15    (39, 149)       7.0      7.0    330.31 194,549.12  94.5%     54.9%     31.6%
16     (17, 21)      90.0     91.0  5,375.15 195,955.66  96.0%     54.9%     27.9%
17    (27, 168)       8.0      8.0    356.07 194,993.23  95.0%     54.9%     31.6%
18     (59, 70)      27.0     28.0  1,517.79 196,081.66  96.1%     54.9%     41.0%
19    (20, 181)       7.0      7.0    324.45 196,273.52  96.3%     54.9%     31.6%
20    (11, 175)       9.0      9.0    441.25 196,223.57  96.2%     54.9%     31.6%
21    (10, 178)      12.0     12.0    592.85 198,623.15  98.6%     54.9%     31.6%
22    (28, 104)      13.0     14.0    766.09 200,232.97 100.2%     54.9%     31.8%
23    (23, 170)       8.0      8.0    412.78 203,044.62 103.0%     54.9%     31.6%
24    (11, 160)      17.0     17.0    859.76 204,142.24 104.1%     54.9%     31.6%
25     (80, 85)      33.0     34.0  2,102.59 210,103.70 110.1%     54.9%     43.4%
26    (25, 166)       9.0      9.0    450.67 205,575.49 105.6%     54.9%     31.6%
27    (10, 162)      17.0     17.0  1,002.46 214,217.37 114.2%     54.9%     31.6%
28     (61, 66)      42.0     43.0  2,630.56 219,235.18 119.2%     54.9%     36.9%
29     (19, 24)      77.0     78.0  4,899.88 226,061.25 126.1%     54.9%     25.0%

===========END OF REPORT=============

这三十组参数会被用于独立测试,以检验它们是否过拟合:

[########################################]30/30-100.0%  best performance: 133297.532
==================================== 
|                                  |
|       OPTIMIZATION RESULT        |
|                                  |
====================================

qteasy running mode: 2 - Strategy Parameter Optimization

investment starts on 2020-01-02 00:00:00
ends on 2021-12-31 00:00:00
Total looped periods: 2.0 years.
total investment amount: ¥   100,000.00
Reference index type is 000300.SH at IDX
Total Benchmark rtn: 18.98% 
Average Yearly Benchmark rtn rate: 9.09%
statistical analysis of optimal strategy messages indicators: 
total return:        22.91% ± 9.01%
annual return:       10.80% ± 4.25%
alpha:               -0.015 ± 0.041
Beta:                1.000 ± 0.000
Sharp ratio:         0.857 ± 0.200
Info ratio:          0.022 ± 0.021
250 day volatility:  0.178 ± 0.007
other messages indicators are listed in below table

   Strategy items Sell-outs Buy-ins ttl-fee     FV      ROI  Benchmark rtn  MDD 
0     (13, 153)       4.0      4.0   182.60 124,409.92 24.4%     19.0%     15.9%
1     (40, 161)       3.0      3.0   138.74 118,359.00 18.4%     19.0%     17.0%
2     (22, 173)       2.0      2.0    93.49 126,071.63 26.1%     19.0%     15.2%
3     (19, 183)       2.0      2.0    93.90 129,292.01 29.3%     19.0%     15.2%
4     (25, 117)       1.0      2.0    81.75 129,142.22 29.1%     19.0%     15.2%
5     (39, 153)       3.0      3.0   143.88 128,106.78 28.1%     19.0%     15.2%
6     (19, 185)       1.0      1.0    42.70 126,797.97 26.8%     19.0%     15.2%
7     (28, 177)       1.0      1.0    42.66 126,448.59 26.4%     19.0%     15.2%
8     (16, 165)       1.0      1.0    42.64 126,241.62 26.2%     19.0%     15.2%
9      (81, 82)      16.0     17.0   621.41  91,210.11 -8.8%     19.0%     20.3%
10    (37, 170)       2.0      2.0    93.28 126,103.26 26.1%     19.0%     15.2%
11    (24, 167)       2.0      2.0    92.94 123,720.72 23.7%     19.0%     15.2%
12    (35, 172)       1.0      1.0    42.86 128,377.96 28.4%     19.0%     15.2%
13    (18, 192)       2.0      2.0    84.91 133,297.53 33.3%     19.0%     15.2%
14    (33, 173)       1.0      1.0    42.97 129,519.55 29.5%     19.0%     15.2%
15    (39, 149)       1.0      1.0    42.53 125,231.92 25.2%     19.0%     15.2%
16    (27, 168)       1.0      1.0    42.78 127,628.65 27.6%     19.0%     15.2%
17     (17, 21)      19.0     20.0   886.06 110,117.03 10.1%     19.0%     16.4%
18     (59, 70)       5.0      6.0   276.46 128,273.29 28.3%     19.0%     20.1%
19    (20, 181)       1.0      1.0    42.78 127,628.65 27.6%     19.0%     15.2%
20    (11, 175)       2.0      2.0    82.10 125,706.51 25.7%     19.0%     15.2%
21    (28, 104)       2.0      3.0   131.99 125,189.61 25.2%     19.0%     15.2%
22    (10, 178)       3.0      3.0   132.35 127,100.60 27.1%     19.0%     15.2%
23    (23, 170)       2.0      2.0    93.52 126,385.21 26.4%     19.0%     15.2%
24    (11, 160)       4.0      4.0   179.66 124,113.04 24.1%     19.0%     15.4%
25    (25, 166)       2.0      2.0    93.23 126,539.86 26.5%     19.0%     15.2%
26     (80, 85)       8.0      9.0   342.77 100,764.28  0.8%     19.0%     18.9%
27    (10, 162)       7.0      7.0   291.80 113,699.46 13.7%     19.0%     16.2%
28     (61, 66)       9.0     10.0   428.25 117,497.81 17.5%     19.0%     22.6%
29     (19, 24)      17.0     18.0   774.83 114,216.87 14.2%     19.0%     15.6%

===========END OF REPORT=============

参数优化结果以及各个指标的可视化图表展示:

在这里插入图片描述

优化之后我们可以检验一下找到的最佳参数:

# 从优化结果中取出一组参数试验一下:
op.set_parameter(0, 
                 pars= (25, 166)  # 修改策略参数,改为短周期25天,长周期166天
                )

# 重复一次测试,除策略参数意外,其他设置不变
res = qt.run(op, 
             mode=1,  
             asset_pool='000300.SH',  
             invest_start='20110101',  
             visual=True  
            )
     ====================================
     |                                  |
     |       BACK TESTING RESULT        |
     |                                  |
     ====================================

qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 30.7ms
time consumption for operation back looping:  721.6ms

investment starts on      2011-01-04 00:00:00
ends on                   2021-02-01 00:00:00
Total looped periods:     10.1 years.

-------------operation summary:------------

          Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH    7        8      15   50.7%      0.0%     49.3%   

Total operation fee:     ¥      348.02
total investment amount: ¥  100,000.00
final value:              ¥  217,727.40
Total return:                   117.73% 
Avg Yearly return:                8.02%
Skewness:                         -0.98
Kurtosis:                         14.70
Benchmark return:                69.85% 
Benchmark Yearly return:          5.39%

------strategy loop_results indicators------ 
alpha:                             -inf
Beta:                              -inf
Sharp ratio:                       -inf
Info ratio:                       0.005
250 day volatility:               0.143
Max drawdown:                    31.58% 
    peak / valley:        2015-06-08 / 2015-07-08
    recovered on:         2018-01-22


===========END OF REPORT=============

优化后总回报率达到了117%,比优化前的参数好很多。

优化后的结果可视化图表如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中的job和trans

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群&#xff0c;一起学习&#xff0c;共同进步。若二维码失效&#xff0c;公众号后台加我微信入群&#xff0c;备注kettle。 1、大家都知道kettle设计的job流程文件有个缺点&#xff1a;只能设置简单的定时任务&#xff0c;无法…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的数据结构在对任务进行排序。 // 两个任务队列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像数组中推入一个任务 pop(timerQueue); // 从数组中弹出一个任务 time…

HNU-算法设计与分析-作业3

第三次作业【动态规划】 文章目录 第三次作业【动态规划】<1>算法实现题 3-1 独立任务最优解问题<2>算法实现题 3-4 数字三角形问题<3>算法实现题 3-8 最小m段和问题<4>算法实现题 3-25 m处理器问题 <1>算法实现题 3-1 独立任务最优解问题 ▲问…

Windows 安装mysql 和 Redis

mysql Windows 图形界面安装&#xff1a; 下载mysql https://dev.mysql.com/downloads/ 1.下载完成后,找到文件双击安装程序 2. 等待一段时间&#xff0c; 选择默认&#xff0c;点击next 3. 选择安装目录 下载mysql产品 安装mysql产品 产品配置向导 安装…

数据库-索引结构(B-Tree,B+Tree,Hash,二叉树)

文章目录 索引结构有哪些&#xff1f;二叉树详解&#xff1f;B-Tree详解?BTree详解&#xff1f;Hash详解&#xff1f;本篇小结 更多相关内容可查看 索引结构有哪些&#xff1f; MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引结构&#xff0c;主要包…

Echart-折线图根据区间设置折线的样式

根据X轴区间设置折线样式 完整配置如下&#xff1a; option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [150, 230, 224, 218, 135, 147, 260],type: line}],//【注】&#xff1a;如果一个图中有多个折线&a…

ROS从入门到精通4-3:制作Docker镜像文件Dockerfile

目录 0 专栏介绍1 为什么需要Dockerfile&#xff1f;2 Dockerfile书写原则3 Dockerfile常用指令3.1 FROM3.2 MAINTAINER3.3 RUN3.4 ADD3.5 COPY3.6 CMD3.7 ENV3.8 EXPOSE3.9 WORKDIR3.10 ARG 4 Dockerfile构建ROS工程实例 0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0…

springboot3.2.5+mybatis-plus导致启动报错

公司新的项目升级到了springboot3.x后&#xff0c;步步是坑&#xff0c;坑坑不同&#xff0c;各种疑难杂症层出不穷&#xff0c;让老中医也也苦不堪言&#xff0c;java的生态圈真让人无语&#xff0c;你们升级能不能认真些互相兼顾一下&#xff1f; 这次的项目用了springboot3…

Python自学之路--004:Python使用注意点(原始字符串‘r’\字符转换\‘wb’与‘w区别’\‘\‘与‘\\’区别)

目录 1、原始字符串‘r’ 2、字符转换问题 3、open与write函数’wb’与’w’区分 4、Python里面\与\\的区别 1、原始字符串‘r’ 以前的脚本通过Python2.7写的&#xff0c;通过Python3.12去编译发现不通用了&#xff0c;其实也是从一个初学者的角度去看待这些问题。 其中的\…

春风拂面,深入浅出:Bean 处理器揭秘 Spring Boot 启动之谜

春风拂面&#xff0c;深入浅出&#xff1a;Bean 处理器揭秘 Spring Boot 启动之谜 在 Spring Boot 开发中&#xff0c;Bean 处理器扮演着至关重要的角色&#xff0c;犹如幕后英雄般默默地为应用启动过程添砖加瓦。然而&#xff0c;对于许多开发者来说&#xff0c;Bean 处理器依…

文档分类FastText模型 (pytorch实现)

文档分类FastText FastText简介层次softmaxN-gram特征FastText代码&#xff08;文档分类&#xff09; FastText简介 FastText与之前介绍过的CBOW架构相似&#xff0c;我们先来会议一下CBOW架构&#xff0c;如下图&#xff1a; CBOW的任务是通过上下文去预测中间的词&#xff0…

项目管理重点及笔记【太原理工大学24年】

为了自己复习写的&#xff0c;可能会有不清楚&#xff0c;可以选择性看可以讨论&#xff0c;但别骂我写的什么烂东西&#xff0c;&#xff0c;&#xff0c;&#xff08;电脑看排版更好看些&#xff09; 目录 一、IT项目管理概述 二、IT项目组织环境与管理过程 三、整体管理 四、…

使用httpx异步获取高校招生信息:一步到位的代理配置教程

概述 随着2024年中国高考的临近&#xff0c;考生和家长对高校招生信息的需求日益增加。了解各高校的专业、课程设置和录取标准对于高考志愿填报至关重要。通过爬虫技术&#xff0c;可以高效地从各高校官网获取这些关键信息。然而&#xff0c;面对大量的请求和反爬机制的挑战&a…

【汇编】算术指令

一、加法指令 &#xff08;一&#xff09;各加法指令的格式及操作 加法指令可做字或字节运算 &#xff08;1&#xff09;加法指令 ADD 格式&#xff1a;ADD DST,SRC执行的操作&#xff1a;(DST) ← (SRC)(DST) &#xff08;2&#xff09;带进位加法指令 ADC 格式&#xf…

【C语言】自定义类型之---结构体超详解(结构体的定义使用、指针结构体,内存对齐,......代码详解)

目录 前言&#xff1a; 一&#xff1a;结构体 1.1&#xff1a;什么是结构体&#xff1f; 1.2&#xff1a;结构体类型的声明 1.3&#xff1a;结构体变量的定义 1.4&#xff1a;结构体的内存对齐 1.5&#xff1a;结构体传参 二&#xff1a;位段 2.1&#xff1a;位段是什…

反爬-简单滑块思路,秒了~

文章目录 找图片的返回包curl 大法获取图片链接ddddocr分析距离看结果秒了~ 本文仅供参考学习&#xff0c;如有侵权&#xff0c;请联系作者删。 目标地址&#xff1a;aHR0cHM6Ly9pZHMuZ2RpdC5lZHUuY24vYXV0aHNlcnZlci9sb2dpbj9zZXJ2aWNlPWh0dHBzOi8vd2JkdC5nZGl0LmVkdS5jbi9zaG…

2024 Google I/O Android 相关内容汇总

2024 Google I/O Android 相关内容汇总 本次 Google I/O 的核心虽然是 AI &#xff0c;但是 Android 也是作为主要议题出现&#xff0c; Android 部分可以简单分为产品和开发相关内容&#xff0c;接下来主要介绍这两部分的相关更新。 重点开始开发相关&#xff0c;内容不少 产…

2010-2024年各地级市社会信用体系建设匹配DID数据

2010-2024年各地级市社会信用体系建设匹配DID数据 1、时间&#xff1a;2010-2024年 2、指标&#xff1a;行政区划代码、年份、所属省份、地区、社会信用体系建设示范区 3、范围&#xff1a;310个地级市 4、来源&#xff1a;国家发改委 5、指标解释&#xff1a; 社会信用体…

webpack优化构建速度示例-babel-loader开启缓存cacheDirectory:

babel-loader 默认并没有开启缓存。尽管babel-loader有自己的缓存机制&#xff0c;但它并不与webpack的缓存机制相冲突。相反&#xff0c;它们可以协同工作&#xff0c;以提供最佳的构建性能。 src/index.js import {otherSomeFuction} from ./module; console.log(otherSomeF…

LeetCode322:零钱兑换

题目描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无…