Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的Python嵌入(cTrader/cAlgo bot PyTorch调用bug)_C#_Python_Algorithmic Trading_Python Embedding - Fatal编程技术网

C#中的Python嵌入(cTrader/cAlgo bot PyTorch调用bug)

C#中的Python嵌入(cTrader/cAlgo bot PyTorch调用bug),c#,python,algorithmic-trading,python-embedding,C#,Python,Algorithmic Trading,Python Embedding,我正试图在我的C#脚本中运行一些Python代码,这是一个叫做“cAlgo机器人”的东西,使用一个API与一个名为“cTrader”的程序进行交互。然而,我认为这部分在技术上与我遇到的问题无关。我正在使用C#Python脚本运行程序(代码如下)运行Python代码。我使用命令行来实现这一点,并用空格分隔参数 当我运行test_python_script1.py时,输出成功打印在cTrader日志中,我在C#中访问该数据。但是,当我运行test\u python\u script2.py时,输出没

我正试图在我的C#脚本中运行一些Python代码,这是一个叫做“cAlgo机器人”的东西,使用一个API与一个名为“cTrader”的程序进行交互。然而,我认为这部分在技术上与我遇到的问题无关。我正在使用C#Python脚本运行程序(代码如下)运行Python代码。我使用命令行来实现这一点,并用空格分隔参数

当我运行
test_python_script1.py
时,输出成功打印在cTrader日志中,我在C#中访问该数据。但是,当我运行
test\u python\u script2.py
时,输出没有通过。这些文件之间唯一的区别是,第二个文件运行行
model=torch.load(“saved\u model\u 1”)
。我尝试在这个线路调用期间抑制控制台输出,但没有成功

有人知道我如何运行这一行并将输出输入我的cAlgo机器人吗

除了简单地让当前代码工作外,还有三种潜在的解决方案:

  • 将PyTorch模型导出为ONNX模型,然后导入ONNX模型 用于推理的C#模型
  • 使用TorchSharp将PyTorch模型直接导入C#
  • 尝试一种不同的Python到C的解释方法,称为“Python for.NET”
  • Python脚本(“test_Python_script1.py”)--(works)

    Python脚本(“test_Python_script2.py”)--(不工作)

    C#脚本


    如果不知道“saved_model_1”文件中的内容,几乎不可能提供帮助。很明显,torch无法导入该功能。还有,为什么对相同的内容使用不同的编码结构?厕所很奇怪,似乎不是Python编码的标准方式(任何事情都可能发生)。坚持使用第二个版本,指定您正在使用的python版本,并提供您得到的错误。如有必要,请在CLI中运行,并添加详细信息。感谢您的评论。实际上,Torch可以导入该文件。事实证明,C#脚本需要使用这一行:
    string model_python_script=MV_LSTM_v1_1b.RunFromCmd(WindowsUsername,“C:\\Users\\”+WindowsUsername+“\\modelfiles\\model_eval.py”,args)而不是我问题中的那个。
    
    import sys import torch
    
    # model = torch.load("saved_model_1")
    
    def add_numbers(x,y):    sum = x + y    return sum
    
    num1 = float(sys.argv[1]) num2 = float(sys.argv[2])
    
    print(add_numbers(num1, num2))
    
    import sys
    import torch
    
    model = torch.load("saved_model_1")
    
    def add_numbers(x,y):
       sum = x + y
       return sum
    
    num1 = float(sys.argv[1])
    num2 = float(sys.argv[2])
    
    print(add_numbers(num1, num2))
    
    using System;
    using System.Linq;
    using System.IO;
    using System.Collections.Generic;
    using System.Diagnostics;
    using cAlgo.API;
    using cAlgo.API.Indicators;
    using cAlgo.API.Internals;
    using cAlgo.Indicators;
    
    namespace cAlgo.Robots
    {
        [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
        public class TomTest : Robot
        {
            // Windows username
            [Parameter(DefaultValue = "Tom")]
            public string WindowsUsername { get; set; }
    
            // Python script runner
            // args separated by spaces
            public static string RunFromCmd(string rWindowsUsername, string rCodeFilePath, string args)
            {
                string result = string.Empty;
                try
                {
                    var info = new ProcessStartInfo("C:\\Users\\" + rWindowsUsername + "\\anaconda3\\python.exe")
                    {
                        Arguments = rCodeFilePath + " " + args,
    
                        RedirectStandardInput = false,
                        RedirectStandardOutput = true,
                        UseShellExecute = false,
                        CreateNoWindow = true
                    };
                    using (var proc = new Process())
                    {
                        proc.StartInfo = info;
                        proc.Start();
                        proc.WaitForExit();
                        if (proc.ExitCode == 0)
                        {
                            result = proc.StandardOutput.ReadToEnd();
                        }
                    }
                    return result;
                }
                catch (Exception ex)
                {
                    throw new Exception("Python script failed: " + result, ex);
                }
            }
            protected override void OnStart()
            {
                string test_python_script = TomTest.RunFromCmd(WindowsUsername, "C:\\Users\\" + WindowsUsername + "\\Desktop\\test_python_script.py", "0.5 0.5");
                Print("test script output: " + test_python_script);
            }
            protected override void OnTick()
            {
                // do nothing
            }
            protected override void OnStop()
            {
                // do nothing
            }
        }
    }