Backtrader 文档学习-Indicators- TA-Lib

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 btclass 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 btclass 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 btclass 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 datetimeimport backtrader as bt
import backtrader.talib as tblclass 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 BBANDSelif 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'] = fromdateif args.todate:todate = datetime.datetime.strptime(args.todate, '%Y-%m-%d')dkwargs['todate'] = todatedata0 = 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 Truenpkwargs = eval('dict(' + args.plot + ')')  # args were passedpkwargs.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 optionsparser.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 sizeroptional 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 Forexample (escape the quotes if needed): --plotstyle="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)) # 181tal_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.mzph.cn/news/670595.shtml

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

相关文章

XUbuntu22.04之两款实用画笔工具(二百一十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

centos 7.6 安装 openldap 2.5.17

centos 7.6 安装ldap 1、下载ldap2、安装ldap2.1、官方参考文档2.2、安装前准备2.2.1、安装gcc2.2.2、安装Cyrus SASL 2.1.272.2.3、安装OpenSSL 1.1.12.2.3.1、下载openssl 3.02.2.3.2、安装依赖包2.2.3.3、编译安装openssl 3.0 2.2.3、安装libevent 2.1.82.2.4、安装libargon…

Flink cdc3.0动态变更表结构——源码解析

文章目录 前言源码解析1. 接收schema变更事件2. 发起schema变更请求3. schema变更请求具体处理4. 广播刷新事件并阻塞5. 处理FlushEvent6. 修改sink端schema 结尾 前言 上一篇Flink cdc3.0同步实例 介绍了最新的一些功能和问题&#xff0c;本篇来看下新功能之一的动态变更表结…

新零售的升维体验,摸索华为云GaussDB如何实现数据赋能

新零售商业模式 商业模式通常是由客户价值、企业资源和能力、盈利方式三个方面构成。其最主要的用途是为实现客户价值最大化。 商业模式通过把能使企业运行的内外各要素整合起来&#xff0c;从而形成一个完整的、高效率的、具有独特核心竞争力的运行系统&#xff0c;并通过最…

Windows显示空的可移动磁盘的解决方案

123  大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式…

寒武纪显卡实现高维向量的softmax并行优化

关于寒武纪编程可以参考本人之前的文章添加链接描述&#xff0c;添加链接描述&#xff0c;添加链接描述 高维向量softmax的基础编程 高维向量的softmax实现更加复杂&#xff0c;回忆之前在英伟达平台上实现高维向量的softmax函数&#xff0c;比如说我们以形状为[1,2,3,4,5,6]…

Unity_ShaderGraph节点问题

Unity_ShaderGraph节点问题 Unity版本&#xff1a;Unity2023.1.19 为什么在Unity2023.1.19的Shader Graph中找不见PBR Master节点&#xff1f; 以下这个PBR Maste从何而来&#xff1f;

linux下 Make 和 Makefile构建你的项目

Make 和 Makefile构建你的项目 介绍 在软件开发中&#xff0c;构建项目是一个必不可少的步骤。make 是一个强大的自动化构建工具&#xff0c;而 Makefile 是 make 工具使用的配置文件&#xff0c;用于描述项目的构建规则和依赖关系。本篇博客将介绍 make 和 Makefile 的基本概…

【成品论文】2024美赛B题完整成品论文23页+3小问matlab代码+数据集汇总

2024 年美国大学生数学建模竞赛&#xff08;2024 美赛&#xff09;B 题&#xff1a; 2024 MCM 问题 B: 搜寻潜水艇 题目翻译&#xff1a; Maritime Cruises Mini-Submarines (MCMS)是一家总部位于希腊的公司&#xff0c;专门制造能够携 带人类到达海洋最深处的潜水艇。潜水艇是…

【Kubernetes】在k8s1.24及以上版本基于containerd容器运行时测试pod从harbor拉取镜像

基于containerd容器运行时测试pod从harbor拉取镜像 1、安装高版本containerd2、安装docker3、登录harbor上传镜像4、从harbor拉取镜像 1、安装高版本containerd 集群中各个节点都要操作 yum remove containerd.io -y yum install containerd.io-1.6.22* -y cd /etc/containe…

SpringBoot实战第三天

今天主要完成了&#xff1a; 新增棋子分类 棋子分类列表 获取棋子分类详情 更新棋子分类 更新棋子分类和添加棋子分类_分组校验 新增棋子 新增棋子参数校验 棋子分类列表查询(条件分页) 先给出分类实体类 Data public class Category {private Integer id;//主键IDNot…

[UI5 常用控件] 06.Splitter,ResponsiveSplitter

文章目录 前言1. Splitter1.1 属性 2. ResponsiveSplitter 前言 本章节记录常用控件Splitter,ResponsiveSplitter。主要功能是分割画面布局。 其路径分别是&#xff1a; sap.ui.layout.Splittersap.ui.layout.ResponsiveSplitter 1. Splitter 1.1 属性 orientation &#x…

DevOps落地笔记-17|度量指标:寻找真正的好指标?

前面几个课时端到端地介绍了软件开发全生命周期中涉及的最佳实践&#xff0c;经过上面几个步骤&#xff0c;企业在进行 DevOps 转型时技术方面的问题解决了&#xff0c;这个时候我们还缺些什么呢&#xff1f;事实上很多团队和组织在实施 DevOps 时都专注于技术&#xff0c;而忽…

【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器&#xff09; 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…

TCP 了解

参考&#xff1a;4.2 TCP 重传、滑动窗口、流量控制、拥塞控制 | 小林coding TCP报文 其中比较重要的字段有&#xff1a;&#xff08;1&#xff09;序号&#xff08;sequence number&#xff09;&#xff1a;Seq序号&#xff0c;占32位&#xff0c;用来标识从TCP源端向目的端发…

利用IP地址精准定位服务

在数字化时代&#xff0c;IP地址已成为连接我们与网络世界的纽带之一。通过IP地址&#xff0c;我们可以追踪用户的位置信息&#xff0c;实现精准定位服务。本文将探讨如何利用IP地址精准定位服务&#xff0c;为个人和企业带来便利和价值。 一、什么是IP地址精准定位服务&#…

【FPGA】高云FPGA之IP核的使用->PLL锁相环

FPGA开发流程 1、设计定义2、设计输入3、分析和综合4、功能仿真5、布局布线6、时序仿真7、IO分配以及配置文件&#xff08;bit流文件&#xff09;的生成8、配置&#xff08;烧录&#xff09;FPGA9、在线调试 1、设计定义 使用高云内置IP核实现多路不同时钟输出 输入时钟50M由晶…

IDEA创建SpringBoot+Mybatis-Plus项目

IDEA创建SpringBootMybatis-Plus项目 一、配置Maven apache-maven-3.6.3的下载与安装&#xff08;详细教程&#xff09; 二、创建SpringBoot项目 在菜单栏选择File->new->project->Spring Initializr&#xff0c;然后修改Server URL为start.aliyun.com&#xff0c…

【图像文本化】Base64编解码OpenCV4中 Mat 对象

学习《OpenCV应用开发&#xff1a;入门、进阶与工程化实践》一书 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; 前言 很多时候在开发中&#xff0c;需要保存图像为文本形式&#xff0c;以便于存储与传输。最常见的就是把图像文件编码为Ba…

C# CAD交互界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…