Общие вопросы по разработке > Как в индикаторе узнать текущую цену

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение evge » 09 янв 2019, 11:44

PIed_Plper писал(а):Подскажите, пожалуйста, как эту информацию (лучший бид и аск) можно вывести визуально на графике? В индикаторах действительно, к сожалению, не доступны эти функции, только в стратегии.


приветствую!

По какой-то причине в индикаторах недоступно их использование.

Если очень нужно, то можно через костыли, типа этого:

1. Создать робота-советника с минимальным таймфреймом (например S1 - секунда) пишущего в файл bid и ask
2. Создать индикатор читающего из файла bid и ask, выводящего на график в нужном виде эти значения

В течение получаса накидаю пример и размещу здесь
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение evge » 09 янв 2019, 12:07

Практическая польза конечно сомнительная.
Можно изменить этот код-пример и применить в более полезных целях :)

Привожу как пример-демонстрацию костыля.

Стратегия на основе которой надо будет создать робота-советника:

Код: Выделить всё

/**

**/

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;    
   }
}
никогда такого не было и вот опять

PIed_Plper
Сообщения: 9
Зарегистрирован: 09 янв 2019, 10:33
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение PIed_Plper » 09 янв 2019, 12:41

Большое спасибо, подумаю как приспособить под свои реалии, у меня порядка 30 инструментов сейчас, нагрузка приличная будет

Смысл в том, что часто на премаркете гэп огромный, позицию робота показывает мне в + 3%, скажем, а при продаже по маркету позиция закроется с убытком. В роботе-то настроено всё как надо, но я легко представляю себе ситуацию, когда нужно бить по красной кнопке тормозить плюсового робота по маркету и нет времени смотреть в стакан, сопоставлять или считать.

Не подскажете куда лучше написать с жалобным предложением по добавлению БидАска в новые версии?

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение evge » 09 янв 2019, 12:45

никогда такого не было и вот опять

ensh
Сообщения: 185
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 35 раз

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение ensh » 09 янв 2019, 12:52

попробуйте QuotesManager.Instance если доступно

PIed_Plper
Сообщения: 9
Зарегистрирован: 09 янв 2019, 10:33
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение PIed_Plper » 09 янв 2019, 13:05

ensh писал(а):попробуйте QuotesManager.Instance если доступно

Не, не доступно. Это что-то из 3.5?

ensh
Сообщения: 185
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 35 раз

Re: Как в индикаторе узнать текущую цену

Непрочитанное сообщение ensh » 09 янв 2019, 13:21

Это объект отвечающий за котировки в АД 4.0


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя