vault backup: 2025-04-10 11:13:22
This commit is contained in:
parent
3d8a414542
commit
e296ab5723
BIN
.obsidian/.DS_Store
vendored
BIN
.obsidian/.DS_Store
vendored
Binary file not shown.
2
.obsidian/appearance.json
vendored
2
.obsidian/appearance.json
vendored
@ -1,5 +1,5 @@
|
||||
{
|
||||
"cssTheme": "Wasp",
|
||||
"cssTheme": "Typewriter",
|
||||
"enabledCssSnippets": [
|
||||
"allnotelist"
|
||||
],
|
||||
|
4
.obsidian/community-plugins.json
vendored
4
.obsidian/community-plugins.json
vendored
@ -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
2
.obsidian/graph.json
vendored
2
.obsidian/graph.json
vendored
@ -17,6 +17,6 @@
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 1.2959324124840048,
|
||||
"scale": 0.9178150765759386,
|
||||
"close": true
|
||||
}
|
27
.obsidian/hotkeys.json
vendored
27
.obsidian/hotkeys.json
vendored
@ -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": "`"
|
||||
}
|
||||
]
|
||||
}
|
8
.obsidian/plugins/copilot/data.json
vendored
8
.obsidian/plugins/copilot/data.json
vendored
@ -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
23
.obsidian/plugins/homepage/data.json
vendored
Normal 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
|
||||
}
|
3199
.obsidian/plugins/obsidian-graphviz/main.js
vendored
Normal file
3199
.obsidian/plugins/obsidian-graphviz/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/obsidian-graphviz/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-graphviz/manifest.json
vendored
Normal 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
|
||||
}
|
4
.obsidian/plugins/obsidian-graphviz/styles.css
vendored
Normal file
4
.obsidian/plugins/obsidian-graphviz/styles.css
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.d3graphvizError{
|
||||
color: red;
|
||||
border: 1px solid red;
|
||||
}
|
6
.obsidian/plugins/obsidian-soomda/data.json
vendored
Normal file
6
.obsidian/plugins/obsidian-soomda/data.json
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"both": true,
|
||||
"justLeft": false,
|
||||
"justRight": false,
|
||||
"rememberSidebar": false
|
||||
}
|
196
.obsidian/plugins/obsidian-soomda/main.js
vendored
Normal file
196
.obsidian/plugins/obsidian-soomda/main.js
vendored
Normal 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 */
|
13
.obsidian/plugins/obsidian-soomda/manifest.json
vendored
Normal file
13
.obsidian/plugins/obsidian-soomda/manifest.json
vendored
Normal 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
|
||||
}
|
104
.obsidian/plugins/recent-files-obsidian/data.json
vendored
104
.obsidian/plugins/recent-files-obsidian/data.json
vendored
@ -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": [
|
||||
|
147
.obsidian/plugins/smart-second-brain/data.json
vendored
147
.obsidian/plugins/smart-second-brain/data.json
vendored
@ -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
|
||||
|
Binary file not shown.
BIN
.obsidian/plugins/smart-second-brain/vectorstores/text-embedding-ada-002.bin
vendored
Normal file
BIN
.obsidian/plugins/smart-second-brain/vectorstores/text-embedding-ada-002.bin
vendored
Normal file
Binary file not shown.
7
.obsidian/themes/Typewriter/manifest.json
vendored
Normal file
7
.obsidian/themes/Typewriter/manifest.json
vendored
Normal 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
636
.obsidian/themes/Typewriter/theme.css
vendored
Normal file
File diff suppressed because one or more lines are too long
651
.obsidian/workspace.json
vendored
651
.obsidian/workspace.json
vendored
@ -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",
|
||||
|
@ -1,3 +1,12 @@
|
||||
Assistant
|
||||
Hello, I am your assistant. How can I help you?
|
||||
- - - - -
|
||||
User
|
||||
哪些notes
|
||||
- - - - -
|
||||
User
|
||||
哪些notes可以建立链接
|
||||
- - - - -
|
||||
User
|
||||
哪些notes可以建立链接
|
||||
- - - - -
|
14
canvas/freqtrade starter.canvas
Normal file
14
canvas/freqtrade starter.canvas
Normal 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":[]
|
||||
}
|
@ -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]}
|
||||
```
|
||||
%%
|
193
new notes/freqtrade pandas 矢量化 Dataframe.md
Normal file
193
new notes/freqtrade pandas 矢量化 Dataframe.md
Normal 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线开盘时买入。
|
||||
|
||||
---
|
||||
|
||||
如果你还有具体的问题或代码看不懂的地方,可以告诉我,我再详细解释!
|
100
new notes/freqtrade sqlite容量问题.md
Normal file
100
new notes/freqtrade sqlite容量问题.md
Normal 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确实会随时间占用更多空间,性能也可能下降,但通过定期维护或切换数据库可以轻松解决。你可以根据策略的交易频率和运行计划,决定何时采取行动。如果需要更具体的监控脚本或配置建议,请告诉我!
|
64
new notes/freqtrade 严格止损.md
Normal file
64
new notes/freqtrade 严格止损.md
Normal 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美元),增加了成交的可能性,真正起到了保护作用。这就是文档中警告“不要设置过低/过于严格的止损”的原因。合理的止损范围需要根据市场波动性和你的风险承受能力来决定。
|
||||
|
10
new notes/freqtrade 启动后做了哪些事.md
Normal file
10
new notes/freqtrade 启动后做了哪些事.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
date:
|
||||
2025-04-08 10:50:28:
|
||||
tags: freqtrade, 量化
|
||||
from: https://www.freqtrade.io/en/stable/bot-basics/
|
||||
---
|
||||
|
||||
- 从本地数据库读取未平仓交易记录
|
||||
- 计算当前可交易对列表
|
||||
-
|
118
new notes/freqtrade 回测和dry-run的疑问.md
Normal file
118
new notes/freqtrade 回测和dry-run的疑问.md
Normal 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. 优化硬件:确保计算能力跟得上策略需求,避免因延迟导致结果偏差。
|
||||
|
||||
|
||||
通过结合回测和模拟运行,你可以更全面地评估策略的表现,并在真实交易前发现潜在问题。如果还有具体问题,可以告诉我,我会进一步帮你分析!
|
@ -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 策略窗口 训练窗口]]
|
211
new notes/freqtrade 机器学习和数据落盘.md
Normal file
211
new notes/freqtrade 机器学习和数据落盘.md
Normal 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 或 JSON,Feather 文件读写速度更快,适合大数据处理。
|
||||
|
||||
- 压缩性:文件大小较小,节省磁盘空间。
|
||||
|
||||
- 兼容性:与 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 文件格式,高效且适合机器学习处理。
|
||||
|
||||
|
||||
如果你有更具体的策略或币对需求,可以告诉我,我可以帮你进一步细化!
|
333
new notes/freqtrade 策略 demo 代码拆解.md
Normal file
333
new notes/freqtrade 策略 demo 代码拆解.md
Normal 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_roi(1%利润)或触发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提供了一个框架,你的任务是用参数和回调函数“填空”,告诉系统“什么时候买、什么时候卖、如何管理风险”。如果需要更复杂的策略,只需在这些函数中扩展代码即可。
|
||||
|
||||
有什么具体的实现想法或问题想讨论吗?我可以帮你进一步细化!
|
166
new notes/freqtrade 策略窗口 训练窗口.md
Normal file
166
new notes/freqtrade 策略窗口 训练窗口.md
Normal 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_count):Freqtrade 要求在回测或实时交易开始时加载足够的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 周期的 EMA,startup_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 配置需要分析,可以分享给我,我可以帮你进一步优化窗口设置!
|
164
new notes/freqtrade 训练窗口是否越大越好.md
Normal file
164
new notes/freqtrade 训练窗口是否越大越好.md
Normal 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 天适合长期趋势策略,但需警惕过时数据和计算成本。建议你通过回测实验找到适合自己策略的窗口大小。
|
||||
|
||||
如果你有具体的策略或币对想测试,我可以帮你设计实验或分析结果!
|
127
new notes/freqtrade 超参数优化.md
Normal file
127
new notes/freqtrade 超参数优化.md
Normal 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 hyperopt),Freqtrade 会基于历史数据回测你的策略,并在参数空间中搜索最佳组合。每次回测的结果会根据你定义的 目标函数(比如总盈利、夏普比率等)来评分。
|
||||
|
||||
4. 结果分析
|
||||
优化完成后,Freqtrade 会输出一组推荐参数。你可以将这些参数应用到策略中,并进一步测试或实盘运行。
|
||||
|
||||
|
||||
---
|
||||
|
||||
举个例子
|
||||
|
||||
假设你的策略是基于 RSI(相对强弱指数)的简单策略:
|
||||
|
||||
- 买入条件:RSI < X
|
||||
|
||||
- 卖出条件:RSI > Y
|
||||
|
||||
- 止损:-Z%
|
||||
|
||||
|
||||
你可以通过 Hyperopt 告诉 Freqtrade:
|
||||
|
||||
- X 的范围是 20 到 40
|
||||
|
||||
- Y 的范围是 60 到 80
|
||||
|
||||
- Z 的范围是 5 到 15
|
||||
|
||||
|
||||
Freqtrade 会运行数百次回测,尝试不同的 X、Y、Z 组合,最终可能发现 RSI < 30、RSI > 70、止损 -10% 是历史数据中最优的组合。
|
||||
|
||||
---
|
||||
|
||||
优点与注意事项
|
||||
|
||||
优点
|
||||
|
||||
- 自动化:无需手动试错,节省时间。
|
||||
|
||||
- 数据驱动:基于历史数据找到最优解。
|
||||
|
||||
- 灵活性:可以优化几乎所有策略参数。
|
||||
|
||||
|
||||
注意事项
|
||||
|
||||
- 过拟合风险:优化结果可能过于贴合历史数据,但在未来市场中表现不佳。
|
||||
|
||||
- 计算资源:优化需要大量计算,尤其当参数范围很大时。
|
||||
|
||||
- 动态市场:最佳参数可能会随市场条件变化而失效,需要定期重新优化。
|
||||
|
||||
|
||||
---
|
||||
|
||||
总结
|
||||
|
||||
Freqtrade 的优化功能通过 Hyperopt 等工具,利用机器学习方法帮助你找到交易策略的最佳参数。它适用于调整买入、卖出、止盈、止损和追踪止损等关键点。如果你想尝试这个功能,建议从 Freqtrade 的官方文档([https://www.freqtrade.io/en/stable/hyperopt/)开始,跟着教程跑一个简单的例子。](https://www.freqtrade.io/en/stable/hyperopt/)开始,跟着教程跑一个简单的例子。)
|
||||
|
||||
如果你有更具体的问题(比如代码实现、某个参数的含义),随时告诉我,我可以进一步帮你解答!
|
269
new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md
Normal file
269
new notes/freqtrade 选择合适的训练窗口匹配特定时间框架.md
Normal 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 小时(4H)K线
|
||||
|
||||
- 数据量:
|
||||
|
||||
- 4H K线每天 6 根,180 天 ≈ 1,080 根K线,360 天 ≈ 2,160 根K线。
|
||||
|
||||
- 优点:
|
||||
|
||||
- 噪声减少:4H K线平滑了短期波动,更聚焦中长期趋势,适合 2 个月的预测。
|
||||
|
||||
- 计算效率:数据量减少到 5 分钟的 1/48(288 ÷ 6),训练速度更快,内存占用更低。
|
||||
|
||||
- 趋势信号清晰:4H 数据常用于技术分析中的趋势跟随策略,能突出支撑/阻力、趋势线等关键特征。
|
||||
|
||||
- 缺点:
|
||||
|
||||
- 细节丢失:短期价格动态被抹平,可能错过一些微观信号。
|
||||
|
||||
- 适用性:
|
||||
|
||||
- 如果你的目标是预测 2 个月的整体趋势(例如方向或幅度),4H K线是一个很好的选择,能平衡数据量和信号质量。
|
||||
|
||||
|
||||
c. 使用 12 小时(12H)K线
|
||||
|
||||
- 数据量:
|
||||
|
||||
- 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 天,以捕捉足够的市场周期。
|
||||
|
||||
|
||||
如果你有具体币对或策略代码,我可以帮你进一步优化时间框架和配置!有什么想法吗?
|
77
new notes/freqtrade 配置和策略的交集问题.md
Normal file
77
new notes/freqtrade 配置和策略的交集问题.md
Normal 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):可以在配置文件中设置默认时间框架,也可以在策略文件中指定。
|
||||
|
||||
- ROI(minimal_roi):可以在配置文件中定义全局 ROI 表,也可以在策略文件中自定义。
|
||||
|
||||
|
||||
3. 优先级规则
|
||||
|
||||
当配置文件和策略文件中定义了相同的参数时,Freqtrade 有一套明确的优先级规则:
|
||||
|
||||
- 配置文件优先级高于策略文件:
|
||||
如果某个参数(如 stoploss)同时在配置文件和策略文件中定义,配置文件中的值会覆盖策略文件中的值。这是 Freqtrade 的设计原则,旨在让用户通过配置文件更方便地调整全局行为,而无需修改策略代码。
|
||||
|
||||
- 例外情况:
|
||||
|
||||
- 如果策略文件中使用了动态逻辑(例如 custom_stoploss 方法),则策略文件中的动态逻辑会在运行时生效,覆盖配置文件中的静态 stoploss 值。这种情况下,策略文件的代码逻辑具有更高的灵活性。
|
||||
|
||||
- 对于某些参数(如 timeframe),如果策略文件中明确指定,则通常以策略文件为准,但配置文件中的值仍可能影响其他非策略相关的模块(例如数据下载)。
|
||||
|
||||
- 具体例子:
|
||||
|
||||
- 假设策略文件中定义了 stoploss = -0.10(10% 止损),而配置文件中设置了 "stoploss": -0.05"(5% 止损),最终生效的是 -0.05,因为配置文件优先。
|
||||
|
||||
- 如果策略文件中启用了 use_custom_stoploss = True 并实现了 custom_stoploss 方法,则运行时会根据该方法的返回值动态调整止损,配置文件中的静态值仅作为初始值或备用值。
|
||||
|
||||
|
||||
4. 设计理念与使用建议
|
||||
|
||||
- 设计理念:
|
||||
Freqtrade 的这种设计允许用户在全局配置和策略逻辑之间保持灵活性。配置文件适合快速调整参数(例如在不同市场条件下测试不同的止损值),而策略文件适合实现复杂的交易逻辑(例如基于市场数据的动态止损)。
|
||||
|
||||
- 使用建议:
|
||||
|
||||
- 如果你希望参数易于调整且适用于多个策略,建议在配置文件中定义。
|
||||
|
||||
- 如果参数是策略的核心部分且需要动态计算,建议在策略文件中实现。
|
||||
|
||||
- 在开发和测试时,注意检查配置文件和策略文件中的参数是否冲突,避免意外覆盖。
|
||||
|
||||
|
||||
5. 总结
|
||||
|
||||
- 关系:配置文件提供全局设置,策略文件实现具体逻辑,两者互补。
|
||||
|
||||
- 交集:存在交集,主要在止损、订单类型、ROI 等参数上。
|
||||
|
||||
- 优先级:配置文件的值通常优先于策略文件中的静态值,但策略文件中的动态逻辑(如 custom_stoploss)在运行时具有更高灵活性。
|
||||
|
||||
|
||||
希望这个解答清楚地说明了两者的关系!如果你有更具体的需求或例子,可以进一步讨论。
|
@ -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:
|
||||
---
|
@ -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:
|
||||
---
|
||||
|
29
new notes/检查feather文件里的蜡烛数量的代码.md
Normal file
29
new notes/检查feather文件里的蜡烛数量的代码.md
Normal 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
|
||||
```
|
@ -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:
|
||||
---
|
||||
|
14
在xunlang上运行一个docker 容器包含systemd的那种.md
Normal file
14
在xunlang上运行一个docker 容器包含systemd的那种.md
Normal 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
15
继续鼓捣 freqtrade.md
Normal 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/
|
Loading…
x
Reference in New Issue
Block a user