У вас не стоит Flash Player
Настройки
#33556 - Mon Nov 21 2011 01:45 PM Сравнение с текущей ценой.
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
Вопросов несколько:
1. Какой функцией можно получить и присвоить переменной текущею цену?
2. Если невозможно получить текущею цену напрямую, возможно есть еще какие то способы?
3. Возможно у кого то завалялся кусочек кода для поиска вершины равной текущей цене.

Нашел такие "свойства" как:
Ask Цена спроса
Bid Цена предложения

По скромным описаниям к ним что они точно дают не понял. Предположу что они обозначают "ближайшие" цены друг у другу в стакане (серединка стакана). Это так?

Решил написать всю задачу которую я перед собой поставил, возможно кто-то поможет. Вот примерно то что я ищу.


Условия таковы:
1. Точка 2 хай за 50 баров
2. Точка 1 ниже точки 3, но не более чем на 50% от расстояния от точки 1 до точки 2.
3. Вход по пробитию хая (красной верхней линии).
4. Выход на открытии пятого бара.

Основная проблема возникла с определением точки отсчета для все модели... Может быть у кого будут какие мысли на этот счет?

P.S. Можно в личку обсудить вознаграждение...


Attachments
1321890481-clip-91kb.jpg (186 downloads)



Отредактировано Webert (Mon Nov 21 2011 08:00 PM)

Наверх
#33725 - Thu Nov 24 2011 04:02 PM Re: Сравнение с текущей ценой. [Re: Webert]
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
Вот получилось немного написать (с ошибками):
Click to reveal..

using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;

namespace TSLab.Sistema
{
public class Sistema : IExternalScript
{
public bool bBuy, bSell;

public bool BuyAndSell(ISecurity source, int bar)
{

#region Введение переменных

bool bBuyAndSell = false; // Проверка наличия или отсутсвия модели
int n = 1; // Переменная для циклов
int x = 0; // Переменная для циклов
int otstup = 20; // Отступ для поиска точки 1

double dT1, dT2, dT3; // Уровни точек
int iT1, iT2, iT3; // Номера баров точек

#endregion

#region Поиск модели

while (x<=20)
{
// Ищем точку 3
if (source.LowPrices[bar-n]<=source.LowPrices[bar-x])
{
n = n + 1;
x = x + 1;
continue;
}
// Ищем точку 1
PoiskT1:
if (source.LowPrices[bar-x-otstup]>source.LowPrices[bar-x])
{
if (otstup>60)
{
break;
}
otstup = otstup + 1;
continue;
}
// Ищем точку 2
int ss = n + 1;
for (int pp = n + 1; pp<otstup+n; ++pp)
{
if (source.HighPrices[bar-pp]>source.HighPrices[bar-ss])
{
ss = pp;
}
}
// Теперь имеем ss - это номер бара точки 2, х - бара точки 3, x+otstup - бара точки 1
iT1 = bar-x-otstup;
iT2 = bar-ss;
iT3 = bar-x;
dT1 = source.LowPrices[iT1];
dT2 = source.HighPrices[iT2];
dT3 = source.LowPrices[iT3];
if (dT2-630<dT3)
{
n = n + 1;
x = x + 1;
continue;
}
if (dT2-1000<dT1)
{
otstup = otstup + 1;
goto PoiskT1; //Возвращаемся к поиску точки 1
}
if (0.37*dT2-dT1>dT3-dT1)
{
otstup = otstup + 1;
goto PoiskT1; //Возвращаемся к поиску точки 1
}
bBuyAndSell = true;
break;
}

#endregion

return bBuyAndSell; // Возвращаем ответ на вопрос о постановке стопа
}

public virtual void Execute(IContext ctx, ISecurity source)
{
bool LongCond;
int StartBar = 0;
for (int bar = StartBar; bar < source.Bars.Count; bar++)
{
LongCond = BuyAndSell(source, bar);
}
}
}

}


На сколько я понял скрипт начинает выполняться со строки public virtual void Execute. При попытке старта скрипта (я понимаю что он ничего не делает кроме как обращается к функции) выдаеться ошибка:
Click to reveal..

15:51:59.45 120 System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в System.Collections.Generic.List`1.get_Item(Int32 index)
в TSLab.Sistema.Sistema.BuyAndSell(ISecurity source, Int32 bar) в c:\Users\Webert\Documents\SharpDevelop Projects\a1\a1\Class1.cs:строка 34
в TSLab.Sistema.Sistema.Execute(IContext ctx, ISecurity source) в c:\Users\Webert\Documents\SharpDevelop Projects\a1\a1\Class1.cs:строка 98
в TSLab.User.Script.Execute(IContext context, ISecurity var0) в c:\Users\Webert\AppData\Local\TSLab\TSLab\temp\code22.cs:строка 39



Подскажите что не так? Некорректно обращаюсь к функции? Или в саймой функции допущена ошибка? (упрощать скрипт буду позже щас главное что бы он заработал).
P.S. Спосибо за помощь.

Наверх
#33730 - Thu Nov 24 2011 05:44 PM Re: Сравнение с текущей ценой. [Re: Webert]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Ошибка в том, что вы не проверяете, что индекс может стать отрицательный. Например тут: source.LowPrices[bar-x-otstup]>source.LowPrices[bar-x]

Наверх
#33732 - Thu Nov 24 2011 07:10 PM Re: Сравнение с текущей ценой. [Re: Nektodron]
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
Хм... Я примерно понял о чем вы пишите. Предположу что проще всего подобного избежать присвоив значение индекса переменной а потом уже сравнивать. Правильно?

Наверх
#33733 - Thu Nov 24 2011 07:54 PM Re: Сравнение с текущей ценой. [Re: Webert]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Да, именно так. Либо переработать алгоритм так, чтобы этого не происходило.

Наверх
#33734 - Thu Nov 24 2011 09:25 PM Re: Сравнение с текущей ценой. [Re: Nektodron]
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
Ок попробую как вы сказали. Но у меня возник вопрос как индекс может уйти в минус если мы сравниваем значения ничего не вычитая (не производя математических вычислений).

Только что перезапустил Шарп девелопер и ТСлаб и хз но скрипт проглотила без ошибки.... Пока вопрос решился сам собой)


Отредактировано Webert (Thu Nov 24 2011 09:31 PM)

Наверх
#33735 - Thu Nov 24 2011 10:25 PM Re: Сравнение с текущей ценой. [Re: Webert]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Originally Posted By: Webert
Ок попробую как вы сказали. Но у меня возник вопрос как индекс может уйти в минус если мы сравниваем значения ничего не вычитая (не производя математических вычислений).

Только что перезапустил Шарп девелопер и ТСлаб и хз но скрипт проглотила без ошибки.... Пока вопрос решился сам собой)


Quote:

if (source.LowPrices[bar-n]<=source.LowPrices[bar-x])
...
if (source.LowPrices[bar-x-otstup]>source.LowPrices[bar-x])
...
if (source.HighPrices[bar-pp]>source.HighPrices[bar-ss])

Семь минусов насчитал.
"Пилите, Шура, она золотая" (с)
grin
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#33736 - Thu Nov 24 2011 10:31 PM Re: Сравнение с текущей ценой. [Re: jhgjrht]
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
Я имел ввиду не произвожу математических действий со значением индекса...)

Наверх
#33752 - Fri Nov 25 2011 11:25 AM Re: Сравнение с текущей ценой. [Re: Webert]
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
Click to reveal..
public double Tochka2(ISecurity source, int bar)
{
int n = 1;
int x = 0;
int otstup = 20;
int ss, pp;
double dT2;

while (x<=20)
{
if (source.LowPrices[bar-n]<=source.LowPrices[bar-x])
{
n = n + 1;
x = x + 1;
continue;
}
if (source.LowPrices[bar-x-otstup]>source.LowPrices[bar-x])
{
if (otstup>60)
{
break;
}
otstup = otstup + 1;
continue;
}
ss = n + 1;
pp = n + 1;
while (pp<otstup+n)
{
if (source.HighPrices[bar-pp]>source.HighPrices[bar-ss])
{
ss = pp;
}
pp = pp + 1;
}
dT2 = source.HighPrices[bar-ss];
break;
}
return dT2;
}

Подскажите плиз почему до команды return dT2 не доходит значение переменной.

Наверх
#33795 - Sat Nov 26 2011 03:54 PM Re: Сравнение с текущей ценой. [Re: Webert]
Webert Offline
stranger

Registered: Thu Nov 10 2011
Записи: 14
С предыдущим постом разобрался (Команда break выводила из цикла раньше чем переменная получала значение).

Встал вопрос можно ли "подписать",изменить цвет бара зная его номер?(такой команды не смог найти в документации).

Наверх
#33858 - Mon Nov 28 2011 02:10 PM Re: Сравнение с текущей ценой. [Re: Webert]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
можно, если график сделан внутри скрипта.
Функция AddList выдает переменную типа IGraphList
у которой есть методы изменения цвета

Наверх


Moderator:  ViL, sar