最简单的网站代码/制作一个网站步骤
Backtrader 文档学习-Target Orders
第五部分 ipython 代码中,有详细解释持仓价值Value的计算,算是彩蛋。
1. 概述
sizer不能决定操作是买还是卖,意味着需要一个新的概念,通过增加小智能层可以决定买卖,即通过持仓份额可以决定买卖操作。
这就是策略中order_target_xxx方法族的作用。受zipline的方法的启发,提供了简单指定最终target的机会,target实现:
- size 特定资产组合中的股票、合同数量
- value 投资组合中资产的货币单位价值
- percent 投资组合中资产价值的百分比(来自当前投资组合)
在这种情况下,关键是指定最终target,该方法决定操作是买入还是卖出。同样的逻辑适用于3种方法。order_target_size参数设置:
-
如果目标大于头寸,则发出买入指令,差值为目标-头寸大小 :
- Pos: 0, target: 7 -> buy(size=7 - 0) -> buy(size=7)
- Pos: 3, target: 7 -> buy(size=7 - 3) -> buy(size=4)
- Pos: -3, target: 7 -> buy(size=7 - -3) -> buy(size=10)
- Pos: -3, target: -2 -> buy(size=-2 - -3) -> buy(size=1)
-
如果目标小于头寸,则根据头寸大小-目标的差额发出卖出指令:
- Pos: 0, target: -7 -> sell(size=0 - -7) -> sell(size=7)
- Pos: 3, target: -7 -> sell(size=3 - -7) -> sell(size=10)
- Pos: -3, target: -7 -> sell(size=-3 - -7) -> sell(size=4)
- Pos: 3, target: 2 -> sell(size=3 - 2) -> sell(size=1)
当使用order_target_value确定价值时,投资组合中资产的当前价值和头寸规模都将被考虑在内,以决定最终的基础操作,理由是:
-
如果头寸规模为负(空头),目标价值必须大于当前价值,这意味着卖出更多
按这个逻辑操作:- If target > value and size >=0 -> buy
- If target > value and size < 0 -> sell
- If target < value and size >= 0 -> sell
- If target < value and size < 0 -> buy
order_target_percent 的逻辑与order_target_value的逻辑相同。考虑投资组合的当前总价值来确定资产的目标价值 。
2. 示例
示例中的逻辑相当简单,只是为了测试效果,规则如下:
- 在奇数月份(1月、3月……),order_target_value =day * 1000,模拟了一个不断增加的target 。
- 在偶数月份(2月、4月……),order_target_value = 31 - day ,模拟了一个递减的target 。
(1)order_target_size
0001 - 2005-01-03 - Position Size: 00 - Value 1000000.00
0001 - 2005-01-03 - Order Target Size: 03
0002 - 2005-01-04 - Position Size: 03 - Value 999994.39
0002 - 2005-01-04 - Order Target Size: 04
0003 - 2005-01-05 - Position Size: 04 - Value 999992.48
0003 - 2005-01-05 - Order Target Size: 05
0004 - 2005-01-06 - Position Size: 05 - Value 999988.79
0004 - 2005-01-06 - Order Target Size: 06
0005 - 2005-01-07 - Position Size: 06 - Value 999991.41
0005 - 2005-01-07 - Order Target Size: 07
0006 - 2005-01-10 - Position Size: 07 - Value 999993.89
0006 - 2005-01-10 - Order Target Size: 10
0007 - 2005-01-11 - Position Size: 10 - Value 999987.32
0007 - 2005-01-11 - Order Target Size: 11
0008 - 2005-01-12 - Position Size: 11 - Value 999992.38
0008 - 2005-01-12 - Order Target Size: 12
0009 - 2005-01-13 - Position Size: 12 - Value 999982.68
... ...
0021 - 2005-02-01 - Position Size: 31 - Value 999954.68
0021 - 2005-02-01 - Order Target Size: 30
0022 - 2005-02-02 - Position Size: 30 - Value 999979.65
0022 - 2005-02-02 - Order Target Size: 29
0023 - 2005-02-03 - Position Size: 29 - Value 999966.33
0023 - 2005-02-03 - Order Target Size: 28
0024 - 2005-02-04 - Position Size: 28 - Value 999963.99
0024 - 2005-02-04 - Order Target Size: 27
0025 - 2005-02-07 - Position Size: 27 - Value 999949.19
0025 - 2005-02-07 - Order Target Size: 24
0026 - 2005-02-08 - Position Size: 24 - Value 999947.06
1月份,该target 从第一个交易日3日开始,仓位3,并不断增加。位置大小最初从0移动到3,然后以1为增量。 1月结束最后一个订单目标是31。
当进入2月1日时头寸规模,此时新的target被要求为30,并随着头寸的减少而递减1。
(2) order_target_value
0001 - 2005-01-03 - Position Size: 00 - Value 1000000.00
0001 - 2005-01-03 - Order Target Size: 03
0002 - 2005-01-04 - Position Size: 03 - Value 999994.39
0002 - 2005-01-04 - Order Target Size: 04
0003 - 2005-01-05 - Position Size: 04 - Value 999992.48
0003 - 2005-01-05 - Order Target Size: 05
0004 - 2005-01-06 - Position Size: 05 - Value 999988.79
0004 - 2005-01-06 - Order Target Size: 06
0005 - 2005-01-07 - Position Size: 06 - Value 999991.41
0005 - 2005-01-07 - Order Target Size: 07
0006 - 2005-01-10 - Position Size: 07 - Value 999993.89
0006 - 2005-01-10 - Order Target Size: 10
0007 - 2005-01-11 - Position Size: 10 - Value 999987.32
... ...
0020 - 2005-01-31 - Position Size: 28 - Value 999968.70
0020 - 2005-01-31 - Order Target Size: 31
0021 - 2005-02-01 - Position Size: 31 - Value 999954.68
0021 - 2005-02-01 - Order Target Size: 30
0022 - 2005-02-02 - Position Size: 30 - Value 999979.65
0022 - 2005-02-02 - Order Target Size: 29
0023 - 2005-02-03 - Position Size: 29 - Value 999966.33
0023 - 2005-02-03 - Order Target Size: 28
0024 - 2005-02-04 - Position Size: 28 - Value 999963.99
0024 - 2005-02-04 - Order Target Size: 27
0025 - 2005-02-07 - Position Size: 27 - Value 999949.19
0025 - 2005-02-07 - Order Target Size: 24
(3)order_target_percent
0001 - 2005-01-03 - Position Size: 00 - Value 1000000.00
0001 - 2005-01-03 - data percent 0.00
0001 - 2005-01-03 - Order Target Percent: 0.03
0002 - 2005-01-04 - Position Size: 785 - Value 998532.05
0002 - 2005-01-04 - data percent 0.03
0002 - 2005-01-04 - Order Target Percent: 0.04
0003 - 2005-01-05 - Position Size: 1091 - Value 998007.44
0003 - 2005-01-05 - data percent 0.04
0003 - 2005-01-05 - Order Target Percent: 0.05
0004 - 2005-01-06 - Position Size: 1381 - Value 996985.64
0004 - 2005-01-06 - data percent 0.05
0004 - 2005-01-06 - Order Target Percent: 0.06
0005 - 2005-01-07 - Position Size: 1688 - Value 997708.36
0005 - 2005-01-07 - data percent 0.06
0005 - 2005-01-07 - Order Target Percent: 0.07
0006 - 2005-01-10 - Position Size: 1942 - Value 998397.32
0006 - 2005-01-10 - data percent 0.07
0006 - 2005-01-10 - Order Target Percent: 0.10
... ...
0020 - 2005-01-31 - Position Size: 7985 - Value 991966.28
0020 - 2005-01-31 - data percent 0.28
0020 - 2005-01-31 - Order Target Percent: 0.31
0021 - 2005-02-01 - Position Size: 8733 - Value 988008.94
0021 - 2005-02-01 - data percent 0.31
0021 - 2005-02-01 - Order Target Percent: 0.30
0022 - 2005-02-02 - Position Size: 8530 - Value 995005.45
0022 - 2005-02-02 - data percent 0.30
0022 - 2005-02-02 - Order Target Percent: 0.29
0023 - 2005-02-03 - Position Size: 8120 - Value 991240.75
0023 - 2005-02-03 - data percent 0.29
0023 - 2005-02-03 - Order Target Percent: 0.28
0024 - 2005-02-04 - Position Size: 7910 - Value 990607.25
0024 - 2005-02-04 - data percent 0.28
3. 代码
from __future__ import (absolute_import, division, print_function,unicode_literals)import argparse
from datetime import datetimeimport backtrader as btclass TheStrategy(bt.Strategy):'''This strategy is loosely based on some of the examples from the VanK. Tharp book: *Trade Your Way To Financial Freedom*. The logic:- Enter the market if:- The MACD.macd line crosses the MACD.signal line to the upside- The Simple Moving Average has a negative direction in the last xperiods (actual value below value x periods ago)- Set a stop price x times the ATR value away from the close- If in the market:- Check if the current close has gone below the stop price. If yes,exit.- If not, update the stop price if the new stop price would be higherthan the current'''params = (('use_target_size', False),('use_target_value', False),('use_target_percent', False),)def notify_order(self, order):if order.status == order.Completed:passif not order.alive():self.order = None # indicate no order is pendingdef start(self):self.order = None # sentinel to avoid operrations on pending orderdef next(self):dt = self.data.datetime.date()portfolio_value = self.broker.get_value()print('%04d - %s - Position Size: %02d - Value %.2f' %(len(self), dt.isoformat(), self.position.size, portfolio_value))data_value = self.broker.get_value([self.data])if self.p.use_target_value:print('%04d - %s - data value %.2f' %(len(self), dt.isoformat(), data_value))elif self.p.use_target_percent:port_perc = data_value / portfolio_valueprint('%04d - %s - data percent %.2f' %(len(self), dt.isoformat(), port_perc))if self.order:return # pending order executionsize = dt.dayif (dt.month % 2) == 0:size = 31 - sizeif self.p.use_target_size:target = sizeprint('%04d - %s - Order Target Size: %02d' %(len(self), dt.isoformat(), size))self.order = self.order_target_size(target=size)elif self.p.use_target_value:value = size * 1000print('%04d - %s - Order Target Value: %.2f' %(len(self), dt.isoformat(), value))self.order = self.order_target_value(target=value)elif self.p.use_target_percent:percent = size / 100.0print('%04d - %s - Order Target Percent: %.2f' %(len(self), dt.isoformat(), percent))self.order = self.order_target_percent(target=percent)def runstrat(args=None):args = parse_args(args)cerebro = bt.Cerebro()cerebro.broker.setcash(args.cash)dkwargs = dict()if args.fromdate is not None:dkwargs['fromdate'] = datetime.strptime(args.fromdate, '%Y-%m-%d')if args.todate is not None:dkwargs['todate'] = datetime.strptime(args.todate, '%Y-%m-%d')# datadata = bt.feeds.YahooFinanceCSVData(dataname=args.data, **dkwargs)cerebro.adddata(data)# strategycerebro.addstrategy(TheStrategy,use_target_size=args.target_size,use_target_value=args.target_value,use_target_percent=args.target_percent)cerebro.run()if args.plot:pkwargs = dict(style='bar')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)def parse_args(pargs=None):parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,description='Sample for Order Target')parser.add_argument('--data', required=False,default='./datas/yhoo-1996-2015.txt',help='Specific 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('--cash', required=False, action='store',type=float, default=1000000,help='Ending date in YYYY-MM-DD format')pgroup = parser.add_mutually_exclusive_group(required=True)pgroup.add_argument('--target-size', required=False, action='store_true',help=('Use order_target_size'))pgroup.add_argument('--target-value', required=False, action='store_true',help=('Use order_target_value'))pgroup.add_argument('--target-percent', required=False,action='store_true',help=('Use order_target_percent'))# 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:\n''\n'' --plot style="candle" (to plot candles)\n'))if pargs is not None:return parser.parse_args(pargs)return parser.parse_args()if __name__ == '__main__':runstrat()
4. Help
python ./order_target.py --help
usage: order_target.py [-h] [--data DATA] [--fromdate FROMDATE][--todate TODATE] [--cash CASH](--target-size | --target-value | --target-percent)[--plot [kwargs]]Sample for Order Targetoptional arguments:-h, --help show this help message and exit--data DATA Specific 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)--cash CASH Ending date in YYYY-MM-DD format (default: 1000000)--target-size Use order_target_size (default: False)--target-value Use order_target_value (default: False)--target-percent Use order_target_percent (default: False)--plot [kwargs], -p [kwargs]Plot the read data applying any kwargs passed Forexample: --plot style="candle" (to plot candles)(default: None)
5.ipython代码
只加载3个月的数据,增加了说明:
from __future__ import (absolute_import, division, print_function,unicode_literals)from datetime import datetimeimport backtrader as bt%matplotlib inlineclass TheStrategy(bt.Strategy):'''This strategy is loosely based on some of the examples from the VanK. Tharp book: *Trade Your Way To Financial Freedom*. The logic:- Enter the market if:- The MACD.macd line crosses the MACD.signal line to the upside- The Simple Moving Average has a negative direction in the last xperiods (actual value below value x periods ago)- Set a stop price x times the ATR value away from the close- If in the market:- Check if the current close has gone below the stop price. If yes,exit.- If not, update the stop price if the new stop price would be higherthan the current'''params = (('use_target_size', False),('use_target_value', False),('use_target_percent', False),)def notify_order(self, order):if order.status == order.Completed:pass# 没有挂起的order ,order置空if not order.alive():self.order = None # indicate no order is pendingdef start(self):# 避免有挂起order未处理,置空 self.order = None # sentinel to avoid operrations on pending orderdef next(self):# 当前data的日期,去时分秒dt = self.data.datetime.date()# 投资组合货币价值 ,如何计算出来的??portfolio_value = self.broker.get_value()# 处理data长度 ,日期 ,仓位 ,组合价值# self.p.use_target_size 默认打印position size# 按 target_size 交易print('%04d - %s - Position Size: %02d - Value %.2f' %(len(self), dt.isoformat(), self.position.size, portfolio_value))# get_value 带参数,用当前的收盘价计算持仓价值# data_value = self.data.close[0] * self.position.sizedata_value = self.broker.get_value([self.data])print('datavalue: %.2f, open:%.2f, close:%.2f,close-open:%.2f' % (data_value,self.data.open[0],self.data.close[0],self.data.close[0]-self.data.open[0]))# 按 target_value 交易if self.p.use_target_value:print('%04d - %s - data value %.2f' %(len(self), dt.isoformat(), data_value))# 按 target_percent 交易elif self.p.use_target_percent:port_perc = data_value / portfolio_valueprint('%04d - %s - data percent %.2f' %(len(self), dt.isoformat(), port_perc))# 如果有挂起订单 ,不做后续处理,一个订单处理完,再开始下一个订单if self.order:return # pending order execution# 仓位设置为日期的天size = dt.day# 如果是偶数月if (dt.month % 2) == 0:# 仓位递减交易size = 31 - size# target_size 模式if self.p.use_target_size:target = sizeprint('%04d - %s - Order Target Size: %02d' %(len(self), dt.isoformat(), size))self.order = self.order_target_size(target=size)# target_value 模式elif self.p.use_target_value:value = size * 1000print('%04d - %s - Order Target Value: %.2f' %(len(self), dt.isoformat(), value))self.order = self.order_target_value(target=value)# target_percent 模式elif self.p.use_target_percent:percent = size / 100.0print('%04d - %s - Order Target Percent: %.2f' %(len(self), dt.isoformat(), percent))self.order = self.order_target_percent(target=percent)def runstrat(args=None):# define parameterparam_fromdate = '2005-01-01'param_todate = '2005-03-31'param_data = './datas/yhoo-1996-2015.txt'param_cash = 100000# set target parameter param_target_size = Trueparam_target_value = Falseparam_target_percent = False# set plot param_plot = Truecerebro = bt.Cerebro()cerebro.broker.setcash(param_cash)# 数据加载参数字典dkwargs = dict()if param_fromdate is not None:dkwargs['fromdate'] = datetime.strptime(param_fromdate, '%Y-%m-%d')if param_todate is not None:dkwargs['todate'] = datetime.strptime(param_todate, '%Y-%m-%d')# datadata = bt.feeds.YahooFinanceCSVData(dataname=param_data, **dkwargs)cerebro.adddata(data)# strategycerebro.addstrategy(TheStrategy,use_target_size=param_target_size,use_target_value=param_target_value,use_target_percent=param_target_percent)cerebro.run()if param_plot:# 绘图参数字典pkwargs = dict(style='bar')if param_plot is not True: # evals to True but is not Truenpkwargs = eval('dict(' + param_plot + ')') # args were passedpkwargs.update(npkwargs)cerebro.plot(iplot=False,**pkwargs)if __name__ == '__main__':runstrat()
(1)order_target_size
输出结果:
0001 - 2005-01-03 - Position Size: 00 - Value 100000.00
datavalue: 0.00, open:38.36, close:38.18,close-open:-0.18
0001 - 2005-01-03 - Order Target Size: 03
0002 - 2005-01-04 - Position Size: 03 - Value 99994.39
datavalue: 109.74, open:38.45, close:36.58,close-open:-1.87
0002 - 2005-01-04 - Order Target Size: 04
0003 - 2005-01-05 - Position Size: 04 - Value 99992.48
datavalue: 144.52, open:36.69, close:36.13,close-open:-0.56
0003 - 2005-01-05 - Order Target Size: 05
0004 - 2005-01-06 - Position Size: 05 - Value 99988.79
datavalue: 177.15, open:36.32, close:35.43,close-open:-0.89
0004 - 2005-01-06 - Order Target Size: 06
0005 - 2005-01-07 - Position Size: 06 - Value 99991.41
datavalue: 215.76, open:35.99, close:35.96,close-open:-0.03
0005 - 2005-01-07 - Order Target Size: 07
0006 - 2005-01-10 - Position Size: 07 - Value 99993.89
datavalue: 254.24, open:36.00, close:36.32,close-open:0.32
0006 - 2005-01-10 - Order Target Size: 10
0007 - 2005-01-11 - Position Size: 10 - Value 99987.32
datavalue: 356.60, open:36.31, close:35.66,close-open:-0.65
0007 - 2005-01-11 - Order Target Size: 11
0008 - 2005-01-12 - Position Size: 11 - Value 99992.38
datavalue: 397.54, open:35.88, close:36.14,close-open:0.26
0008 - 2005-01-12 - Order Target Size: 12
0009 - 2005-01-13 - Position Size: 12 - Value 99982.68
datavalue: 423.96, open:36.12, close:35.33,close-open:-0.79
0009 - 2005-01-13 - Order Target Size: 13
0010 - 2005-01-14 - Position Size: 13 - Value 99999.96
datavalue: 477.10, open:35.86, close:36.70,close-open:0.84
0010 - 2005-01-14 - Order Target Size: 14
0011 - 2005-01-18 - Position Size: 14 - Value 100006.28
datavalue: 520.52, open:37.10, close:37.18,close-open:0.08
0011 - 2005-01-18 - Order Target Size: 18
0012 - 2005-01-19 - Position Size: 18 - Value 99989.54
datavalue: 656.10, open:38.08, close:36.45,close-open:-1.63
0012 - 2005-01-19 - Order Target Size: 19
0013 - 2005-01-20 - Position Size: 19 - Value 99977.87
datavalue: 679.82, open:35.39, close:35.78,close-open:0.39
0013 - 2005-01-20 - Order Target Size: 20
0014 - 2005-01-21 - Position Size: 20 - Value 99967.98
datavalue: 706.00, open:36.07, close:35.30,close-open:-0.77
0014 - 2005-01-21 - Order Target Size: 21
0015 - 2005-01-24 - Position Size: 21 - Value 99939.03
datavalue: 712.53, open:35.48, close:33.93,close-open:-1.55
0015 - 2005-01-24 - Order Target Size: 24
0016 - 2005-01-25 - Position Size: 24 - Value 99939.81
datavalue: 816.96, open:34.55, close:34.04,close-open:-0.51
0016 - 2005-01-25 - Order Target Size: 25
0017 - 2005-01-26 - Position Size: 25 - Value 99974.89
datavalue: 886.75, open:34.71, close:35.47,close-open:0.76
0017 - 2005-01-26 - Order Target Size: 26
0018 - 2005-01-27 - Position Size: 26 - Value 99955.74
datavalue: 902.98, open:35.38, close:34.73,close-open:-0.65
0018 - 2005-01-27 - Order Target Size: 27
0019 - 2005-01-28 - Position Size: 27 - Value 99952.60
datavalue: 934.74, open:34.90, close:34.62,close-open:-0.28
0019 - 2005-01-28 - Order Target Size: 28
0020 - 2005-01-31 - Position Size: 28 - Value 99968.70
datavalue: 985.88, open:35.04, close:35.21,close-open:0.17
0020 - 2005-01-31 - Order Target Size: 31
0021 - 2005-02-01 - Position Size: 31 - Value 99954.68
datavalue: 1077.25, open:35.13, close:34.75,close-open:-0.38
0021 - 2005-02-01 - Order Target Size: 30
0022 - 2005-02-02 - Position Size: 30 - Value 99979.65
datavalue: 1066.20, open:36.02, close:35.54,close-open:-0.48
0022 - 2005-02-02 - Order Target Size: 29
0023 - 2005-02-03 - Position Size: 29 - Value 99966.33
datavalue: 1017.61, open:35.27, close:35.09,close-open:-0.18
0023 - 2005-02-03 - Order Target Size: 28
0024 - 2005-02-04 - Position Size: 28 - Value 99963.99
datavalue: 980.56, open:34.71, close:35.02,close-open:0.31
0024 - 2005-02-04 - Order Target Size: 27
分析Value:
看value,如何计算出来的 ?每个人都有疑问 ?
增加了一行过程计算数据 :
datavalue: 109.74, open:38.45, close:36.58,close-open:-1.87
经过一下午研究,在Excel中拼凑计算,终于和BT数据一致了:
Excel模拟计算下载
相关文章:

Backtrader 文档学习-Target Orders
Backtrader 文档学习-Target Orders 第五部分 ipython 代码中,有详细解释持仓价值Value的计算,算是彩蛋。 1. 概述 sizer不能决定操作是买还是卖,意味着需要一个新的概念,通过增加小智能层可以决定买卖,即通过持仓份…...

QT发生弹出警告窗口
QTC开发程序弹出警告窗口,如上图 实施代码: #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误,请检查您的操作。");}上面的文字可以更改&#x…...

vue3使用特殊字符@、~代替路径src
在vite.config.js中引入 import { resolve } from pathexport default defineConfig({resolve:{alias:{~:resolve(__dirname,src)}} })vue3使用特殊字符、~代替路径src_vue3 ~/-CSDN博客...

Java中的HTTPS通信
在Java中实现HTTPS通信,主要涉及到SSL/TLS协议的使用,用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。 一、基本概念 HTTPS,全称为Hypertext Transfer Protocol Secure,是HTTP的安全版本。它使用SSL/…...

威联通QNAP NAS结合cpolar内网穿透实现公网远程访问NAS中存储的文件
文章目录 推荐 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣…...

Ubuntu上安装部署Qt
首先需要下载对应的虚拟机软件和ubuntu镜像,虚拟机软件使用VMware或者Virtual Box都行,我用的是前者,这里是VMware的下载链接:下载 VMware Workstation Pro | CN。Ubuntu镜像推荐去清华的网站下载:Index of /ubuntu-re…...

MySQL的`FOR UPDATE`详解
MySQL的FOR UPDATE详解 欢迎阅读本博客,今天我们将深入探讨MySQL中的FOR UPDATE语句,它用于在事务中锁定选择的数据行,确保在事务结束前其他事务无法修改这些数据。 1. FOR UPDATE基础 FOR UPDATE是用于SELECT语句的一种选项,它…...

计算机网络 第4章(网络层)
系列文章目录 计算机网络 第1章(概述) 计算机网络 第2章(物理层) 计算机网络 第3章(数据链路层) 计算机网络 第4章(网络层) 计算机网络 第5章(运输层) 计算机…...

HDD的烦恼:HAMR会让SMR黯然失色吗?
HDD相关阅读参考: HDD回暖于2024,与SSD决战于2028 HDD最后的冲刺:大容量硬盘的奋力一搏 叠瓦式磁记录技术(SMR)自20世纪90年代起开始研究,于2010年后逐渐商业化应用于高密度硬盘。该技术的核心理念在于通…...

linux安装docker(入门一)
环境:centos 7(linux) 网站 官网: https://docs.docker.com/ Docker Hub 网站: https://hub.docker.com/ 容器官方概述 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 &…...

Node.js中fs模块
fs模块是Node.js中的一个核心模块,全称为File System(文件管理系统)。该模块专门用来操作系统中的文件,常用的操作方式是对文件的读取和写入。 fs模块的API大都提供三种操作方式: 同步操作文件:代码会被阻…...

google-webrtc 原理
Google WebRtc Android 使用详解(包括客户端和服务端代码) - 知乎 (zhihu.com) 【记】Android使用WebRTC未释放资源导致的内存泄露 - 掘金 (juejin.cn)...

uniapp 框架搭建及使用
uniapp官方文档 uview官网文档 前期工作: 1.下载Hbuilder X编辑器;2.熟悉uniapp的相关文档;3.查找合适的UI组件库,我使用的是uview(适配H5和小程序) 创建uniapp 新建: 新项目的话打开Hbuilder X选择项目&…...

嵌入式软件工程师面试题——2025校招社招通用(计算机网络篇)(三十二)
说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…...

《WebKit 技术内幕》学习之十一(4):多媒体
4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历,这样的应用场景相当典型和流行,但是基本上来说它们都是每个公司推出的私有产品,而且通信等协议也都是保密的,这使得一种产品的用户基本上不可能…...

k8s基础知识
理解docker [二] - namespace - 知乎 Kubernetes Controller 机制详解(一)-赵化冰的博客 | Zhaohuabing Blog K8S之自定义Controller - 知乎 Controller - K8S - 知乎 https://coolshell.cn/articles/17010.html/comment-page-2#comment-2133157 ht…...

Docker容器引擎(3)
目录 一.Docker 镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile创建: Dockerfile 操作常用的指令: ADD 和 COPY 的区别? CMD 和 ENTRYPOINT 的区别? 容器启动命令的优先级 如…...

【Android12】Android Framework系列---Adb和PMS安装apk源码流程
Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统(注意:特定类型的apk,比如persist类型是无法通过adb安装的) 下述命令中adb解析install命令,并调用Android PackageManagerS…...

web漏洞总结大全(基础)
前言 本文章是和cike_y师傅一起写的,cike_y博客:https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正,共同维护这个项目,本文的github项目地址: https://github.com/baimao-box/Sum…...

获取双异步返回值时,如何保证主线程不阻塞?
目录 一、前情提要二、JDK8的CompletableFuture1、ForkJoinPool2、从ForkJoinPool和ThreadPoolExecutor探索CompletableFuture和Future的区别 三、通过CompletableFuture优化 “通过Future获取异步返回值”1、通过Future获取异步返回值关键代码(1)将异步…...

hosts文件修改后无法保存的解决办法
目录 第一步 右键点击C盘里的hosts文件,选择重命名。 第二步 在桌面新建一个txt文件,命名为hosts。并把自己需要的内容写入保存。 第三步 把hosts.txt文件复制到原本hosts文件的路径下。右键选中hosts.txt文件,选择重命名,去掉…...

源码篇--Redis 五种数据类型
文章目录 前言一、 字符串类型:1.1 字符串的编码格式:1.1.1 raw 编码格式:1.1.2 empstr编码格式:1.1.3 int 编码格式:1.1.4 字符串存储结构展示: 二、 list类型:2.1 List 底层数据支持:2.2 List 源码实现:2.3 List 结构…...

Sulfo Cy2 Biotin,水溶性 Cy2 生物素,能够与各种氨基基团特异性结合
您好,欢迎来到新研之家 文章关键词:Sulfo Cyanine2 Biotin,Sulfo Cy2 Biotin,水溶性 Cy2 生物素,Sulfo-Cy2-Biotin,水溶性-Cy2-生物素 一、基本信息 产品简介:Sulfo Cyanine2 Biotin, also k…...

NineData支持制定安全、可靠的SQL开发规范
在和数据库打交道中,不管是数据库管理员(DBA)还是开发人员,经常会做一些CURD操作。因为每个人对数据库的了解程度不一样,所以在项目上线时,往往还需要专职人员对数据库的CURD操作进行审核,确保C…...

LSTM时间序列预测
本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:【1】演示:基于LSTM深度学习网络预测时间序列(MATLAB工具箱)_哔哩哔哩_bilibili % Forecast of time series based on LSTM deep learn…...

Rocky8 顺利安装 Airflow 并解决数据库报错问题
rocky是替代centos的服务器系统,稳定可靠。rocky8会比centos7新,可以支持更多服务软件的安装,免去升级各种库的麻烦,本文运行airflow服务就用rocky8系统。airflow是一个定时任务管理系统,功能强大,目前是ap…...

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-3 线性二次型调节器(LQR)
本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-3 线性二次型调节器(LQR) 1. 数学推导2. 案例反洗与代码详解 1. 数学推导 2. 案例反洗与代码详解...

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs
大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…...

汤姆·齐格弗里德《纳什均衡与博弈论》笔记(4)博弈论与人性
第五章 弗洛伊德的梦——博弈和大脑 大脑和经济学 曾经有一段时间——就像在弗洛伊德的年代——心理学家们无法准确地回答人类行为背后的大脑机制。但随着现代神经科学的兴起,情形改变了。比如,人类的情绪不再像过去一样是个谜。科学家们可以观察当人们…...

MacOS平台翻译OCR软件,双管齐下,还可自定义插件,为其添砖加瓦!
小编昨天为大家分享了Windows系统下的一款功能强大且免费的 OCR 开源工具 Umi-OCR。 今天则为大家推荐一款 MacOS系统下的一款 翻译 OCR 多功能双管齐下的桌面应用软件 Bob。这款软件虽然也上线了GitHub,但它不是一款开源软件,仓库只是作者为了用户反馈…...