Backtrader 文档学习-Indicators- TA-Lib

news2024/10/7 18:29:30

Backtrader 文档学习-Indicators- TA-Lib

1.概述

即使BT提供的内置指标数量已经很多,开发指标主要是定义输入、输出并以自然方式编写公式,还是希望使用TA-LIB。原因:

  • 指标X在指标库中,而不在BT中
  • TA-LIB众所周知的,人们信任口碑好
    应大家需要,BT提供了TA-LIB集成

安装前提:

  • 用于TA-Lib的Python包装器
  • TA-LIB所需的任何依赖项(例如numpy), 安装细节在GitHub中

2.使用ta-lib

使用BT中已内置的任何指标一样简单。简单移动平均线的示例:

import backtrader as bt

class MyStrategy(bt.Strategy):
    params = (('period', 20),)

    def __init__(self):
        self.sma = bt.indicators.SMA(self.data, period=self.p.period)
        ...

...

ta-lib示例:

import backtrader as bt

class MyStrategy(bt.Strategy):
    params = (('period', 20),)

    def __init__(self):
        self.sma = bt.talib.SMA(self.data, timeperiod=self.p.period)
        ...

...

ta-lib指标的参数是由库本身定义的,而不是由bt定义的。在这种情况下,ta-lib中的SMA采用一个名为timeperiod的参数来定义操作window的大小。
对于需要多个输入参数的指标,例如随机指标:

import backtrader as bt

class MyStrategy(bt.Strategy):
    params = (('period', 20),)

    def __init__(self):
        self.stoc = bt.talib.STOCH(self.data.high, self.data.low, self.data.close,
                                   fastk_period=14, slowk_period=3, slowd_period=3)

        ...

...

Notice how high, low and close have been individually passed. One could always pass open instead of low (or any other data series) and experiment.

The ta-lib indicator documentation is automatically parsed and added to the backtrader docs. You may also check the ta-lib source code/docs. Or adittionally do:
注意最高价、最低价和收盘价是作为参数分别传递的。总是传递开盘价,而不是最低价(或任何其他数据系列)。
ta-lib指标文档被自动解析并添加到bt文档中。可以查看ta-lib源代码/文档:

print(bt.talib.SMA.doc)

输出:

SMA([input_arrays], [timeperiod=30])

Simple Moving Average (Overlap Studies)

Inputs:
    price: (any ndarray)
Parameters:
    timeperiod: 30
Outputs:
    real

文档说明信息:

  • 输入参数定义,(忽略“ndarray”注释,因为bt在后台管理转换)
  • 有哪些参数,对应默认值
  • 指标函数实际提供了哪些输出值

要为bt.talib.STOCH指标选择特定的移动平均线,可通过backtrader.talib.MA_Type访问标准ta-lib MA_Type :

import backtrader as bt
print('SMA:', bt.talib.MA_Type.SMA)
print('T3:', bt.talib.MA_Type.T3)

结果:

SMA: 0
T3: 8

3.用ta-lib绘图

正如常规用法一样,绘制ta-lib指标并没有特别的操作。
注意:

输出蜡烛的指标(所有寻找烛台模式的指标)提供二进制输出:0或100。为了避免在图表中添加子图,有一个自动绘图转换功能,可以在模式被识别的时间点的数据上绘制子图。

(0)在jupyter中实现命令行代码功能

bt给出的示例都是在命令行的方式,通过命令行不同的参数,实现不同功能。找到一个不用修改代码,直接在jupyter中运行的方法:
代码:

#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
###############################################################################
#
# Copyright (C) 2015-2023 Daniel Rodriguez
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import argparse
import datetime

import backtrader as bt
import backtrader.talib as tbl

class TALibStrategy(bt.Strategy):
    #params = (('ind', 'sma'), ('doji', True),)
    params = (('ind', 'sma'), ('doji', False),)

    INDS = ['sma', 'ema', 'stoc', 'rsi', 'macd', 'bollinger', 'aroon',
            'ultimate', 'trix', 'kama', 'adxr', 'dema', 'ppo', 'tema',
            'roc', 'williamsr']

    def __init__(self):
        print(self.p.doji,self.p.ind)

        if self.p.doji:
            tbl.CDLDOJI(self.data.open, self.data.high,self.data.low, self.data.close)

        if self.p.ind == 'sma':
            tbl.SMA(self.data.close, timeperiod=25, plotname='TA_SMA')
            bt.indicators.SMA(self.data, period=25)

        elif self.p.ind == 'ema':
            tbl.EMA(timeperiod=25, plotname='TA_SMA')
            bt.indicators.EMA(period=25)

        elif self.p.ind == 'stoc':
            tbl.STOCH(self.data.high, self.data.low, self.data.close,
                           fastk_period=14, slowk_period=3, slowd_period=3,
                           plotname='TA_STOCH')

            bt.indicators.Stochastic(self.data)

        elif self.p.ind == 'macd':
            tbl.MACD(self.data, plotname='TA_MACD')
            bt.indicators.MACD(self.data)
            bt.indicators.MACDHisto(self.data)

        elif self.p.ind == 'bollinger':
            tbl.BBANDS(self.data, timeperiod=25,
                            plotname='TA_BBANDS')
            bt.indicators.BBANDS(self.data, period=25) #BollingerBands BBANDS

        elif self.p.ind == 'rsi':
            tbl.RSI(self.data, plotname='TA_RSI')
            bt.indicators.RSI(self.data)

        elif self.p.ind == 'aroon':
            tbl.AROON(self.data.high, self.data.low, plotname='TA_AROON')
            bt.indicators.AroonIndicator(self.data)

        elif self.p.ind == 'ultimate':
            tbl.ULTOSC(self.data.high, self.data.low, self.data.close,
                            plotname='TA_ULTOSC')
            bt.indicators.UltimateOscillator(self.data)

        elif self.p.ind == 'trix':
            tbl.TRIX(self.data, timeperiod=25,  plotname='TA_TRIX')
            bt.indicators.Trix(self.data, period=25)

        elif self.p.ind == 'adxr':
            tbl.ADXR(self.data.high, self.data.low, self.data.close,
                          plotname='TA_ADXR')
            bt.indicators.ADXR(self.data)

        elif self.p.ind == 'kama':
            tbl.KAMA(self.data, timeperiod=25, plotname='TA_KAMA')
            bt.indicators.KAMA(self.data, period=25)

        elif self.p.ind == 'dema':
            tbl.DEMA(self.data, timeperiod=25, plotname='TA_DEMA')
            bt.indicators.DEMA(self.data, period=25)

        elif self.p.ind == 'ppo':
            tbl.PPO(self.data, plotname='TA_PPO')
            bt.indicators.PPO(self.data, _movav=bt.indicators.SMA)

        elif self.p.ind == 'tema':
            tbl.TEMA(self.data, timeperiod=25, plotname='TA_TEMA')
            bt.indicators.TEMA(self.data, period=25)

        elif self.p.ind == 'roc':
            tbl.ROC(self.data, timeperiod=12, plotname='TA_ROC')
            tbl.ROCP(self.data, timeperiod=12, plotname='TA_ROCP')
            tbl.ROCR(self.data, timeperiod=12, plotname='TA_ROCR')
            tbl.ROCR100(self.data, timeperiod=12, plotname='TA_ROCR100')
            bt.indicators.ROC(self.data, period=12)
            bt.indicators.Momentum(self.data, period=12)
            bt.indicators.MomentumOscillator(self.data, period=12)

        elif self.p.ind == 'williamsr':
            tbl.WILLR(self.data.high, self.data.low, self.data.close,
                           plotname='TA_WILLR')
            bt.indicators.WilliamsR(self.data)


def runstrat(args=None):
    args = parse_args(args)

    cerebro = bt.Cerebro()

    dkwargs = dict()
    if args.fromdate:
        fromdate = datetime.datetime.strptime(args.fromdate, '%Y-%m-%d')
        dkwargs['fromdate'] = fromdate

    if args.todate:
        todate = datetime.datetime.strptime(args.todate, '%Y-%m-%d')
        dkwargs['todate'] = todate

    data0 = bt.feeds.YahooFinanceCSVData(dataname=args.data0, **dkwargs)
    cerebro.adddata(data0)

    cerebro.addstrategy(TALibStrategy, ind=args.ind, doji=not args.no_doji)

    cerebro.run(runcone=not args.use_next, stdstats=False)
    if args.plot:
        pkwargs = dict(style='candle')
        if args.plot is not True:  # evals to True but is not True
            npkwargs = eval('dict(' + args.plot + ')')  # args were passed
            pkwargs.update(npkwargs)

        #cerebro.plot(**pkwargs)
        cerebro.plot(iplot=False,**pkwargs)


def parse_args(pargs=None):

    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        description='Sample for sizer')

    parser.add_argument('--data0', required=False,
                        default='./datas/yhoo-1996-2015.txt',
                        help='Data to be read in')

    parser.add_argument('--fromdate', required=False,
                        default='2005-01-01',
                        help='Starting date in YYYY-MM-DD format')

    parser.add_argument('--todate', required=False,
                        default='2006-12-31',
                        help='Ending date in YYYY-MM-DD format')

    parser.add_argument('--ind', required=False, action='store',
                        default=TALibStrategy.INDS[0],
                        choices=TALibStrategy.INDS,
                        help=('Which indicator pair to show together'))

    parser.add_argument('--no-doji', required=False, action='store_true',
                        help=('Remove Doji CandleStick pattern checker'))

    parser.add_argument('--use-next', required=False, action='store_true',
                        help=('Use next (step by step) '
                              'instead of once (batch)'))

    # Plot options
    parser.add_argument('--plot', '-p', nargs='?', required=False,
                        metavar='kwargs', const=True,
                        help=('Plot the read data applying any kwargs passed\n'
                              '\n'
                              'For example (escape the quotes if needed):\n'
                              '\n'
                              '  --plot style="candle" (to plot candles)\n'))

    if pargs is not None:
        return parser.parse_args(pargs)

    return parser.parse_args()

修改部分:

  • 绘图代码

cerebro.plot(iplot=False,**pkwargs)

  • 不用main调用
    用’–help’.split() ,传递不同的参数。
%matplotlib inline
runstrat('--help'.split())

执行结果:

usage: ipykernel_launcher.py [-h] [--data0 DATA0] [--fromdate FROMDATE]
                             [--todate TODATE]
                             [--ind {sma,ema,stoc,rsi,macd,bollinger,aroon,ultimate,trix,kama,adxr,dema,ppo,tema,roc,williamsr}]
                             [--no-doji] [--use-next] [--plot [kwargs]]

Sample for sizer

optional arguments:
  -h, --help            show this help message and exit
  --data0 DATA0         Data to be read in (default:
                        ./datas/yhoo-1996-2015.txt)
  --fromdate FROMDATE   Starting date in YYYY-MM-DD format (default:
                        2005-01-01)
  --todate TODATE       Ending date in YYYY-MM-DD format (default: 2006-12-31)
  --ind {sma,ema,stoc,rsi,macd,bollinger,aroon,ultimate,trix,kama,adxr,dema,ppo,tema,roc,williamsr}
                        Which indicator pair to show together (default: sma)
  --no-doji             Remove Doji CandleStick pattern checker (default:
                        False)
  --use-next            Use next (step by step) instead of once (batch)
                        (default: False)
  --plot [kwargs], -p [kwargs]
                        Plot the read data applying any kwargs passed For
                        example (escape the quotes if needed): --plot
                        style="candle" (to plot candles) (default: None)
(1)示例和对比

The following are plots comparing the outputs of some ta-lib indicators against the equivalent built-in indicators in backtrader. To consider:
ta-lib指标与bt中相应内置指标绘图对比,考虑:

  • ta-lib指示器在图上获得一个TA_前缀,示例专门完成的,以帮助用户识别是哪个指标来源,ta还是bt的。
  • 移动平均线(如果两者的结果相同)将绘制在另一条现有移动平均线之上。如果这两个指标不能分开,测试通过 。
  • 所有示例都包括一个CDLDOJI指示器作为参考
(2)KAMA (Kaufman Moving Average

第一个示例,因为它是唯一有差异的(在bt和ta所有样本的直接比较中):

  • 样本的初始值不相同
  • 某个时间点,值聚合在一起,两个KAMA实现具有相同的行为。
    分析了ta-lib源代码之后:
  • ta-lib中的实现为KAMA的第一个值做出了非行业标准的选择。
    这个不同的选择可以在ta源代码中找到(引用自源代码),使用昨天的价格作为前期的KAMA。

bt做的选择例如从股票软件图表中选择一样

  • 股票软件图表中的KAMA
    需要一个初始值来开始计算,所以第一个KAMA只是一个简单的移动平均值

  • 因此两者有所不同。此外:
    ta-lib KAMA实现不允许为Kaufman定义的可伸缩常数的调整指定快速和慢速周期。

测试:

%matplotlib inline
runstrat('--plot --ind kama'.split())

图示:
在这里插入图片描述

(4)SMA

测试:

%matplotlib inline
runstrat('--plot --ind sma'.split())

图示:
在这里插入图片描述

(5)EMA

测试:

runstrat(‘–plot --ind ema’.split())

图示:
在这里插入图片描述

(6)Stochastic

测试:

runstrat(‘–plot --ind stoc’.split())

图示:
在这里插入图片描述

(7)RSI

测试:

runstrat(‘–plot --ind rsi’.split())

图示:
在这里插入图片描述

(8)MACD

测试:

runstrat(‘–plot --ind macd’.split())

图示:
在这里插入图片描述

(9)Bollinger Bands

测试:

runstrat(‘–plot --ind bollinger’.split())

报错,花了一些时间找问题。

TypeError: Invalid parameter value for nbdevup (expected float, got int)

源代码:

            bt.talib.BBANDS(self.data, timeperiod=25,
                            plotname='TA_BBANDS')
            bt.indicators.BollingerBands(self.data, period=25)

修改为:

        elif self.p.ind == 'bollinger':
            tbl.BBANDS(self.data, timeperiod=25, nbdevup=2.0,nbdevdn=2.0, matype=0,plotname='TA_BBANDS')
            bt.indicators.BBands(self.data, period=25) #nbdevup=2,nbdevdn=2, matype=0

源代码两处问题:

  1. 参数应该是float ,调整接口默认是int,所以报错。直接指定浮点数:nbdevup=2.0,nbdevdn=2.0 。
  2. bt.indicators.BBands 不是bt.indicators.BBANDS ,bt和ta两个的名字大小写不一样 。

图示:
在这里插入图片描述

(10)AROON

注意:
ta-lib选择将下行线放在第一位,与backtrader内置指标相比,颜色是相反的。
测试:

runstrat(‘–plot --ind aroon’.split())

图示:
在这里插入图片描述

(11)Ultimate Oscillator

测试:

runstrat(‘–plot --ind ultimate’.split())

图示:
在这里插入图片描述

(12)Trix

测试:

runstrat(‘–plot --ind trix’.split())

图示:
在这里插入图片描述

(13)ADXR

测试:

runstrat(‘–plot --ind adxr’.split())

图示:
在这里插入图片描述

(14)DEMA

测试:

runstrat(‘–plot --ind dema’.split())

图示:
在这里插入图片描述

(15)TEMA

测试:

runstrat(‘–plot --ind tema’.split())

图示:
在这里插入图片描述

(16)PPO

backtrader不仅提供了ppo线,还提供传统的macd方法。
测试:

runstrat(‘–plot --ind ppo’.split())

图示:
在这里插入图片描述

(17)WilliamsR

测试:

runstrat(‘–plot --ind williamsr’.split())

图示:
在这里插入图片描述

(18)ROC

所有指标显示具有完全相同的形状,但跟踪动量或变化率有几种定义
测试:

runstrat(‘–plot --ind roc’.split())

图示:
在这里插入图片描述

(20)对比talib和bt.indicator
ind = []
tal = []
for i in dir(bt.indicators):
    if i[:1] != '_' :
        ind.append (i)

for i in dir(bt.talib) :
    if i[:1] != '_' :
        tal.append (i)
print(len(ind)) # 410
print(len(tal)) # 181

tal_notin_ind = []
tal_in_ind = []
for i in tal :
    if i in ind :
        #index = ind.index(i)
        tal_in_ind.append(i)
    else :
        #print(i,' not in ind.')
        tal_notin_ind.append(i)

print('talib in bt indicator:')
print(tal_in_ind)        
print('talib not in bt indicator:')
print(tal_notin_ind)
        

输出结果:
bt indicator 有410属性方法
talib 只有181个属性方法

410
181
talib in bt indicator:
['ADX', 'ADXR', 'APO', 'ATR', 'CCI', 'DEMA', 'EMA', 'KAMA', 'MACD', 'PPO', 'ROC', 'RSI', 'SMA', 'TEMA', 'TRIX', 'WMA', 'absolute_import', 'bt', 'division', 'print_function', 'sys', 'unicode_literals', 'with_metaclass']
talib not in bt indicator:
['ACOS', 'AD', 'ADD', 'ADOSC', 'AROON', 'AROONOSC', 'ASIN', 'ATAN', 'AVGPRICE', 'BBANDS', 'BETA', 'BOP', 'CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE', 'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY', 'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY', 'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK', 'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI', 'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR', 'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER', 'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE', 'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON', 'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER', 'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM', 'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU', 'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR', 'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN', 'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR', 'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN', 'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING', 'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', 'CDLXSIDEGAP3METHODS', 'CEIL', 'CMO', 'CORREL', 'COS', 'COSH', 'DIV', 'DX', 'EXP', 'FLOOR', 'FUNC_FLAGS_CANDLESTICK', 'FUNC_FLAGS_SAMESCALE', 'FUNC_FLAGS_UNSTABLE', 'HT_DCPERIOD', 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDLINE', 'HT_TRENDMODE', 'LINEARREG', 'LINEARREG_ANGLE', 'LINEARREG_INTERCEPT', 'LINEARREG_SLOPE', 'LN', 'LOG10', 'MA', 'MACDEXT', 'MACDFIX', 'MAMA', 'MAVP', 'MAX', 'MAXINDEX', 'MA_Type', 'MEDPRICE', 'MFI', 'MIDPOINT', 'MIDPRICE', 'MIN', 'MININDEX', 'MINMAX', 'MINMAXINDEX', 'MINUS_DI', 'MINUS_DM', 'MOM', 'MULT', 'NATR', 'OBV', 'OUT_FLAGS_DASH', 'OUT_FLAGS_DOTTED', 'OUT_FLAGS_HISTO', 'OUT_FLAGS_LINE', 'OUT_FLAGS_LOWER', 'OUT_FLAGS_UPPER', 'PLUS_DI', 'PLUS_DM', 'ROCP', 'ROCR', 'ROCR100', 'R_TA_FUNC_FLAGS', 'R_TA_OUTPUT_FLAGS', 'SAR', 'SAREXT', 'SIN', 'SINH', 'SQRT', 'STDDEV', 'STOCH', 'STOCHF', 'STOCHRSI', 'SUB', 'SUM', 'T3', 'TAN', 'TANH', 'TRANGE', 'TRIMA', 'TSF', 'TYPPRICE', 'ULTOSC', 'VAR', 'WCLPRICE', 'WILLR', 'np', 'tafunc', 'tafunctions', 'talib']

两者名称完全相同的属性方法:

['ADX', 'ADXR', 'APO', 'ATR', 'CCI', 'DEMA', 'EMA', 'KAMA', 'MACD', 'PPO', 'ROC', 'RSI', 'SMA', 'TEMA', 'TRIX', 'WMA', 'absolute_import', 'bt', 'division', 'print_function', 'sys', 'unicode_literals', 'with_metaclass']

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

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

相关文章

使用SPM_batch进行批量跑脚本(matlab.m)

软件&#xff1a;spm8matlab2023bwin11 数据格式&#xff1a; F:\ASL\HC\CBF\HC_caishaoqing\CBF.nii F:\ASL\HC\CBF\HC_caishaoqing\T1.nii F:\ASL\HC\CBF\HC_wangdonga\CBF.nii F:\ASL\HC\CBF\HC_wangdonga\T1.nii clear spmdirD:\AnalysisApps\spm8; datadirF:\ASL\HC\CBF…

代理IP使用:如何防范潜在的风险?

代理IP用途无处不在。它们允许您隐藏真实IP地址&#xff0c;从而实现匿名性和隐私保护。这对于保护个人信息、绕过地理受限的内容或访问特定网站都至关重要。 然而&#xff0c;正如任何技术工具一样&#xff0c;代理IP地址也伴随着潜在的风险和威胁。不法分子可能会滥用代理IP…

《合成孔径雷达成像算法与实现》Figure6.5

clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; % 距离过采样率 Nrg 320; % 距离线采样数 距离向…

上云03 | 数据库事务

文章目录 MySQL线程池禁用存储过程、函数、触发器、视图SQL执行原理执行步骤执行的底层原理详细执行步骤分析**Step 1:获取数据 (From, Join)****Step 2:过滤数据 (Where)****Step 3:分组 (Group by)****Step 4:分组过滤 (Having)****Step 5:返回查询字段 (Select)****Step 6:排…

前端复杂 table 渲染及 excel.js 导出

转载请注明出处&#xff0c;点击此处 查看更多精彩内容 现在我们有一个如图&#xff08;甚至更复杂&#xff09;的表格需要展示到页面上&#xff0c;并提供下载为 excel 文件的功能。 前端表格渲染我们一般会使用 element-ui 等组件库提供的 table 组件&#xff0c;这些组件一般…

C/C++ - 容器list

目录 容器特性 list 容器特性 使用场景 构造函数 默认构造函数 填充构造函数 范围构造函数 复制构造函数 大小函数 函数&#xff1a;size 函数&#xff1a;empty​ 函数&#xff1a;max_size​ 增加函数 函数&#xff1a;​push_back​ 函数&#xff1a;push_f…

Kubernetes 简介

&#x1f4ce;k8s 入门到微服务项目实战.xmindhttps://www.yuque.com/attachments/yuque/0/2024/xmind/35457682/1707117691869-1ea2805d-7218-4223-a0a9-877147ca84b2.xmind 目录 1、概念介绍 应用部署的演变 Kubernetes 架构图 分层架构 2、Kubernetes 组件 控制面板组…

基恩士 KV-8000 PLC通讯简单测试

1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式&#xff0c;包括&#xff1a;OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置&#xff0c;Modbus需要调用功能块。默认支持的是上位链路命令&#xff0c;实际是一条条以回车换行结束的ASCII…

vulhub中AppWeb认证绕过漏洞(CVE-2018-8715)

AppWeb是Embedthis Software LLC公司负责开发维护的一个基于GPL开源协议的嵌入式Web Server。他使用C/C来编写&#xff0c;能够运行在几乎先进所有流行的操作系统上。当然他最主要的应用场景还是为嵌入式设备提供Web Application容器。 AppWeb可以进行认证配置&#xff0c;其认…

在bash或脚本中,如何并行执行命令或任务(命令行、parallel、make)

最近要批量解压归档文件和压缩包&#xff0c;所以就想能不能并行执行这些工作。因为tar自身不支持并行解压&#xff0c;但是像make却可以支持生成一些文件&#xff0c;所以我才有了这种想法。 方法有两种&#xff0c;第一种不用安装任何软件或工具&#xff0c;直接bash或其他 …

html2canvas 截图功能使用 VUE

html2canvas 是一个 JavaScript 库&#xff0c;可以将网页内容转换为 Canvas 元素&#xff0c;并生成图像或 PDF 文件。使用 html2canvas&#xff0c;你可以在客户端将网页的内容截图&#xff0c;并将其作为图像或 PDF 文件保存或分享。 以下是一些 html2canvas 库的特点和用途…

C语言笔试题之反转链表(头插法)

实例要求&#xff1a; 1、给定单链表的头节点 head &#xff1b;2、请反转链表&#xff1b;3、最后返回反转后的链表&#xff1b; 案例展示&#xff1a; 实例分析&#xff1a; 1、入参合理性检查&#xff0c;即head ! NULL || head->next ! NULL&#xff1b;2、while循环…

深刻理解树状数组--树状数组构造定义与动态维护区间和的合理性证明

文章目录 一.树状数组概览二.树状数组构造定义lowbit运算树状数组的结点值的定义树状数组结点层次的定义树状数组父子结点关系定义 三.关于树状数组结构的重要证明引理1引理2树状数组模板题 一.树状数组概览 树状数组的下标从1开始标识,其物理结构是线性表,逻辑结构是一颗多叉…

Vue中v-if和v-show区别

Vue中v-if和v-show是两个常用的指令&#xff0c;用于控制元素的显示和隐藏。虽然它们都能达到相同的效果&#xff0c;但在实现机制和使用场景上有一些区别。本文将详细介绍v-if和v-show的区别&#xff0c;并且通过示例代码来演示它们的使用。 首先&#xff0c;让我们来看一下v…

Debezium发布历史110

原文地址&#xff1a; https://debezium.io/blog/2021/09/22/deep-dive-into-a-debezium-community-connector-scylla-cdc-source-connector/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 1.7.0.CR2…

世界各国都在追求“主权人工智能能力”,国家级人工智能硬件需求将剧增

NVIDIA的CEO黄仁勋最近在接受媒体采访时指出&#xff0c;世界各国都打算在本国内建立和运行自主的人工智能基础设施&#xff0c;这将全面带动NVIDIA硬件产品需求的飙升。黄仁勋表示&#xff0c;包括印度、日本、法国和加拿大在内的国家政府都在讨论投资“国家主权人工智能能力”…

关于harbor做HA

我起初是用helm在k8s上装的harbor&#xff0c;最近遇到如下故障&#xff1a;就是服务器硬件设备故障突然死机&#xff0c;恰巧是harbor容器所在的服务器&#xff0c;其他在这个服务器上运行的容器&#xff0c;由kubelet调度到其他正常的服务器上重启去了&#xff0c;但harbkor并…

2024.1.26力扣每日一题——边权重均等查询

2024.1.26 题目来源我的题解方法一 使用dfs对每一组查询都求最近公共祖先&#xff08;会超时&#xff0c;通不过&#xff09;方法二 不需要构建图&#xff0c;直接在原始数组上进行求最大公共祖先的操作。 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2846 我的题解 …

[C++] opencv + qt 创建带滚动条的图像显示窗口代替imshow

在OpenCV中&#xff0c;imshow函数默认情况下是不支持滚动条的。如果想要显示滚动条&#xff0c;可以考虑使用其他库或方法来进行实现。 一种方法是使用Qt库&#xff0c;使用该库可以创建一个带有滚动条的窗口&#xff0c;并在其中显示图像。具体步骤如下&#xff1a; 1&…

《汇编语言》- 读书笔记 - 各章检测点归档

《汇编语言》- 读书笔记 - 各章检测点归档 检测点 1.1检测点 2.1检测点 2.2检测点 2.3检测点 3.1检测点 3.2检测点 6.1检测点 9.1 检测点 1.1 1个CPU 的寻址能力为8KB&#xff0c;那么它的地址总线的宽度为 13 。 解&#xff1a;8KB 8192B 213 1KB的存储器有 10…