Автор |
Сообщение |
Caravancheg
Зарегистрирован: 02.08.2008
Сообщения: 46
|
Поскольку график цены показывается в абсолютных цифрах, масштаб постоянно меняется (в зависимости от предистории).
Иными словами свечка высотой в 1 см даже на одном инструменте разное обозначает.
Мог ли я как-то в ами узнать разницу между двумя ценами именно в процентах?
Типа тыкнул одну точку, потом вторую, а она взяла первую за 100% и показала, что вторая 80% (120%...)
Лениво в калькулятор бегать... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно написать несложный код который будет показывать % изменение цены закрытия от начала, до конца выделенного диаппазона |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Caravancheg
Зарегистрирован: 02.08.2008
Сообщения: 46
|
000 писал(а): |
Можно написать несложный код который будет показывать % изменение цены закрытия от начала, до конца выделенного диапазона |
И правда AFL довольно мощный язык. Думал анализ, какая кнопка мыши нажата, сложной окажется. Ан нет. Как-то само собой получается.
Моя первая прога на AFL:
gmb = GetCursorMouseButtons();
cyp = GetCursorYPosition();
if( gmb == 9 )
if (StaticVarGet( "ButN" ))
{
StaticVarSet( "L2", cyp);
StaticVarSet( "ButN", 0);
}
else
{
StaticVarSet( "L1", cyp);
StaticVarSet( "L2", 0);
StaticVarSet( "ButN", 1);
}
Price1 = StaticVarGet( "L1" );
Price2 = StaticVarGet( "L2" );
Diff = Price2-Price1;
if (! (IsEmpty(Price1) OR IsEmpty(Price2)) )
if (Price1*Price2 > 0)
{
Ratio = round(Diff/Price1*1000)/10;
Diff=round(Diff*100)/100;
GfxTextOut(""+Diff+"руб : "+Ratio+"% ("+Price1+"\/"+Price2+")",1,30);
}
else
GfxTextOut(""+Price1+"\/",1,30);
Вот только пока не понял как отлаживать.
После изменения кода удаляю индиктор и кидаю на график снова.
Может можно "обновлять" его на графике? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Begin = BeginValue(C);
End = EndValue(C);
change = 100 * (End - Begin)/Begin;
Title = Name() + " " + WriteVal(Change) + "%";
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Или можно использовать коментарий
Код: |
WriteVal( BeginValue( DateTime() ), formatDateTime );
WriteVal( EndValue( DateTime() ), formatDateTime );
"Precentage change of close is " +
WriteVal( 100 * (EndValue( Close ) - BeginValue( Close ))/BeginValue( Close ) ) + "%";
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Обновленная версия кода с учетом лонгов и шортов:
Код: |
_SECTION_BEGIN("Price");
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();
Begin = BeginValue(C);
End = EndValue(C);
change1 = 100 * (End - Begin)/Begin;
change2 = 100 * (Begin - End)/END;
Title = "LONG= " + WriteVal(Change1) + "%" + " SHORT=" + WriteVal(Change2) + "%";
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Хочу сделать подобную штуку для объемов, те чтобы можно было легко сравнить объемы на росте и объемы на падении, выделив два диапазона
Общий принцип примерно понятен, только не знаю как сделать саму функцию суммирования объема от точки 1 до точки 2
Вот заготовка для кода (не моя), думаю ее будет легдо подправить. Кто может помочь?
Код: |
SetChartOptions(0,chartShowDates);
Proc = Param("%", 50, 1, 100, 1);
FirstBar = BeginValue(BarIndex());
LastBar = EndValue(BarIndex());
Range = LastBar - FirstBar;
HighlightBar = BarIndex() == LastBar + round(Range*Proc/100);
Text = " ВЫБРАНО " + NumToStr(Range, format = 1) + " БАРОВ ";
Yposition = LastValue(ValueWhen(BarIndex() == LastBar, H + (H-L)*2));
Plot(C, "", colorBlack, styleCandle);
PlotText(text, LastBar, YPosition, colorBlack, colorLightYellow);
PlotShapes(shapeUpTriangle *HighlightBar, colorRed, 0, H, 12);
PlotShapes(shapeDownTriangle*HighlightBar, colorRed, 0, L, 12);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Один из вариантов
Код: |
SetChartOptions(0,chartShowDates); // показывать дату
FirstBar = BeginValue(BarIndex()) == BarIndex(); // 1 в начале выделенного диапазона
LastBar = EndValue(BarIndex()) == BarIndex(); // 1 в конце выделенного диапазона
Range = Flip(FirstBar, LastBar); // 1 внутри выделенного диапазона
CumVolume = Cum(Nz(V)*Range);
Title = " Объем на выбранном диаппазоне " + NumToStr(CumVolume, format = 1);
Plot(C, "", colorBlack, styleCandle);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
|
Посмотреть профиль Отправить личное сообщение |
|
Dzin
Зарегистрирован: 03.03.2009
Сообщения: 11
Откуда: Челяба
|
Слизал, пользуюсь, кланяюсь |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|