You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trading View如何按品种保存自定义指标输入参数?

按交易品种保存自定义指标参数的解决方案

方案1:利用平台全局变量自动存储(代码实现)

大部分交易平台(如MT4/MT5)支持全局变量存储,你可以给每个品种的参数加上品种名前缀,实现自动区分加载。

核心思路

在指标初始化或参数修改完成后,将参数以[品种名]_[参数名]的格式存入全局变量;切换品种时,读取对应前缀的全局变量值自动填充参数。

代码示例(以MT5为例)

// 自定义斐波那契指标的输入参数
input double fibLevel1 = 0.382;
input double fibLevel2 = 0.618;
input double fibLevel3 = 1.0;

// 初始化时加载当前品种的参数
int OnInit()
{
    LoadParamsForSymbol();
    return(INIT_SUCCEEDED);
}

// 参数修改后自动保存
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    if(id == CHARTEVENT_CHART_CHANGE || id == CHARTEVENT_PARAMETERS_CHANGED)
    {
        SaveParamsForSymbol();
    }
}

// 保存参数到全局变量
void SaveParamsForSymbol()
{
    string symbolKey = _Symbol + "_Fib_";
    GlobalVariableSet(symbolKey + "Level1", fibLevel1);
    GlobalVariableSet(symbolKey + "Level2", fibLevel2);
    GlobalVariableSet(symbolKey + "Level3", fibLevel3);
}

// 加载当前品种的参数
void LoadParamsForSymbol()
{
    string symbolKey = _Symbol + "_Fib_";
    if(GlobalVariableCheck(symbolKey + "Level1"))
        fibLevel1 = GlobalVariableGet(symbolKey + "Level1");
    if(GlobalVariableCheck(symbolKey + "Level2"))
        fibLevel2 = GlobalVariableGet(symbolKey + "Level2");
    if(GlobalVariableCheck(symbolKey + "Level3"))
        fibLevel3 = GlobalVariableGet(symbolKey + "Level3");
}

注意事项

  • 确保指标拥有全局变量的读写权限(平台设置中开启相关权限)
  • 全局变量会永久保存在平台配置中,除非手动删除或覆盖

方案2:本地文件存储(代码实现)

如果平台对全局变量有限制,可将参数写入本地文件,每个品种对应一个独立的配置文件。

核心思路

创建以品种名命名的配置文件,保存当前品种的指标参数;切换品种时读取对应文件的内容填充参数。

代码示例(以MT5为例)

input double fibLevel1 = 0.382;
input double fibLevel2 = 0.618;
input double fibLevel3 = 1.0;

int OnInit()
{
    LoadParamsFromFile();
    return(INIT_SUCCEEDED);
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    if(id == CHARTEVENT_PARAMETERS_CHANGED)
    {
        SaveParamsToFile();
    }
}

// 保存参数到本地文件
bool SaveParamsToFile()
{
    string filePath = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Files\\" + _Symbol + "_FibParams.txt";
    int fileHandle = FileOpen(filePath, FILE_WRITE | FILE_TXT | FILE_ANSI);
    if(fileHandle == INVALID_HANDLE) return false;
    
    FileWrite(fileHandle, fibLevel1);
    FileWrite(fileHandle, fibLevel2);
    FileWrite(fileHandle, fibLevel3);
    
    FileClose(fileHandle);
    return true;
}

// 从本地文件加载参数
bool LoadParamsFromFile()
{
    string filePath = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Files\\" + _Symbol + "_FibParams.txt";
    int fileHandle = FileOpen(filePath, FILE_READ | FILE_TXT | FILE_ANSI);
    if(fileHandle == INVALID_HANDLE) return false;
    
    FileRead(fileHandle, fibLevel1);
    FileRead(fileHandle, fibLevel2);
    FileRead(fileHandle, fibLevel3);
    
    FileClose(fileHandle);
    return true;
}

注意事项

  • 确保平台允许指标读写本地文件(开启文件操作权限)
  • 文件存储路径可根据平台实际情况调整

方案3:指标模板手动关联(无需代码)

如果不想修改指标代码,可利用平台的指标模板功能,为每个品种单独保存参数模板:

  • 切换到目标品种,设置好自定义斐波那契指标的参数
  • 右键指标 → 选择「模板」→「保存模板」,命名为[品种名]_Fib(例如EURUSD_Fib)
  • 切换到其他品种时,右键指标 → 选择「模板」→ 加载对应品种的模板即可

这种方法适合手动操作场景,无需编写代码,但需要手动切换模板。


内容的提问来源于stack exchange,提问作者Player01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:41:29