vault backup: 2025-04-10 11:13:22

This commit is contained in:
zhangkun9038@dingtalk.com 2025-04-10 11:13:22 +08:00
parent 3d8a414542
commit e296ab5723
43 changed files with 6877 additions and 102 deletions

BIN
.obsidian/.DS_Store vendored

Binary file not shown.

View File

@ -1,5 +1,5 @@
{
"cssTheme": "Wasp",
"cssTheme": "Typewriter",
"enabledCssSnippets": [
"allnotelist"
],

View File

@ -13,5 +13,7 @@
"homepage",
"pane-relief",
"recent-files-obsidian",
"copilot"
"copilot",
"obsidian-soomda",
"obsidian-graphviz"
]

File diff suppressed because one or more lines are too long

View File

@ -17,6 +17,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1.2959324124840048,
"scale": 0.9178150765759386,
"close": true
}

View File

@ -94,5 +94,32 @@
],
"key": "E"
}
],
"app:toggle-left-sidebar": [
{
"modifiers": [
"Ctrl",
"Mod"
],
"key": "L"
}
],
"app:toggle-right-sidebar": [
{
"modifiers": [
"Ctrl",
"Mod"
],
"key": "R"
}
],
"obsidian-soomda:toggle-sidebars": [
{
"modifiers": [
"Alt",
"Mod"
],
"key": "`"
}
]
}

View File

@ -17,7 +17,7 @@
"deepseekApiKey": "",
"defaultChainType": "vault_qa",
"defaultModelKey": "qwen-max-latest|openai",
"embeddingModelKey": "chsword/DeepSeek-V3:latest|ollama",
"embeddingModelKey": "nomic-embed-text:latest|ollama",
"temperature": 0.1,
"maxTokens": 1000,
"contextTurns": 15,
@ -30,7 +30,7 @@
"autosaveChat": false,
"defaultOpenArea": "view",
"customPromptsFolder": "copilot-custom-prompts",
"indexVaultToVectorStore": "ON MODE SWITCH",
"indexVaultToVectorStore": "ON STARTUP",
"qaExclusions": "",
"qaInclusions": "",
"chatNoteContextPath": "",
@ -252,7 +252,7 @@
"isEmbeddingModel": true
},
{
"name": "chsword/DeepSeek-V3:latest",
"name": "nomic-embed-text:latest",
"provider": "ollama",
"enabled": true,
"isBuiltIn": false,
@ -260,7 +260,7 @@
"apiKey": "",
"isEmbeddingModel": true,
"capabilities": [],
"displayName": "chsword/DeepSeek-V3:latest"
"displayName": "nomic-embed-text:latest"
}
],
"embeddingRequestsPerMin": 90,

23
.obsidian/plugins/homepage/data.json vendored Normal file
View File

@ -0,0 +1,23 @@
{
"version": 4,
"homepages": {
"Main Homepage": {
"value": "kanban/mainboard",
"kind": "File",
"openOnStartup": true,
"openMode": "Replace all open notes",
"manualOpenMode": "Keep open notes",
"view": "Reading view",
"revertView": true,
"openWhenEmpty": false,
"refreshDataview": false,
"autoCreate": false,
"autoScroll": false,
"pin": false,
"commands": [],
"alwaysApply": false,
"hideReleaseNotes": false
}
},
"separateMobile": false
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-graphviz",
"name": "Obsidian Graphviz",
"version": "1.0.5",
"minAppVersion": "0.11.5",
"description": "Render Graphviz Diagrams",
"author": "Feng Peng",
"authorUrl": "https://QAMichaelPeng.github.io",
"isDesktopOnly": true
}

View File

@ -0,0 +1,4 @@
.d3graphvizError{
color: red;
border: 1px solid red;
}

View File

@ -0,0 +1,6 @@
{
"both": true,
"justLeft": false,
"justRight": false,
"rememberSidebar": false
}

View File

@ -0,0 +1,196 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => SoomdaPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var nameOfApplication = `Soomda`;
var DEFAULT_SETTINGS = {
both: true,
justLeft: false,
justRight: false,
rememberSidebar: false
};
var soomdaIcon = `<svg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"><title>Leaf</title><path fill="currentColor" d="M161.35 242a16 16 0 0122.62-.68c73.63 69.36 147.51 111.56 234.45 133.07 11.73-32 12.77-67.22 2.64-101.58-13.44-45.59-44.74-85.31-90.49-114.86-40.84-26.38-81.66-33.25-121.15-39.89-49.82-8.38-96.88-16.3-141.79-63.85-5-5.26-11.81-7.37-18.32-5.66-7.44 2-12.43 7.88-14.82 17.6-5.6 22.75-2 86.51 13.75 153.82 25.29 108.14 65.65 162.86 95.06 189.73 38 34.69 87.62 53.9 136.93 53.9a186 186 0 0027.77-2.04c41.71-6.32 76.43-27.27 96-57.75-89.49-23.28-165.94-67.55-242-139.16a16 16 0 01-.65-22.65zM467.43 384.19c-16.83-2.59-33.13-5.84-49-9.77a157.71 157.71 0 01-12.13 25.68c-.73 1.25-1.5 2.49-2.29 3.71a584.21 584.21 0 0058.56 12 16 16 0 104.87-31.62z"/></svg>`;
var SoomdaPlugin = class extends import_obsidian.Plugin {
async onload() {
await this.loadSettings();
(0, import_obsidian.addIcon)("icon", soomdaIcon);
const ribbonIconEl = this.addRibbonIcon(
"icon",
"Toggle Soomda",
(evt) => {
this.togglePanes();
}
);
await this.checkSidebars();
this.addCommand({
id: "show-sidebars",
name: "Show sidebars",
callback: () => {
this.showSidebars();
}
});
this.addCommand({
id: "hide-sidebars",
name: "Hide sidebars",
callback: () => {
this.hideSidebars();
}
});
this.addCommand({
id: "toggle-sidebars",
name: "Toggle sidebars",
callback: () => {
this.togglePanes();
}
});
this.addSettingTab(new SoomdaSettingTab(this.app, this));
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign(
{},
DEFAULT_SETTINGS,
await this.loadData()
);
}
async saveSettings() {
await this.saveData(this.settings);
}
async hideSidebars() {
const workspace = this.app.workspace;
const leftSplit = workspace.leftSplit;
const rightSplit = workspace.rightSplit;
leftSplit.collapse();
rightSplit.collapse();
}
async showSidebars() {
const workspace = this.app.workspace;
const leftSplit = workspace.leftSplit;
const rightSplit = workspace.rightSplit;
leftSplit.expand();
rightSplit.expand();
}
async togglePanes() {
const workspace = this.app.workspace;
const leftSplit = workspace.leftSplit;
const rightSplit = workspace.rightSplit;
const currentBoth = this.settings.both;
const currentJustLeft = this.settings.justLeft;
const currentJustRight = this.settings.justRight;
if (this.settings.rememberSidebar) {
await this.checkSidebars();
if (!leftSplit.collapsed || !rightSplit.collapsed) {
leftSplit.collapse();
rightSplit.collapse();
return;
}
if (currentBoth) {
leftSplit.expand();
rightSplit.expand();
return;
}
if (currentJustLeft) {
leftSplit.expand();
rightSplit.collapse();
return;
}
if (currentJustRight) {
leftSplit.collapse();
rightSplit.expand();
return;
}
} else {
if (leftSplit.collapsed && rightSplit.collapsed) {
leftSplit.expand();
rightSplit.expand();
} else {
leftSplit.collapse();
rightSplit.collapse();
}
}
}
async checkSidebars() {
this.app.workspace.onLayoutReady(async () => {
const leftSplit = this.app.workspace.leftSplit;
const rightSplit = this.app.workspace.rightSplit;
if (!leftSplit.collapsed && !rightSplit.collapsed) {
this.settings.both = true;
this.settings.justLeft = false;
this.settings.justRight = false;
}
if (leftSplit.collapsed && !rightSplit.collapsed) {
this.settings.justRight = true;
this.settings.justLeft = false;
this.settings.both = false;
}
if (rightSplit.collapsed && !leftSplit.collapsed) {
this.settings.justRight = false;
this.settings.justLeft = true;
this.settings.both = false;
}
await this.saveSettings();
});
}
};
var SoomdaSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h3", {
text: `${nameOfApplication} \u2014 Quickly hide your sidebars.`
});
containerEl.createEl("h4", {
text: "v" + this.plugin.manifest.version
});
containerEl.createEl("span", {
text: `If ${nameOfApplication} has helped you focus, consider buying me a slice of pizza \u{1F355} `
});
containerEl.createEl("a", {
text: "Buy Michael, a slice of pizza",
href: "https://michaellee.gumroad.com/l/buy-michael-pizza"
});
containerEl.createEl("br");
containerEl.createEl("br");
new import_obsidian.Setting(containerEl).setName("Remember sidebar").setDesc(
`When this option is turned on, ${nameOfApplication} will remember the sidebar which was last open and just toggle that pane.`
).addToggle(
(title) => title.setValue(this.plugin.settings.rememberSidebar).onChange(async () => {
this.plugin.settings.rememberSidebar = await this.plugin.settings.rememberSidebar ? false : true;
await this.plugin.saveSettings();
})
);
}
};
/* nosourcemap */

View File

@ -0,0 +1,13 @@
{
"id": "obsidian-soomda",
"name": "Soomda",
"version": "1.0.4",
"minAppVersion": "0.15.0",
"description": "Quickly hide your sidebars",
"author": "Michael Lee",
"authorUrl": "https://michaelsoolee.com",
"fundingUrl": {
"Buy me a slice of pizza": "https://michaellee.gumroad.com/l/buy-michael-pizza"
},
"isDesktopOnly": true
}

View File

@ -1,24 +1,84 @@
{
"recentFiles": [
{
"basename": "freqtrade_基础",
"path": "new notes/freqtrade_基础.md"
"basename": "freqtrade pandas 矢量化 Dataframe",
"path": "new notes/freqtrade pandas 矢量化 Dataframe.md"
},
{
"basename": "freqtrade_理解消化",
"path": "new notes/freqtrade_理解消化.md"
"basename": "freqtrade 严格止损",
"path": "new notes/freqtrade 严格止损.md"
},
{
"basename": "freqtrade",
"path": "new notes/freqtrade.md"
"basename": "检查feather文件里的蜡烛数量的代码",
"path": "new notes/检查feather文件里的蜡烛数量的代码.md"
},
{
"basename": "freqtrade sqlite容量问题",
"path": "new notes/freqtrade sqlite容量问题.md"
},
{
"basename": "freqtrade 回测和dry-run的疑问",
"path": "new notes/freqtrade 回测和dry-run的疑问.md"
},
{
"basename": "freqtrade 策略窗口 训练窗口",
"path": "new notes/freqtrade 策略窗口 训练窗口.md"
},
{
"basename": "freqtrade 策略 demo 代码拆解",
"path": "new notes/freqtrade 策略 demo 代码拆解.md"
},
{
"basename": "freqtrade 指标获取 理解消化",
"path": "new notes/freqtrade 指标获取 理解消化.md"
},
{
"basename": "freqtrade 机器学习和数据落盘",
"path": "new notes/freqtrade 机器学习和数据落盘.md"
},
{
"basename": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"path": "new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md"
},
{
"basename": "freqtrade 训练窗口是否越大越好",
"path": "new notes/freqtrade 训练窗口是否越大越好.md"
},
{
"basename": "freqtrade 超参数优化",
"path": "new notes/freqtrade 超参数优化.md"
},
{
"basename": "freqtrade 启动后做了哪些事",
"path": "new notes/freqtrade 启动后做了哪些事.md"
},
{
"basename": "freqtrade 配置和策略的交集问题",
"path": "new notes/freqtrade 配置和策略的交集问题.md"
},
{
"basename": "继续鼓捣 freqtrade",
"path": "继续鼓捣 freqtrade.md"
},
{
"basename": "在xunlang上运行一个docker 容器包含systemd的那种",
"path": "在xunlang上运行一个docker 容器包含systemd的那种.md"
},
{
"basename": "如何触发",
"path": "new notes/如何触发.md"
},
{
"basename": "节点角色更新",
"path": "new notes/节点角色更新.md"
},
{
"basename": "如何触发",
"path": "new notes/如何触发.md"
"basename": "freqtrade",
"path": "new notes/freqtrade.md"
},
{
"basename": "freqtrade_基础",
"path": "new notes/freqtrade_基础.md"
},
{
"basename": "04_Go语言相关工具",
@ -139,34 +199,6 @@
{
"basename": "New Chat",
"path": "Chats/New Chat.md"
},
{
"basename": "restruct",
"path": "archived/restruct.md"
},
{
"basename": "go_wire 循环依赖",
"path": "archived/go_wire 循环依赖.md"
},
{
"basename": "重构",
"path": "archived/重构.md"
},
{
"basename": "循环依赖相关对话",
"path": "archived/循环依赖相关对话.md"
},
{
"basename": "循环依赖问题",
"path": "archived/循环依赖问题.md"
},
{
"basename": "开车时听的音乐",
"path": "随便/开车时听的音乐.md"
},
{
"basename": "甘特图流程图各种图",
"path": "随便/甘特图流程图各种图.md"
}
],
"omittedPaths": [

View File

@ -1,14 +1,14 @@
{
"isChatComfy": true,
"isUsingRag": false,
"isUsingRag": true,
"assistantLanguage": "en",
"initialAssistantMessageContent": "Hello, I am your assistant. How can I help you?",
"isIncognitoMode": true,
"isIncognitoMode": false,
"ollamaGenModel": {
"model": "deepseek-r1:8b",
"model": "gemma3:4b",
"baseUrl": "http://localhost:11434",
"temperature": 0.5,
"contextWindow": 1848,
"contextWindow": 1748,
"lcModel": {
"lc": 1,
"type": "constructor",
@ -19,10 +19,10 @@
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:8b",
"model": "gemma3:4b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1848,
"context_window": 1748,
"lc_model": {
"lc": 1,
"type": "constructor",
@ -33,10 +33,10 @@
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:8b",
"model": "gemma3:4b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948,
"context_window": 1848,
"lc_model": {
"lc": 1,
"type": "constructor",
@ -47,7 +47,7 @@
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:14b",
"model": "gemma3:4b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948,
@ -61,10 +61,106 @@
"ChatOllama"
],
"kwargs": {
"model": "gemma3:12b",
"model": "chsword/DeepSeek-V3",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948
"context_window": 1848,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"ollama",
"ChatOllama"
],
"kwargs": {
"model": "chsword/DeepSeek-V3",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"ollama",
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:8b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1748,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"ollama",
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:8b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1848,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"ollama",
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:8b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"ollama",
"ChatOllama"
],
"kwargs": {
"model": "deepseek-r1:14b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"ollama",
"ChatOllama"
],
"kwargs": {
"model": "gemma3:12b",
"base_url": "http://localhost:11434",
"temperature": 0.5,
"context_window": 1948
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
@ -84,7 +180,7 @@
"model": "gpt-3.5-turbo",
"openAIApiKey": "sk-24a6af9eea55494b8f465a01cb92d461",
"temperature": 0.5,
"contextWindow": 1948,
"contextWindow": 1848,
"lcModel": {
"lc": 1,
"type": "constructor",
@ -104,7 +200,30 @@
]
},
"temperature": 0.5,
"context_window": 1948,
"context_window": 1848,
"lc_model": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"chat_models",
"openai",
"ChatOpenAI"
],
"kwargs": {
"model": "gpt-3.5-turbo",
"openai_api_key": {
"lc": 1,
"type": "secret",
"id": [
"OPENAI_API_KEY"
]
},
"temperature": 0.5,
"context_window": 1948,
"streaming": true
}
},
"streaming": true
}
}
@ -122,7 +241,7 @@
"*.excalidraw.md"
],
"isQuickSettingsOpen": true,
"isVerbose": false,
"isVerbose": true,
"isOnboarded": true,
"hideIncognitoWarning": false,
"isAutostart": false

View File

@ -0,0 +1,7 @@
{
"name": "Typewriter",
"version": "2.1.10",
"minAppVersion": "0.16.0",
"author": "crashmoney",
"authorUrl": "https://github.com/crashmoney"
}

636
.obsidian/themes/Typewriter/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -16,13 +16,355 @@
{
"state": "{}",
"eState": "{}"
},
{
"title": "freqtrade 启动后做了哪些事",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 启动后做了哪些事.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 启动后做了哪些事\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略窗口 训练窗口",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略窗口 训练窗口.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略窗口 训练窗口\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 机器学习和数据落盘",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 机器学习和数据落盘.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 机器学习和数据落盘\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 超参数优化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 超参数优化.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 超参数优化\"}",
"eState": "{}"
},
{
"title": "freqtrade 严格止损",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 严格止损.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 严格止损\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略窗口 训练窗口",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略窗口 训练窗口.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略窗口 训练窗口\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 机器学习和数据落盘",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 机器学习和数据落盘.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 机器学习和数据落盘\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 超参数优化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 超参数优化.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 超参数优化\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
}
]
},
"state": {
"type": "markdown",
"state": {
"file": "量化交易系统建议/07_基于机器学习的量化交易路线图.md",
"file": "new notes/freqtrade 配置和策略的交集问题.md",
"mode": "preview",
"source": true,
"backlinks": true,
"backlinkOpts": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
},
"icon": "lucide-file",
"title": "freqtrade 配置和策略的交集问题"
}
},
{
"id": "170bafae35dc9e41",
"type": "leaf",
"pane-relief:history-v1": {
"pos": 0,
"stack": [
{
"state": "{}",
"eState": "{}"
},
{
"title": "freqtrade 严格止损",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 严格止损.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 严格止损\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 超参数优化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 超参数优化.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 超参数优化\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 训练窗口是否越大越好",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 训练窗口是否越大越好.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 训练窗口是否越大越好\"}",
"eState": "{}"
},
{
"title": "freqtrade 启动后做了哪些事",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 启动后做了哪些事.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 启动后做了哪些事\"}",
"eState": "{}"
},
{
"title": "freqtrade 选择合适的训练窗口匹配特定时间框架",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 选择合适的训练窗口匹配特定时间框架\"}",
"eState": "{}"
},
{
"title": "freqtrade 超参数优化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 超参数优化.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 超参数优化\"}",
"eState": "{}"
},
{
"title": "freqtrade 机器学习和数据落盘",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 机器学习和数据落盘.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 机器学习和数据落盘\"}",
"eState": "{}"
},
{
"title": "freqtrade 指标获取 理解消化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 指标获取 理解消化.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 指标获取 理解消化\"}",
"eState": "{}"
},
{
"title": "freqtrade 严格止损",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 严格止损.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 严格止损\"}",
"eState": "{\"scroll\":12.125}"
},
{
"title": "freqtrade 超参数优化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 超参数优化.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 超参数优化\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 严格止损",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 严格止损.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 严格止损\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 机器学习和数据落盘",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 机器学习和数据落盘.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 机器学习和数据落盘\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 指标获取 理解消化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 指标获取 理解消化.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 指标获取 理解消化\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "检查feather文件里的蜡烛数量的代码",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/检查feather文件里的蜡烛数量的代码.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"检查feather文件里的蜡烛数量的代码\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 策略窗口 训练窗口",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略窗口 训练窗口.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略窗口 训练窗口\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "freqtrade 回测和dry-run的疑问",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 回测和dry-run的疑问.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 回测和dry-run的疑问\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":9,\"ch\":24},\"to\":{\"line\":9,\"ch\":24}}}"
},
{
"title": "freqtrade sqlite容量问题",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade sqlite容量问题.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade sqlite容量问题\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "检查feather文件里的蜡烛数量的代码",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/检查feather文件里的蜡烛数量的代码.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"检查feather文件里的蜡烛数量的代码\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":0,\"ch\":0},\"to\":{\"line\":0,\"ch\":0}}}"
},
{
"title": "Graph view",
"icon": "lucide-git-fork",
"state": "{\"type\":\"graph\",\"state\":{},\"icon\":\"lucide-git-fork\",\"title\":\"Graph view\"}",
"eState": "{}"
},
{
"title": "freqtrade 回测和dry-run的疑问",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 回测和dry-run的疑问.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 回测和dry-run的疑问\"}",
"eState": "{}"
},
{
"title": "freqtrade sqlite容量问题",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade sqlite容量问题.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade sqlite容量问题\"}",
"eState": "{}"
},
{
"title": "检查feather文件里的蜡烛数量的代码",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/检查feather文件里的蜡烛数量的代码.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"检查feather文件里的蜡烛数量的代码\"}",
"eState": "{}"
}
]
},
"state": {
"type": "markdown",
"state": {
"file": "new notes/检查feather文件里的蜡烛数量的代码.md",
"mode": "preview",
"source": true,
"backlinks": true,
"backlinkOpts": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
},
"icon": "lucide-file",
"title": "检查feather文件里的蜡烛数量的代码"
}
},
{
"id": "0d2ec405a8719ea2",
"type": "leaf",
"pane-relief:history-v1": {
"pos": 0,
"stack": [
{
"state": "{}",
"eState": "{}"
}
]
},
"state": {
"type": "markdown",
"state": {
"file": "new notes/freqtrade pandas 矢量化 Dataframe.md",
"mode": "source",
"source": true,
"backlinks": true,
@ -37,10 +379,242 @@
}
},
"icon": "lucide-file",
"title": "07_基于机器学习的量化交易路线图"
"title": "freqtrade pandas 矢量化 Dataframe"
}
},
{
"id": "a4b22b3cfe4b98a8",
"type": "leaf",
"pane-relief:history-v1": {
"pos": 1,
"stack": [
{
"title": "freqtrade 策略窗口 训练窗口",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略窗口 训练窗口.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略窗口 训练窗口\"}",
"eState": "{\"scroll\":48.50267379679144}"
},
{
"state": "{}",
"eState": "{}"
},
{
"title": "populate_indicators函数",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/populate_indicators函数.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"populate_indicators函数\"}",
"eState": "{}"
},
{
"title": "freqtrade_理解消化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 指标获取 理解消化.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade_理解消化\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略 demo 代码拆解",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略 demo 代码拆解.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略 demo 代码拆解\"}",
"eState": "{\"scroll\":0}"
}
]
},
"state": {
"type": "markdown",
"state": {
"file": "new notes/freqtrade 指标获取 理解消化.md",
"mode": "source",
"source": true,
"backlinks": true,
"backlinkOpts": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
},
"icon": "lucide-file",
"title": "freqtrade 指标获取 理解消化"
}
},
{
"id": "6f8006eedbee4563",
"type": "leaf",
"pane-relief:history-v1": {
"pos": 0,
"stack": [
{
"state": "{}",
"eState": "{}"
}
]
},
"state": {
"type": "markdown",
"state": {
"file": "new notes/freqtrade 回测和dry-run的疑问.md",
"mode": "preview",
"source": true,
"backlinks": true,
"backlinkOpts": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
},
"icon": "lucide-file",
"title": "freqtrade 回测和dry-run的疑问"
}
},
{
"id": "7144b10d8f64262b",
"type": "leaf",
"pane-relief:history-v1": {
"pos": 0,
"stack": [
{
"state": "{}",
"eState": "{}"
},
{
"title": "freqtrade 回测和dry-run的疑问",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 回测和dry-run的疑问.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 回测和dry-run的疑问\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":9,\"ch\":24},\"to\":{\"line\":9,\"ch\":24}}}"
},
{
"title": "freqtrade sqlite容量问题",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade sqlite容量问题.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade sqlite容量问题\"}",
"eState": "{}"
},
{
"title": "freqtrade 回测和dry-run的疑问",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 回测和dry-run的疑问.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 回测和dry-run的疑问\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略 demo 代码拆解",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略 demo 代码拆解.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略 demo 代码拆解\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略窗口 训练窗口",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略窗口 训练窗口.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略窗口 训练窗口\"}",
"eState": "{}"
},
{
"title": "freqtrade 机器学习和数据落盘",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 机器学习和数据落盘.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 机器学习和数据落盘\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略窗口 训练窗口",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略窗口 训练窗口.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略窗口 训练窗口\"}",
"eState": "{}"
},
{
"title": "freqtrade sqlite容量问题",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade sqlite容量问题.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade sqlite容量问题\"}",
"eState": "{}"
},
{
"title": "freqtrade 策略 demo 代码拆解",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 策略 demo 代码拆解.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 策略 demo 代码拆解\"}",
"eState": "{}"
},
{
"title": "freqtrade 指标获取 理解消化",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 指标获取 理解消化.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 指标获取 理解消化\"}",
"eState": "{}"
},
{
"title": "freqtrade sqlite容量问题",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade sqlite容量问题.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade sqlite容量问题\"}",
"eState": "{}"
},
{
"title": "freqtrade 回测和dry-run的疑问",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade 回测和dry-run的疑问.md\",\"mode\":\"preview\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade 回测和dry-run的疑问\"}",
"eState": "{}"
},
{
"title": "freqtrade sqlite容量问题",
"icon": "lucide-file",
"state": "{\"type\":\"markdown\",\"state\":{\"file\":\"new notes/freqtrade sqlite容量问题.md\",\"mode\":\"source\",\"source\":true,\"backlinks\":true,\"backlinkOpts\":{\"collapseAll\":false,\"extraContext\":false,\"sortOrder\":\"alphabetical\",\"showSearch\":false,\"searchQuery\":\"\",\"backlinkCollapsed\":false,\"unlinkedCollapsed\":true}},\"icon\":\"lucide-file\",\"title\":\"freqtrade sqlite容量问题\"}",
"eState": "{\"cursor\":{\"from\":{\"line\":6,\"ch\":0},\"to\":{\"line\":6,\"ch\":0}}}"
}
]
},
"state": {
"type": "markdown",
"state": {
"file": "new notes/freqtrade sqlite容量问题.md",
"mode": "preview",
"source": true,
"backlinks": true,
"backlinkOpts": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
},
"icon": "lucide-file",
"title": "freqtrade sqlite容量问题"
}
},
{
"id": "3a44329b993947ea",
"type": "leaf",
"pane-relief:history-v1": {
"pos": 0,
"stack": [
{
"state": "{}",
"eState": "{}"
}
]
},
"state": {
"type": "kanban",
"state": {
"file": "kanban/mainboard.md",
"kanbanViewState": {
"kanban-plugin": "board",
"list-collapse": [
false,
false,
false,
false
]
}
},
"icon": "lucide-trello",
"title": "mainboard"
}
}
]
],
"currentTab": 2
}
],
"direction": "vertical"
@ -69,7 +643,7 @@
"type": "file-explorer",
"state": {
"sortOrder": "byModifiedTime",
"autoReveal": false
"autoReveal": true
},
"icon": "lucide-folder-closed",
"title": "Files"
@ -143,7 +717,8 @@
}
],
"direction": "horizontal",
"width": 303.5024719238281
"width": 292.50312423706055,
"collapsed": true
},
"right": {
"id": "97b6734b8c030920",
@ -274,13 +849,13 @@
"state": {
"type": "outline",
"state": {
"file": "量化交易系统建议/07_基于机器学习的量化交易路线图.md",
"file": "new notes/freqtrade pandas 矢量化 Dataframe.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline of 07_基于机器学习的量化交易路线图"
"title": "Outline of freqtrade pandas 矢量化 Dataframe"
}
},
{
@ -307,7 +882,7 @@
}
],
"direction": "horizontal",
"width": 493.5
"width": 326.5
},
"left-ribbon": {
"hiddenItems": {
@ -315,6 +890,7 @@
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"weather-fetcher:Insert Weather": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"obsidian-kanban:Create new board": false,
@ -322,44 +898,45 @@
"obsidian-git:Open Git source control": false,
"terminal:Open terminal": false,
"table-editor-obsidian:Advanced Tables Toolbar": false,
"weather-fetcher:Insert Weather": false,
"templater-obsidian:Templater": false,
"homepage:Open homepage": false
"homepage:Open homepage": false,
"smart-second-brain:Open S2B Chat": false,
"obsidian-soomda:Toggle Soomda": false
}
},
"active": "e7a7b303c61786dc",
"active": "0d2ec405a8719ea2",
"lastOpenFiles": [
"量化交易系统建议/03_辅助决策工具.md",
"量化交易相关/收益预估直方图.md",
"new notes/英文文章可读性量化.md",
"templates/allNotes.md.md",
"new notes/未命名.canvas",
"new notes/最大回撤.md",
"new notes/freqtrade_基础.md",
"量化交易系统建议/02_CCXT详细介绍.md",
"随便/开车时听的音乐.md",
"随便/甘特图流程图各种图.md",
"量化交易系统建议/05_机器学习相关工具.md",
"new notes/freqtrade.md",
"new notes/freqtrade_理解消化.md",
"new notes/如何触发.md",
"new notes/节点角色更新.md",
"new notes/ccxt.md",
"new notes/量化交易系统建议.md",
"new notes/Untitled.md",
"new notes/Untitled 1.md",
"archived/重构.md",
"量化交易系统建议/08_Redis与Elasticsearch的应用.md",
"量化交易系统建议/07_基于机器学习的量化交易路线图.md",
"量化交易系统建议/06_传统量化交易路线图.md",
"量化交易系统建议/01_量化交易辅助决策开源项目.md",
"new notes/检查feather文件里的蜡烛数量的代码.md",
"new notes/freqtrade pandas 矢量化 Dataframe.md",
"new notes/freqtrade 严格止损.md",
"new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md",
"new notes/freqtrade 训练窗口是否越大越好.md",
"new notes/freqtrade 超参数优化.md",
"new notes/freqtrade 启动后做了哪些事.md",
"new notes/freqtrade 机器学习和数据落盘.md",
"new notes/freqtrade 指标获取 理解消化.md",
"new notes/freqtrade 策略窗口 训练窗口.md",
"new notes/freqtrade 回测和dry-run的疑问.md",
"new notes/freqtrade sqlite容量问题.md",
"new notes/freqtrade 配置和策略的交集问题.md",
"kanban/mainboard.md",
"量化交易系统建议/09_解耦设计实现灵活架构.md",
"new notes/freqtrade 策略 demo 代码拆解.md",
"new notes/populate_indicators函数.md",
"Chats/New Chat.md",
"new notes/freqtrade.md",
"量化交易系统建议/04_Go语言相关工具.md",
"new notes/量化交易系统建议.md",
"templates/allNotes.md.md",
"canvas/freqtrade starter.canvas",
"继续鼓捣 freqtrade.md",
"在xunlang上运行一个docker 容器包含systemd的那种.md",
"kanban/2025-03-26.md",
"kanban/2025-02-02 要做的事情.md",
"new notes/如何触发.md",
"new notes/未命名.canvas",
"量化交易系统建议",
"Untitled",
"Chats",
"canvas/Untitled.canvas",
"kanban/notes",
"canvas/Untitled 1.canvas",
"canvas",

View File

@ -1,3 +1,12 @@
Assistant
Hello, I am your assistant. How can I help you?
- - - - -
User
哪些notes
- - - - -
User
哪些notes可以建立链接
- - - - -
User
哪些notes可以建立链接
- - - - -

View File

@ -0,0 +1,14 @@
{
"nodes":[
{"id":"bd052ddc0521b7f4","x":-90,"y":-203,"width":530,"height":183,"type":"text","text":"config\n- 通过schema可以对目标配置进行验证: \n```\nhttps://schema.freqtrade.io/schema.json\n```"},
{"id":"2d449a30b21b74f9","x":-90,"y":-340,"width":530,"height":100,"type":"text","text":"策略"},
{"id":"77137ef1df4571d4","x":-300,"y":-900,"width":140,"height":880,"type":"text","text":"ccxt"},
{"id":"3a61a57ab9e8b0db","x":-580,"y":-900,"width":220,"height":880,"type":"text","text":"交易所Api"},
{"id":"75d75da6c89336fd","x":-90,"y":-480,"width":530,"height":100,"type":"text","text":"candles"},
{"id":"5def4f7f907a1575","type":"text","text":"基于candles得到的高阶指标数据","x":-90,"y":-620,"width":530,"height":100},
{"id":"583998b063bc3132","x":500,"y":-900,"width":220,"height":880,"type":"text","text":"freqtrade core\n"},
{"id":"aa10abf7093b2eb2","type":"text","text":"生成交易信号","x":-90,"y":-760,"width":530,"height":100},
{"id":"afb68a028fb3ea73","type":"text","text":"订单","x":-90,"y":-900,"width":530,"height":100}
],
"edges":[]
}

View File

@ -4,8 +4,14 @@ kanban-plugin: board
---
## may be do
## will be do
- [ ] [[继续鼓捣 freqtrade]]
- [ ] [[在xunlang上运行一个docker 容器包含systemd的那种]]
## doing
@ -20,6 +26,6 @@ kanban-plugin: board
%% kanban:settings
```
{"kanban-plugin":"board","list-collapse":[false,false,false]}
{"kanban-plugin":"board","list-collapse":[false,false,false,false]}
```
%%

View File

@ -0,0 +1,193 @@
---
date:
2025-04-10 11:01:28:
tags:
- 策略
- 量化
- freqtrade
title:
---
😯: https://www.freqtrade.io/en/stable/strategy-customization/这个页面里的内容:Dataframe¶Freqtrade
```
uses pandas to store/provide the candlestick (OHLCV) data. Pandas is a great library developed for processing large amounts of data in tabular format.Each row in a dataframe corresponds to one candle on a chart, with the latest complete candle always being the last in the dataframe (sorted by date).
If we were to look at the first few rows of the main dataframe using the pandas head() function, we would see:> dataframe.head()
date open high low close volume 0 2021-11-09 23:25:00+00:00 67279.67 67321.84 67255.01 67300.97 44.62253 1 2021-11-09 23:30:00+00:00 67300.97 67301.34 67183.03 67187.01 61.38076 2 2021-11-09 23:35:00+00:00 67187.02 67187.02 67031.93 67123.81 113.42728 3 2021-11-09 23:40:00+00:00 67123.80 67222.40 67080.33 67160.48 78.96008 4 2021-11-09 23:45:00+00:00 67160.48 67160.48 66901.26 66943.37 111.39292
A dataframe is a table where columns are not single values, but a series of data values. As such, simple python comparisons like the following will not work:
if dataframe['rsi'] > 30:
dataframe['enter_long'] = 1
The above section will fail with The truth value of a Series is ambiguous [...].This must instead be written in a pandas-compatible way, so the operation is performed across the whole dataframe, i.e. vectorisation.
dataframe.loc[
(dataframe['rsi'] > 30)
, 'enter_long'] = 1
With this section, you have a new column in your dataframe, which has 1 assigned whenever RSI is above 30.Freqtrade uses this new column as an entry signal, where it is assumed that a trade will subsequently open on the next open candle.Pandas provides fast ways to calculate metrics, i.e. "vectorisation". To benefit from this speed, it is advised to not use loops, but use vectorized methods instead.Vectorized operations perform calculations across the whole range of data and are therefore, compared to looping through each row, a lot faster when calculating indicators
```
请帮我解释一下,没看懂
---
我来帮你逐步解释这段内容,这部分是关于 Freqtrade一个开源的加密货币交易框架如何使用 Pandas 数据框架Dataframe来处理和分析K线图数据OHLCV: 开盘价、最高价、最低价、收盘价、成交量)。这段文档主要是讲如何在 Freqtrade 中操作数据,并编写交易策略时的一些注意事项。以下是逐步拆解和解释:
---
1. 什么是 Dataframe
- 定义Freqtrade 使用 Python 的 Pandas 库来存储和处理K线数据。Pandas 是一个强大的数据处理工具,特别适合处理表格形式的大量数据。
- K线数据在交易中每一根K线蜡烛图表示一段时间内的价格波动包括开盘价open、最高价high、最低价low、收盘价close和成交量volume。这些数据被存储在 Dataframe 中。
- 结构Dataframe 是一个表格每一行代表一根K线按时间排序最后一行是最近完成的K线。
例子:
```text
date open high low close volume
0 2021-11-09 23:25:00+00:00 67279.67 67321.84 67255.01 67300.97 44.62253
1 2021-11-09 23:30:00+00:00 67300.97 67301.34 67183.03 67187.01 61.38076
```
- 每一行是一个5分钟的K线从时间戳可以看出
- 列date, open, high, low, close, volume分别表示时间和对应的价格/成交量数据。
---
2. 为什么普通的 Python 比较不行?
- 问题:在普通的 Python 中,你可能会写这样的代码来判断条件:
python
```python
if dataframe['rsi'] > 30:
dataframe['enter_long'] = 1
```
这意思是:如果 RSI相对强弱指数大于 30就设置一个“买入”信号enter_long = 1
- 为什么不行dataframe['rsi'] 不是单个数字而是一个包含多个值的序列Series比如 [25, 35, 40, ...]。Python 不知道如何直接比较一个序列和数字(> 30所以会报错“The truth value of a Series is ambiguous”。
---
3. Pandas 的正确写法:向量化操作
- 解决办法Pandas 要求你用“向量化”方式来处理整个数据表格,而不是一行一行地检查。
- 正确代码:
python
```python
dataframe.loc[(dataframe['rsi'] > 30), 'enter_long'] = 1
```
- 解释:
- dataframe['rsi'] > 30检查每一行的 RSI 是否大于 30返回一个布尔序列比如 [False, True, True, ...]。
- .loc[...]Pandas 的定位方法,用来选择满足条件的行。
- (dataframe['rsi'] > 30):条件,筛选出 RSI > 30 的行。
- 'enter_long':目标列,表示“买入信号”。
- = 1将满足条件的行的 'enter_long' 列设为 1。
- 结果Dataframe 会多一列 'enter_long',其中 RSI > 30 的行值为 1其他行可能是空值NaN或默认值取决于代码逻辑
- 用途Freqtrade 用这一列作为买入信号假设下一根K线开盘时会进入交易。
---
4. 什么是向量化Vectorisation
- 定义:向量化是指一次性对整个数据集进行操作,而不是用循环一行一行处理。
- 为什么重要:
- 速度快Pandas 的底层是用 C 语言实现的,向量化操作比 Python 的 for 循环快得多。
- 适合大数据交易数据可能有成千上万根K线循环太慢。
- 例子:
- 不用循环dataframe['rsi'] > 30 一次性检查所有行。
- 用循环(不推荐):
python
```python
for i in range(len(dataframe)):
if dataframe['rsi'][i] > 30:
dataframe['enter_long'][i] = 1
```
这种写法虽然也能跑,但效率很低。
---
5. 总结:这段内容想告诉你什么?
- 核心思想:在 Freqtrade 中,交易策略是通过操作 Dataframe 来实现的。你需要用 Pandas 的向量化方法来设置买卖信号,而不是用普通的 Python 逻辑。
- 实际应用:
- 你可以根据技术指标(比如 RSI、均线等生成信号列比如 enter_long、exit_long
- Freqtrade 会根据这些信号自动执行交易。
- 建议:避免用循环,尽量用 Pandas 的内置函数和向量化操作来计算指标和信号。
---
一个简单的例子
假设你的 Dataframe 是这样的:
```text
date rsi
0 2021-11-09 23:25:00 25
1 2021-11-09 23:30:00 35
2 2021-11-09 23:35:00 40
```
运行:
python
```python
dataframe.loc[(dataframe['rsi'] > 30), 'enter_long'] = 1
```
结果变成:
```text
date rsi enter_long
0 2021-11-09 23:25:00 25 NaN
1 2021-11-09 23:30:00 35 1.0
2 2021-11-09 23:35:00 40 1.0
```
Freqtrade 看到 enter_long 是 1 时就会在下一根K线开盘时买入。
---
如果你还有具体的问题或代码看不懂的地方,可以告诉我,我再详细解释!

View File

@ -0,0 +1,100 @@
---
date:
2025-04-09 14:26:30:
tags:
- 量化
- freqtrade
title:
---
😯: sqlite里的数据有freatrade维护,如果运行时间足够久,sqlite会不会占据很大的空间,并性能下降?
你再次提出了关于Freqtrade使用SQLite数据库在长时间运行后是否会占用大量空间并导致性能下降的问题。由于之前我已经详细回答过这个问题我会简洁地总结核心要点并补充一些新角度供你参考。
---
### 会不会占用很大空间?
是的,会。
- Freqtrade在Dry-run模式下将每笔交易数据写入SQLite数据库例如tradesv3.dryrun.sqlite
- 数据增长速度取决于:
- 交易频率(高频策略更快)。
- 交易对数量pairlist越大数据越多
- 运行时长(时间越长,累积越多)。
- 示例每天1000笔交易每笔约1KB一年后可能达到365MB几年后可能数GB。
---
### 会不会性能下降?
可能会,但取决于数据量和硬件。
- 小数据量(<1GB数万条记录SQLite性能很好几乎无感知延迟
- 大数据量(>10GB数百万条记录
- 查询变慢:统计利润或检查交易时可能需要几秒。
- 写入变慢新交易记录插入速度下降尤其在HDD上。
- Freqtrade会定期读写数据库如检查未平仓交易数据量大时可能影响实时性。
---
### Freqtrade的管理方式
- Freqtrade没有自动清理机制数据会无限累积除非手动干预。
- SQLite本身没有大小限制最大140TB但性能瓶颈会先于空间限制显现。
---
### 解决方法(简要回顾)
1. 定期清理:
- 手动删除旧数据库或用脚本清理30天前的记录见之前代码
2. 切换数据库:
- 用PostgreSQL或MySQL替代SQLite适合大数据场景。
- 配置:--db-url postgresql://user:password@localhost:5432/freqtrade
3. 优化运行:
- 减少交易对、降低日志级别、使用SSD。
4. 监控:
- 检查文件大小ls -lh和查询性能简单SELECT测试
---
### 新角度:实际案例与阈值
- 社区经验Freqtrade用户报告数据库在几GB时性能仍可接受但超过10GB后建议优化。
- 硬件影响SSD比HDD能显著延长SQLite的“舒适区”可能支持到20-30GB
- 运行场景:
- 如果是短期测试(几周),无需担心。
- 如果是长期运行数月或数年建议每季度清理一次或迁移到PostgreSQL。
---
### 结论
SQLite确实会随时间占用更多空间性能也可能下降但通过定期维护或切换数据库可以轻松解决。你可以根据策略的交易频率和运行计划决定何时采取行动。如果需要更具体的监控脚本或配置建议请告诉我

View File

@ -0,0 +1,64 @@
---
date:
2025-04-08 20:17:04:
tags:
- 量化
- stoploss
- qna
- freqtrade
from: https://x.com/i/grok?conversation=1909573680528773211
---
[[freqtrade 回测和dry-run的疑问]]
[[freqtrade 策略窗口 训练窗口]]
😯: 在这个页面里: https://www.freqtrade.io/en/develop/stoploss/ 这句话的含义是什么·:
### Tight stoploss
严格止损Do not set too low/tight stoploss value when using stop loss on exchange! If set to low/tight you will have greater risk of missing fill on the order and stoploss will not work.
这段话的含义是警告用户在使用交易所的止损功能时不要设置过低或过于严格tight的止损值。原因是如果止损值设置得太低/太严格订单可能无法成交即“miss fill”从而导致止损功能失效。这样反而会增加交易的风险。
具体解释:
- “Tight stoploss”指的是止损价格与当前市场价格非常接近的设置。
- “Do not set too low/tight stoploss value”建议避免将止损点设置得过于接近当前价格。
- “Greater risk of missing fill on the order”指的是如果市场波动剧烈价格可能迅速越过你的止损点而无法按预期执行交易。
- “Stoploss will not work”意味着止损无法起到保护作用可能导致更大的损失。
总结:建议设置一个相对合理的止损范围,既能控制风险,又能确保订单有足够的机会成交。
😯: 能举个例子吗
当然可以以下是一个具体的例子来说明“tight stoploss”过于严格的止损可能导致的问题
假设你在使用Freqtrade进行交易当前某个加密货币的价格是 100美元你决定买入并设置一个止损来控制风险。
场景 1设置过于严格的止损
- 你将止损价格设为 99美元下跌1%就触发止损)。
- 市场价格有时会有小幅波动,比如突然跌到 98.5美元,然后又迅速反弹回 100美元。
- 因为你的止损太“tight”99美元离100美元太近交易所可能来不及以99美元成交或者市场直接跳过了99美元称为“滑点”结果你的止损订单没有执行。
- 接着,如果价格继续下跌到 90美元你就损失了10%而原本希望止损能限制损失为1%。
场景 2设置合理的止损
- 你将止损价格设为 95美元下跌5%触发止损)。
- 市场价格波动到 98.5美元时你的止损不会触发因为还没达到95美元。
- 如果价格真的持续下跌到 95美元交易所有更大的机会以接近95美元的价格成交你的止损单这样你的损失就被控制在5%左右,而不是无限扩大。
结论
在场景1中止损设置得太“tight”99美元导致订单可能错过成交风险未被有效控制。而在场景2中止损设置得更宽松95美元增加了成交的可能性真正起到了保护作用。这就是文档中警告“不要设置过低/过于严格的止损”的原因。合理的止损范围需要根据市场波动性和你的风险承受能力来决定。

View File

@ -0,0 +1,10 @@
---
date:
2025-04-08 10:50:28:
tags: freqtrade, 量化
from: https://www.freqtrade.io/en/stable/bot-basics/
---
- 从本地数据库读取未平仓交易记录
- 计算当前可交易对列表
-

View File

@ -0,0 +1,118 @@
---
date:
2025-04-09 13:57:24:
tags:
- 量化
- freqtrade
- 回测
from: https://x.com/i/grok?conversation=1909844133071798467
---
[[freqtrade sqlite容量问题]]
我:
https://www.freqtrade.io/en/stable/strategy-101/请讲解一下这部分内容:
```
Assessing backtesting and dry run results¶Always dry run your strategy after backtesting it to see if backtesting and dry run results are sufficiently similar.
If there is any significant difference, verify that your entry and exit signals are consistent and appear on the same candles between the two modes. However, there will always be differences between dry runs and backtests:
```
这段内容是关于如何评估交易策略的回测backtesting和模拟运行dry run结果的来自Freqtrade一个开源的加密货币交易框架的官方文档。以下是对其内容的逐步讲解
---
## 核心建议:总是结合回测和模拟运行进行验证
在完成策略的回测后建议运行一次模拟运行dry run以检查回测结果和模拟运行结果是否足够相似。这是因为回测是在理想化的假设下进行的而模拟运行更接近真实市场环境。通过对比两者可以验证策略的可靠性和一致性。
---
如果结果差异显著,如何排查?
如果回测和模拟运行的结果存在明显差异,你需要检查以下方面:
1. 买入和卖出信号的一致性:
- 确保在回测和模拟运行中买入entry和卖出exit信号出现在相同的K线candles上。
- 如果信号位置不一致,可能是策略逻辑或数据处理的问题。
2. 理解差异的原因:
- 回测和模拟运行之间总是会存在一些差异,这是正常现象。接下来会详细说明这些差异的来源。
---
## 回测与模拟运行的差异原因
以下是导致回测和模拟运行结果不同的几个主要因素:
1. 订单填充假设
- 回测假设所有订单都能被100%成交。例如无论市场深度如何限价单limit orders都会被填满。
- 模拟运行:如果使用限价单,或者交易所的交易量不足,订单可能无法成交。这会直接影响结果。
2. 交易执行时机
- 回测:
- 当K线收盘后触发买入信号时回测假设交易在下一根K线的开盘价open price执行。
- 除非你在策略中自定义了价格回调pricing callbacks否则回测不会模拟延迟。
- 模拟运行:
- 新K线生成后例如每5分钟生成一根K线Freqtrade需要时间分析所有交易对的数据框架dataframes
- 这会导致信号生成和交易执行之间存在几秒钟的延迟(理想情况下延迟尽可能小)。
- 因此实际买入价格可能偏离回测中的下一根K线开盘价。
3. 收益计算的差异
- 由于模拟运行中的买入价格可能与回测不同收益计算profit calculations也会受到影响。
- 这意味着以下机制的结果可能不完全一致:
- 投资回报率ROI
- 止损stoploss
- 追踪止损trailing stoploss
- 回调退出callback exits
- 这种差异是正常的,无需过度担心,只要整体趋势一致即可。
4. 计算延迟的影响
- 如果你的计算机性能不足新K线生成后Freqtrade处理所有交易对数据的时间会变长。
- 计算“延迟”lag越大信号生成和交易执行之间的价格波动就越不可预测。
- ### 建议:
- 确保你的电脑性能足够强大能在合理时间内处理你的交易对列表pairlist中的数据。
- 检查Freqtrade的日志logs如果有显著的数据处理延迟警告说明需要优化硬件或减少交易对数量。
---
## 总结与建议
1. 回测是理想化测试:它假设所有条件完美,但无法完全反映真实市场。
2. 模拟运行更贴近现实:它考虑了订单未成交、执行延迟等因素,因此结果可能与回测不同。
3. 验证一致性:重点检查信号是否一致,而不是追求完全相同的收益数字。
4. 优化硬件:确保计算能力跟得上策略需求,避免因延迟导致结果偏差。
通过结合回测和模拟运行,你可以更全面地评估策略的表现,并在真实交易前发现潜在问题。如果还有具体问题,可以告诉我,我会进一步帮你分析!

View File

@ -1,11 +1,16 @@
---
date:
<% tp.date.now ("YYYY-MM-DD HH: mm: ss") %>:
tags:
<% tp.date.now ("YYYY-MM-DD HH:mm:ss") %>:
tags:
- freqtrade
- qna
title:
---
[populate_indicators函数](populate_indicators函数)
问题列表:
1. 既然是freqtrade调用populate_indicators那么OHLCV在哪儿又是怎么计算成不同timeframe的指标的比如我有12个币对12个timeframe然后我关注n种类型的指标怎么安排计算这144*n个指标计算完了如何存放是否要进行数据持久化或者所谓的落盘。
1. 既然是freqtrade调用populate_indicators那么OHLCV在哪儿又是怎么计算成不同timeframe的指标的比如我有12个币对12个timeframe然后我关注n种类型的指标怎么安排计算这144*n个指标计算完了如何存放是否要进行数据持久化或者所谓的落盘。
这里有例子: [[freqtrade 策略 demo 代码拆解]]
训练也会用到: [[freqtrade 策略窗口 训练窗口]]

View File

@ -0,0 +1,211 @@
---
date:
2025-04-08 21:49:37:
tags:
- 量化
- qna
- freqtrade
title:
from: https://x.com/i/grok?conversation=1909584053176877095
---
😯: 实现机器学习, Freqtrade需要某个币对多久的历史数据,放到本地机器,以何种形式落盘?
在 Freqtrade 中实现机器学习(特别是通过其 FreqAI 模块进行自适应预测建模)时,对历史数据的需求和存储方式取决于你的具体策略、模型训练需求以及回测或实时交易的时间范围。以下是对你的问题的详细解答:
---
1. 需要某个币对多久的历史数据?
Freqtrade 的机器学习功能FreqAI并没有固定的历史数据时长要求而是由以下因素决定
a. 策略和模型的需求
- 指标计算你的策略中使用的指标如移动平均线、RSI 等)需要一定数量的初始数据(即 startup_candle_count。比如如果你用的是 100 周期的 EMA指数移动平均线至少需要 400 根K线根据 Freqtrade 文档建议4倍周期以确保指标稳定
- 训练窗口FreqAI 需要足够的数据来训练机器学习模型。训练窗口的大小由你在配置文件中定义的参数 train_period_days 或 live_retrain_hours 决定。例如,如果你设置 train_period_days = 30就需要至少 30 天的数据。
- 特征工程:如果你启用了复杂的特征工程(如 FreqAI 的自动特征生成,可能生成数千个特征),可能需要更多数据来确保模型不过拟合。
b. 回测或实时交易的需求
- 回测:回测时需要覆盖整个测试时间段的数据,外加 startup_candle_count 的预热数据。例如,如果你想回测 2024 年 1 月 1 日到 4 月 1 日的 3 个月,使用 5 分钟K线且 startup_candle_count = 400那么需要从 2023 年 12 月中旬开始的数据(约额外 2 天)。
- 实时交易实时模式下FreqAI 会定期重新训练模型(例如每小时或每天),需要下载足够的历史数据来支持初始训练和后续更新。通常建议至少准备数周到数月的数据,具体取决于你的 train_period_days 设置。
c. 交易所限制
- 不同交易所提供的历史数据量有限。例如Binance 通常提供较长的 OHLCV 数据历史,而 Kraken 只提供 720 根K线需要用 --dl-trades 下载更多)。你需要确保下载的数据量满足策略和模型的最低要求。
典型建议
- 短期策略:至少 1-3 个月的数据5 分钟或 1 小时K线
- 长期策略6 个月到 1 年甚至更长时间的数据。
- FreqAI 默认示例:文档中常建议从 30 天到 90 天开始,具体取决于你的目标(如预测短期价格波动还是长期趋势)。
---
2. 如何放到本地机器?
Freqtrade 提供了一个命令行工具 freqtrade download-data 来下载历史数据并存储到本地。以下是实现步骤:
a. 下载数据的命令
假设你想为某个币对(如 BTC/USDT下载数据
bash
```bash
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 90
```
- --exchange指定交易所如 binance、kraken 等)。
- --pairs指定币对可以用正则表达式如 ".*/USDT" 下载所有 USDT 交易对)。
- --timeframes指定K线时间框架如 1m、5m、1h默认是 1m 和 5m
- --days指定下载的天数如 90 天)。
- --timerange可选指定具体时间范围如 20240101-20240401
b. 增量更新
Freqtrade 支持增量下载。如果你已经下载了数据,可以定期运行类似以下命令更新:
bash
```bash
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 7
```
这会下载最近 7 天的数据并追加到已有数据中。
c. 数据存储位置
下载的数据默认存储在用户数据目录下的 user_data/data/<exchange> 文件夹中,例如:
```text
~/.freqtrade/user_data/data/binance/
```
---
3. 以何种形式落盘?
Freqtrade 默认使用高效的 Feather 文件格式(基于 Apache Arrow存储历史数据。这种格式具有以下特点
- 高效性:相比 CSV 或 JSONFeather 文件读写速度更快,适合大数据处理。
- 压缩性:文件大小较小,节省磁盘空间。
- 兼容性:与 Python 的 Pandas 库无缝集成,方便数据分析。
文件命名约定
- OHLCV 数据(开盘、高点、低点、收盘、成交量)存储为:
```text
<pair>-<timeframe>.feather
```
例如BTC_USDT-5m.feather
- 如果下载了交易数据trades则存储为
```text
<pair>-trades.feather
```
例如BTC_USDT-trades.feather
可选格式
- 如果你需要其他格式,可以用 freqtrade convert-data 将数据转换为 JSON 或 Parquet。例如
bash
```bash
freqtrade convert-data --format-from feather --format-to json
```
- 对于某些特殊交易所(如 Kraken可能需要先下载 trades 数据并转换为 OHLCV 数据:
bash
```bash
freqtrade trades-to-ohlcv --exchange kraken --pairs BTC/USD --timeframes 5m
```
---
4. 实际操作示例
假设你想为 BTC/USDT 下载 90 天的 5 分钟K线数据并用于 FreqAI
1. 下载数据:
bash
```bash
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 90
```
2. 检查文件: 数据会存储在 ~/.freqtrade/user_data/data/binance/BTC_USDT-5m.feather。
3. 配置 FreqAI 在 config.json 中设置:
json
```json
"freqai": {
"enabled": true,
"train_period_days": 60,
"identifier": "my_model",
"feature_parameters": {
"include_timeframes": ["5m"]
}
}
```
4. 运行回测或实时交易:
bash
```bash
freqtrade backtesting --strategy MyStrategy --freqai
```
---
5. 注意事项
- 磁盘空间5 分钟K线数据每币对每天约产生 288 根K线90 天约为 26,000 根K线一个 Feather 文件大小通常在几 MB 到几十 MB 之间。准备足够的存储空间。
- 数据完整性:运行 freqtrade list-data 检查下载的数据是否完整。
- 交易所限制:某些交易所可能需要额外的 API 调用或特殊配置,详见 Freqtrade 文档的“Exchange-specific Notes”部分。
---
总结
- 时长:通常需要 1-12 个月的历史数据,具体取决于策略和训练窗口(建议从 30-90 天开始)。
- 下载方式:使用 freqtrade download-data 命令,存储到本地 user_data/data/<exchange> 目录。
- 存储格式:默认使用 Feather 文件格式,高效且适合机器学习处理。
如果你有更具体的策略或币对需求,可以告诉我,我可以帮你进一步细化!

View File

@ -0,0 +1,333 @@
---
date:
2025-04-09 09:27:15:
tags:
- 量化
- freqtrade
- 策略
title:
---
😐:
以下是FreqTrade策略的最小示例, 请给详细解释一下
```python
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
class MyStrategy(IStrategy):
timeframe = '15m'
# set the initial stoploss to -10%
stoploss = -0.10
# exit profitable positions at any time when the profit is greater than 1%
minimal_roi = {"0": 0.01}
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# generate values for technical analysis indicators
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# generate entry signals based on indicator values
dataframe.loc[
(dataframe['rsi'] < 30),
'enter_long'] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# generate exit signals based on indicator values
dataframe.loc[
(dataframe['rsi'] > 70),
'exit_long'] = 1
return dataframe
```
我将详细解释这个FreqTrade策略示例代码逐步分解每个部分的功能和作用。
## 整体概述
这是一个基于FreqTrade框架的最小交易策略示例使用RSI相对强弱指数作为技术指标来生成买入和卖出信号。它是一个简单的超买/超卖策略适用于15分钟时间框架。
---
## 代码分解
1. 导入部分
python
```python
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
```
- IStrategy: FreqTrade提供的一个基类所有自定义策略都需要继承它。
- DataFrame: 使用Pandas库的DataFrame来处理和操作市场数据如价格、指标等
- ta: TALib库技术分析库的抽象接口用于计算技术指标比如RSI。
---
2. 策略类定义
python
```python
class MyStrategy(IStrategy):
```
- 定义了一个名为MyStrategy的类继承自IStrategy。
- 你需要实现一些特定的方法如populate_indicators、populate_entry_trend和populate_exit_trend来告诉FreqTrade如何计算指标和生成交易信号。
---
3. 策略参数
python
```python
timeframe = '15m'
stoploss = -0.10
minimal_roi = {"0": 0.01}
```
- timeframe = '15m':
- 设置策略使用的数据时间框架为15分钟K线。这意味着策略会基于每15分钟的OHLCV开盘、最高、最低、收盘、成交量数据进行分析。
- stoploss = -0.10:
- 设置止损为-10%。如果持仓亏损达到10%,策略会自动平仓以限制损失。
- minimal_roi = {"0": 0.01}:
- 定义了最小投资回报率ROI。这里的意思是只要持仓利润超过1%0.01),就可以随时平仓获利。
- {"0": 0.01}表示从持仓开始的第0分钟即任何时候只要利润达到1%,就允许退出。
---
4. populate_indicators 方法 (填充指标)
python
```python
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
```
- 作用: 计算技术指标并将其添加到数据框架中。
- 输入:
- dataframe: 包含市场数据的Pandas DataFrame默认有open、high、low、close、volume等列。
- metadata: 一个字典,包含额外信息(如交易对),这里未使用。
- 实现:
- ta.RSI(dataframe, timeperiod=14): 使用TALib计算14周期的RSI指标并将其存储在dataframe['rsi']列中。
- RSI是一个衡量价格动能的指标范围在0到100之间通常用于判断超买>70和超卖<30状态
- 输出: 返回添加了RSI列的dataframe。
---
5. populate_entry_trend 方法 (填充入场趋势)
python
```python
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe['rsi'] < 30),
'enter_long'] = 1
return dataframe
```
- 作用: 定义买入(做多)信号。
- 逻辑:
- dataframe['rsi'] < 30: 检查RSI是否低于30超卖区域
- dataframe.loc[..., 'enter_long'] = 1: 如果条件满足在enter_long列中标记为1表示这是一个买入信号。
- FreqTrade会根据enter_long列的值决定是否开多仓。
- 输出: 返回更新后的dataframe包含买入信号。
---
6. populate_exit_trend 方法 (填充退场趋势)
python
```python
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe['rsi'] > 70),
'exit_long'] = 1
return dataframe
```
- 作用: 定义卖出(平仓)信号。
- 逻辑:
- dataframe['rsi'] > 70: 检查RSI是否高于70超买区域
- dataframe.loc[..., 'exit_long'] = 1: 如果条件满足在exit_long列中标记为1表示这是一个卖出信号。
- FreqTrade会根据exit_long列的值决定是否平仓。
- 输出: 返回更新后的dataframe包含卖出信号。
---
## 策略工作原理
1. 数据准备:
- FreqTrade会为指定的交易对如BTC/USDT加载15分钟K线数据并将其传递给策略。
2. 指标计算:
- populate_indicators方法计算RSI并添加到数据中。
3. 信号生成:
- populate_entry_trend检查RSI是否低于30若是则生成买入信号。
- populate_exit_trend检查RSI是否高于70若是则生成卖出信号。
4. 交易执行:
- 当enter_long = 1时FreqTrade开多仓。
- 当exit_long = 1或达到minimal_roi1%利润或触发stoploss-10%亏损)时,平仓。
---
## 策略特点
- 简单性: 这是一个基础的RSI超买超卖策略易于理解和修改。
- 风险管理:
- 有10%的止损保护。
- 1%的最小盈利目标确保小幅盈利时也能退出。
- 局限性:
- 只使用单一指标RSI可能在震荡市场中产生较多假信号。
- 未考虑趋势过滤或其他确认条件。
---
## 如何改进
1. 添加更多指标: 如MACD、布林带等与RSI结合以提高信号准确性。
2. 动态止损: 根据市场波动调整止损,而不是固定的-10%。
3. 趋势过滤: 加入移动平均线如50周期均线判断大趋势避免逆势交易。
4. 优化参数: 测试不同的RSI周期如7或21或超买/超卖阈值如25/75
如果你有具体问题或想深入探讨某部分,请告诉我!
😯: 也就是说实现一个策略,主要要做的就是给某几个阈值进行设置,并给几个回调函数给出代码具体实现, 然后让系统加载并在需要的时候调用
是的你总结得很到位在FreqTrade中实现一个交易策略核心任务确实可以归纳为以下几点
1. 设置关键参数(阈值)
- 定义策略的基本规则比如时间框架timeframe、止损stoploss、最小盈利目标minimal_roi等。这些参数是策略运行的“全局设置”直接影响交易行为。
2. 实现回调函数
- FreqTrade通过几个关键的回调函数来让用户自定义策略逻辑
- populate_indicators: 计算技术指标并准备数据。
- populate_entry_trend: 定义买入(或做空)信号。
- populate_exit_trend: 定义卖出(或平空)信号。
- 这些函数的具体实现决定了策略如何分析市场数据并生成交易信号。
3. 系统加载和调用
- 一旦策略代码编写完成并符合FreqTrade的要求你只需要将它放入策略文件夹FreqTrade会在运行时加载并根据市场数据按顺序调用这些回调函数。系统会自动处理数据获取、信号执行、订单管理等后台工作。
---
## 工作流程(以你的示例为例)
1. 参数设置:
- timeframe = '15m'15分钟K线
- stoploss = -0.10-10%止损)
- minimal_roi = {"0": 0.01}1%盈利目标)
2. 回调函数实现:
- populate_indicators: 计算RSI指标。
- populate_entry_trend: 当RSI < 30时标记买入信号
- populate_exit_trend: 当RSI > 70时标记卖出信号。
3. 系统执行:
- FreqTrade加载你的MyStrategy类。
- 每隔15分钟获取新的K线数据调用populate_indicators计算RSI。
- 然后调用populate_entry_trend检查是否买入再调用populate_exit_trend检查是否卖出。
- 根据信号、止损和ROI规则执行交易。
---
## 扩展理解
- 灵活性: 你可以在回调函数中加入任意复杂的逻辑,比如多指标组合、机器学习模型,甚至外部数据(如新闻情绪)。
- 模块化: FreqTrade将数据处理、信号生成和交易执行分离你只需专注于策略逻辑不用操心底层实现。
- 调试与优化: 写好策略后可以用FreqTrade的回测功能freqtrade backtesting测试效果调整参数或逻辑。
简单来说FreqTrade提供了一个框架你的任务是用参数和回调函数“填空”告诉系统“什么时候买、什么时候卖、如何管理风险”。如果需要更复杂的策略只需在这些函数中扩展代码即可。
有什么具体的实现想法或问题想讨论吗?我可以帮你进一步细化!

View File

@ -0,0 +1,166 @@
---
date:
2025-04-08 21:59:42:
tags:
- 量化
- qna
- freqtrade
title:
from: https://x.com/i/grok?conversation=1909584053176877095
---
[[freqtrade 策略 demo 代码拆解]]
😯: 什么叫窗口(策略和训练)
在 Freqtrade或其他交易和机器学习相关的上下文中窗口Window 是一个非常重要的概念,尤其在策略开发和模型训练中。让我分别从 策略窗口 和 训练窗口 的角度详细解释一下它们的含义,特别是结合 Freqtrade 和机器学习的背景。
---
1. 策略窗口Strategy Window
在交易策略中,窗口 通常指的是计算技术指标或分析价格数据时所使用的一段历史数据的时间范围。这个窗口的大小决定了策略如何看待市场趋势或信号。
定义
- 策略窗口 是指策略在某一时刻比如当前K线用来计算指标或做出交易决策的 历史数据长度。
- 在 Freqtrade 中,这通常由你的策略代码中定义的 指标周期(如移动平均线的周期)或 startup_candle_count 参数决定。
举例
假设你用的是一个基于简单移动平均线SMA的策略
- 短期 SMA计算过去 10 根K线的平均价格窗口大小是 10。
- 长期 SMA计算过去 50 根K线的平均价格窗口大小是 50。
- 交易信号:当短期 SMA 上穿长期 SMA 时买入,反之卖出。
在 Freqtrade 的策略文件中,你可能这样定义:
python
```python
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe['sma_short'] = ta.SMA(dataframe, timeperiod=10) # 窗口大小为10
dataframe['sma_long'] = ta.SMA(dataframe, timeperiod=50) # 窗口大小为50
return dataframe
```
窗口的作用
- 短期窗口(如 10 或 20对市场短期波动更敏感适合高频交易或短线策略。
- 长期窗口(如 50 或 200捕捉更长期的趋势适合趋势跟随策略。
- 启动数据startup_candle_countFreqtrade 要求在回测或实时交易开始时加载足够的K线数据来“预热”这些指标。例如如果你的最大窗口是 50你需要至少 50 根K线才能让 SMA 正常工作。
---
2. 训练窗口Training Window
在 Freqtrade 的 FreqAI 模块中,训练窗口 是指机器学习模型在训练时所使用的一段历史数据的时长。这个窗口决定了模型学习到的模式和预测能力。
定义
- 训练窗口 是指在某个时间点FreqAI 从历史数据中提取的一段固定长度的数据,用于训练机器学习模型(如回归、分类或强化学习模型)。
- 在配置文件中,通常通过 train_period_days训练周期天数或类似的参数指定。
配置示例
在 config.json 中:
json
```json
"freqai": {
"enabled": true,
"train_period_days": 60, // 训练窗口为60天
"identifier": "my_model",
"feature_parameters": {
"include_timeframes": ["5m"]
}
}
```
这表示 FreqAI 会使用过去 60 天的 5 分钟K线数据来训练模型。
训练窗口的作用
- 数据范围训练窗口决定了模型能看到多少历史数据。例如60 天的数据可能包含约 17,280 根 5 分钟K线60 × 24 × 12
- 学习模式:窗口内的数据被用来提取特征(比如价格、成交量、技术指标等),然后训练模型预测目标(如未来 1 小时的价格涨跌)。
- 动态调整:在实时交易中,训练窗口会“滑动”,不断用最新的数据更新模型。例如,每小时重新训练时,窗口会向前移动一小时,丢弃最老的数据,加入最新的数据。
举例
假设当前是 2025 年 4 月 8 日:
- train_period_days = 30模型会使用 3 月 10 日到 4 月 8 日的数据训练。
- 训练完成后,模型预测 4 月 8 日之后的走势。
- 如果设置了 live_retrain_hours = 24模型会在 4 月 9 日重新训练,使用 3 月 11 日到 4 月 9 日的数据。
---
策略窗口 vs 训练窗口
|特性|策略窗口|训练窗口|
|---|---|---|
|定义|用于计算指标的固定历史数据长度|用于训练机器学习模型的历史数据范围|
|典型大小|10-200 根K线取决于指标|几天到几个月(取决于配置)|
|Freqtrade 参数|startup_candle_count<br><br>或指标周期|train_period_days|
|目的|生成交易信号|让模型学习市场模式|
|动态性|随着时间滑动,但长度固定|可滑动,通常长度固定|
---
在 Freqtrade 中的实际应用
策略窗口
- 你需要确保下载的历史数据足够覆盖最大的策略窗口。例如,如果你的策略用的是 200 周期的 EMAstartup_candle_count 至少设为 200建议 4 倍,即 800以保证稳定性
- 下载命令:
bash
```bash
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 90
```
训练窗口
- FreqAI 需要更长的数据来训练模型。如果你设置 train_period_days = 60需要至少 60 天的数据。
- 如果你还启用了回测,可能需要额外的数据来覆盖回测时间。例如,回测 2024 年 1 月到 3 月90 天),加上训练窗口 60 天,总共需要从 2023 年 11 月开始的数据。
---
总结
- 策略窗口:是指标计算的“看回”范围,通常较短,决定了交易信号的生成。
- 训练窗口:是机器学习模型的学习范围,通常较长,决定了模型对市场的理解能力。
在 Freqtrade 中,合理设置这两个窗口非常重要:
- 策略窗口太小可能错过趋势,太大可能反应迟钝。
- 训练窗口太短可能导致模型学不到足够模式,太长可能包含过时数据。
如果你有具体的策略代码或 FreqAI 配置需要分析,可以分享给我,我可以帮你进一步优化窗口设置!

View File

@ -0,0 +1,164 @@
---
date:
2025-04-08 22:07:50:
tags:
- 机器学习
- 量化
- freqtrade
- qna
title:
---
[[freqtrade 超参数优化]]
😯: 我看你上面提到了: 这表示 FreqAI 会使用过去 60 天的 5 分钟K线数据来训练模型。我想问一下, 训练窗口是不是越大越好,比如360 天的 5 分钟K线数据比60 天的 5 分钟K线数据的更可靠?
你的问题非常好!训练窗口的大小(比如 60 天 vs 360 天的 5 分钟K线数据对 FreqAI 模型的性能确实有重要影响,但 并不是越大越好。训练窗口的大小需要根据你的交易目标、市场特性以及模型设计来权衡。以下我会详细分析为什么 360 天不一定比 60 天更可靠,并给出一些选择窗口大小的建议。
---
1. 训练窗口越大意味着什么?
在 FreqAI 中训练窗口train_period_days决定了模型用来学习历史数据的范围。以 5 分钟K线为例
- 60 天:约 17,280 根K线60 × 24 × 12
- 360 天:约 103,680 根K线360 × 24 × 12
更大的窗口意味着:
- 更多数据点:模型可以看到更长的历史模式,可能捕捉到季节性或长期趋势。
- 更多样本:在机器学习中,更多数据通常有助于提高模型的泛化能力(即对未知数据的预测能力)。
- 更高计算成本训练时间和内存需求会显著增加尤其是当特征数量很大时FreqAI 可能生成数百到数千个特征)。
---
2. 为什么训练窗口不是越大越好?
虽然更大的窗口看起来更有吸引力,但以下几个因素表明 360 天并不一定比 60 天更可靠:
a. 市场动态性Market Dynamics
- 加密货币市场的变化性:加密市场(如 BTC/USDT波动剧烈长期数据可能包含过时的市场条件。例如2023 年初的熊市模式可能与 2025 年的牛市完全不同。
- 相关性衰减离当前时间越远的数据与当前市场状态的相关性越低。360 天的数据可能包含大量“噪声”,反而削弱模型对近期趋势的敏感性。
b. 过拟合与欠拟合的平衡
- 过拟合Overfitting如果窗口太大模型可能“记住”历史数据的细节包括噪声而不是学习通用模式导致在新数据上的表现变差。
- 欠拟合Underfitting如果窗口太小模型可能无法捕捉足够的模式预测能力不足。
- 360 天可能导致模型过于复杂,而 60 天可能更适合捕捉中短期规律。
c. 计算效率
- 训练时间360 天的 5 分钟K线数据量是 60 天的 6 倍,训练模型的时间和资源需求会大幅增加。如果你在实时交易中设置了频繁重新训练(比如 live_retrain_hours = 1过大的窗口可能导致系统跟不上市场。
- 特征爆炸FreqAI 的特征工程(如基于多个时间框架生成特征)会随数据量增加呈指数级增长,可能占用大量内存。
d. 目标预测周期
- 预测目标的影响:训练窗口应与你预测的时间范围匹配。如果你的目标是预测未来 1 小时的走势60 天可能已经足够捕捉相关模式;而 360 天可能包含过多无关的长期波动。
- 例如,短期交易策略(如 5 分钟K线预测 1-2 小时)更适合较小的窗口,而长期趋势策略可能需要更大的窗口。
---
3. 60 天 vs 360 天:哪个更可靠?
“可靠性”取决于你的具体目标和市场环境。让我们对比一下:
|特性|60 天17,280 根K线|360 天103,680 根K线|
|---|---|---|
|数据量|适中,适合中短期模式|非常大,包含长期趋势|
|市场相关性|更贴近当前市场条件|可能包含过时数据|
|训练成本|较低,适合频繁重新训练|较高,可能影响实时性|
|适用场景|短期/高频交易策略|长期趋势跟随策略|
|过拟合风险|较低,数据较聚焦|较高,易受噪声干扰|
结论
- 60 天更可靠的情况:如果你关注的是短期波动(如 5 分钟K线的日内交易60 天通常足够捕捉最近的市场行为,同时保持模型对当前条件的敏感性。
- 360 天更可靠的情况如果你设计的是长期策略如预测周级别趋势或者市场有明显的年度周期性360 天可能更有优势。
---
4. 如何选择合适的训练窗口?
与其简单地认为“越大越好”,不如根据以下原则选择窗口大小:
a. 匹配预测目标
- 短期预测几小时到几天30-90 天通常足够。
- 中期预测几周90-180 天。
- 长期预测数月180-360 天或更多。
b. 测试市场相关性
- 使用 回测Backtesting 比较不同窗口的表现。例如:
bash
```bash
freqtrade backtesting --strategy MyStrategy --freqai --timerange 20240101-20240401
```
分别设置 train_period_days = 60 和 360观察哪个在你的目标币对如 BTC/USDT上表现更好利润、胜率、夏普比率等
c. 动态调整窗口
- FreqAI 支持 滑动窗口Sliding Window每次重新训练时丢弃最旧数据加入最新数据。设置较小的窗口如 60 天并频繁重新训练live_retrain_hours = 24可以让模型保持对市场的适应性。
- 如果市场突然剧变(如黑天鹅事件),可以临时缩短窗口以聚焦近期数据。
d. 数据量与模型复杂度的平衡
- 如果你的模型较简单如线性回归60 天可能够用;如果用复杂模型(如深度学习),可能需要更多数据,但 360 天可能仍需谨慎避免过拟合。
- 检查特征数量feature_parameters 中的设置),确保数据量与特征数匹配(经验法则是数据点数应至少为特征数的 10-100 倍)。
---
5. 实际建议
- 从 60 天开始:这是一个合理的起点,数据量适中,计算成本可控,适合大多数短期到中期策略。
- 逐步测试:尝试 30 天、60 天、120 天、360 天,比较回测结果。例如:
json
```json
"freqai": {
"train_period_days": 60,
"live_retrain_hours": 24
}
```
然后调整 train_period_days 并记录性能。
- 结合市场周期:如果你的币对(如 BTC/USDT有明显周期如减半周期可以根据周期长度设置窗口但仍需避免过长。
---
总结
训练窗口不是越大越好60 天的 5 分钟K线数据往往比 360 天更可靠尤其对于短期交易策略因为它更贴近当前市场条件计算效率更高且过拟合风险较低。360 天适合长期趋势策略,但需警惕过时数据和计算成本。建议你通过回测实验找到适合自己策略的窗口大小。
如果你有具体的策略或币对想测试,我可以帮你设计实验或分析结果!

View File

@ -0,0 +1,127 @@
---
date:
2025-04-08 21:36:26:
tags:
- 量化
- qna
- 机器学习
- freqtrade
title:
from: https://x.com/i/grok?conversation=1909584053176877095
---
[[freqtrade 选择合适的训练窗口匹配特定时间框架]]´
😯: 在 https://www.freqtrade.io/en/stable/ 这里, 提到Optimize: Find the best parameters for your strategy using hyperoptimization which employs machine learning methods. You can optimize buy, sell, take profit (ROI), stop-loss and trailing stop-loss parameters for your strategy. 能讲解一下吗
当然可以!在 Freqtrade 的文档([https://www.freqtrade.io/en/stable/)中,提到的](https://www.freqtrade.io/en/stable/)中,提到的) Optimize 部分是关于如何通过 超参数优化Hyperoptimization 来找到交易策略的最佳参数。这是一个非常重要的功能,尤其对于希望提升交易策略效果的用户来说。让我详细讲解一下这段内容的意思和背后的概念:
原文解读
"Optimize: Find the best parameters for your strategy using hyperoptimization which employs machine learning methods. You can optimize buy, sell, take profit (ROI), stop-loss and trailing stop-loss parameters for your strategy."翻译优化通过使用机器学习方法的超参数优化找到你策略的最佳参数。你可以优化买入、卖出、止盈ROI、止损和追踪止损参数。
这段话的意思是Freqtrade 提供了一个工具,让你可以通过系统化的方法(而不是手动试错)来调整和优化交易策略中的关键参数。这些参数包括:
- Buy买入决定何时进入市场的条件。
- Sell卖出决定何时退出市场的条件。
- Take Profit (ROI, Return on Investment):设置预期利润目标。
- Stop-loss止损限制亏损的保护机制。
- Trailing Stop-loss追踪止损动态调整止损点以锁定利润。
优化过程会利用 机器学习方法 来找到这些参数的最佳组合,从而让你的策略在历史数据上的表现(比如盈利能力)达到最优。
---
什么是超参数优化Hyperoptimization
在机器学习和交易策略开发中,超参数 是指那些需要手动设置、影响模型或策略表现的参数。在 Freqtrade 中,这些超参数就是买入、卖出、止盈、止损等的具体数值或条件。
超参数优化 是一种自动化过程目的是在大量可能的参数组合中找到表现最好的那一组。Freqtrade 使用的优化方法通常包括:
1. 网格搜索Grid Search尝试所有可能的参数组合效率较低计算量大
2. 随机搜索Random Search在参数空间中随机采样组合效率更高。
3. 进化算法或其他高级方法:利用机器学习技术(如遗传算法)来“进化”出一组最优参数。
Freqtrade 默认支持一些先进的优化工具,比如 Hyperopt它结合了随机搜索和启发式方法能够在较短时间内找到较优的参数组合。
---
如何在 Freqtrade 中进行优化?
1. 定义策略
你需要先编写一个交易策略(通常是 Python 代码里面包含买入、卖出等逻辑。这些逻辑会依赖一些参数比如技术指标的阈值RSI 的买入线是 30 还是 40
2. 设置优化空间
在 Hyperopt 的配置文件中,你需要告诉 Freqtrade
- 哪些参数需要优化(比如 RSI 的买入阈值、止损百分比等)。
- 这些参数的取值范围(比如 RSI 从 20 到 50止损从 -0.1 到 -0.05)。
3. 运行优化
使用命令(如 freqtrade hyperoptFreqtrade 会基于历史数据回测你的策略,并在参数空间中搜索最佳组合。每次回测的结果会根据你定义的 目标函数(比如总盈利、夏普比率等)来评分。
4. 结果分析
优化完成后Freqtrade 会输出一组推荐参数。你可以将这些参数应用到策略中,并进一步测试或实盘运行。
---
举个例子
假设你的策略是基于 RSI相对强弱指数的简单策略
- 买入条件RSI < X
- 卖出条件RSI > Y
- 止损:-Z%
你可以通过 Hyperopt 告诉 Freqtrade
- X 的范围是 20 到 40
- Y 的范围是 60 到 80
- Z 的范围是 5 到 15
Freqtrade 会运行数百次回测,尝试不同的 X、Y、Z 组合,最终可能发现 RSI < 30RSI > 70、止损 -10% 是历史数据中最优的组合。
---
优点与注意事项
优点
- 自动化:无需手动试错,节省时间。
- 数据驱动:基于历史数据找到最优解。
- 灵活性:可以优化几乎所有策略参数。
注意事项
- 过拟合风险:优化结果可能过于贴合历史数据,但在未来市场中表现不佳。
- 计算资源:优化需要大量计算,尤其当参数范围很大时。
- 动态市场:最佳参数可能会随市场条件变化而失效,需要定期重新优化。
---
总结
Freqtrade 的优化功能通过 Hyperopt 等工具,利用机器学习方法帮助你找到交易策略的最佳参数。它适用于调整买入、卖出、止盈、止损和追踪止损等关键点。如果你想尝试这个功能,建议从 Freqtrade 的官方文档([https://www.freqtrade.io/en/stable/hyperopt/)开始,跟着教程跑一个简单的例子。](https://www.freqtrade.io/en/stable/hyperopt/)开始,跟着教程跑一个简单的例子。)
如果你有更具体的问题(比如代码实现、某个参数的含义),随时告诉我,我可以进一步帮你解答!

View File

@ -0,0 +1,269 @@
---
date:
2025-04-08 22:26:36:
tags:
- 量化
- qna
- 机器学习
- freqtrade
title:
from: https://x.com/i/grok?conversation=1909584053176877095
---
[[freqtrade 训练窗口是否越大越好]]
😯: 关于:如何选择合适的训练窗口,你提到了:
匹配预测目标 短期预测几小时到几天30-90 天通常足够。中期预测几周90-180 天。长期预测数月180-360 天或更多。那么, 如果关注长期预测, 比如: 某币未来对2个月的趋势我依然可以利用5分钟维度的k线还是说可以考虑用4H或12H的时间框架的蜡烛数据
你的问题非常有针对性!如果你的目标是预测某币未来 2 个月的趋势(属于长期预测,约 60 天),选择合适的训练窗口和时间框架确实需要根据预测目标、市场特性以及数据处理能力来综合考虑。我会详细解答你是否依然可以用 5 分钟K线或者是否应该切换到 4 小时4H或 12 小时12H的时间框架。
---
1. 长期预测2 个月)的训练窗口建议
根据之前的建议,对于长期预测(数月,例如 2 个月),训练窗口通常需要 180-360 天或更多。这是因为:
- 捕捉长期模式2 个月的趋势可能受到宏观经济事件、季节性周期(如比特币减半影响)或市场情绪变化的驱动,需要更长的历史数据来学习这些模式。
- 数据量需求:机器学习模型(如 FreqAI 使用的 LightGBM需要足够的数据点来避免过拟合尤其是在预测较长时间范围时。
训练窗口选择
- 180 天6 个月):一个合理的起点,能覆盖几个市场周期(如牛熊转换),适合捕捉 2 个月趋势。
- 360 天1 年):如果市场有明显的年度周期(如加密货币的减半效应),可以扩展到 1 年。
- 更多(>360 天):如果你的币对受超长期因素影响(如宏观政策),可以尝试更长,但需注意过时数据的影响。
---
2. 时间框架的选择5 分钟 vs 4H vs 12H
你提到是否依然可以用 5 分钟K线或者是否切换到 4H 或 12H 时间框架。这取决于你的预测目标、数据量和计算成本。让我们逐一分析:
a. 使用 5 分钟K线的可行性
- 数据量:
- 5 分钟K线每天 288 根180 天 ≈ 51,840 根K线360 天 ≈ 103,680 根K线。
- 这是一个非常大的数据集,足以支持机器学习模型训练,且能捕捉短期波动细节。
- 优点:
- 高分辨率5 分钟K线包含丰富的短期价格动态可能帮助模型发现微观模式如日内支撑位、阻力位这些模式可能累积成 2 个月的趋势。
- 灵活性FreqAI 可以从 5 分钟数据生成多时间框架特征(例如 1H、4H 的 MA 或 RSI让你兼顾短期和长期信息。
- 缺点:
- 噪声过多5 分钟K线包含大量短期波动如随机跳动可能掩盖长期趋势信号导致模型预测偏向短期行为。
- 计算成本103,680 根K线加上特征工程例如 3 个高阶指标生成几十到几百个特征),训练时间和内存需求会显著增加。
- 适用性:
- 如果你的长期预测依赖短期模式的累积如日内交易信号逐渐形成趋势5 分钟K线依然可行。
- 但如果目标是直接预测 2 个月的趋势如“上涨”或“下跌”5 分钟K线的细节可能显得冗余。
b. 使用 4 小时4HK线
- 数据量:
- 4H K线每天 6 根180 天 ≈ 1,080 根K线360 天 ≈ 2,160 根K线。
- 优点:
- 噪声减少4H K线平滑了短期波动更聚焦中长期趋势适合 2 个月的预测。
- 计算效率:数据量减少到 5 分钟的 1/48288 ÷ 6训练速度更快内存占用更低。
- 趋势信号清晰4H 数据常用于技术分析中的趋势跟随策略,能突出支撑/阻力、趋势线等关键特征。
- 缺点:
- 细节丢失:短期价格动态被抹平,可能错过一些微观信号。
- 适用性:
- 如果你的目标是预测 2 个月的整体趋势例如方向或幅度4H K线是一个很好的选择能平衡数据量和信号质量。
c. 使用 12 小时12HK线
- 数据量:
- 12H K线每天 2 根180 天 ≈ 360 根K线360 天 ≈ 720 根K线。
- 优点:
- 极简趋势12H K线进一步减少噪声聚焦超长期趋势数据量极小训练成本最低。
- 宏观视角:适合捕捉数月级别的市场周期。
- 缺点:
- 数据不足360-720 根K线可能不足以训练复杂的机器学习模型尤其是特征较多时经验法则是数据点数应至少为特征数的 10-100 倍)。
- 细节缺失:短期和中期波动几乎完全被抹平,可能无法反映 2 个月内的重要转折点。
- 适用性:
- 如果你的模型非常简单特征少、目标明确如仅预测涨跌方向12H K线可以用。但对于 2 个月预测,数据量可能偏少,不够鲁棒。
---
3. 推荐时间框架5 分钟还是 4H
对于预测未来 2 个月的趋势,我建议以下选择:
a. 首选4H K线
- 理由:
- 4H K线180 天 ≈ 1,080 根360 天 ≈ 2,160 根)提供足够的数据点支持机器学习,同时减少短期噪声,更契合 2 个月的中长期趋势预测。
- 计算成本可控,适合日常重新训练(如每天或每周一次)。
- 训练窗口:
- 180 天6 个月):约 1,080 根K线适合初步测试。
- 360 天1 年):约 2,160 根K线能捕捉更长的市场周期。
- FreqAI 配置:
json
```json
"freqai": {
"enabled": true,
"train_period_days": 360,
"live_retrain_hours": 168, // 每周重新训练
"feature_parameters": {
"include_timeframes": ["4h"],
"indicator_periods_candles": [10, 50, 200] // MA、RSI 等周期
},
"label_parameters": {
"horizon": 360 // 预测未来360根4H K线约60天
}
}
```
b. 次选5 分钟K线
- 理由:
- 如果你相信 2 个月的趋势是由短期波动累积而成,或者想利用多时间框架特征(例如 5m、1h、4h 的组合5 分钟K线仍然可行。
- 但需要更强的计算资源(内存和时间),并可能需要过滤噪声(比如通过特征选择)。
- 训练窗口:
- 180 天 ≈ 51,840 根K线。
- 360 天 ≈ 103,680 根K线。
- FreqAI 配置:
json
```json
"freqai": {
"enabled": true,
"train_period_days": 360,
"live_retrain_hours": 168, // 每周重新训练
"feature_parameters": {
"include_timeframes": ["5m", "1h", "4h"], // 多时间框架特征
"indicator_periods_candles": [10, 50, 200]
},
"label_parameters": {
"horizon": 17280 // 预测未来17,280根5m K线约60天
}
}
```
c. 不推荐12H K线
- 理由数据量太少360-720 根),不足以支持 FreqAI 的复杂模型训练,尤其是预测 2 个月这种中长期目标。
---
4. 5 分钟 vs 4H实际对比
|特性|5 分钟K线 (360 天)|4 小时K线 (360 天)|
|---|---|---|
|数据量|103,680 根|2,160 根|
|噪声水平|高,短期波动多|中,趋势更清晰|
|计算成本|高(内存、时间)|低|
|预测目标适配|间接(短期累积到长期)|直接(中长期趋势)|
|硬盘占用|约 12-15 MB/币对|约 0.25-0.3 MB/币对|
- 5 分钟:适合高频交易者或希望从微观模式推导长期趋势的用户,但需要更多资源。
- 4 小时:更适合直接预测 2 个月趋势,效率高,信号清晰。
---
5. 最终建议
- 推荐使用 4H K线
- 配置 train_period_days = 360下载 1 年数据(约 2,160 根K线/币对)。
- 下载命令:
bash
```bash
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 4h --days 365
```
- 优点:数据量适中,趋势信号强,计算成本低。
- 如果坚持 5 分钟K线
- 同样用 360 天训练窗口,但需要至少 16 GB RAM 和 10 GB 硬盘空间,确保能处理大量数据。
- 下载命令:
bash
```bash
freqtrade download-data --exchange binance --pairs BTC/USDT --timeframes 5m --days 365
```
测试验证
- 先用 4H K线回测你的策略
bash
```bash
freqtrade backtesting --strategy MyStrategy --freqai --timerange 20230408-20250408
```
- 如果结果不够理想,再尝试 5 分钟K线比较预测准确性和收益。
---
6. 总结
- 你依然可以用 5 分钟K线预测 2 个月趋势,但需要处理噪声和高计算成本。
- 4H K线更适合直接预测 2 个月趋势,兼顾效率和准确性,是更优选择。
- 训练窗口建议设为 360 天,以捕捉足够的市场周期。
如果你有具体币对或策略代码,我可以帮你进一步优化时间框架和配置!有什么想法吗?

View File

@ -0,0 +1,77 @@
---
date:
2025-04-08 10:31:25:
tags: 量化, freqtrade,
from: https://x.com/i/grok?conversation=1909433077354709455
---
在 Freqtrade 的架构设计中,配置文件(通常是 config.json 或类似文件)和自定义策略文件(通常是 Python 文件,定义了交易逻辑)是两个核心组成部分,它们共同决定了交易机器人的行为。它们之间的关系可以总结为互补与覆盖,并且在某些情况下存在交集。下面我将详细解答它们的关系、管辖范围以及优先级问题。
1. 配置文件和自定义策略文件的关系
- 配置文件:
配置文件是一个全局性的设置文件,通常以 JSON 格式编写,包含了 Freqtrade 运行时的各种参数,例如交易所信息、交易对、资金管理(如 stake_amount、止损设置如 stoploss、订单类型如 order_types等。它主要负责定义交易机器人的运行环境和默认行为。
- 自定义策略文件:
自定义策略文件是用户编写的 Python 脚本,继承自 IStrategy 类主要用于定义交易的具体逻辑例如买入信号populate_entry_trend、卖出信号populate_exit_trend、止损逻辑custom_stoploss等。它更专注于交易策略的具体实现。
- 关系:
配置文件提供了一个基础框架和默认参数,而策略文件则在此基础上实现个性化的交易逻辑。简单来说,配置文件是“全局设置”,策略文件是“具体实现”。两者共同协作,配置文件提供运行时的参数支持,策略文件则利用这些参数执行交易决策。
2. 管辖范围的交集
配置文件和策略文件的管辖范围确实存在交集尤其是在一些关键参数的定义上例如止损stoploss、最小投资回报率minimal_roi、订单类型order_types等。这些参数既可以在配置文件中定义也可以在策略文件中设置。以下是一些常见的交集领域
- 止损stoploss可以在配置文件中设置一个全局止损值也可以在策略文件中定义甚至可以通过 custom_stoploss 方法动态调整。
- 订单类型order_types可以在配置文件中指定默认的订单类型如限价单或市价单也可以在策略文件中覆盖。
- 时间框架timeframe可以在配置文件中设置默认时间框架也可以在策略文件中指定。
- ROIminimal_roi可以在配置文件中定义全局 ROI 表,也可以在策略文件中自定义。
3. 优先级规则
当配置文件和策略文件中定义了相同的参数时Freqtrade 有一套明确的优先级规则:
- 配置文件优先级高于策略文件:
如果某个参数(如 stoploss同时在配置文件和策略文件中定义配置文件中的值会覆盖策略文件中的值。这是 Freqtrade 的设计原则,旨在让用户通过配置文件更方便地调整全局行为,而无需修改策略代码。
- 例外情况:
- 如果策略文件中使用了动态逻辑(例如 custom_stoploss 方法),则策略文件中的动态逻辑会在运行时生效,覆盖配置文件中的静态 stoploss 值。这种情况下,策略文件的代码逻辑具有更高的灵活性。
- 对于某些参数(如 timeframe如果策略文件中明确指定则通常以策略文件为准但配置文件中的值仍可能影响其他非策略相关的模块例如数据下载
- 具体例子:
- 假设策略文件中定义了 stoploss = -0.1010% 止损),而配置文件中设置了 "stoploss": -0.05"5% 止损),最终生效的是 -0.05,因为配置文件优先。
- 如果策略文件中启用了 use_custom_stoploss = True 并实现了 custom_stoploss 方法,则运行时会根据该方法的返回值动态调整止损,配置文件中的静态值仅作为初始值或备用值。
4. 设计理念与使用建议
- 设计理念:
Freqtrade 的这种设计允许用户在全局配置和策略逻辑之间保持灵活性。配置文件适合快速调整参数(例如在不同市场条件下测试不同的止损值),而策略文件适合实现复杂的交易逻辑(例如基于市场数据的动态止损)。
- 使用建议:
- 如果你希望参数易于调整且适用于多个策略,建议在配置文件中定义。
- 如果参数是策略的核心部分且需要动态计算,建议在策略文件中实现。
- 在开发和测试时,注意检查配置文件和策略文件中的参数是否冲突,避免意外覆盖。
5. 总结
- 关系:配置文件提供全局设置,策略文件实现具体逻辑,两者互补。
- 交集存在交集主要在止损、订单类型、ROI 等参数上。
- 优先级:配置文件的值通常优先于策略文件中的静态值,但策略文件中的动态逻辑(如 custom_stoploss在运行时具有更高灵活性。
希望这个解答清楚地说明了两者的关系!如果你有更具体的需求或例子,可以进一步讨论。

View File

@ -1,6 +1,6 @@
---
date:
<% tp.date.now ("YYYY-MM-DD HH: mm: ss") %>:
<% tp.date.now ("YYYY-MM-DD HH:mm:ss") %>:
tags:
title:
---

View File

@ -1,6 +1,6 @@
---
date:
<% tp.date.now ("YYYY-MM-DD HH: mm: ss") %>:
<% tp.date.now ("YYYY-MM-DD HH:mm:ss") %>:
tags:
title:
---

View File

@ -0,0 +1,29 @@
---
date:
2025-04-09 20:08:00:
tags:
- 策略
- 量化
- python
- freqtrade
title:
---
```python
# lazhu.py
import pandas as pd
df = pd.read_feather("OKB_USDT-5m.feather")
print(len(df)) # 输出蜡烛数量
```
然后
```shell
pip3 install pandas pyarrow
```
然后
```
python3 lazhu.py
```

View File

@ -1,6 +1,6 @@
---
date:
<% tp.date.now ("YYYY-MM-DD HH: mm: ss") %>:
<% tp.date.now ("YYYY-MM-DD HH:mm:ss") %>
tags:
title:
---

View File

@ -0,0 +1,14 @@
---
date: 2025-04-07 23:12:23
tags:
- kanban
- project
title: 看板 -
project_name: 云服务
status: will be do
priority: 中
---
## 在xunlang上运行一个docker 容器包含systemd的那种
### 备注
- 豆包链接: https://www.doubao.com/thread/w7562e414c08e74b8

15
继续鼓捣 freqtrade.md Normal file
View File

@ -0,0 +1,15 @@
---
date: 2025-04-07 23:17:31
tags:
- kanban
- project
title: 看板 -
project_name: 量化
status: will be do
priority: 中
---
## 继续鼓捣 freqtrade
### 备注
-
https://www.freqtrade.io/en/develop/configuration/