событие NewCustomTables не возвращает изменившиеся строки~/topic/2911/sobytie-newcustomtables-ne-vozvrashshaet-izmenivshiesya-stroki/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T16:01:08Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/20625/Разобрался. Это я недосмотрел и тупо скопировал класс QuikCandle из примера, а там по умолчанию // И...2012-08-02T12:25:58Z2012-08-02T12:25:58ZRanlodhttps://stocksharp.ru/users/28296/info@stocksharp.ruРазобрался. Это я недосмотрел и тупо скопировал класс QuikCandle из примера, а там по умолчанию <br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
[Identity]// Из-за того что не убрал атрибут из примера и не приходили изменённые строчки как новые
[InnerSchema]
public QuikCandleDateTime DateTime { get; set; }</pre>
</div></div><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/20615/событие NewCustomTables возвращает только новые строки. Хотя в документации написано В случае, если ...2012-08-01T18:22:55Z2012-08-01T18:22:55ZRanlodhttps://stocksharp.ru/users/28296/info@stocksharp.ruсобытие NewCustomTables возвращает только новые строки. Хотя в документации написано <div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">В случае, если ни одно из полей не было помечено атрибутом IdentityAttribute, то событие QuikTrader.CustomTablesChanged не будет никогда вызываться, и все изменения будут приходит как новые строчки через QuikTrader.NewCustomTables.</div></div><br />Посмотрел в отладчике, возвращается только одна строка с новым временем. Я и не знаю что я делаю не так.<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
trader.NewCustomTables += (type, objects) =>
{
// нас интересует только QuikCandle
if (type == typeof(QuikCandle))
{
List<QuikCandle> QC = (List<QuikCandle>)objects.Cast<QuikCandle>();
for (int i = 0; i < QC.Count; i++)
{
string datatime = QC[i].DateTime.Date + QC[i].DateTime.Time;
DataRow newrow = dt.NewRow();
object searh = datatime;
newrow.ItemArray = new object[] {QC[i].DateTime.Date, QC[i].DateTime.Time, datatime, QC[i].OpenPrice, QC[i].HighPrice, QC[i].LowPrice, QC[i].ClosePrice, QC[i].Volume };
if ((Convert.ToInt32(QC[i].DateTime.Time) >= nach) & (Convert.ToInt32(QC[i].DateTime.Time) <= konec))
{
if (!dt.Rows.Contains(searh)) //Если значение не существует в бд то добавляем
{
dt.Rows.Add(newrow);
Console.WriteLine(dt.Rows[dt.Rows.Count - 1][2] + " " + dt.Rows[dt.Rows.Count - 1][3]);
}
else //Если значение есть то проверяем изменилось ли оно(Вот эта часть инструкции не работает из-за того что всегда возвращается только новое значение)
{
bool log = true;
Console.WriteLine(dt.Rows.Find(datatime).ItemArray[2]);
for (int z = 3; z < newrow.ItemArray.Length; z++)
{
if (Convert.ToDecimal(dt.Rows.Find(datatime).ItemArray[z]) != Convert.ToDecimal(newrow.ItemArray[z]))
{
log = false;
break;
}
}
if (log)
{
dt.Rows.Find(datatime).ItemArray = new object[] { QC[i].DateTime.Date, QC[i].DateTime.Time, datatime, QC[i].OpenPrice, QC[i].HighPrice, QC[i].LowPrice, QC[i].ClosePrice, QC[i].Volume };
Console.WriteLine(dt.Rows.Find(datatime).ItemArray[2] + " " + dt.Rows.Find(datatime).ItemArray[3]);
}
}
}
}
}
};</pre>
</div></div><br />По идее, если я правильно понял из документации, событие должно возвращать изменяющиеся строки как новые и вторая чать инструкции должна работать.Copyright @ StockSharp Platform LLC 2010 - 2024