Страница 1 из 3

Узнать текущее количество денег

Добавлено: 18 ноя 2018, 10:30
BugsDigger
Привет всем.

Как-то не смог найти в документации, как узнать текущее кол-во свободных денег (в том числе в тестировании).
Например, купил (м.б. не на всё)/продал (м.б. не всё), хочу посмотреть, что вышло в итоге.

Кто-нибудь в курсе?

Re: Узнать текущее количество денег

Добавлено: 19 ноя 2018, 11:43
Balalayka
В качестве предположения.
Возможно вам нужно сравнить весь объем денег:
var money = GetCurrencyPosition(RazdelGroupType.MICEX);
RazdelGroupType– тип рынка,
• MICEX – Рынок ценных бумаг
• FORTS – ФОРТС
• SELT – Валютный рынок

и объем денег занятый в позиции:
var position = GetPosition();
position.Price – учетная цена
position.LongPosition – позиция Long (положительная величина)
position.ShortPosition – позиция Short (положительная величина)
position.Position – позиция по инструменту (положительная – позиция long, отрицательная – short)

Re: Узнать текущее количество денег

Добавлено: 19 ноя 2018, 13:23
BugsDigger
Спасибо за отклик.

Попробую что-то в этом духе...
А неужели нет просто ф-ции, возвращающей текущие наличные в портфеле ?.. Вроде это нечто базовое, не выверт же какой-то.

Re: Узнать текущее количество денег

Добавлено: 13 дек 2018, 19:53
BugsDigger
> GetCurrencyPosition

В тестировании робота эта ф-ция всегда возвращает 0, несмотря на то, что в параметрах тестирования начальный капитал задается в явном виде...

Понятно, что в тестировании лезть за реальным кол-вом денег м.б. и не очень правильно, но можно, например, ввести специальное обозначение рынка RazdelGroupType.TEST, чтобы читать текущие виртуальные деньги в процессе тестирования.

Ну а на данный момент вопрос остается, но м.б. в другой формулировке: как в тестировании узнать финансовый результат после закрытия позиции?

Re: Узнать текущее количество денег

Добавлено: 13 дек 2018, 23:19
AP_Bor
Доброго времени суток, BugsDigger
BugsDigger писал(а):> GetCurrencyPosition
Ну а на данный момент вопрос остается, но м.б. в другой формулировке: как в тестировании узнать финансовый результат после закрытия позиции?
Возможно не понял вашего вопроса, но чем не устраивают GetMoney(), RealizedPL()?
С наилучшими пожеланиями

Re: Узнать текущее количество денег

Добавлено: 14 дек 2018, 07:03
evge
AP_Bor писал(а):но чем не устраивают GetMoney()


Наверное тем что эту функцию забыли описать в документации :)

Re: Узнать текущее количество денег

Добавлено: 14 дек 2018, 09:33
AP_Bor
Доброго времени суток, evge
evge писал(а):Наверное тем что эту функцию забыли описать в документации :)
► Показать
"Герои не ищут легких путей" - Для многих важен не результат, а путь пройденный к вершине(результату), но каждый выбирает его для себя сам.:)

Спасибо, понял, но поздно.;)
С наилучшими пожеланиями

Re: Узнать текущее количество денег

Добавлено: 14 дек 2018, 20:19
BugsDigger
>> чем не устраивают GetMoney()
> Наверное тем, что эту функцию забыли описать в документации

Да, похоже именно этим. В остальном - хорошая ф-ция. :D
Спасибо за информацию.

Re: Узнать текущее количество денег

Добавлено: 15 дек 2018, 17:08
BugsDigger
> хорошая ф-ция

На самом деле плохая ф-ция: в тестировании читаются нули, хотя параметр тестирования "Начальный капитал"=10000. :(

function Initialize()
{
...
AddGlobalVariable("Cnt", Types.Int, 0);
AddGlobalVariable("MoneyStart", Types.Double, 0.0);
AddGlobalVariable("Money", Types.Double, 0.0);
}

function OnUpdate()
{
if(Cnt==0)
{
MoneyStart=GetMoney();
LogFile=String.Format("D:\\ADdebug\\{0} Period={1} Np={2:F2} Nc={3:F2} TP={4:F3}.txt", StrategyName, Period, Np, Nc, Target);
WriteLine(LogFile, String.Format("MoneyStart: {0}", MoneyStart));
}
Cnt++;
Money=GetMoney();
...
WriteLine(LogFile, String.Format("{0:dd/MM/yy} {1}", BarDate(), BarTime()));
WriteLine(LogFile, String.Format("Price:{0:F2} PriceDer:{1:F2} PriceInd:{2:F2} Cap:{3:F2} CapInd:{4:F2} Money:{5}",
Price, PriceDer, PriceInd, Cap, CapInd, Money));
}

Лог:
MoneyStart: 0 // при первом вызове
11.12.18 10:00:00 // при последующих вызовах
Price:192,32 PriceDer:0,04 PriceInd:0,00 Cap:55922,40 CapInd:0,00 Money:0
11.12.18 10:03:00
Price:192,56 PriceDer:0,20 PriceInd:0,10 Cap:173145,50 CapInd:46889,24 Money:0

В чем проблема? У вас в режиме тестирования это точно работает?..

> чем не устраивают RealizedPL()?

"RealizedPL() – возвращает текущий реализованный доход по закрытым сделкам." (в деньгах, AFAIUI)
ОК, но сколько это %% по отношению к исходной сумме?
Правильно, 100*RealizedPL()/GetMoney(на старте).
Но GetMoney-то почему-то в тестировании 0...

Re: Узнать текущее количество денег

Добавлено: 15 дек 2018, 20:25
AP_Bor
Доброго времени суток, BugsDigger
BugsDigger писал(а):> хорошая ф-ция

На самом деле плохая ф-ция:
У меня сейчас нет времени, искать, когда-то она показывала "Money" сейчас "PL" (изменилась точка отсчета, была GetMoney() ==> RealizedPLAfterCommission()) или вам нужно еще, поищите или обратитесь к разработчикам.
Видите, и evge предупреждал, что функция может быть не стабильной.
evge писал(а):Наверное тем что эту функцию забыли описать в документации :)
Но:
► Показать
Удачных поисков. :)
Демонстрация плавного превращения GetMoney() в RealizedPLAfterCommission()
► Показать
С наилучшими пожеланиями