交易中的机器学习:理论、模型、实践和算法交易 - 页 2953 1...294629472948294929502951295229532954295529562957295829592960...3399 新评论 Aleksey Nikolayev 2023.03.07 15:01 #29521 在LightGBM 中训练的 ONNX 模型向 MT5 的输出不起作用。设置参数形式时出现 5808 和 5805 错误。但问题似乎出在参数维度的定义上--得到的是负值(在代码中突出显示)。也许我弄错了什么。在 Python 3.10 中似乎一切正常。 MQL5 输出: void OnStart() { long h = OnnxCreate("model.onnx", FILE_COMMON); //Print(OnnxGetInputCount(h)); //Print(OnnxGetOutputCount(h)); //Print(OnnxGetInputName(h, 0)); //Print(OnnxGetOutputName(h, 0)); OnnxTypeInfo otype; OnnxGetInputTypeInfo(h, 0, otype); ArrayPrint(otype.dimensions); // -1 8 //Print(otype.element_type, " ", otype.type); OnnxGetOutputTypeInfo(h, 0, otype); ArrayPrint(otype.dimensions); // -1 1 //Print(otype.element_type, " ", otype.type); matrix mx={{8.32520000 e+00, 4.10000000 e+01, 6.98412698 e+00, 1.02380952 e+00, 3.22000000 e+02, 2.55555556 e+00, 3.78800000 e+01,-1.22230000 e+02}, {8.30140000 e+00, 2.10000000 e+01, 6.23813708 e+00, 9.71880492 e-01, 2.40100000 e+03, 2.10984183 e+00, 3.78600000 e+01,-1.22220000 e+02}, {7.25740000 e+00, 5.20000000 e+01, 8.28813559 e+00, 1.07344633 e+00, 4.96000000 e+02, 2.80225989 e+00, 3.78500000 e+01,-1.22240000 e+02}, {5.64310000 e+00, 5.20000000 e+01, 5.81735160 e+00, 1.07305936 e+00, 5.58000000 e+02, 2.54794521 e+00, 3.78500000 e+01,-1.22250000 e+02}, {3.84620000 e+00, 5.20000000 e+01, 6.28185328 e+00, 1.08108108 e+00, 5.65000000 e+02, 2.18146718 e+00, 3.78500000 e+01,-1.22250000 e+02}}; matrix my={{0.0},{0.0},{0.0},{0.0},{0.0}}; const long ExtInputShape [] = {1,5,8}; const long ExtOutputShape[] = {1,5}; Print(OnnxSetInputShape(h,0,ExtInputShape)); Print(GetLastError()); // 5808 ResetLastError(); Print(OnnxSetOutputShape(h,0,ExtOutputShape)); Print(GetLastError()); // 5805 OnnxRun(h, ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION, mx, my); //Print(mx); //Print(my); OnnxRelease(h); } 在 Python 中学习: from lightgbm import LGBMRegressor from sklearn.datasets import fetch_california_housing import onnxmltools from onnxconverter_common import * housing = fetch_california_housing() X, Y = housing.data, housing.target model = LGBMRegressor() model.fit(X, Y) Yreal, Ypredict = Y[:5], model.predict(X[:5]) print(Yreal) print(Ypredict) initial_type = [('input', FloatTensorType([None, len(X[0])]))] onnx_model = onnxmltools.convert_lightgbm(model, name='LightGBM', initial_types=initial_type) onnxmltools.utils.save_model(onnx_model, 'model.onnx') Python 输出: import numpy as np import onnxruntime as ort from sklearn.datasets import fetch_california_housing housing = fetch_california_housing() X, Y = housing.data, housing.target Xtest, Yreal = X[:5], Y[:5] sess = ort.InferenceSession("model.onnx", providers=ort.get_available_providers()) input_name = sess.get_inputs()[0].name Ypredict = sess.run(None, {input_name: Xtest.astype(np.float32)})[0] print(Xtest) print(Yreal) print(Ypredict) Aleksey Nikolayev 2023.03.09 04:13 #29522 现在改用 python 似乎为时过早。最好还是学习LightGBM 的 CLI 版本,并用 C 语言以 if-else 格式保存模型。虽然不通用,但便宜又省事) Aleksey Nikolayev 2023.03.09 04:22 #29523 我想起了关于时间等周期性标志的讨论。在我看来,我们应该将它们转化为有规律的标志,只需选择可能模式中发生最强烈变化的起点即可。您可以利用市场考虑因素(本例中为时段安排)或类似的 东西,或者训练一个树状模型,并选择该特征的第一个分割点。 Один из методов псевдо-адаптации. 2023.01.30www.mql5.com Любой скальпер знает, что круглосуточная торговля - глупость. Есть интервалы, где достигается высокая и стабильная прибыльность, поэтому различными способами находят эти интервалы. Например, при Maxim Dmitrievsky 2023.03.09 04:44 #29524 Aleksey Nikolayev #: 我想起了关于时间等周期性标志的讨论。在我看来,我们应该将它们转化为有规律的标志,只需选择可能模式中发生最强烈变化的起点即可。你可以利用市场因素(在本例中为时段安排)或类似的 东西,或者训练一个树状模型,然后根据这一特征选取第一个分割点。 你可以用波动率来代替增量,因为它能准确反映市场周期。然后通过 2 个模型运行,其中一个模型会过滤掉不好的情况(就像我在上一篇文章中所做的)。结果有时还不错,只是需要重新训练几次。这种方法可能比 bestinterval 更有效。Mac 上的 ZY onnx 从示例开始,这很酷,但我还没有检查过误差。 有必要像你的例子那样输入二维矩阵吗?使用带属性的一维数组似乎更符合逻辑。它可能会抱怨矩阵的形式不对。例如,你应该给出一个二维矩阵而不是一维矩阵,其中每个条目都在二维中,即嵌套数组,每个数组包含一个值。有一个从 python 翻译成 mql 的 catbust 例子,lgbm 似乎也好不到哪里去 Aleksey Nikolayev 2023.03.09 05:55 #29525 Maxim Dmitrievsky #:Mac 上的 ZY onnx 从示例中启动,这很酷,但我还没有检查过弹跳情况。 有必要像你的示例那样输入一个二维矩阵吗?使用带属性的一维数组似乎更符合逻辑。它可能会抱怨矩阵的形式不对。例如,你应该给出一个二维矩阵而不是一维矩阵,其中每个条目都在第二个维度,即嵌套数组,每个数组包含一个值。 。 用 python 训练时,我在数据集的前五行测试了模型。然后在 python 中运行 ONNX 时,我也在前五行测试了输出结果。不管怎么看,它都是一个矩阵。在 MT5 变体中,我只是将这五行复制为矩阵。在 Renat 的示例中,输入也是一个十行四列的矩阵。 在加载模型时,问题就已经出现了,因为输出的维数是负数。顺便说一下,我们应该看看 Renate 示例中的输出结果。 OnnxTypeInfo otype; OnnxGetInputTypeInfo(h, 0, otype); ArrayPrint(otype.dimensions); // -1 8 OnnxGetOutputTypeInfo(h, 0, otype); ArrayPrint(otype.dimensions); // -1 1 Aleksey Nikolayev 2023.03.09 06:02 #29526 Maxim Dmitrievsky #: 你可以用波动率来代替增量,它能准确反映市场周期。并通过 2 个模型运行,其中一个模型会过滤掉不好的情况(就像我在上一篇文章中所做的)。结果有时很不错,你只需要重新训练几次。这种方法可能比 bestinterval 更有效。 不,我只是在说处理循环变量的一般方法。它们需要经过 "切片 "才能变成普通变量。但你可以用不同的方法做到这一点,不一定是形式上的零。 除了每日时间,循环变量也会出现,例如,在为两个符号的投资组合寻找权重时。 mytarmailS 2023.03.09 06:03 #29527 Aleksey Nikolayev LightGBM 的 CLI 版本,并用 C 语言以 if-else 格式保存模型。这不是万能的,但便宜又省事)。 还有一个软件包 intrees,你可以从许多村庄模型中提取规则。福雷斯特、助推器...... Aleksey Nikolayev 2023.03.09 06:08 #29528 Maxim Dmitrievsky #:对于 catbusta,有一个从 python 翻译到 mql 的例子,lgbm 似乎也好不到哪里去。 对 Yandex 的未来略有怀疑)。 此外,lgbm 应该能更好地与 sysharp 和其他微软产品集成,如果它突然变得相关的话)。 Aleksey Vyazmikin 2023.03.09 06:16 #29529 mytarmailS #: 此外,还有 intrees 软件包,可以从许多村庄模型中提取规则。 森林、助推器... 您能演示一个具有此功能的脚本吗? Aleksey Vyazmikin 2023.03.09 06:18 #29530 Aleksey Nikolayev #:对 Yandex 的未来略有怀疑)。 它们基于什么? 1...294629472948294929502951295229532954295529562957295829592960...3399 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在LightGBM 中训练的 ONNX 模型向 MT5 的输出不起作用。设置参数形式时出现 5808 和 5805 错误。但问题似乎出在参数维度的定义上--得到的是负值(在代码中突出显示)。也许我弄错了什么。在 Python 3.10 中似乎一切正常。
MQL5 输出:
在 Python 中学习:
Python 输出:
我想起了关于时间等周期性标志的讨论。在我看来,我们应该将它们转化为有规律的标志,只需选择可能模式中发生最强烈变化的起点即可。你可以利用市场因素(在本例中为时段安排)或类似的 东西,或者训练一个树状模型,然后根据这一特征选取第一个分割点。
。
用 python 训练时,我在数据集的前五行测试了模型。然后在 python 中运行 ONNX 时,我也在前五行测试了输出结果。不管怎么看,它都是一个矩阵。在 MT5 变体中,我只是将这五行复制为矩阵。在 Renat 的示例中,输入也是一个十行四列的矩阵。
在加载模型时,问题就已经出现了,因为输出的维数是负数。顺便说一下,我们应该看看 Renate 示例中的输出结果。
你可以用波动率来代替增量,它能准确反映市场周期。并通过 2 个模型运行,其中一个模型会过滤掉不好的情况(就像我在上一篇文章中所做的)。结果有时很不错,你只需要重新训练几次。这种方法可能比 bestinterval 更有效。
不,我只是在说处理循环变量的一般方法。它们需要经过 "切片 "才能变成普通变量。但你可以用不同的方法做到这一点,不一定是形式上的零。
除了每日时间,循环变量也会出现,例如,在为两个符号的投资组合寻找权重时。
对 Yandex 的未来略有怀疑)。
此外,lgbm 应该能更好地与 sysharp 和其他微软产品集成,如果它突然变得相关的话)。
此外,还有 intrees 软件包,可以从许多村庄模型中提取规则。
您能演示一个具有此功能的脚本吗?
对 Yandex 的未来略有怀疑)。
它们基于什么?