Можно ли получить список всех моих позиций или содержимое окна "Позиции"?
Есть ф-ция
Код: Выделить всё
var currentPosition = GetPosition(RazdelGroupType.MICEX, ticker);
Код: Выделить всё
var currentPosition = GetPosition(RazdelGroupType.MICEX, ticker);
BugsDigger писал(а):Привет, ensh, спасибо за ответ.
> юзаем PositionsManager
Нету такого
Только что сам нарыл
___[NSP] Core
|___[NSP] Core.Managers
| |___[CLS] Core.Managers.PositionManager
| | | method GetPositions :
class [mscorlib]System.Collections.Generic.IEnumerable`1<class AD.Common.DataStructures.ClientTradePosition>(string,int32)
Пробовать буду уже завтра...
BugsDigger писал(а):Это?
Код: Выделить всё
function Initialize()
{
IndicatorName = "CorePositionTest"; // Задайте название индикатора и сохраните с данным именем
AddInput("Input", Inputs.Price); // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
AddSeries("CorePositionTest", DrawAs.Line, Color.Red); // Задаем вид линии индикатора A
// регистрация библиотек (как только ввели блок, жмем компиляцию и пишем дальше)
var ReferencedLibraries = typeof(TA.Script.ScriptCompiler).GetField("ReferencedLibraries",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static );
if (ReferencedLibraries != null)
{
var ReferencedLibrariesArray = ReferencedLibraries.GetValue(null) as string[];
if (!ReferencedLibrariesArray.Contains("Core.dll"))
{
// инжектим базовую библиотеку с данными альфа-директа
ReferencedLibrariesArray = ReferencedLibrariesArray.Concat(new[] { "Core.dll" }).ToArray();
ReferencedLibraries.SetValue(null, ReferencedLibrariesArray); // спасибо AP_Bor
}
if (!ReferencedLibrariesArray.Contains("ADir.DataCollections.dll"))
{
// инжектим базовую библиотеку с "новыми" коллекциями альфа-директа
// старые коллекции в "DataCollections.dll"
ReferencedLibrariesArray = ReferencedLibrariesArray.Concat(new[] { "ADir.DataCollections.dll" }).ToArray();
ReferencedLibraries.SetValue(null, ReferencedLibrariesArray); // спасибо AP_Bor
}
}
// конец - регистрация библиотек
// пишем блок после инжекта!!!! иначе не скомпиллируется
// регистрация своего индекса (если нужно) после инжекта библиотек
// в старых версиях Core.PositionManager
var positionManager = Core.Managers.PositionManager.Instance;
var positionStorage = positionManager.Positions;
var positionIndexNumber = -1;
// локальная функция внутри метода, так сказать, полезный пруф
Func<string, int> getIndexNumberByName = (name) =>
{
for (int i = 0; i < int.MaxValue; i++)
{
var positionIndex = positionStorage[i];
if (positionIndex == null)
return -1;
if (positionIndex.Name == name)
return i;
}
return -1; // дошли досюда... ну ну
};
// нужно быть осторожным, индексы никак не проверяются на уникальность и если наплодить индексов
// все может затормозиться... ну это нужно постараться конечно, но зачем
if ((positionIndexNumber = getIndexNumberByName("index by idfi")) == -1)
{
var index = new IndexedList<int, AD.Common.DataStructures.ClientTradePosition>("index by idfi",
(AD.Common.DataStructures.ClientTradePosition pos) => pos.IdFiBalance);
positionStorage.AddIndex(index);
positionIndexNumber = getIndexNumberByName("index by idfi");
}
AddGlobalVariable("IndexByIdFi", Types.Int, positionIndexNumber);
// конец - регистрация своего индекса
}
function Evaluate()
{
// Область расчета значения индикатора
CorePositionTest = 0.0; // Присваиваем значение = 0.0
// пишем блок после инжекта!!!! иначе не скомпиллируется
// в старых версиях Core.PositionManager
var positionManager = Core.Managers.PositionManager.Instance;
var positionStorage = positionManager.Positions;
//получить список позиций - пример
IEnumerable<AD.Common.DataStructures.ClientTradePosition> positions;
lock (positionStorage.Locker)
{
positions = positionStorage.Values.OfType<AD.Common.DataStructures.ClientTradePosition>().ToList();
}
foreach (var position in positions)
{
// здесь все позиции
}
// конец - получить список позиций
// использование стандартного индекса - позицию по idObject-у - пример
var position123456 = positionStorage.GetSingle(123456, (int)Core.Managers.PositionManager.PositionsIndexNumber.IdObject);
// использование своего индекса - пример
var position789 = positionStorage.GetSingle(789, IndexByIdFi);
}
BugsDigger писал(а):Дааа, это круто.
Реально проще невозможно? (Хотя, какая разница )
Запишу в тему "Хотелки" получение списка позиций, м.б. когда-нибудь реализуют...
BugsDigger писал(а):Еще ворос: зачем может понадобиться свой индекс (т.е. абсолютно ли необходимы части кода, помеченные комментом "регистрация своего индекса (если нужно)").
Вернуться в «Общие вопросы по разработке»
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя