Автор |
Сообщение |
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
Добрый вечер, есть ли индикатор, который позволяет наложить друг на друга 4 инструмента, таким образом, чтобы цены отображались в процентом изменении? А также, чтобы можно было указывать точку отсчета, от которой будут считаться изменения цен в процентах?
Вот пример, как это выглядит в thinkorswim, указаны 3 инструмента: золото, серебро и медь
Uploaded with ImageShack.us |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
Большое спасибо, буду разбираться! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
Товарищи, поставил для фьючерса сп500 регулярную сессию(9:30-16:00 NY). При наложении индикатора, почему-то нулевая точка береться из глобекс сессии, вместо регулярной. Как это можно исправить? Прикладываю скриншот.
Uploaded with ImageShack.us |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если я правильно понял проблему то.
Дело в том, что при получении символа при помощи foreign, "внешний" символ занимает ячейки основного символа и если у основного символа нет бара с временем X, а у внешнего есть, то этот бар у внешнего пропадет.
Т.е. Основной символ торгуется с 10ч. символ полученный по foreign с 8 часов. Бары символа foreign с 8 до 10 отображаться не будут. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
000, понятно, спасибо. Решил проблему - загрузкой ETF на индексы |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
Кстати, не подскажите, что надо дополнительно прописать в коде индикатора, чтобы в настройках, кроме "Start Data" появилась еще опция "End Data"?
Uploaded with ImageShack.us |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А что эта end_data должна делать? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
Просто показывать цену за промежуток промежуток, например с 01.01.2001 по 01.01.2001(чисто один день) или за неделю например с 01.01.2001 по 01.05.2001. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Типа так?
Код: |
///////////////////////////////
//
// ИНДЕКС РЫНКА. ОТНОСИТЕЛЬНАЯ СИЛА АКЦИЙ
//
// 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
|
|
Посмотреть профиль Отправить личное сообщение |
|
Brcln9301
Зарегистрирован: 03.01.2012
Сообщения: 14
|
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
|
Если нужно обрезать лишние свечи, то это запросто.
В настройках Базы данных поставь нужное время начала сессии.
ТУТ смотри закладку Intraday settings |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Я сократил для себя пример кода до одной пары, вроде подчистил ненужное мне. Не могу понять что мне сделать, чтобы график строился не от первого видимого бара, а именно от стартовой даты, независимо от масштабирования окна? Или есть другой способ посчитать % изменение инструмента от бара к бару?
Спасибо.
Код: |
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
|
Изначально сделал так, но не знаю как аккумулировать в глобальную переменную, соотв код не работает, т.к. не вызывается прошлое значение 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); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|