Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Индикатор процентного изменения цены Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Ср Май 09, 2012 1:06 am Ответить с цитатой Вернуться к началу

Добрый вечер, есть ли индикатор, который позволяет наложить друг на друга 4 инструмента, таким образом, чтобы цены отображались в процентом изменении? А также, чтобы можно было указывать точку отсчета, от которой будут считаться изменения цен в процентах?

Вот пример, как это выглядит в thinkorswim, указаны 3 инструмента: золото, серебро и медь
Image

Uploaded with ImageShack.us
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Май 09, 2012 7:19 am Ответить с цитатой Вернуться к началу

http://www.amisite.ru/afl/ind/0008.htm

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Ср Май 09, 2012 1:54 pm Ответить с цитатой Вернуться к началу

Большое спасибо, буду разбираться!
Посмотреть профиль Отправить личное сообщение
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Пт Май 11, 2012 10:37 pm Ответить с цитатой Вернуться к началу

Товарищи, поставил для фьючерса сп500 регулярную сессию(9:30-16:00 NY). При наложении индикатора, почему-то нулевая точка береться из глобекс сессии, вместо регулярной. Как это можно исправить? Прикладываю скриншот.
Image

Uploaded with ImageShack.us
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Май 12, 2012 12:55 pm Ответить с цитатой Вернуться к началу

Если я правильно понял проблему то.
Дело в том, что при получении символа при помощи foreign, "внешний" символ занимает ячейки основного символа и если у основного символа нет бара с временем X, а у внешнего есть, то этот бар у внешнего пропадет.
Т.е. Основной символ торгуется с 10ч. символ полученный по foreign с 8 часов. Бары символа foreign с 8 до 10 отображаться не будут.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Сб Май 12, 2012 1:00 pm Ответить с цитатой Вернуться к началу

000, понятно, спасибо. Решил проблему - загрузкой ETF на индексы
Посмотреть профиль Отправить личное сообщение
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Сб Май 12, 2012 6:28 pm Ответить с цитатой Вернуться к началу

Кстати, не подскажите, что надо дополнительно прописать в коде индикатора, чтобы в настройках, кроме "Start Data" появилась еще опция "End Data"?
Image

Uploaded with ImageShack.us
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Май 13, 2012 7:26 am Ответить с цитатой Вернуться к началу

А что эта end_data должна делать?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Вс Май 13, 2012 2:16 pm Ответить с цитатой Вернуться к началу

Просто показывать цену за промежуток промежуток, например с 01.01.2001 по 01.01.2001(чисто один день) или за неделю например с 01.01.2001 по 01.05.2001.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Май 14, 2012 12:08 am Ответить с цитатой Вернуться к началу

Типа так?
Код:

///////////////////////////////
//
// ИНДЕКС РЫНКА. ОТНОСИТЕЛЬНАЯ СИЛА АКЦИЙ
//
// 1. Суммируется процентное изменение на каждом следующем фрейме.
// 2. Индекс может содержать до 10 символов Symbol 1 - Symbol 0 // 3. Предусмотрено два алгоритма.
// Пропорциональный. Все бумаги входящие в индекс влияют на него равномерно
// Взвешенный по объему (Volume weighted).
// Вес бумаги определяется в зависимости от объема торгов за весть период расчета индекса.
// 4. Символы Symbol 10 - Symbol 12 в расчете не участвуют и предназначены только для сравнения с индексом
//
// OOO
// www.amisite.ru
//
///////////////////////////////

dat = ParamDate("Start Data", "01.01.2000", 0);
enddat = ParamDate("End Data", "01.01.2020", 0);

symb1 = ParamStr("Symbol 1","");
symb1S = ParamToggle("Show symbol 1?", "No|Yes", 0);
symb1C = ParamColor("color symbol 1", colorBlue);
symb2 = ParamStr("Symbol 2", "");
symb2S = ParamToggle("Show symbol 2?", "No|Yes", 0);
symb2C = ParamColor("color symbol 2", colorBlue);
symb3 = ParamStr("Symbol 3", "");
symb3S = ParamToggle("Show symbol 3?", "No|Yes", 0);
symb3C = ParamColor("color symbol 3", colorBlue);
symb4 = ParamStr("Symbol 4", "");
symb4S = ParamToggle("Show symbol 4?", "No|Yes", 0);
symb4C = ParamColor("color symbol 4", colorBlue);
symb5 = ParamStr("Symbol 5", "");
symb5S = ParamToggle("Show symbol 5?", "No|Yes", 0);
symb5C = ParamColor("color symbol 5", colorBlue);
symb6 = ParamStr("Symbol 6", "");
symb6S = ParamToggle("Show symbol 6?", "No|Yes", 0);
symb6C = ParamColor("color symbol 6", colorBlue);
symb7 = ParamStr("Symbol 7", "");
symb7S = ParamToggle("Show symbol 7?", "No|Yes", 0);
symb7C = ParamColor("color symbol 7", colorBlue);
symb8 = ParamStr("Symbol 8", "");
symb8S = ParamToggle("Show symbol 8?", "No|Yes", 0);
symb8C = ParamColor("color symbol 8", colorBlue);
symb9 = ParamStr("Symbol 9", "");
symb9S = ParamToggle("Show symbol 9?", "No|Yes", 0);
symb9C = ParamColor("color symbol 9", colorBlue);
symb0 = ParamStr("Symbol 0", "");
symb0S = ParamToggle("Show symbol 0?", "No|Yes", 0);
symb0C = ParamColor("color symbol 0", colorBlue);
symb10 = ParamStr("Symbol 10", "");
symb10C = ParamColor("color symbol 10", colorWhite);
symb11 = ParamStr("Symbol 11", "");
symb11C = ParamColor("color symbol 11", colorWhite);
symb12 = ParamStr("Symbol 12", "");
symb12C = ParamColor("color symbol 12", colorWhite);

Vol = ParamToggle("Volume weighted", "No|Yes", 0);
spread = ParamToggle("spread", "No|Yes", 0);

num =
(symb1 != "") +
(symb2 != "") +
(symb3 != "") +
(symb4 != "") +
(symb5 != "") +
(symb6 != "") +
(symb7 != "") +
(symb8 != "") +
(symb9 != "") +
(symb0 != "");

d = DateNum();
if(dat < d[1])
 dat = ValueWhen(Status("firstvisiblebarindex") == BarIndex(), DateNum());

s1 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb1, "Close"), 1))));
s2 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb2, "Close"), 1))));
s3 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb3, "Close"), 1))));
s4 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb4, "Close"), 1))));
s5 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb5, "Close"), 1))));
s6 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb6, "Close"), 1))));
s7 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb7, "Close"), 1))));
s8 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb8, "Close"), 1))));
s9 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb9, "Close"), 1))));
s0 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb0, "Close"), 1))));

s10 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb10, "Close"), 1))));
s11 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb11, "Close"), 1))));
s12 = Cum(IIf(DateNum() < dat OR DateNum() > enddat, 0, Nz(ROC(Foreign( symb12, "Close"), 1))));

if(Vol)
{
    V1 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb1, "Close")*Foreign( symb1, "volume"), 1)))));
    V2 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb2, "Close")*Foreign( symb2, "volume"), 1)))));
    V3 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb3, "Close")*Foreign( symb3, "volume"), 1)))));
    V4 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb4, "Close")*Foreign( symb4, "volume"), 1)))));
    V5 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb5, "Close")*Foreign( symb5, "volume"), 1)))));
    V6 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb6, "Close")*Foreign( symb6, "volume"), 1)))));
    V7 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb7, "Close")*Foreign( symb7, "volume"), 1)))));
    V8 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb8, "Close")*Foreign( symb8, "volume"), 1)))));
    V9 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb9, "Close")*Foreign( symb9, "volume"), 1)))));
    V0 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb0, "Close")*Foreign( symb0, "volume"), 1)))));

    SumV = V1+V2+V3+V4+V5+V6+V7+V8+V9+V0;

    k1 = V1/SumV;
    k2 = V2/SumV;
    k3 = V3/SumV;
    k4 = V4/SumV;
    k5 = V5/SumV;
    k6 = V6/SumV;
    k7 = V7/SumV;
    k8 = V8/SumV;
    k9 = V9/SumV;
    k0 = V0/SumV;

    indx = Cum(
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb1, "Close"), 1)))*k1+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb2, "Close"), 1)))*k2+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb3, "Close"), 1)))*k3+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb4, "Close"), 1)))*k4+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb5, "Close"), 1)))*k5+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb6, "Close"), 1)))*k6+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb7, "Close"), 1)))*k7+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb8, "Close"), 1)))*k8+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb9, "Close"), 1)))*k9+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb0, "Close"), 1)))*k0);
}
else
    indx = (s1+s2+s3+s4+s5+s6+s7+s8+s9+s0)/num;

if(spread)
{
    s1 = s1-indx;
    s2 = s2-indx;
    s3 = s3-indx;
    s4 = s4-indx;
    s5 = s5-indx;
    s6 = s6-indx;
    s7 = s7-indx;
    s8 = s8-indx;
    s9 = s9-indx;
    s0 = s0-indx;
    s10 = s10-indx;
    s11 = s11-indx;
    s12 = s12-indx;
    indx = 0;
}
Plot(indx, "index", colorBlack, styleThick);

if(symb1S)
{  Plot(s1, symb1, symb1C);
   PlotText(symb1, BarCount, LastValue(s1), symb1C);}
if(symb2S)
{  Plot(s2, symb2, symb2C);
   PlotText(symb2, BarCount, LastValue(s2), symb2C);}
if(symb3S)
{  Plot(s3, symb3, symb3C);
   PlotText(symb3, BarCount, LastValue(s3), symb3C);}
if(symb4S)
{  Plot(s4, symb4, symb4C);
   PlotText(symb4, BarCount, LastValue(s4), symb4C);}
if(symb5S)
{  Plot(s5, symb5, symb5C);
   PlotText(symb5, BarCount, LastValue(s5), symb5C);}
if(symb6S)
{  Plot(s6, symb6, symb6C);
   PlotText(symb6, BarCount, LastValue(s6), symb6C);}
if(symb7S)
{  Plot(s7, symb7, symb7C);
   PlotText(symb7, BarCount, LastValue(s7), symb7C);}
if(symb8S)
{  Plot(s8, symb8, symb8C);
   PlotText(symb8, BarCount, LastValue(s8), symb8C);}
if(symb9S)
{  Plot(s9, symb9, symb9C);
   PlotText(symb9, BarCount, LastValue(s9), symb9C);}
if(symb0S)
{  Plot(s0, symb0, symb0C);
   PlotText(symb0, BarCount, LastValue(s0), symb0C);}
if(symb10 != "")
{  Plot(s10, symb10, symb10C);
   PlotText(symb10, BarCount, LastValue(s10), symb10C);}
if(symb11 != "")
{  Plot(s11, symb11, symb11C);
   PlotText(symb11, BarCount, LastValue(s11), symb11C);}
if(symb12 != "")
{  Plot(s12, symb12, symb12C);
   PlotText(symb12, BarCount, LastValue(s12), symb12C);}

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Пн Май 14, 2012 12:27 am Ответить с цитатой Вернуться к началу

Да, именно так, спасибо!
Посмотреть профиль Отправить личное сообщение
Brcln9301



Зарегистрирован: 03.01.2012
Сообщения: 14

СообщениеДобавлено: Ср Май 23, 2012 7:47 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Если я правильно понял проблему то.
Дело в том, что при получении символа при помощи foreign, "внешний" символ занимает ячейки основного символа и если у основного символа нет бара с временем X, а у внешнего есть, то этот бар у внешнего пропадет.
Т.е. Основной символ торгуется с 10ч. символ полученный по foreign с 8 часов. Бары символа foreign с 8 до 10 отображаться не будут.


Всё-таки можно это исправить в коде? Чтобы можно было указывать нулевую точку отсчета по времени, например 8:30 21.05.2012 - нулевая точка начнется в 8:30, даже несмотря на то что первый бар в этот день был в 7:00.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Май 23, 2012 10:08 pm Ответить с цитатой Вернуться к началу

Если нужно обрезать лишние свечи, то это запросто.
В настройках Базы данных поставь нужное время начала сессии.
ТУТ смотри закладку Intraday settings

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Чт Май 24, 2012 6:25 pm Ответить с цитатой Вернуться к началу

Я сократил для себя пример кода до одной пары, вроде подчистил ненужное мне. Не могу понять что мне сделать, чтобы график строился не от первого видимого бара, а именно от стартовой даты, независимо от масштабирования окна? Или есть другой способ посчитать % изменение инструмента от бара к бару?
Спасибо.
Код:
dat = ParamDate("Start Data", "01.01.2009", 0);
symb1 = ParamStr("Symbol 1",""); symb1S = ParamToggle("Show symbol 1?", "No|Yes", 0); symb1C = ParamColor("color symbol 1", colorBlue);
symb2 = ParamStr("Symbol 2", ""); symb2S = ParamToggle("Show symbol 2?", "No|Yes", 0); symb2C = ParamColor("color symbol 2", colorBlue);
spread = ParamToggle("spread", "No|Yes", 0);

s1 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb1, "Close"), 1))));
s2 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb2, "Close"), 1))));
indx = (s1+s2)/2;

if(spread) {s1 = s1-indx; s2 = s2-indx; indx = 0;}

Plot(indx, "index", colorBlack, styleThick);

if(symb1S){Plot(s1, symb1, symb1C); PlotText(symb1, BarCount, LastValue(s1), symb1C);}
if(symb2S){Plot(s2, symb2, symb2C); PlotText(symb2, BarCount, LastValue(s2), symb2C);}
[/code]
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Чт Май 24, 2012 6:30 pm Ответить с цитатой Вернуться к началу

Изначально сделал так, но не знаю как аккумулировать в глобальную переменную, соотв код не работает, т.к. не вызывается прошлое значение spred. помогите плз.

Код:
Ticker1 =   ParamStr( "Symbol1", "SBER");
Ticker2 =   ParamStr( "Symbol2", "GAZP");
I1 =      Foreign(Ticker1, "Close");
I2 =       Foreign(Ticker2, "Close");

Mom1 = (I1 - Ref(I1, -1))/Ref(I1, -1)*100;
Mom2 = (I2 - Ref(I2, -1))/Ref(I2, -1)*100;
Moms = Mom1 - Mom2;
spred=Moms+Ref(spred,-1);
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen