Автор |
Сообщение |
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
Допустим, у меня имеется кривая.
Начало кривой задается следующим участком кода:
Код: |
BarsStart = 1+BarsSince(DateNum() == dd AND tt == TimeNum());
StartBar = LastValue( ValueWhen( DateNum() == dd AND tt == TimeNum(), BarIndex() ) );
|
Т.е. я в меню параметров задаю дату и время первого бара.
Возможно ли переписать сие так, чтобы стартовая свеча задавалась путем перетаскивания метки или чего-либо еще на графике? Ибо как тогда понять, для какой кривой мы будем обозначать старт "тычком".
Дополнительно отмечу, что кривых на графике может быть много, поэтому вариант с "просто тыкнуть на график для обозначения места старта" (такое я встречал) не пройдет. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно. Только я сейчас очень занят. Постараюсь написать как будет время. Напомни через недельку. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
000 писал(а): |
Можно. Только я сейчас очень занят. Постараюсь написать как будет время. Напомни через недельку. |
Хорошо. Буду с нетерпением ждать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
000 писал(а): |
Можно. Только я сейчас очень занят. Постараюсь написать как будет время. Напомни через недельку. |
Как и просил, напоминаю через неделю. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно так
Код: |
MouseOnBut =
GetCursorXPosition( 1 ) > 5 AND
GetCursorXPosition( 1 ) < 90 AND
GetCursorYPosition( 1 ) > 20 AND
GetCursorYPosition( 1 ) < 50;
LeftClik = GetCursorMouseButtons() == 9;
if(Nz(StaticVarGet("key")) == 0)
{
color = colorBlue;
if(MouseOnBut AND LeftClik)
{
color = colorRed;
StaticVarSet("key", 1);
}
}
else
{
color = colorRed;
if(MouseOnBut == 0 AND LeftClik)
{
color = colorBlue;
StaticVarSet("key", 0);
StaticVarSet("Data", GetCursorXPosition());
}
}
BarsStart = DateTime() == StaticVarGet("Data");
GfxSelectSolidBrush( color );
GfxRectangle( 5, 20, 90, 50 );
GfxSelectFont("Tahoma", 12, 700 );
GfxSetBkColor(color);
GfxSetTextColor(colorWhite);
GfxTextOut( "Кнопка", 15, 23 );
Plot(BarsStart, "", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
К сожалению не работает.
Давай я сделаю по другому, а то, возможно, непонятно выразился.
Есть такой код:
Код: |
Bars = 1 + BarsSince(SelectedValue(DateTime()) == DateTime());
StartBar = ValueWhen(SelectedValue(DateTime()) == DateTime(), BarIndex());
TodayVolume = Sum(V, Bars);
Avgp=(C+O+L+H)/4;
IIf (BarIndex() >= StartBar, VWAP = Sum (Avgp * V, Bars )/TodayVolume, Null);
VWAP = IIf(VWAP > 0 , VWAP, Null);
Plot (VWAP,"VWAP",colorGreen, styleThick);
|
Он рисует VWAP. Место старта выбирается кликом мыши на нужном баре.
Но, если мы хотим добавить еще один VWAP на график, то они накладываются друг на друга, поскольку клик мыши работает сразу для двух.
Вот как тут сделать возможность выбора? Типа метки над стартом каждого VWAP, чтобы за неё можно было перетащить или еще как-то? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот за это
Код: |
IIf (BarIndex() >= StartBar, VWAP = Sum (Avgp * V, Bars )/TodayVolume, Null); |
надо подвешивать за яйца.
ВОТ ТАК!!!
Код: |
VWAP = IIf (BarIndex() >= StartBar, Sum (Avgp * V, Bars )/TodayVolume, Null); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
MouseOnBut1 =
GetCursorXPosition( 1 ) > 5 AND
GetCursorXPosition( 1 ) < 90 AND
GetCursorYPosition( 1 ) > 20 AND
GetCursorYPosition( 1 ) < 50;
MouseOnBut2 =
GetCursorXPosition( 1 ) > 95 AND
GetCursorXPosition( 1 ) < 175 AND
GetCursorYPosition( 1 ) > 20 AND
GetCursorYPosition( 1 ) < 50;
LeftClik = GetCursorMouseButtons() == 9;
if(Nz(StaticVarGet("key1")) == 0)
{
color1 = colorBlue;
if(MouseOnBut1 AND LeftClik)
{
color1 = colorRed;
StaticVarSet("key1", 1);
}
}
else
{
color1 = colorRed;
if(MouseOnBut1 == 0 AND LeftClik)
{
color1 = colorBlue;
StaticVarSet("key1", 0);
StaticVarSet("Data1", GetCursorXPosition());
}
}
if(Nz(StaticVarGet("key2")) == 0)
{
color2 = colorBlue;
if(MouseOnBut2 AND LeftClik)
{
color2 = colorRed;
StaticVarSet("key2", 1);
}
}
else
{
color2 = colorRed;
if(MouseOnBut2 == 0 AND LeftClik)
{
color2 = colorBlue;
StaticVarSet("key2", 0);
StaticVarSet("Data2", GetCursorXPosition());
}
}
BarsStart1 = DateTime() == StaticVarGet("Data1");
BarsStart2 = DateTime() == StaticVarGet("Data2");
GfxSelectSolidBrush( color1 );
GfxRectangle( 5, 20, 90, 50 );
GfxSelectFont("Tahoma", 12, 700 );
GfxSetBkColor(color1);
GfxSetTextColor(colorWhite);
GfxTextOut( "Кнопка", 15, 23 );
GfxSelectSolidBrush( color2 );
GfxRectangle( 95, 20, 175, 50 );
GfxSelectFont("Tahoma", 12, 700 );
GfxSetBkColor(color2);
GfxSetTextColor(colorWhite);
GfxTextOut( "Кнопка", 105, 23 );
VWAP1 = IIf (DateTime() >= StaticVarGet("Data1"), MA(C, 10), Null);
VWAP2 = IIf (DateTime() >= StaticVarGet("Data2"), MA(C, 20), Null);
Plot(VWAP1, "", colorRed);
Plot(VWAP2, "", colorGreen);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
Да, интересная реализация. Спасибо.
Правда не совсем как я хотел. Тут у нас заранее определено количество кривых. А я их кидаю на график время от времени. Их может быть и 3, и одна... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно сделать так, чтобы когда кидаешь добавлялась новая кнопка... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
000 писал(а): |
Можно сделать так, чтобы когда кидаешь добавлялась новая кнопка... |
Вот это вариант. Это интересно. И чтобы не перекрывали друг друга. Поможешь? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Совести у тебя нет ))))
Код: |
Shift = Param("Shift", 0, 0, 500, 100, 100 );
if(Shift==0)
i = "1";
else if(Shift==100)
i = "2";
else if(Shift==200)
i = "3";
else if(Shift==300)
i = "4";
else
i = "5";
MouseOnBut =
GetCursorXPosition( 1 ) > Shift + 10 AND
GetCursorXPosition( 1 ) < Shift + 90 AND
GetCursorYPosition( 1 ) > 20 AND
GetCursorYPosition( 1 ) < 50;
LeftClik = GetCursorMouseButtons() == 9;
if(Nz(StaticVarGet("key"+i)) == 0)
{
color = colorBlue;
if(MouseOnBut AND LeftClik)
{
color = colorRed;
StaticVarSet("key"+i, 1);
}
}
else
{
color = colorRed;
if(MouseOnBut == 0 AND LeftClik)
{
color = colorBlue;
StaticVarSet("key"+i, 0);
StaticVarSet("Data"+i, GetCursorXPosition());
}
}
BarsStart1 = DateTime() == StaticVarGet("Data"+i);
GfxSelectSolidBrush( color );
GfxRectangle( Shift + 10, 20, Shift + 90, 50 );
GfxSelectFont("Tahoma", 12, 700 );
GfxSetBkColor(color);
GfxSetTextColor(colorWhite);
GfxTextOut( "Кнопка", Shift + 20, 23 );
VWAP1 = IIf (DateTime() >= StaticVarGet("Data"+i), MA(C, Shift+1), Null);
Plot(VWAP1, "", ParamColor("Color", colorRed), styleThick);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|