#7177 - Mon Jun 28 2010 11:38 AM
Создание индикаторов на API
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Кажется что блок "Удерживалось баров" не совсем корректно считает бары на свече перед выходом, перепрыгивает через 1. Да, есть такое. Если была команда закрыть позицию на след баре, то после этого позиция будет всегда выдавать расстояние между закрытием и открытием. Будет поправлено. Nektodron, подскажите пож: написал такой код: public class balanse : IPosition2Double { public double Execute(IPosition pos, int barNum) { var n = pos.ExitBarNum; if (pos == null || !pos.IsActive) { return 0; } else {return (pos.OpenProfit(barNum));} } } Это блок "доход" но отличающийся тем , что выводит занчение только при активной позиции, но есть загвоздка - этот блок не выводит значение дохода на послеюней свече (в скрине). Думаю что это связано с pos.IsActive - почему то его действие заканчивается за 2 бара до выхода. Как сделать чтобы занчение выводилось на полседней свече перед выходом?
Attachments
Блок пользовательский доход.JPG (506 downloads)
_________________________
|
|
Наверх
|
|
|
|
#7255 - Mon Jun 28 2010 06:09 PM
Re: Создание индикаторов на API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
надо написать так "!(pos.IsActive || pos.ExitBarNum > barNum)"
Вот вставил, получился код: public class balanse : IPosition2Double { public double Execute(IPosition pos, int barNum) { if (pos == null || !(pos.IsActive || pos.ExitBarNum > barNum)) { return 0; } else {return (pos.OpenProfit(barNum));} } } Теперь он стал работать как стандартный блок "Доход" и протягивает значение до следующей позиции (а нужно только до конца собственной активной позиции), получается что на это выражение "!(pos.ExitBarNum > barNum)" нет должного реагирования, т.е. должен выводиться 0, когда номер exitбара <= текущего бара? Скрин прилагаю. По разному изголялся, даже писал pos.ExitBarNum-1..2..3 - в этом случае, при 1 продлевает(как в скрине), с 2 начинат рисовать по старому, т.е. без значения последнего бара перед выходом (как в первом посте этой темы).
Attachments
Блок пользовательский доход1.JPG (495 downloads)
_________________________
|
|
Наверх
|
|
|
|
#7258 - Mon Jun 28 2010 06:32 PM
Re: Создание индикаторов на API
[Re: uprav]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Nektodron, натолкните на мысль, т.е. для чего я горожу этот блок, м.б. и не в ту степь полез, нужно то всего навсего накопленный (кумулятивный) баланс позиции за время её жизни, т.е. если представить этот баланс в виде гистограммы, то нужно вычилслять её площадь, например: баланс соответственно на свечах жизни позиции 1,2,3,4,5 а значения кумуляты на этих пяти свечах буду равны 1,3,6,10,15 и т.д., ну и нужны их модули, т.е. не важно баланс позиции + или -. В Визуале это не сделать т.к. нет циклов и невозможно обращаться к предыдущему рассчётному значению в формуле, подскажите пож. м.б., хотя бы какими интерфейсами воспользоваться в API, т.к. нужно будет вычислять цикл, брать цену закрытия бара и цену входа в поз., или брать доход позиции и обращаться к предыдущим барам активной позиции.
_________________________
|
|
Наверх
|
|
|
|
#7276 - Mon Jun 28 2010 08:59 PM
Re: Создание индикаторов на API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
а дальше для чего используется значение этого индикатора? дальше я буду сравнивать значение одного инструмента со значением инструмента-антипода(антипод-имеется ввиду коррелирующий в + или в -,не важно, инструмент), цель этого - выяснить на сколько нужно изменить количество позиций (или позиции) для уравновешивания балансов взаимодействующих инструментов* * для рынокв акций м.б. и не нужно было бы это городить, там можно на всей истории прокинуть типа скользящей средней цен закрытия (или просто цен закрытия) двух антиподов х на коэфф.количества для выравнивания баланса, и они вполне возможно будут идти рядом (я не делал этого), но для сшитых фьюч.ФОРТСА я пробовал прокинуть на постоянном коэфф.количества баланса - линии расходятся далеко, поэтому нужно постоянно корректировать баланс количеством, и как один из варинатов - это сранивать их накопленные балансы за время жизни позиций-антиподов. ------------------------- Вполне возможно, что сначала м.б. нужно просто смоделировать поведение балансов на индикаторе, а не входить в позиции , но с другой стороны дисбаланс может пойти и в нашу сторону...без прогонки на истории трудно сказать.
Отредактировано uprav (Tue Jun 29 2010 07:25 AM)
_________________________
|
|
Наверх
|
|
|
|
#7380 - Tue Jun 29 2010 09:00 PM
Re: Создание индикаторов на API
[Re: Nektodron]
|
stranger
Registered: Wed Jun 23 2010
Записи: 18
|
Поскажите, как вывести график доходности. И на стандартный блок, и на на написанный на API ругается: Элемент 'Item1' содержит ошибку: Не получается создать график для этого элемента.
|
|
Наверх
|
|
|
|
#7382 - Tue Jun 29 2010 09:36 PM
Re: Создание индикаторов на API
[Re: Kovenant]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Поскажите, как вывести график доходности. И на стандартный блок, и на на написанный на API ругается: Элемент 'Item1' содержит ошибку: Не получается создать график для этого элемента. появился блок "доходность"? Или вы говорите про блок "доход"? А какой код на API? Икакая версия программы? У меня версия 1.1.7.36 и блок "Доход" рисуется на графике. До этой версии тоже такую ошибку выдавал.
Отредактировано uprav (Tue Jun 29 2010 09:38 PM)
_________________________
|
|
Наверх
|
|
|
|
#7386 - Tue Jun 29 2010 09:58 PM
Re: Создание индикаторов на API
[Re: Nektodron]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Подскажите пожалуйста! Задача - создать индикатор и компилировать. Знаю, что мои вопросы будут дурацкими, но все же прошу ответить, не обязательно разработчиков. Мне просто нужно понять программу SharpDevelop. Я реально завис на мелочах, которые уже кажутся нерешаемыми. Вот посмотрите на настройки, при таких настройках компилируемый файл DLL должен оказаться в папке handlers? Ничего не нужно нигде менять? : Подскажите, что нужно нажать, что бы появилось окно редактора, куда бы можно было скопировать код индикатора из примера: using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.DataSource; using TSLab.Script.Helpers; namespace test { public class MyStochK : IBar2DoubleHandler, IContextUses { [HandlerParameter] public int Period { get; set; } public IList<double> Execute(ISecurity source) { var high = Context.GetData("Highest", new[] { Period.ToString() }, () => Series.Highest(source.HighPrices, Period)); var low = Context.GetData("Lowest", new[] { Period.ToString() }, () => Series.Lowest(source.LowPrices, Period)); var closes = source.ClosePrices; IList<double> list = new List<double>(closes.Count); for (int i = 0; i < closes.Count; i++) { var stochK = 100 * (closes[i] - low[i]) / (high[i] - low[i]); list.Add(stochK); } return list; } public IContext Context { get; set; } } }
Attachments
Компиляция.JPG (2268 downloads)
Отредактировано 777 (Tue Jun 29 2010 10:08 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#7388 - Tue Jun 29 2010 10:11 PM
Re: Создание индикаторов на API
[Re: uprav]
|
stranger
Registered: Wed Jun 23 2010
Записи: 18
|
Поскажите, как вывести график доходности. И на стандартный блок, и на на написанный на API ругается: Элемент 'Item1' содержит ошибку: Не получается создать график для этого элемента. появился блок "доходность"? Или вы говорите про блок "доход"? А какой код на API? Икакая версия программы? У меня версия 1.1.7.36 и блок "Доход" рисуется на графике. До этой версии тоже такую ошибку выдавал. Да, дело в билде оказалось. Вопрос такой: подскажите, почему доходность считается с предыдущего бара от входа в позицию? На скрине на верхней панели вход в позиицию, на самой нижней - Доход%
Attachments
30.06.jpg (1876 downloads)
Отредактировано Kovenant (Tue Jun 29 2010 10:12 PM)
|
|
Наверх
|
|
|
|
#7391 - Tue Jun 29 2010 10:14 PM
Re: Создание индикаторов на API
[Re: 777]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Нужно создать пустой файл, для этого правой мышью на названии TSLAB -> add -> New Item -> Empty File. Пишешь название. Место менять не стоит. Он сохранится в папке проекта.
_________________________
|
|
Наверх
|
|
|
|
#7394 - Tue Jun 29 2010 10:32 PM
Re: Создание индикаторов на API
[Re: uprav]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Нужно создать пустой файл, для этого правой мышью на названии TSLAB -> add -> New Item -> Empty File. Пишешь название. Место менять не стоит. Он сохранится в папке проекта. Спасибо uprav! А не подскажешь. Я скопировал файл, теперь, что бы его редактировать с визуализацией, правильно ли я понимаю, что нужно нажать на эту кнопку или F5, при этом будет произведена проверка на ошибки?:
Attachments
Проверка на ошибки.JPG (1997 downloads)
Отредактировано 777 (Tue Jun 29 2010 10:34 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#7395 - Tue Jun 29 2010 10:42 PM
Re: Создание индикаторов на API
[Re: 777]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Нужно создать пустой файл, для этого правой мышью на названии TSLAB -> add -> New Item -> Empty File. Пишешь название. Место менять не стоит. Он сохранится в папке проекта. Спасибо uprav! А не подскажешь. Я скопировал файл, теперь, что бы его редактировать с визуализацией, правильно ли я понимаю, что нужно нажать на эту кнопку или F5, при этом будет произведена проверка на ошибки?: Снимается вопрос. Такой вопрос: Что нужно нажать, что бы появился DLL? _________________________ То же снимается
Отредактировано 777 (Wed Jun 30 2010 12:09 AM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#7397 - Tue Jun 29 2010 11:29 PM
Re: Создание индикаторов на API
[Re: 777]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Вот такой файл(из примера): После компиляции записываются файлы в папку hendlers: В папке пользовательские находится нужный индикатор но ТСЛАБ выдает ошибку: Свойства выходного файла приведены выше. В чем может быть проблема?
Attachments
Пример sharp.JPG (2045 downloads)папка handlers.JPG (2036 downloads)Ошибка в Тслабе.JPG (2022 downloads)
Отредактировано 777 (Tue Jun 29 2010 11:33 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#7406 - Wed Jun 30 2010 08:37 AM
Re: Создание индикаторов на API
[Re: 777]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Вот такой файл(из примера): Свойства выходного файла приведены выше. В чем может быть проблема? М.б. что то с кодом не то? Я тоже сначала из справки делал, тоже ошибка была, было что то с кодом. 1. Попробуй переименовать блок - для этого надо MyStock в publik class заменить на другое. 2. Побробуй для примера взять код попроще, Nektodron выкладывал примеры .cs на форуме. Для этого можно в этом же проекте открыть другой .cs в другой вкладке он появится, и скопировать код в свою вкладку. Они друг на друга не влияют при компиляции.
_________________________
|
|
Наверх
|
|
|
|
#7440 - Wed Jun 30 2010 12:47 PM
Re: Создание индикаторов на API
[Re: uprav]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Не прокатывает. Теперь опять вообще ничего не компилируется. Беру индикаторы из основных, тех что нектодрон выкладывал, компилирую, в папке hendlers ничего не появляется... То пишет ошибку 39 то Sharp пишет сексесфул, но в папке ничего нет. Ничего не понимаю. Очень не хватает видеоуроков по-этому sharp-у. А с самым первым, тем что из примера, все в порядке, изменяются названия переменных и все такое, но в тслабе пишет ошибку: System.TypeLoadException: Не удалось загрузить тип "test.ПРОБА" из сборки "TSLAB, Version=1.0.3832.33524, Culture=neutral, PublicKeyToken=null". в TSLab.User.Script..ctor()
Отредактировано 777 (Wed Jun 30 2010 12:49 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#7485 - Wed Jun 30 2010 06:04 PM
Re: Создание индикаторов на API
[Re: Kovenant]
|
stranger
Registered: Wed Jun 23 2010
Записи: 18
|
Поскажите, как вывести график доходности. И на стандартный блок, и на на написанный на API ругается: Элемент 'Item1' содержит ошибку: Не получается создать график для этого элемента. появился блок "доходность"? Или вы говорите про блок "доход"? А какой код на API? Икакая версия программы? У меня версия 1.1.7.36 и блок "Доход" рисуется на графике. До этой версии тоже такую ошибку выдавал. Да, дело в билде оказалось. Вопрос такой: подскажите, почему доходность считается с предыдущего бара от входа в позицию? На скрине на верхней панели вход в позиицию, на самой нижней - Доход% прояните пож-ста..
Отредактировано Kovenant (Wed Jun 30 2010 06:05 PM)
|
|
Наверх
|
|
|
|
#7732 - Fri Jul 02 2010 10:23 PM
Re: Создание индикаторов на API
[Re: 777]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Вот такой файл(из примера): После компиляции записываются файлы в папку hendlers: В папке пользовательские находится нужный индикатор но ТСЛАБ выдает ошибку: Свойства выходного файла приведены выше. В чем может быть проблема?
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8136 - Sun Jul 11 2010 10:24 PM
И опять ошибка CS0103
[Re: Nektodron]
|
stranger
Registered: Fri Apr 16 2010
Записи: 9
|
2 Nektodron и другие спецы. Здравствуйте. Я опять застрял. Ниже код индикатора, который должен выполнять простое вычисление (среднее между максимумом и минимумом, которые сдвигаются по определенному закону. в примере - упрощенный вариант). При компиляции - ошибка CS0103. Господа, подскажите, плз, что не так.
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;
using System;
namespace test
{
public class MyInd : IBar2DoubleHandler, IContextUses
{
[HandlerParameter]
public int Period { get; set; }
public IList<double> Execute(ISecurity source)
{
int k;
for (k = 0; k < Math.Pow(2, 5); k++)
{
int m; //сдвиг как-то вичисляется. для примера - пусть будет так.
m = k * 3; //сдвиг как-то вичисляется. для примера - пусть будет так.
var hh = Series.Highest(Series.Shift(source.HighPrices, m), Period);
var ll = Series.Lowest(Series.Shift(source.LowPrices, m), Period);
}
var closes = source.ClosePrices;
IList<double> list = new List<double>(closes.Count);
for (int i = 0; i < closes.Count; i++)
{
var mv = (hh[i] + ll[i]) / 2;
list.Add(mv);
}
return list;
}
public IContext Context { get; set; }
}
}
|
|
Наверх
|
|
|
|
#8137 - Mon Jul 12 2010 12:00 AM
Re: И опять ошибка CS0103
[Re: dmfx]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Все же реально не хватает документации. Предлагаю разработчикам создать "рыбу", вернее рыбы для написания индикаторов. Потому-что среди клиентов реально мало программемров. Допустим: 1 Рыба.: Математическое вычисление. Данные: close, open, high, low. Далее возможные вычисления, например для вычисления натурального логарифма, мне пришлось перевернуть весь инет, т.к. ни в документации Microsoft(там было что то типа [JSFunctionAttribute(JSFunctionAttributeEnum.None, JSBuiltin.Math_log)] public static double log( double x ) ) ни в Вашей, нигде не было нормального описалово, оказывается, для его вычисления не надо ничего объявлять, достаточно написать System.Math.Log(X). Где X абсолютно любые математические исчисления. Потом, меня лично сейчас интересует вычисление интегралла. 2 Рыба: Доступ к портфелю. Данные: цена входа, последний доход и т.д. 3 Рыба: Доступ из создаваемого индикатора к уже существующим. 4 Рыба: Преобразование из переменного в постоянное Потом сильно не хватает описалово ошибок... Ошибка № - скорее всего Вы сделали не так вот это... Короче, я сколько вопросов пишу Nektodron-у, столько он и отвечает, но с каждым следующим ответом чувствуется его напряжение и с каждым разом надо задавать большее кол-во вопросов, что бы получить конкретный ответ, и это понятно, потому-что он уже десять раз на них кому-то отвечал(а на сайте поисковик честно сказать так себе - и это почти ничего не сказать), а во вторых ему дана конкретная установка отвечать только на ошибки... Может стоит уделить внимание документации и просто отвечать на вопросы, которые уже задавались, конкретным примером. Потом не понятно, в примерах появляется большое кол-во торгующих скриптов, но еще мало кто может из них просто выделять нужные индикаторы. И поверьте, это не из-за того, что не хотят(usas у нас только один такой), а реально просто не хватает знаний. Вообщем предложение мое: уделить внимание созданию индикаторов, а начать можно с того, что выкладывать исходники вновь появляющихся индикаторов в ТСЛаб, допустим из исходников на сайте выложено сейчас по порядку RSI следующий сразу сумма за т.е. пропущено как минимум 6! штук. А из примеров не хватает как пример: CCI>0?(LOW-TR):(HIGH+TR) Т.е. как объявить переменные, как обратиться к уже существующему CCI и TR, как правильно организовать алгоритм на API? Вообщем не хватает простетских вещей, понятно, что Вы сейчас пытаетесь привлечь внимание программеров, для этого устроили "Лучшая стратегия - и мы ее реализуем". Но поверьте у многих есть такие стратегии, включая меня, но я ее никому не дам, и никогда не продам, мне нужны только инструменты для ее реализации. Я всегда был трейдером и никогда программистом, пожалуйста постарайтесь такому большинству дать больше информации....  Может быть даже лучше преобразовать "Заказ Индикаторов" во что-то типа "Реализация на API", т.е. выкладывать только исходники, кому надо - тот компильнул, кому надо тот обучается... Все конечно же ИМХО, можете даже не отвечать...
Отредактировано 777 (Mon Jul 12 2010 12:30 AM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8139 - Mon Jul 12 2010 08:40 AM
Re: И опять ошибка CS0103
[Re: 777]
|
Pooh-Bah
Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
|
..И поверьте, это не из-за того, что не хотят(usas у нас только один такой), а реально просто не хватает знаний... Вот именно.. Сам наехал, сам и объяснил.. да и потом.. слесарю-слесарево, по писанию..:-))
|
|
Наверх
|
|
|
|
#8142 - Mon Jul 12 2010 10:22 AM
Re: И опять ошибка CS0103
[Re: dmfx]
|
Carpal Tunnel
Registered: Thu Oct 23 2008
Записи: 5492
|
При компиляции - ошибка CS0103. Господа, подскажите, плз, что не так.
hh и ll объявлены и вычисляются внутри одного цикла (зачемто), а используются в другом.
|
|
Наверх
|
|
|
|
#8143 - Mon Jul 12 2010 10:24 AM
Re: И опять ошибка CS0103
[Re: 777]
|
Pooh-Bah
Registered: Mon Feb 16 2009
Записи: 2130
|
Все конечно же ИМХО, можете даже не отвечать... Отвечу. Уровень подготовки Клиентов разный. Спектр задач, которые хочет решить Клиент с помощью TSLab, широкий. Понятно что постепенно будет расширяться документация и примеры, но быстро это не произойдет. Кто в состоянии сам копать, мы отвечаем на форуме. Кто не в состоянии, но реально надо для торговли какие-то вещи, пишет на contact@tslab.ru будем решать в частном порядке.
|
|
Наверх
|
|
|
|
#8146 - Mon Jul 12 2010 11:02 AM
Re: И опять ошибка CS0103
[Re: Nektodron]
|
stranger
Registered: Fri Apr 16 2010
Записи: 9
|
При компиляции - ошибка CS0103. Господа, подскажите, плз, что не так.
hh и ll объявлены и вычисляются внутри одного цикла (зачемто), а используются в другом. Хорошо. Пусть объявляются и вычисляются в одном цикле. Второй же цикл нужен для вывода (расчета на всех барах на истории) рассчитанного значения. Если второй цикл не нужен (я и сам не уверен в его необходимости - или вроде так можно организовать расчет для всех баров по истории?) - так как можно сделать? Или если второй цикл все-таки нужен - как использовать значения, вычисленные в первом? Основная "фишка" - вычисление сдвига. Но там проблем нет - вычисляется в том же цикле, что и hh и ll (но там проблем нет и я привел слегка видоизменненый код.). Помогите, плз. Уже неделю бьюсь
Отредактировано dmfx (Mon Jul 12 2010 11:05 AM)
|
|
Наверх
|
|
|
|
#8148 - Mon Jul 12 2010 11:07 AM
Re: И опять ошибка CS0103
[Re: andy]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Все конечно же ИМХО, можете даже не отвечать... Отвечу. Уровень подготовки Клиентов разный. Спектр задач, которые хочет решить Клиент с помощью TSLab, широкий. Понятно что постепенно будет расширяться документация и примеры, но быстро это не произойдет. Кто в состоянии сам копать, мы отвечаем на форуме. Кто не в состоянии, но реально надо для торговли какие-то вещи, пишет на contact@tslab.ru будем решать в частном порядке. Позвольте и я отвечу. В "частном порядке" сложные вопросы, у меня по крайней мере, давно решены через Метасток, ТсЛаб мне как раз и нужен для того, что бы вопросы решались не "в частном порядке", очень уж хотелось уйти от зависимости от программистов. Пришла мысль - есть инструмент для решения. И каждый раз отдавать деньги за свои порой откровенно глупые мысли программисту..., смысл от торговли? Зачем ТСЛаб нужен, если даже простые вопросы "в частном порядке"? 
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8156 - Mon Jul 12 2010 12:57 PM
Re: И опять ошибка CS0103
[Re: 777]
|
old hand
Registered: Tue Jan 05 2010
Записи: 1098
Loc: Набережные Челн...
|
И каждый раз отдавать деньги за свои порой откровенно глупые мысли программисту... пардон а кубами нельзя проверить индюк? по сути это череда формул ...
|
|
Наверх
|
|
|
|
#8162 - Mon Jul 12 2010 02:06 PM
Re: И опять ошибка CS0103
[Re: Vladimir /]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
И каждый раз отдавать деньги за свои порой откровенно глупые мысли программисту... пардон а кубами нельзя проверить индюк? по сути это череда формул ... Да нет конечно! Такое кубами не проверишь!
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8166 - Mon Jul 12 2010 02:28 PM
Re: И опять ошибка CS0103
[Re: 777]
|
old hand
Registered: Tue Jan 05 2010
Записи: 1098
Loc: Набережные Челн...
|
И каждый раз отдавать деньги за свои порой откровенно глупые мысли программисту... пардон а кубами нельзя проверить индюк? по сути это череда формул ... Да нет конечно! Такое кубами не проверишь! Не верю!(с)
|
|
Наверх
|
|
|
|
#8168 - Mon Jul 12 2010 02:41 PM
Re: И опять ошибка CS0103
[Re: Vladimir /]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Ну и как интеграл в кубике записать: inf.
-
2 | | 2
erfc(x) = -------- | exp( - t ) dt
sqrt(pi) | |
-
x
Если Вы сможете, тогда лучше Гаусса: x
-
1 | | 2
ndtr(x) = --------- | exp( - t /2 ) dt
sqrt(2pi) | |
-
-inf.
= ( 1 + erf(z) ) / 2
= erfc(z) / 2
где z = x/sqrt(2)
erfc был выше, а erf это:
x
-
2 | | 2
erf(x) = -------- | exp( - t ) dt.
sqrt(pi) | |
-
0
Отредактировано 777 (Mon Jul 12 2010 03:03 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8172 - Mon Jul 12 2010 03:12 PM
Re: И опять ошибка CS0103
[Re: usas]
|
old hand
Registered: Tue Jan 05 2010
Записи: 1098
Loc: Набережные Челн...
|
Я что-то не догоняю - как можно кубиком проверить работу индикатора, если оный кубик еще не сваяли? Или Вы имеете ввиду какие-то иные кубЫ? есть кубЫ формула
|
|
Наверх
|
|
|
|
#8173 - Mon Jul 12 2010 03:19 PM
Re: И опять ошибка CS0103
[Re: 777]
|
old hand
Registered: Tue Jan 05 2010
Записи: 1098
Loc: Набережные Челн...
|
Ну и как интеграл в кубике записать: [/code] да вы я смотрю подготовились)) нет с интегралами не дружу
|
|
Наверх
|
|
|
|
#8176 - Mon Jul 12 2010 03:34 PM
Re: И опять ошибка CS0103
[Re: Vladimir /]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
Жаль 
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8180 - Mon Jul 12 2010 03:50 PM
Re: И опять ошибка CS0103
[Re: Vladimir /]
|
Carpal Tunnel
Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
|
вот если по честному я к всякого рода индикаторам вообще отношусь скептически, так же как и к безиндикаторным системам))). Индикаторы показывают прошлое... Как же Вы торгуете, графический анализ? Даже не знаете, что есть формулы для вычисления будущей цены с определенной вероятностью?
Отредактировано 777 (Mon Jul 12 2010 03:54 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика» Дизраэли.
|
|
Наверх
|
|
|
|
#8210 - Mon Jul 12 2010 07:20 PM
Re: И опять ошибка CS0103
[Re: Nektodron]
|
stranger
Registered: Fri Apr 16 2010
Записи: 9
|
При компиляции - ошибка CS0103. Господа, подскажите, плз, что не так.
hh и ll объявлены и вычисляются внутри одного цикла (зачемто), а используются в другом. Ошибку указали. Спасибо. Но как правильно сделать?!
|
|
Наверх
|
|
|
|
#10251 - Tue Aug 17 2010 10:44 PM
Re: И опять ошибка CS0103
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Чтобы сослаться в формуле на свое значение можно воспользоваться зарезервированным именем list. Например: "list[i-1] + 1" Nektodron, я правильно понимаю, что это ссылка в выражении в визуальном редакторе в блоке формула на своё собственное значение 1 бар назад "list[i-1]"? И в какой сборке? Пишет ошибку error CS0103: Имя 'list' отсутствует в текущем контексте. Или это относится к API? ЗЫ. Нужно ссылаться на предыдущее значение формулы и прибавлять к нему текущее, и т.д.
Это работает уже давно, можно использовать в формулах, но не во всех, а только в тех, которые от списков считаются. Т.е. если в формулу идет обновляемое значение или чтото из позиции, то работать не будет. Nektodron, в том то и вопрос, что нужно работать с позицией: обращаться к балансу активной позиции на i-той свече, и проводить с ней расчёты, возможно ли в принципе сделать такой блок для визуала индикатора на API и какие использовать интерфейсы: 1. в IPosition2Double - который цепляется к блоку входа, я так понимаю что нельзя например обращаться к i-му значению pos.OpenProfit, или можно через BarNum, но как запоминать i-тое значение переменной, т.е. нужно pos.OpenProfit[i]=pos.OpenProfit[i-1]+pos.OpenProfit[i] и т.д. пока активна позиция? 2.Для расчёта такого выражения с помощью IBar2DoubleHandler можно создать список из источника, но как проверить наличие активной позиции, через source.Positions.GetLastActiveForSignal? а как обратиться к балансу позиции, в source.Positions не нашёл значения баланса или перехода не к IPositionList, а к IPosition, откуда можно взять и IsActive и OpenProfit? Или можно какие то другие использовать интерфейсы? Или такое можно сделать только во внешнем скрипте с помощью IExternalScript? Подскажите пож. чтобы зря время не терять с индикатором ----------------- P.S. Почему то тема топика меняется - писал в топик "Создание индикаторов на API", а высвечивается "И опять ошибка CS0103"
Отредактировано uprav (Tue Aug 17 2010 10:51 PM)
_________________________
|
|
Наверх
|
|
|
|
#10336 - Thu Aug 19 2010 11:05 AM
Создание индикаторов на API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Nektodron, подскажите пож: вот в этом коде что возможно изменить, чтобы ошибку при компилировании устранить:
вот код:
public class Cumbalanse2 : IPosition2Double { public double Execute(IPosition pos, int barNum) { if (pos == null || !pos.IsActive) { return 0; } int count = pos.Security.Bars.Count; IList<double> n = new double[count]; for (int i = 1; i < count; i++) {n[i] = pos.OpenProfit(i);} return n; } }
Ошибка: Неявное преобразование типа 'System.Collections.Generic.IList<double>' в 'double' невозможно (CS0029)
_________________________
|
|
Наверх
|
|
|
|
#10373 - Thu Aug 19 2010 05:09 PM
Re: Создание индикаторов на API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
возвращаемое значение у вас заявлено double, а возвращаете список имеете ввиду этоу строчку? public double Execute(IPosition pos, int barNum) но исправление её на public IList<double> Execute(IPosition pos, int barNum) и такой код: public class Cumbalanse2 : IPosition2Double { public IList<double> Execute(IPosition pos, int barNum) { if (pos == null || !pos.IsActive) { return 0; } int count = pos.Security.Bars.Count; var n = new double[count]; for (int i = 1; i < count; i++) {n[i] = pos.OpenProfit(i);} return n; } } выдаёт ошибку: "balans.Cumbalanse2" не реализует член интерфейса "TSLab.Script.Handlers.IPosition2Double.Execute(TSLab.Script.IPosition, int)". "balans.Cumbalanse2.Execute(TSLab.Script.IPosition, int)" не удается реализовать "TSLab.Script.Handlers.IPosition2Double.Execute(TSLab.Script.IPosition, int)", поскольку он не содержит соответствующего типа возвращаемого значения "double". (CS0738) Подскажите пож какое нужно сделать исправление? И возможно ли в этом коде простое исправление, чтобы он выдавал доход позиции на i-м баре?
_________________________
|
|
Наверх
|
|
|
|
#10452 - Fri Aug 20 2010 02:15 PM
Re: Создание индикаторов на API
[Re: uprav]
|
Carpal Tunnel
Registered: Thu Oct 23 2008
Записи: 5492
|
а зачем вы изобретаете велосипед, когда уже есть стандартный кубик "Доход" и "Доход %"? И код его примитивный:
public class Profit : IPosition2Double
{
public double Execute(IPosition pos, int barNum)
{
if (pos == null)
{
return 0;
}
return pos.OpenProfit(barNum);
}
}
|
|
Наверх
|
|
|
|
#10581 - Tue Aug 24 2010 07:12 AM
Re: Создание индикаторов на API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Nektodron, подскажите пож какой интерфейс можно использовать наподобие IBar2DoubleHandler для создания блока индикатора, но чтобы цеплялось 2 источника (ценных бумаги) и как в этом случае будет прописываться public IList<double> Execute(ISecurity source)?
_________________________
|
|
Наверх
|
|
|
|
#11866 - Sun Sep 05 2010 04:06 PM
Re: Создание индикаторов на API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Nektodron, пытаюсь сделать индикатор в виде свечей от 2-х источников, этот код комиплируется в SharpDevelop, но в ТСЛабе при запуске скрипта выдаёт ошибку:
public class spread : ISecurityInputs, IDoubleReturns, ITwoSourcesHandler, IStreamHandler
{
public ISecurity Execute(ISecurity source1, ISecurity source2)
{
var bars = new List<Bar>(source1.Bars.Count);
for (int i = 0; i < source1.Bars.Count; i++)
{
var bar = source1.Bars[i];
var o1 = source2.OpenPrices[i];
var h1 = source2.HighPrices[i];
var l1 = source2.LowPrices[i];
var c1 = source2.ClosePrices[i];
var newBar = new Bar(bar.Color, bar.Date,bar.Open-o1,
bar.High-h1,
bar.Low-l1,
bar.Close-c1,
bar.Volume){ Ask = bar.Ask, Bid = bar.Bid, AskQty = bar.AskQty, BidQty = bar.BidQty };
bars.Add(newBar);
}
return source1.CloneAndReplaceBars(bars);
}
}
18:17:55.84 c:\Documents and Settings\...\Local Settings\Application Data\TSLab\TSLab\temp\code8.cs(27,24) : error CS0266: Неявное преобразование типа 'TSLab.Script.ISecurity' в 'System.Collections.Generic.IList<double>' невозможно. Существует явное преобразование (возможно, отсутствует приведение) 18:17:55.84 c:\Documents and Settings\...\Local Settings\Application Data\TSLab\TSLab\temp\code8.cs(27,17) : error CS1662: Не удается преобразовать "анонимный метод" в тип делегата "TSLab.DataSource.CacheObjectMaker<System.Collections.Generic.IList<double>>", так как некоторые типы возвращаемого значения в блоке не являются неявно преобразуемыми в тип возвращаемого значения делегата Что в этом коде нужно исправить?
Отредактировано uprav (Sun Sep 05 2010 04:21 PM)
_________________________
|
|
Наверх
|
|
|
|
#13992 - Thu Sep 23 2010 08:52 PM
Re: Создание индикаторов в API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Nektodron, подскажите пож по коду блока-индикатора: возможно ли здесь чтобы вместо цены закрытия новой свечи на графике отражалось расчётное значение bid/ask 2-х источников в режиме реальных торгов, например: bid источника1 - ask источника 2, и что нужно использовать? И можно ли сделать это в этом коде используя эти интерфейсы?
namespace spr1
{
public class spreadkR : ISecurityInputs, ISecurityReturns, ITwoSourcesHandler, IStreamHandler
{
[HandlerParameter(true, "", NotOptimized = true)]
public double k1 { get; set; }
[HandlerParameter(true, "", NotOptimized = true)]
public double k2 { get; set; }
public ISecurity Execute(ISecurity source1, ISecurity source2)
{
var Bars = new List<Bar>(source1.Bars.Count);
var C1 = source1.ClosePrices;
var H1 = source1.HighPrices;
var L1 = source1.LowPrices;
var O1 = source1.OpenPrices;
var C2 = source2.ClosePrices;
var H2 = source2.HighPrices;
var L2 = source2.LowPrices;
var O2 = source2.OpenPrices;
IList<Bar> NC = new List<Bar>(Bars.Count);
IList<double> op = new List<double>(C1.Count);
IList<double> hi = new List<double>(C1.Count);
IList<double> lo = new List<double>(C1.Count);
IList<double> cl = new List<double>(C1.Count);
double Open,High,Low,Close,L,H;
for(int i=0; i<C1.Count; i++)
{
Open=k1*O1[i]-k2*O2[i];
Close=k1*C1[i]-k2*C2[i];
L = k1*L1[i]-k2*L2[i];
H = k1*H1[i]-k2*H2[i];
Low = Math.Min(Math.Min(L,H),Math.Min(Open,Close));
High= Math.Max(Math.Max(L,H),Math.Max(Open,Close));
op.Add(Open);
hi.Add(High);
lo.Add(Low);
cl.Add(Close);
}
int j=0;
foreach(var bar in source1.Bars)
{
var hav = new Bar(bar.Color, bar.Date,
op[j],
hi[j],
lo[j],
cl[j],
bar.Volume);
NC.Add(hav);
j++;
}
return source1.CloneAndReplaceBars(NC);
}
public IContext Context { get; set; }
}
}
Отредактировано uprav (Thu Sep 23 2010 08:53 PM)
_________________________
|
|
Наверх
|
|
|
|
#14097 - Sat Sep 25 2010 11:31 PM
Re: Создание индикаторов в API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
public class spreadkR : ISecurityInputs, IDoubleReturns, ITwoSourcesHandler, IStreamHandler { public IList<double> Execute(ISecurity source1, ISecurity source2) { var vv = new double[source1.Bars.Count]; for(int i=0; i< bars.Count; i++) { vv[i] = source1.Bars[i].Bid / source1.Bars[i].Ask; } return vv; } } Nektodron, по этому коду возникли такие вопросы: 1. source1.Bars[i].Bid (или source1.Bars[i].Ask) в реал-тайме почему то ничего не выдаёт, точнее выдаёт 0 . Транзак. ТСЛаб 1.1.11.1.(это не принципиально, т.к. я заменил на выр в п.2, ниже, хочу просто узнать выдают они что нибудь вообще и при каких условиях?) 2. Я правильно понимаю, что в выражении: source1.GetBuyQueue(i)[0].Price, [0] - обозначает первую строчку стакана, т.е. лучший bid? Если будет стоять [1] - то это сдвиг вниз на 1 шаг цены? 3. При использовании source.CloneAndReplaceBars() обновление новой индикаторной свечи происходит по мере пересчёта скрипта, возможно ли , чтобы индикатор с его использованием обновлялся по мере обновления входящих в него источников(как обычный график ценной бумаги в реал-тайме) и не зависимо от режима обновления скрипта? Или что нужно для этого использовать?
Отредактировано uprav (Sun Sep 26 2010 04:01 PM)
_________________________
|
|
Наверх
|
|
|
|
#14259 - Mon Sep 27 2010 09:10 PM
Re: Создание индикаторов в API
[Re: Nektodron]
|
addict
Registered: Thu Jan 14 2010
Записи: 594
|
Nektodron, спасибо за ответы! Ещё вопросы по API 1.В коде в посте выше (сообщение 13992), при использовании интерфейсов: ISecurityInputs, ISecurityReturns, ITwoSourcesHandler, IStreamHandler и далее: public ISecurity Execute(ISecurity source1, ISecurity source2) каким образом можно проверить на реал-тайм?
Я написал выражение: if(n[i]==C1.Count-1&&source1.Positions.IsRealtime), но оно почему то на реальных торгах игнорируется, и это выражение всегда false(в лабе и на реале), убираю вообще выражение source1.Positions.IsRealtime - и всё работает в реале (т.е. выражение без него всегда true). Можно ли этим выражением вообще проверять на реал-тайм с этими интерфейсами? И можно ли тут вообще это проверить? * Под реал-таймом здесь я понимаю наличие данных стакана. 2. А вот это выражение: if(n[i]==C1.Count-1&&source1.GetBuyQueue(i)[0].Price!=null) почему то всегда true, даже в лабе, когда нет данных стакана. Как тогда можно проверить на наличие данных стакана(и таким образом проверить на наличие реал-тайма)? Версия 1.1.11.1.
_________________________
|
|
Наверх
|
|
|
|
#17131 - Sat Nov 20 2010 10:17 AM
Re: Создание индикаторов в API
[Re: Nektodron]
|
enthusiast
Registered: Mon Jun 21 2010
Записи: 283
|
Подскажите пожалуйста, я только начинаю программировать.Хочу обьединить фрактал на покупку и на продажу в один блок. Как это лучше сделать? using System; using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.DataSource; using TSLab.Script.Helpers;
namespace FractalSell_ { public class FractalSell : IBar2BoolsHandler, IContextUses { [HandlerParameter(true, "5", Min = "1", Max = "20", Step = "1")] public int Right { get; set; } [HandlerParameter(true, "5", Min = "1", Max = "20", Step = "5")] public int Left { get; set; } [HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")] public int CurrentBar { get; set; } [HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")] public int Fractal { get; set; } public IList<bool> Execute(ISecurity source) { var L = source.LowPrices; IList<bool> frsell1 = new List<bool>(L.Count); IList<bool> frsell2 = new List<bool>(L.Count); bool frsellv =false; bool frsellv1 =false; int StartIndex=Left+(Right+CurrentBar); int ResCheck=Left+Right; for (int i = 0; i < L.Count; i++) { if(i<StartIndex) frsellv=false; else { int Check = 0; int IndFr = i-(CurrentBar+Right); for(int j=(i-StartIndex);j<=(i-CurrentBar);j++) { if(j!=IndFr) { if(L[j]>L[IndFr]) Check++; else break; } } if(Check==ResCheck) frsellv=true; else frsellv=false; } frsell1.Add(frsellv); } //shift for (int i = (Right+CurrentBar); i < L.Count; i++) { if(frsell1[i]==true) frsellv1=true; else frsellv1=false; frsell2.Add(frsellv1); } for (int i = L.Count-(Right+CurrentBar); i < L.Count; i++) { frsellv1=false; frsell2.Add(frsellv1); } return Fractal==0?frsell1:frsell2; } public IContext Context { get; set; } } }
и using System; using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.DataSource; using TSLab.Script.Helpers;
namespace FractalBuy_ { public class FractalBuy : IBar2BoolsHandler, IContextUses { [HandlerParameter(true, "5", Min = "1", Max = "20", Step = "1")] public int Right { get; set; } [HandlerParameter(true, "5", Min = "1", Max = "20", Step = "5")] public int Left { get; set; } [HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")] public int CurrentBar { get; set; }
[HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")] public int Fractal { get; set; } public IList<bool> Execute(ISecurity source) { var H = source.HighPrices; IList<bool> frbuy1 = new List<bool>(H.Count); IList<bool> frbuy2 = new List<bool>(H.Count); bool frbuyv =false; bool frbuyv1 =false; int StartIndex=Left+(Right+CurrentBar); int ResCheck=Left+Right; for (int i = 0; i < H.Count; i++) { if(i<StartIndex) frbuyv=false; else { int Check = 0; int IndFr = i-(CurrentBar+Right); for(int j=(i-StartIndex);j<=(i-CurrentBar);j++) { if(j!=IndFr) { if(H[j]<H[IndFr]) Check++; else break; } } if(Check==ResCheck) frbuyv=true; else frbuyv=false; } frbuy1.Add(frbuyv); } //shift for (int i = (Right+CurrentBar); i < H.Count; i++) { if(frbuy1[i]==true) frbuyv1=true; else frbuyv1=false; frbuy2.Add(frbuyv1); } for (int i = H.Count-(Right+CurrentBar); i < H.Count; i++) { frbuyv1=false; frbuy2.Add(frbuyv1); } return Fractal==0?frbuy1:frbuy2; } public IContext Context { get; set; } } }
|
|
Наверх
|
|
|
|
#17765 - Fri Dec 03 2010 08:14 PM
Re: Создание индикаторов в API
[Re: Stanley]
|
enthusiast
Registered: Mon Jun 21 2010
Записи: 283
|
Что значит ошибка - 'TSLab.Script.Handlers.CLK' не реализует член интерфейса 'TSLab.Script.Handlers.IDouble2DoubleHandler.Execute(System.Collections.Generic.IList<double>)' (CS0535)
|
|
Наверх
|
|
|
|
#19914 - Fri Jan 21 2011 09:47 AM
Re: Создание индикаторов на API
[Re: Nektodron]
|
stranger
Registered: Sat Sep 25 2010
Записи: 16
|
Здравствуйте! Нужна помощь в настройке (интеграции Visual Studio 10 )по подобию Sharp develop. С уважением, Василий.
|
|
Наверх
|
|
|
|
#37093 - Tue Feb 07 2012 09:23 PM
Re: Создание индикаторов на API
[Re: uprav]
|
enthusiast
Registered: Fri Jan 20 2012
Записи: 329
|
using System; using System.Collections.Generic; using TSLab.Script.Handlers;
public class Fish : IDouble1CalculatorHandler, IDoubleReturns // IDoubleInputs??? {
public double Execute(double source1) { double v2= source1; return (Math.Exp (2*v2) - 1) / (Math.Exp(2*v2) + 1);
}
} }
"Ни одна из перегрузок метода Execute не принимает 2 аргументов". Что я не так делаю?
Извините за глупый вопрос, просто я знаю синтаксис C, но плохо разбираюсь в ООП.
Отредактировано tslab.trader (Tue Feb 07 2012 09:40 PM)
_________________________
|
|
Наверх
|
|
|
|
|
|