initial vault sync

This commit is contained in:
冯先生
2026-06-23 00:24:32 +08:00
commit 8e7723c17a
795 changed files with 157458 additions and 0 deletions

View File

@ -0,0 +1,5 @@
#linux #ubuntu
[[怎么在linux中给文件重命名]]

View File

@ -0,0 +1,3 @@
#ubuntu #linux #软件配置
[[Ubuntu配置专题]]

View File

@ -0,0 +1,10 @@
#量化交易 #策略研究 #DeepSeek #交易 #backtrader
[[我的第一个策略优化记录五、关于框架的深入思考与backtrader初涉]]
[[我的第一个策略优记录六、python的持续提升与backtrader的研究路线]]
[[我的第一个策略优化记录八、backtrader的学习资源]]
[[vn.py和backtrader的关系]]
[[Backtrader中的next函数是什么意思]]
因为还没有正式开始backtrader的使用和学习研究因此现在索引进来的内容都是来自于DeepSeek的回答。随后生成的所有和backtrader相关的卡片笔记都可以索引至此处。

View File

@ -0,0 +1,43 @@
#交易 #量化交易 #freqtrade #docker #软件配置
---
对于docker的使用我此前一直有疑虑。
一方面是性能的疑虑,毕竟不是完全运行在系统硬件层面的,我担心性能有差异。
另一方面我想一步到位打造基于Linux的个人交易工作站。
所以,先天性对这个技术路线不是很重视,甚至排斥情绪。
但是在基于未来对于交易平台的选择
以及对于日常工作和生活的兼容性上我最终较不情愿的开始了docker的使用测试。
昨天按照官方文档10分钟内就完成了docker中freqtrade的配置
今天又完成了代理配置,数据下载、策略回测等工作
发现从性能上来看并没有明显的变化
因此决定将docker下的freqtrade开发作为我的主要途径
**坚决不再改了**
---
[[docker运行freqtrade时的代理设置]]
[[docker运行freqtrade时时区的统一]]
---
### 2026.3.12 更新
```bash
# Download the latest image
docker compose pull
# Restart the image
docker compose up -d
```
因为原来只删除了docker而没有删除这个ft_userdata文件夹相应的也就没有删除docker-compose.yml配置文件因此使用更新的操作就可恢复docker部署的freqtrade容器。
当然如果从头安装的话按照freqtrade文档一步一步来就可以了
```bash
docker compose run --rm freqtrade download-data --pairs ETH/BTC --exchange binance --days 5 -t 1h
# 测试下载命令后运行成功
# docker已经成功部署
```

View File

@ -0,0 +1,8 @@
#交易 #量化交易 #软件配置 #策略研究 #freqtrade #DeepSeek #Python学习
[[freqtrade的安装和配置记录]]
[[freqtrade数据下载专题]]
[[freqtrade回测专题]]
[[freqtrade策略研究专题]]
[[docker运行freqtrade专题索引]]

View File

@ -0,0 +1,14 @@
#工作 #个人提升 #三省吾身 #写作 #心得
2026.3.28 本周末就青创赛推进过程一口气闪念了12条心得感觉正在突破管理界限上那曾窗户纸。[[周末青创赛推进的12条闪念]]
2026.3.29 [[《智慧书》与我管理智慧的提升]]
2026.3.30 [[一个心法:你怕啥?你慌啥?你急啥?]]、[[两个落脚点:执行闭环、早请示晚汇报]]

View File

@ -0,0 +1,35 @@
---
title: 【索引】Halo博客搭建过程记录
slug: suo-yin-halobo-ke-da-jian-guo-cheng-ji-lu
cover: ""
categories: []
tags: []
halo:
site: http://www.xybkwd.top
name: afd6729f-f0e8-4805-b8d5-fca1fa718463
publish: false
创建时间: 2025-12-01T16:26
更新时间: 2025-12-01T16:26
---
#软件配置 #博客 #云服务器
### 文章结构
* halo及lucky的docker部署及端口设置
* 域名解析与反向代理设置
* 图床及对象存储桶设置
* 博客主题设置、个人令牌设置
* obsidian中halo、image auto upload插件配置
* 博客自定义模板设置
[[2025.12 重新在docker部署安装halo]]因为此前不是使用docker-compose安装的导致升级不方便。重新安装后即可一键升级。
---
### 思考:文章撰写、索引编制以及超链接的生成应该怎么管理
索引文章不适合在obsidian下写作
因为索引文章大多是开放性的,有概率会不断增加文章数量
因此**索引页更适合在博客的主页中动态编辑。**
Obsidian中更适合书写一篇篇独立的文章并发布至博客中
超链接应该在索引页基本构建完成,独立文章发布后进行创建

View File

@ -0,0 +1,12 @@
#量化交易 #策略研究 #Python学习 #DeepSeek
[[我的第一个策略优化记录(一、异常处理)]]
[[我的第一个策略优化记录(二、脚本结构优化)]]
[[我的第一个策略优化记录(三、我的脚本和成熟框架的对比)]]
[[我的第一个策略优化记录(四、关于框架的初步思考)]]
[[我的第一个策略优化记录五、关于框架的深入思考与backtrader初涉]]
[[我的第一个策略优记录六、python的持续提升与backtrader的研究路线]]
[[我的第一个策略优化记录(七、金融与数学知识)]]
[[我的第一个策略优化记录八、backtrader的学习资源]]
[[我的第一个策略优化记录九、关于Github的使用和学习]]

View File

@ -0,0 +1,502 @@
#交易 #量化交易 #freqtrade #策略研究
[[talib.abstract和qtpylib是什么]]
[[freqtrade策略中的INTERFACE_VERSION = 3是什么意思]]统一版本号
[[freqtrade中Hyperoptable parameters 这段策略的作用是什么?和参数调优相关吗?]]是调优相关,回测中固定,实盘中不要开启实时优化。
[[freqtrade策略中的minimal_roi机制是怎么设计的]] 动态设计,短时突破收益要求高,长时间持仓收益相对降低。
[[freqtrade策略中的移动止损Trailing Stop是如何设置的]] 很关键的设置。
[[freqtrade策略中order_types应该怎么设置]] 关注最后一个stoploss_on_exchange的设置。
---
[[freqtrade中populate_indicators()函数如何理解和使用?]]
[[freqtrade策略中如何同时加载多时间周期的数据用以策略计算]] 最终选择config预加载但是对于Resample重采样的实现方式也得能看懂。初次看到的时候这种方法让我惊为天人。
[[freqtrade实盘刚刚开始运行的时候是否可以加载相应数量的历史数据用于实时计算生成指标吗还是得等到足够数量的蜡烛图生成后才能进行计算和交易信号生成]] warm-up机制会加载足够的历史行情数据用于指标的计算和当下交易信号的生成。
[[freqtrade策略中这一句代码的语法是什么意思]] `def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:`
---
### 关于多时间框架的实现方式
[[freqtrade中根据config设置多时间周期数据预加载后实现多时间框架趋势判断和交易策略切换选择的策略示例代码]] 这是DeepSeek生成的回答即第一种方式。
```python
# 2. 多周期数据注入
def __init__(self, config: dict) -> None:
super().__init__(config)
self.dp = self.dataprovider
```
我感觉我没太看明白因此询问DeepSeek这句话期待进行语法讲解。
回答如下:[[freqtrade中self.dp.get_pair_dataframe()是一种怎样的实现方式?请详解。]]
我还是没太看明白。
之后把官方策略库的多时间周期策略扔给DeepSeek进行分析并让他判断那种写法更优。回答如下[[freqtrade中@informative装饰器和self.dp.get_pair_dataframe()实现方式的对比。(官方推荐方法为@informative装饰器]]
[[freqtrade中如何使用@informative装饰器对多时间框架的指标进行计算和利用]] 这里讲的明确,装饰器更优,而且给了较完整的实战代码。供参考。
[[freqtrade @informative 的自动重命名规则是什么?]]
![[multi_tf.py]]
最终的结论是使用@informative装饰器更加适合
先从这里学起吧。
但是我觉得之前提供的脚本代码非常整洁,通过`dataframe['market_regime']`将1h判断结果传递至5m数据几种不同的市场环境类型趋势、震荡、区间等不同行情使用**独立指标组**避免信号冲突。这个更好理解。**还是要再仔细理解self.dp.get_pair_dataframe()这个DeepSeek推荐给我的实现方式。**
无论如何,今日从确定多时间框架可以实现再策略中,到如今实现了多种表现方式,不得不说是一种突破。
日日突破,日日新。
学习正式如此。
2025.7.5
本来说今天有世界末日
但是对于策略的学习收获颇丰
开心,觉得写出自己第一个可通过回测的策略的时间
就快要到了
**一点感悟也是一点预测官方的每一个策略能够放在github中都是有深意的。
在之后各种策略的开发过程中,要多多从官方示例策略中找答案,参考借鉴在自己的代码中。**
---
### 关于自定义K线区间形态的识别用以构建匹配Price Action的策略
[[freqtrade是否可以实现基于K线形态识别的策略学习开发路线是什么]]
[[freqtrade是否支持自定义K线形态的识别监测]]
[[基于自定义K线区间形态的识别构建趋势追踪策略是否可行随后在此基础完善通道、区间和反转策略是否可行]]
---
```python
# 这是SampleStrategy的源代码在此学习可以留下标注记录
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# flake8: noqa: F401
# isort: skip_file
# --- Do not remove these imports ---
import numpy as np
import pandas as pd
from datetime import datetime, timedelta, timezone
from pandas import DataFrame
from typing import Optional, Union
from freqtrade.strategy import (
IStrategy,
Trade,
Order,
PairLocks,
informative, # @informative decorator
# Hyperopt Parameters
BooleanParameter,
CategoricalParameter,
DecimalParameter,
IntParameter,
RealParameter,
# timeframe helpers
timeframe_to_minutes,
timeframe_to_next_date,
timeframe_to_prev_date,
# Strategy helper functions
merge_informative_pair,
stoploss_from_absolute,
stoploss_from_open,
)
# --------------------------------
# Add your lib to import here
import talib.abstract as ta
from technical import qtpylib
# This class is a sample. Feel free to customize it.
class MyStrategy(IStrategy):
"""
This is a sample strategy to inspire you.
More information in https://www.freqtrade.io/en/latest/strategy-customization/
You can:
:return: a Dataframe with all mandatory indicators for the strategies
- Rename the class name (Do not forget to update class_name)
- Add any methods you want to build your strategy
- Add any lib you need to build your strategy
You must keep:
- the lib in the section "Do not remove these libs"
- the methods: populate_indicators, populate_entry_trend, populate_exit_trend
You should keep:
- timeframe, minimal_roi, stoploss, trailing_*
"""
# Strategy interface version - allow new iterations of the strategy interface.
# Check the documentation or the Sample strategy to get the latest version.
INTERFACE_VERSION = 3
# Can this strategy go short?
can_short: bool = True
# Minimal ROI designed for the strategy.
# This attribute will be overridden if the config file contains "minimal_roi".
minimal_roi = {
# "120": 0.0, # exit after 120 minutes at break even
#"60": 0.05,
#"30": 0.04,
#"0": 0.03,
"0": 0.10, # 10%盈利立即平仓部分仓位(20%)
"5": 0.05, # 5分钟后盈利5%平仓部分仓位(30%)
"10": 0.03, # 10分钟后盈利3%平仓剩余仓位(50%)
"30": 0.01 # 30分钟后只要有1%盈利就平仓
}
# Optimal stoploss designed for the strategy.
# This attribute will be overridden if the config file contains "stoploss".
stoploss = -0.05,
# Trailing stoploss
trailing_stop = True
# trailing_only_offset_is_reached = False
# trailing_stop_positive = 0.01
# trailing_stop_positive_offset = 0.0 # Disabled / not configured
# Optimal timeframe for the strategy.
timeframe = "5m"
# Run "populate_indicators()" only for new candle.
process_only_new_candles = True
# 得确定一下这句话的真正含义,是只看新生成的蜡烛,不看历史数据,还是其他的意思?
# These values can be overridden in the config.
use_exit_signal = True
exit_profit_only = False
ignore_roi_if_entry_signal = False
# Hyperoptable parameters
buy_rsi = IntParameter(low=1, high=50, default=30, space="buy", optimize=True, load=True)
sell_rsi = IntParameter(low=50, high=100, default=70, space="sell", optimize=True, load=True)
short_rsi = IntParameter(low=51, high=100, default=70, space="sell", optimize=True, load=True)
exit_short_rsi = IntParameter(low=1, high=50, default=30, space="buy", optimize=True, load=True)
# Number of candles the strategy requires before producing valid signals
startup_candle_count: int = 200
# Optional order type mapping.
order_types = {
"entry": "limit",
"exit": "limit",
"stoploss": "market",
"stoploss_on_exchange": False,
}
# Optional order time in force.
order_time_in_force = {"entry": "GTC", "exit": "GTC"}
plot_config = {
"main_plot": {
"tema": {},
"sar": {"color": "white"},
},
"subplots": {
"MACD": {
"macd": {"color": "blue"},
"macdsignal": {"color": "orange"},
},
"RSI": {
"rsi": {"color": "red"},
},
},
}
def informative_pairs(self):
"""
Define additional, informative pair/interval combinations to be cached from the exchange.
These pair/interval combinations are non-tradeable, unless they are part
of the whitelist as well.
For more information, please consult the documentation
:return: List of tuples in the format (pair, interval)
Sample: return [("ETH/USDT", "5m"),
("BTC/USDT", "15m"),
]
"""
return []
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
Adds several different TA indicators to the given DataFrame
Performance Note: For the best performance be frugal on the number of indicators
you are using. Let uncomment only the indicator you are using in your strategies
or your hyperopt configuration, otherwise you will waste your memory and CPU usage.
:param dataframe: Dataframe with data from the exchange
:param metadata: Additional information, like the currently traded pair
:return: a Dataframe with all mandatory indicators for the strategies
"""
# Momentum Indicators
# ------------------------------------
# ADX
#dataframe["adx"] = ta.ADX(dataframe)
dataframe['atr'] = ta.ATR(dataframe, timeperiod=14) # 添加ATR
# # Plus Directional Indicator / Movement
# dataframe['plus_dm'] = ta.PLUS_DM(dataframe)
# dataframe['plus_di'] = ta.PLUS_DI(dataframe)
# # Minus Directional Indicator / Movement
# dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
# dataframe['minus_di'] = ta.MINUS_DI(dataframe)
# # Aroon, Aroon Oscillator
# aroon = ta.AROON(dataframe)
# dataframe['aroonup'] = aroon['aroonup']
# dataframe['aroondown'] = aroon['aroondown']
# dataframe['aroonosc'] = ta.AROONOSC(dataframe)
# # Awesome Oscillator
# dataframe['ao'] = qtpylib.awesome_oscillator(dataframe)
# # Keltner Channel
# keltner = qtpylib.keltner_channel(dataframe)
# dataframe["kc_upperband"] = keltner["upper"]
# dataframe["kc_lowerband"] = keltner["lower"]
# dataframe["kc_middleband"] = keltner["mid"]
# dataframe["kc_percent"] = (
# (dataframe["close"] - dataframe["kc_lowerband"]) /
# (dataframe["kc_upperband"] - dataframe["kc_lowerband"])
# )
# dataframe["kc_width"] = (
# (dataframe["kc_upperband"] - dataframe["kc_lowerband"]) / dataframe["kc_middleband"]
# )
# # Ultimate Oscillator
# dataframe['uo'] = ta.ULTOSC(dataframe)
# # Commodity Channel Index: values [Oversold:-100, Overbought:100]
# dataframe['cci'] = ta.CCI(dataframe)
# RSI
dataframe["rsi"] = ta.RSI(dataframe)
# # Inverse Fisher transform on RSI: values [-1.0, 1.0] (https://goo.gl/2JGGoy)
# rsi = 0.1 * (dataframe['rsi'] - 50)
# dataframe['fisher_rsi'] = (np.exp(2 * rsi) - 1) / (np.exp(2 * rsi) + 1)
# # Inverse Fisher transform on RSI normalized: values [0.0, 100.0] (https://goo.gl/2JGGoy)
# dataframe['fisher_rsi_norma'] = 50 * (dataframe['fisher_rsi'] + 1)
# # Stochastic Slow
# stoch = ta.STOCH(dataframe)
# dataframe['slowd'] = stoch['slowd']
# dataframe['slowk'] = stoch['slowk']
# Stochastic Fast
#stoch_fast = ta.STOCHF(dataframe)
#dataframe["fastd"] = stoch_fast["fastd"]
#dataframe["fastk"] = stoch_fast["fastk"]
# # Stochastic RSI
# Please read https://github.com/freqtrade/freqtrade/issues/2961 before using this.
# STOCHRSI is NOT aligned with tradingview, which may result in non-expected results.
# stoch_rsi = ta.STOCHRSI(dataframe)
# dataframe['fastd_rsi'] = stoch_rsi['fastd']
# dataframe['fastk_rsi'] = stoch_rsi['fastk']
# MACD
# macd = ta.MACD(dataframe)
# dataframe["macd"] = macd["macd"]
# dataframe["macdsignal"] = macd["macdsignal"]
# dataframe["macdhist"] = macd["macdhist"]
# MFI
# dataframe["mfi"] = ta.MFI(dataframe)
# # ROC
# dataframe['roc'] = ta.ROC(dataframe)
# Overlap Studies
# ------------------------------------
# Bollinger Bands
bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
dataframe["bb_lowerband"] = bollinger["lower"]
dataframe["bb_middleband"] = bollinger["mid"]
dataframe["bb_upperband"] = bollinger["upper"]
dataframe["bb_percent"] = (dataframe["close"] - dataframe["bb_lowerband"]) / (
dataframe["bb_upperband"] - dataframe["bb_lowerband"]
)
dataframe["bb_width"] = (dataframe["bb_upperband"] - dataframe["bb_lowerband"]) / dataframe[
"bb_middleband"
]
# Bollinger Bands - Weighted (EMA based instead of SMA)
# weighted_bollinger = qtpylib.weighted_bollinger_bands(
# qtpylib.typical_price(dataframe), window=20, stds=2
# )
# dataframe["wbb_upperband"] = weighted_bollinger["upper"]
# dataframe["wbb_lowerband"] = weighted_bollinger["lower"]
# dataframe["wbb_middleband"] = weighted_bollinger["mid"]
# dataframe["wbb_percent"] = (
# (dataframe["close"] - dataframe["wbb_lowerband"]) /
# (dataframe["wbb_upperband"] - dataframe["wbb_lowerband"])
# )
# dataframe["wbb_width"] = (
# (dataframe["wbb_upperband"] - dataframe["wbb_lowerband"]) /
# dataframe["wbb_middleband"]
# )
# # EMA - Exponential Moving Average
# dataframe['ema3'] = ta.EMA(dataframe, timeperiod=3)
# dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5)
# dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10)
# dataframe['ema21'] = ta.EMA(dataframe, timeperiod=21)
# dataframe['ema50'] = ta.EMA(dataframe, timeperiod=50)
# dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)
# # SMA - Simple Moving Average
# dataframe['sma3'] = ta.SMA(dataframe, timeperiod=3)
# dataframe['sma5'] = ta.SMA(dataframe, timeperiod=5)
# dataframe['sma10'] = ta.SMA(dataframe, timeperiod=10)
# dataframe['sma21'] = ta.SMA(dataframe, timeperiod=21)
# dataframe['sma50'] = ta.SMA(dataframe, timeperiod=50)
# dataframe['sma100'] = ta.SMA(dataframe, timeperiod=100)
# Parabolic SAR
# dataframe["sar"] = ta.SAR(dataframe)
# TEMA - Triple Exponential Moving Average
dataframe["tema"] = ta.TEMA(dataframe, timeperiod=9)
# Cycle Indicator
# ------------------------------------
# Hilbert Transform Indicator - SineWave
# hilbert = ta.HT_SINE(dataframe)
# dataframe["htsine"] = hilbert["sine"]
# dataframe["htleadsine"] = hilbert["leadsine"]
# Pattern Recognition - Bullish candlestick patterns
# ------------------------------------
# # Hammer: values [0, 100]
# dataframe['CDLHAMMER'] = ta.CDLHAMMER(dataframe)
# # Inverted Hammer: values [0, 100]
# dataframe['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER(dataframe)
# # Dragonfly Doji: values [0, 100]
# dataframe['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI(dataframe)
# # Piercing Line: values [0, 100]
# dataframe['CDLPIERCING'] = ta.CDLPIERCING(dataframe) # values [0, 100]
# # Morningstar: values [0, 100]
# dataframe['CDLMORNINGSTAR'] = ta.CDLMORNINGSTAR(dataframe) # values [0, 100]
# # Three White Soldiers: values [0, 100]
# dataframe['CDL3WHITESOLDIERS'] = ta.CDL3WHITESOLDIERS(dataframe) # values [0, 100]
# Pattern Recognition - Bearish candlestick patterns
# ------------------------------------
# # Hanging Man: values [0, 100]
# dataframe['CDLHANGINGMAN'] = ta.CDLHANGINGMAN(dataframe)
# # Shooting Star: values [0, 100]
# dataframe['CDLSHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR(dataframe)
# # Gravestone Doji: values [0, 100]
# dataframe['CDLGRAVESTONEDOJI'] = ta.CDLGRAVESTONEDOJI(dataframe)
# # Dark Cloud Cover: values [0, 100]
# dataframe['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER(dataframe)
# # Evening Doji Star: values [0, 100]
# dataframe['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR(dataframe)
# # Evening Star: values [0, 100]
# dataframe['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(dataframe)
# Pattern Recognition - Bullish/Bearish candlestick patterns
# ------------------------------------
# # Three Line Strike: values [0, -100, 100]
# dataframe['CDL3LINESTRIKE'] = ta.CDL3LINESTRIKE(dataframe)
# # Spinning Top: values [0, -100, 100]
# dataframe['CDLSPINNINGTOP'] = ta.CDLSPINNINGTOP(dataframe) # values [0, -100, 100]
# # Engulfing: values [0, -100, 100]
# dataframe['CDLENGULFING'] = ta.CDLENGULFING(dataframe) # values [0, -100, 100]
# # Harami: values [0, -100, 100]
# dataframe['CDLHARAMI'] = ta.CDLHARAMI(dataframe) # values [0, -100, 100]
# # Three Outside Up/Down: values [0, -100, 100]
# dataframe['CDL3OUTSIDE'] = ta.CDL3OUTSIDE(dataframe) # values [0, -100, 100]
# # Three Inside Up/Down: values [0, -100, 100]
# dataframe['CDL3INSIDE'] = ta.CDL3INSIDE(dataframe) # values [0, -100, 100]
# # Chart type
# # ------------------------------------
# # Heikin Ashi Strategy
# heikinashi = qtpylib.heikinashi(dataframe)
# dataframe['ha_open'] = heikinashi['open']
# dataframe['ha_close'] = heikinashi['close']
# dataframe['ha_high'] = heikinashi['high']
# dataframe['ha_low'] = heikinashi['low']
# Retrieve best bid and best ask from the orderbook
# ------------------------------------
"""
# first check if dataprovider is available
if self.dp:
if self.dp.runmode.value in ('live', 'dry_run'):
ob = self.dp.orderbook(metadata['pair'], 1)
dataframe['best_bid'] = ob['bids'][0][0]
dataframe['best_ask'] = ob['asks'][0][0]
"""
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
Based on TA indicators, populates the entry signal for the given dataframe
:param dataframe: DataFrame
:param metadata: Additional information, like the currently traded pair
:return: DataFrame with entry columns populated
"""
dataframe.loc[
(
# Signal: RSI crosses above 30
(qtpylib.crossed_above(dataframe["rsi"], self.buy_rsi.value))
& (dataframe["tema"] <= dataframe["bb_middleband"]) # Guard: tema below BB middle
& (dataframe["tema"] > dataframe["tema"].shift(1)) # Guard: tema is raising
& (dataframe["volume"] > 0) # Make sure Volume is not 0
),
"enter_long",
] = 1
dataframe.loc[
(
# Signal: RSI crosses above 70
(qtpylib.crossed_above(dataframe["rsi"], self.short_rsi.value))
& (dataframe["tema"] > dataframe["bb_middleband"]) # Guard: tema above BB middle
& (dataframe["tema"] < dataframe["tema"].shift(1)) # Guard: tema is falling
& (dataframe["volume"] > 0) # Make sure Volume is not 0
),
"enter_short",
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
Based on TA indicators, populates the exit signal for the given dataframe
:param dataframe: DataFrame
:param metadata: Additional information, like the currently traded pair
:return: DataFrame with exit columns populated
"""
dataframe.loc[
(
# Signal: RSI crosses above 70
(qtpylib.crossed_above(dataframe["rsi"], self.sell_rsi.value))
& (dataframe["tema"] > dataframe["bb_middleband"]) # Guard: tema above BB middle
& (dataframe["tema"] < dataframe["tema"].shift(1)) # Guard: tema is falling
& (dataframe["volume"] > 0) # Make sure Volume is not 0
),
"exit_long",
] = 1
dataframe.loc[
(
# Signal: RSI crosses above 30
(qtpylib.crossed_above(dataframe["rsi"], self.exit_short_rsi.value))
&
# Guard: tema below BB middle
(dataframe["tema"] <= dataframe["bb_middleband"])
& (dataframe["tema"] > dataframe["tema"].shift(1)) # Guard: tema is raising
& (dataframe["volume"] > 0) # Make sure Volume is not 0
),
"exit_short",
] = 1
return dataframe
```

View File

@ -0,0 +1,12 @@
#阅读 #学习 #宗教
### 阅读摘录
[[The Message Remix The Bible In contemporary Language]]
注:目前第一遍读,主要摘录的是生词。再往后读,摘录的可能就会有句子,段落。
此后怎么使用,怎么构建基于素材的成果,需要继续思考。
---
### 阅读问答
[[【The Message】《沙丘》与《圣经》中创造先知、制造预言并应验的处理方式有什么内在联系]]
[[【The Message】针对刻意去满足预言的假想我的跨领域类比批判与圣经考据学的主流观点]]

View File

@ -0,0 +1 @@
#索引 #阅读 #《智慧书》

View File

@ -0,0 +1,26 @@
#阅读 #毛选
### 阅读摘录
[[毛泽东选集(全四卷)]]
### 思考问答
[[【毛选】杜绝“圣杯”思想,警惕本本主义的自我反思]]
[[【毛选】识别“上将潘凤”的历史难题]]
[[【毛选】对于“错误”的主义,我们应该怎么看待?]]
[[【毛选】如何立体的看待第五次反围剿的失利?]]
[[【毛选】长征是历史必然吗?沿用四次反围剿的策略能取得第五次反围剿的胜利吗?]]
[[【毛选】1937年国民党三中全会概况及其历史意义]]
[[【毛选】贝特兰记者对民主集中制提出质疑。这种制度是毛主席首创的吗?]]
---
### 随笔感悟
[[【毛选】从与英国记者贝特兰的谈话到《论持久战》 1]]
[[【毛选】工作调任后所面临的思想和行动问题即是游击战争中的根据地问题]]
---
### 重要人物
[[【毛选】张辉瓒]]
[[【毛选】谭道源]]

View File

@ -0,0 +1,11 @@
#阅读 #个人提升
---
### 微信读书划线及评论
[[瓦尔登湖]]
---
### 阅读过程整理
[[《瓦尔登湖》得以写作的原因]]
[[【瓦尔登湖】梭罗其人其事]]

View File

@ -0,0 +1,11 @@
#索引 #阅读 #《看上去很美》
[[我的抽离与精神反叛,可能来自于重读《看上去很美》]]
[[【看上去很美】0.为什么我在三十岁又重新阅读这本书?]]
[[【看上去很美】1.思想的拓扑结构:一次由文学联想验证的思维模型]]
[[【看上去很美】2.我被唐阿姨遗忘而耽误了吃饭,爸爸是怎么发现的呢?]]
[[【看上去很美】3.翠微路商场与民生百货、老北京的应激与老香港的向往。迟早要动的笔,迟早要动身的地方。]]
[[【看上去很美】4.《看上去很美》,今天的交大也真的很美。]]

View File

@ -0,0 +1,23 @@
---
创建时间: 2026-02-23T17:20
更新时间: 2026-02-23T17:20
---
#阅读
《南明史》
《党员、党权与党争 : 1924—1949年中国国民党的组织形态》
《被统治的艺术 : 中华帝国晚期的日常政治》
《大汉帝国在巴蜀 : 蜀汉天命的振扬与沉坠》
《民族与古代中国史》
《这受难的国度 : 死亡与美国内战》
《中国上古史研究讲义》
《清代八股文》
《论三国人物》
《中国古代国家的起源与王权的形成》
来源:[知乎回答](https://www.zhihu.com/question/472293322/answer/2106017916)
---
![[关于两会书籍选择的汇报]]

View File

@ -0,0 +1,55 @@
#学习 #投资 #书单 #DeepSeek
了解重大危机事件(如战争、灾难)对市场的影响,是构建长期投资视角和强大心理素质的关键。以下为您精选了一份书单,从历史、理论、策略等多维度提供深度洞察:
### 一、核心经典:理解极端事件与市场本质
1. **《黑天鹅:如何应对不可预知的未来》**
- **作者**:纳西姆·尼古拉斯·塔勒布
- **核心价值**:本书并非专门分析战争或灾难,但它提供了理解“极端、罕见、影响巨大”事件(即黑天鹅事件)的哲学框架。它深刻阐述了为什么历史不会爬行,只会跳跃,以及我们应如何构建“反脆弱”的投资与生活体系,以从中受益而非被摧毁。
2. **《这次不一样:八百年金融危机史》**
- **作者**卡门·M·莱因哈特、肯尼斯·罗格夫
- **核心价值**一部基于海量数据的实证研究巨著。它系统回顾了800年来全球范围内的金融危机包括由战争、主权债务违约等引发的危机用数据揭示了一个永恒的人性规律每次危机前人们都认为“这次不一样”但最终泡沫总会破灭。它能让你对危机的周期性、普遍性和破坏性有量化认知。
3. **《疯狂、惊恐和崩溃:金融危机史》**
- **作者**查尔斯·P·金德尔伯格
- **核心价值**金融史领域的经典教材。它详细描述了从17世纪郁金香狂热到20世纪末的历次重大金融泡沫与崩溃分析了危机如何从滋生、狂热到最终破灭的全过程。战争、政治动荡等外部冲击常是其中的重要环节。
### 二、大师视角:周期、原则与实战应对
1. **《原则:应对变化中的世界秩序》**
- **作者**:瑞·达利欧
- **核心价值**达利欧通过研究过去500年的历史周期总结出国家兴衰、货币信贷、内部秩序与外部冲突包括战争的典型模型。这本书能帮你从宏大的“大周期”视角理解当前世界所处的位置以及战争、灾难等重大事件在长周期中扮演的角色及其对投资环境的根本性影响。
2. **《投资中最重要的事》**
- **作者**:霍华德·马克斯
- **核心价值**:橡树资本联合创始人的投资备忘录精华。它深入探讨了风险、周期、市场极端情绪等概念。在“应对市场周期”和“抵御消极影响”等章节中,马克斯详细阐述了如何在市场恐慌(往往由灾难性事件引发)时保持理性,并可能找到机会。这是一本关于“投资心理和行为”的实战指南。
### 三、长期信心:数据与历史的安慰
1. **《股市长线法宝》**
- **作者**杰里米·J·西格尔
- **核心价值**本书提供了超过200年的美国及全球金融市场数据。其核心结论是尽管经历了多次战争、经济萧条和灾难股票的长期真实回报率扣除通胀后依然稳定在6%-7%左右。它能给你最坚实的数据支撑,让你相信人类经济的韧性和长期向上的趋势。
2. **《末日博士鲁比尼的金融预言》**
- **作者**:努里埃尔·鲁比尼
- **核心价值**鲁比尼因准确预测2008年金融危机而闻名。本书系统分析了他对全球系统性风险包括地缘政治冲突、债务危机等的预警框架。阅读它能帮助你建立一套识别和评估未来潜在危机的方法论。
### 四、阅读与思考建议
- **结合历史案例**在阅读时可以结合具体历史事件思考例如二战期间全球市场如何2001年“9·11”事件后市场反应如何新冠疫情初期的市场暴跌与复苏。
- **关注行为金融学**:重大危机对市场的影响,一半来自事件本身,另一半来自投资者的集体心理恐慌。理解群体非理性行为至关重要。
- **聚焦于“应对”而非“预测”**:这些书的最终目的,不是让你成为预测下一次危机的“先知”,而是让你理解危机的必然性,从而提前做好资产配置、风险管理和心理建设,在风暴来临时能保持镇定,甚至看到机遇。
通过阅读这些书籍,您将能构建一个更加完整、深刻且淡定的投资世界观,明白波动与危机是市场的一部分,而长期主义、分散配置和理性情绪是穿越这一切的“诺亚方舟”。

View File

@ -0,0 +1,5 @@
#书单 #学习 #阅读
[[【书单】重大危机对市场的影响研究书单]]
[[【书单】知乎积累书单]]

View File

@ -0,0 +1,28 @@
---
创建时间: 2025-10-21T14:56
更新时间: 2025-10-26T10:02
---
#阅读 #索引 #遥远的救世主
## 阅读划线
[[遥远的救世主]]
---
## 阅读过程写作
[[【遥远的救世主】阅读笔记整理、撰文准备]]
[[【遥远的救世主】从芮小丹的牺牲地延安说起]]
[[【遥远的救世主】2.批判与理解:一种特定时期下写作的幻灭与重生]]
[[【遥远的救世主】“英雄史观”与“人民史观”]]
---
## deepseek问答记录
[[【遥远的救世主】文中的古城可能是哪里?]]
[[【遥远的救世主】这个古城的意象有哪些作用?]]
[[【遥远的救世主】从行文时序到地理位置我发现了与马克思主义中国化完全匹配的路径1]]
[[【遥远的救世主】从行文时序到地理位置我发现了与马克思主义中国化完全匹配的路径2 (加入柏林墙的思考)]]
[[【遥远的救世主】一部关于“后革命时代”的“得救之道”的寓言]]
[[【遥远的救世主】强势文化与马克思主义之辩]]

View File

@ -0,0 +1,152 @@
#阅读 #博客 #写作 #个人提升 #DeepSeek
太棒了!为心爱的书建立一个专门的阅读索引页,这是一个绝佳的知识管理实践。这不仅是简单的笔记汇总,更是你与这本书深度对话的结晶。这样的页面对于个人回顾和读者参考都极具价值。
下面我为你提供一个全面、可操作的建议框架,并附上一些能让你索引页脱颖而出的点睛之笔。
### 核心框架:一个优秀的书籍索引页应包含的模块
你可以按照以下模块来构建你的索引页,这就像一个清晰的“地图”,引导读者(或未来的自己)全面了解这本书和你对它的思考。
#### 模块一:书籍元信息 - 快速概览
这是页面的“封面”,提供核心数据。建议使用表格形式,清晰易读。
|项目|内容|
|---|---|
|**书名**|《XXX》|
|**作者**|[链接到作者生平页面]|
|**译者**|(如适用)|
|**出版社**||
|**出版年**||
|**ISBN**||
|**我的评分**|⭐⭐⭐⭐⭐例如5星制|
|**阅读状态**|已读 / 在读 / 计划重读|
|**阅读起止日**|2023.10.01 - 2023.10.20|
|**关联标签**|`#哲学``#个人成长``#思维模型`(便于后期关联)|
#### 模块二:核心内容摘要 - 本书讲了什么?
这部分是你对全书骨架的提炼,帮助读者快速把握核心内容。
- **一句话概括:​** 用一句话精准总结这本书的精髓。
- **核心论点/主题:​** 列出书中最核心的3-5个论点或主题。
- **书籍结构:​** 简要说明本书的篇章结构(例如:全书分为三部分,第一部分讲原理,第二部分讲方法,第三部分讲案例)。
- **思维导图:​** 如果可能,附上一张你绘制的本书思维导图,这是非常直观的展示方式。
#### 模块三:我的划线与摘录 - 原汁原味的精华
这是你的“采蜜”记录,保留原文的闪光点。
- **组织方式:​** 不要简单罗列,最好能**按章节或主题进行分类**。
- **格式建议:​** 使用引文格式(如 `>`),并注明页码(例如:`> 这是摘录的内容。P123`)。
- **工具技巧:​** 如果你用 Obsidian可以为每个摘录添加 `#摘录`标签,并链接回原章节笔记,实现双向链接。
#### 模块四:心得体会 - 思考的脉络
这是索引页的灵魂,展示了你如何消化吸收书中的知识。
- **按章节/主题的心得:​** 将阅读过程中写下的小文章、笔记链接到这里。为每篇心得起一个具体的标题,而不仅仅是“第一章笔记”。
- 示例标题:“关于‘脆弱性’的思考——读第一章有感”、“实践‘心流’理论的一周记录”。
- **闪念笔记:​** 一些零散的、未成文的想法也可以记录在此,它们可能是未来长文思考的种子。
#### 模块五:综合书评 - 整体的评价与思考
这是你对本书的最终“判决”和升华。
- **主要内容总结:​** 用你自己的话重新概括全书。
- **亮点与启发:​** 这本书最大的价值在哪里?哪个观点对你冲击最大?
- **不足之处/争议点:​** 本书是否有你不同意或认为的缺陷?保持批判性思维。
- **推荐人群:​** 你认为这本书最适合哪类读者?
- **关联与延伸:​** 这本书与你读过的其他书(可链接到其他书籍索引页)、知识体系有何关联?它引出了哪些你想进一步探索的问题?
---
### 锦上添花:还有哪些内容可以让索引页更出色?
除了上述核心模块,以下内容能让你的索引页维度更丰富,真正成为一个“知识枢纽”:
1. **行动与实践清单**
- 将书中的理论转化为具体的行动。列出你计划或已经开始的实践项目。
- 例如“根据书中原子习惯法则我启动了每天睡前读10页书的习惯打卡链接[链接到你的习惯追踪页]”。
2. **金句/名言收藏**
- 从摘录中提炼出最震撼、最精辟的几句话,单独形成一个模块,方便快速引用和回顾。
3. **阅读时间线与互动记录**
- 如果你在社交媒体(如微博、豆瓣)上发布过关于此书的动态,可以将链接或截图汇总于此,形成一个动态的阅读历程。
- 如果与朋友有过针对此书的精彩讨论,可以摘要记录讨论要点。
4. **相关资源链接**
- **作者访谈/演讲:​** 链接到相关的视频或文章,提供更多背景。
- **官方网页/配套资源:​** 如果书籍有官方网站、测试题、图表等。
- **其他书评:​** 链接到你认为写得非常好的他人书评(无论是赞同还是反对),提供多元视角。
5. **可视化元素**
- **书籍封面图:​** 让页面更美观。
- **情绪曲线/价值曲线图:​** 高级玩法。可以为小说绘制一条“情节紧张度”曲线,或为非虚构书籍绘制“对我启发价值”的曲线。
### 技术实现建议(以 Obsidian 为例)
如果你的博客基于 Obsidian你可以充分利用其强大的链接功能
- **使用 Dataview 插件:​** 这是实现**动态索引页**的神器!你可以自动聚合所有带有特定标签(如 `#books/《书名》``#摘录``#心得`)的笔记。这样,每当你新增一篇心得或一条摘录,它就会自动出现在索引页中,无需手动更新链接。
- **MOCMap of Content方法** 这个索引页本身就是这本书的 MOC。确保索引页与所有相关的笔记摘录、心得、书评都建立**双向链接**。
- **模板功能:​** 为“书籍索引页”创建一个模板,以后每读一本新书就可以快速调用,保持格式统一。
### 页面结构示例(可视化大纲)
你可以用 Mermaid 图表来展示页面结构,使其一目了然,这也是 Obsidian 支持的功能。
```
graph TD
A[书籍索引页:《书名》] --> B[元信息<br/>与封面]
A --> C[核心摘要<br/>与结构]
A --> D[划线摘录<br/>(按章节组织)]
A --> E[心得体会<br/>(链接到具体笔记)]
A --> F[综合书评]
A --> G[扩展内容]
G --> G1[行动与实践清单]
G --> G2[相关资源链接]
G --> G3[阅读互动时间线]
```
**最后,也是最重要的原则:​** 这个索引页是**为你服务**的。不必追求一次做到完美,可以先搭建框架,在后续的回顾和思考中不断丰富它。让它成为你知识体系中有生命力的一个节点。
希望这个详细的建议能帮助你打造一个令人惊艳的书籍索引页!