На System.Xml.Linq нельзя правильно ссылаться в редакторе WEALTHLAB
Я пытаюсь написать код C#, который делает в основном следующее:
Код соединяется с таблицей MySql и считывает данные из одной таблицы MySql (с r строками и c столбцами) - здесь нет проблем, все в порядке;
Затем код определяет и загружает один DataTable с помощью MySqlDataReader - опять же, никаких проблем на этом этапе. Код в порядке;
Каждый столбец этой таблицы данных фактически является одним стратегическим параметром стратегии (т.е. каждая строка этой таблицы данных становится
one parameter set of the strategy
,
Было сказано, что:
затем код перебирает все строки этой таблицы данных;
код получает значения столбцов каждой строки по одному и изменяет элементы XML по одному, чтобы заменить старые значения стратегии новыми - ЭТО ТАМ, ГДЕ Я ПОЛУЧИЛ ОШИБКУ!!! Я не могу изменить XML-файл изнутри редактора WEALTHLAB C#!!
таким образом, стратегия каждый раз настраивается с новым набором параметров;
Затем код вызывает runDonor и запускает стратегию с заданным (новым) набором параметров - также нет проблем при вызове runDonor!;
и, наконец, некоторая статистика записывается и вставляется в одну таблицу MySql - здесь также нет проблем;
**
Учитывая, что большая часть этого кода не связана с пространством имен wealthlab, я сначала кодировал большинство частей в Visual Studio, скомпилировал их с помощью компилятора Visual Studio и увидел, что код там работает очень хорошо! (То есть редактирование Xelement прошло нормально. Я мог видеть, что файл XML изменяется после каждого цикла, когда этот код запускается в Visual Studio!)
Затем я скопировал / вставил этот код в редактор richscript, но, к сожалению, код не скомпилировался!!
**
Проблема в том регионе, где я начинаю изменять документ XML, используя метод ElementAt.
В частности, оператор ElementAt отлично работает в редакторе Visual Studio, тогда как в редакторе Wealthlab - нет.
Повторяю, несмотря на факт, что я даю ссылку на одни и те же библиотеки DLL и используйте то же самое USING...
ЗАЯВЛЕНИЯ НА ВЕРХЕ КОДА Visual Studio не возвращает ошибок и работает полностью, тогда как Wealthlab возвращает эту ошибку:
'System.Collections.Generic.IEnumerable' <System.Xml.Linq> does not contain a definition for 'ElementAt'
and no extension method 'ElementAt' accepting a first argument of type
'System.Collections.Generic.IEnumerable' <System.Xml.Linq> could be found (are you
missing a using directive or an assembly reference?)"
Я гуглил целую вечность и пока не смог найти приличного решения.
И поскольку у меня нет опыта программирования, я действительно не могу понять, почему тот же код, который использует те же ссылки и те же директивы с использованием, работает в Visual Studio, но приводит к ошибкам в Wealthlab.
По этой ссылке один вариант решения обещан, но, честно говоря, он не является английским для меня: System.Xml.Linq.XElement> 'не содержит определения для'First'и не имеет метода расширения'First', принимающего первый аргумент
**
Итак, мой вопрос будет в два раза:
1- Как я могу преодолеть эту интересную ошибку, которая связана с правильной ссылкой на System.Xml.Linq? Очевидно, в этом и заключается проблема.
2- Или давайте выбросим это и начнем с нуля: как вы, ребята, модифицируете свои xmls? Было бы замечательно, если бы мне предоставили ссылку с примерами кодов, которые читают из XML-файлов или изменяют их, сохраняют их.
(Пожалуйста помоги...)
Ребята, чтобы вы повторили ту же ошибку, я также приложил сюда весь код; скопируйте это в ваши редакторы и посмотрите, хорошо ли работает код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using Community.Components;
using System.Collections;
using System.Xml;
using System.Xml.XPath;
using System.Linq;
using System.IO;
using System.Data;
using System.Xml.Linq; // THIS IS WHERE THE PROBLEM IS THIS REFERENCE COULD NOT BE SET PROPERLY!! WHY?!!
using MySql.Data.MySqlClient;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
// public DateTime now;
public static XElement SourceXml;
public static XElement DonorStrategyXml;
public static string SourceXmlName;
public static string Ticker;
public static int nNames;
public string DonorStrategyXmlFolder;
public string DonorStrategyXmlName;
public string DonorStrategyXmlNameWithNoXml;
public string DonorStrategyXmlPathName;
protected override void Execute()
{
//....
//....
//....
DonorStrategyXmlFolder = @"C:\Users\Aykut\AppData\Roaming\Fidelity Investments\WealthLabDev\1.0.0.0\Data\Strategies\Customized\";
DonorStrategyXmlName = "sss.xml";
DonorStrategyXmlNameWithNoXml = "sss";
string DonorStrategyXmlPathName = DonorStrategyXmlFolder + DonorStrategyXmlName;
DonorStrategyXml = XElement.Load(DonorStrategyXmlPathName);
foreach (DataRow dbBandParameterRow in dbBandParameters.Rows) {
foreach (DataRow dbNNParameterRow in dbNNParameters.Rows) {
string ResultID = dbBandParameterRow["ResultID"].ToString();
int nE = 0;
//....
//....
//.THIS IS WHERE THE PROBLEM LIES AT!!...
DonorStrategyXml.Elements("ParameterValues").Descendants("double").ElementAt(nE).Value = dbBandParameterRow["RatioForUpper"].ToString();
nE++;
DonorStrategyXml.Elements("ParameterValues").Descendants("double").ElementAt(nE).Value = dbBandParameterRow["ADXPeriodForUpper"].ToString();
// output certain statistics of the strategy onto mysql // later!!!
//....
//....
PrintDebug("NetProfit:" + sp.Results.NetProfit.ToString());
}
}
}
} // class
} // nspace
1 ответ
Команда поддержки wealthlab вернулась со следующим ответом; и это сработало.
Благодарю.
...
код не скомпилируется в текущей версии 6.6 редактора Wealth-Lab. Чтобы это исправить, добавьте ссылки на System.Core.dll и System.Xml.Linq.dll из c:\windows\microsoft.net\framework64\v4.0.30319 (64-битный WLD или c:\windows\microsoft.net\framework\v4.0.30319 для 32-битного WLD).
...