Страница 3 из 3
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 11:44
evge
PIed_Plper писал(а):Подскажите, пожалуйста, как эту информацию (лучший бид и аск) можно вывести визуально на графике? В индикаторах действительно, к сожалению, не доступны эти функции, только в стратегии.
приветствую!
По какой-то причине в индикаторах недоступно их использование.
Если очень нужно, то можно через костыли, типа этого:
1. Создать робота-советника с минимальным таймфреймом (например S1 - секунда)
пишущего в файл bid и ask
2. Создать индикатор
читающего из файла bid и ask, выводящего на график в нужном виде эти значения
В течение получаса накидаю пример и размещу здесь
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 12:07
evge
Практическая польза конечно сомнительная.
Можно изменить этот код-пример и применить в более полезных целях
Привожу как пример-демонстрацию костыля.
Стратегия на основе которой надо будет создать робота-советника:
Код: Выделить всё
/**
**/
function Initialize()
{
StrategyName = "BidAsk";
AddParameter("P1", 0, "", 1);
AddInput("Input1", Inputs.Candle, -1, true, "SBER=МБ ЦК");
LongLimit = 10;
ShortLimit = -10;
}
function OnUpdate()
{
string Ticker = Input.VirtualSecurity.Split('=')[0];
string FileName = Ticker + "_BIDASK.txt";
if (System.IO.File.Exists(FileName) && CurrentIndex != MaxIndex) return;
ClearFile(FileName);
WriteLine(FileName, String.Format("{0};{1}", GetBid(), GetAsk()));
}
Индикатор
Код: Выделить всё
function Initialize()
{
IndicatorName = "BidAsk";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("BidAsk", DrawAs.Custom, Color.Black);
AddSeries("Bid", DrawAs.Custom, Color.Green);
AddSeries("Ask", DrawAs.Custom, Color.Red);
AddLevel(0, Color.Green, "BidAsk");
AddLevel(1, Color.Red, "BidAsk");
}
function Evaluate()
{
string Ticker = Input.VirtualSecurity.Split('=')[0];
string FileName = Ticker + "_BIDASK.txt";
string S = "";
if (System.IO.File.Exists(FileName))
{
System.IO.StreamReader output = new System.IO.StreamReader(FileName);
while (!output.EndOfStream) S += output.ReadLine();
output.Close();
}
string[] D = S.Split(';');
// есть данные
if (D.Count() > 1)
{
Bid = double.Parse(D[0]);
Ask = double.Parse(D[1]);
Levels[0].Level = Bid;
Levels[1].Level = Ask;
}
}
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 12:41
PIed_Plper
Большое спасибо, подумаю как приспособить под свои реалии, у меня порядка 30 инструментов сейчас, нагрузка приличная будет
Смысл в том, что часто на премаркете гэп огромный, позицию робота показывает мне в + 3%, скажем, а при продаже по маркету позиция закроется с убытком. В роботе-то настроено всё как надо, но я легко представляю себе ситуацию, когда нужно бить по красной кнопке тормозить плюсового робота по маркету и нет времени смотреть в стакан, сопоставлять или считать.
Не подскажете куда лучше написать с жалобным предложением по добавлению БидАска в новые версии?
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 12:45
evge
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 12:52
ensh
попробуйте QuotesManager.Instance если доступно
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 13:05
PIed_Plper
ensh писал(а):попробуйте QuotesManager.Instance если доступно
Не, не доступно. Это что-то из 3.5?
Re: Как в индикаторе узнать текущую цену
Добавлено: 09 янв 2019, 13:21
ensh
Это объект отвечающий за котировки в АД 4.0