Автор |
Сообщение |
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
000 писал(а): |
Держи. Полностью готовый рабочий код.
...
|
Добрый день!
Приобщаюсь к AMI, пока в основном по материалам сайта.
По данной теме возник затык: график с нанесенными стрелками появляется, но при попытке прокрутить его выдает ошибку"Error 10. Subscript out o range. You must not access array elements outside 0 (BarCount - 1) range.
Версия Ami - 5.20.
Сам пока не смогу разобраться, буду признателен за помощь... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Интересно, какой именно массив переполняется?
Попробуй в начало кода вставить строку
Код: |
SetBarsRequred(sbrAll, sbrAll); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
000 писал(а): |
Попробуй... SetBarsRequired... |
... Помогло, спасибо!
Возможно, база великовата - порядка 2,5 млн. тиков. Но теперь работает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
iuiu
Зарегистрирован: 31.01.2015
Сообщения: 25
|
000 писал(а): |
Держи. Полностью готовый рабочий код.
Код: |
/*
Формат файла сделок
Ticker,Date,Time,Operation,Price,Volume
Пример
ROSN,21/12/2010,17:30:00,BUY,221,5
ROSN,20/12/2010,11:30:00,BUY,220,1
ROSN,22/12/2010,14:30:00,BUY,220,1
ROSN,22/12/2010,14:45:00,SELL,220,1
ROSN,22/12/2010,15:45:00,SHORT,222,1
ROSN,22/12/2010,18:30:00,SHORT,222,1
ROSN,23/12/2010,14:45:00,COVER,223,6
*/
fh = fopen( "C:/111.txt", "r");
if( fh )
{
Buy = Sell = Short = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = 0;
dt = DateTime();
while(!feof(fh))
{
s = fgets(fh);
if(StrExtract(s, 0) == Name())
{
dtStr = StrToDateTime(StrExtract(s,1) + " " + StrExtract(s,2));
bi = LastValue(ValueWhen(dtStr > Ref(dt, -1) AND dtStr <= dt, BarIndex()));
v0 = StrToNum(StrExtract(s,5));
p0 = StrToNum(StrExtract(s,4));
act = StrExtract(s,3);
if(act=="BUY")
{
Buy[bi] = 1;
BuyPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*0.995, colorBlack);
VolBuy[bi] = V0;
}
else if(act=="SELL")
{
Sell[bi] = 1;
SellPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*1.005, colorBlack);
}
else if(act=="SHORT")
{
Short[bi] = 1;
ShortPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*1.005, colorRed);
VolShort[bi] = V0;
}
else if(act=="COVER")
{
Cover[bi] = 1;
CoverPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*0.995, colorRed);
}
}
}
fclose( fh );
}
Plot(C, "", colorBlack, styleCandle);
PlotShapes(IIf(Buy,shapeUpArrow,0),colorGreen, 0, BuyPrice);
PlotShapes(IIf(Sell,shapeHollowDownArrow, 0),colorGreen, 0, SellPrice);
PlotShapes(IIf(Short,shapeDownArrow,0),colorRed, 0, ShortPrice);
PlotShapes(IIf(Cover,shapeHollowUpArrow, 0),colorRed, 0, CoverPrice);
|
|
Все супер считывает и рисует, но блин , на следующем баре...такое ощущение, что время бара определяется по его окончании, а не по первому тику, как я задал в настройках Intraday -> time of FIRST tick inside bar. Подскажите, это в коде нельзя поправить или мне тупо на минуту сдвинуть время сделки в файле...? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если не ошибаюсь, то вот тут
Код: |
bi = LastValue(ValueWhen(dtStr > Ref(dt, -1) AND dtStr <= dt, BarIndex())); |
ищется бар. Меняй вот эти условия dtStr > Ref(dt, -1) AND dtStr <= dt как тебе надо. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
iuiu
Зарегистрирован: 31.01.2015
Сообщения: 25
|
000 писал(а): |
Если не ошибаюсь, то вот тут
Код: |
bi = LastValue(ValueWhen(dtStr > Ref(dt, -1) AND dtStr <= dt, BarIndex())); |
ищется бар. Меняй вот эти условия dtStr > Ref(dt, -1) AND dtStr <= dt как тебе надо. |
bi = LastValue(ValueWhen(dtStr > Ref(dt, -1) AND dtStr <= dt, BarIndex()-1));
Вот так заработало |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно и так. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
DennyV8
Зарегистрирован: 11.01.2022
Сообщения: 100
|
000 писал(а): |
Держи. Полностью готовый рабочий код.
Код: |
/*
Формат файла сделок
Ticker,Date,Time,Operation,Price,Volume
Пример
ROSN,21/12/2010,17:30:00,BUY,221,5
ROSN,20/12/2010,11:30:00,BUY,220,1
ROSN,22/12/2010,14:30:00,BUY,220,1
ROSN,22/12/2010,14:45:00,SELL,220,1
ROSN,22/12/2010,15:45:00,SHORT,222,1
ROSN,22/12/2010,18:30:00,SHORT,222,1
ROSN,23/12/2010,14:45:00,COVER,223,6
*/
fh = fopen( "C:/111.txt", "r");
if( fh )
{
Buy = Sell = Short = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = 0;
dt = DateTime();
while(!feof(fh))
{
s = fgets(fh);
if(StrExtract(s, 0) == Name())
{
dtStr = StrToDateTime(StrExtract(s,1) + " " + StrExtract(s,2));
bi = LastValue(ValueWhen(dtStr > Ref(dt, -1) AND dtStr <= dt, BarIndex()));
v0 = StrToNum(StrExtract(s,5));
p0 = StrToNum(StrExtract(s,4));
act = StrExtract(s,3);
if(act=="BUY")
{
Buy[bi] = 1;
BuyPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*0.995, colorBlack);
VolBuy[bi] = V0;
}
else if(act=="SELL")
{
Sell[bi] = 1;
SellPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*1.005, colorBlack);
}
else if(act=="SHORT")
{
Short[bi] = 1;
ShortPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*1.005, colorRed);
VolShort[bi] = V0;
}
else if(act=="COVER")
{
Cover[bi] = 1;
CoverPrice[bi] = p0;
PlotText(StrExtract(s,5) + " Lots", bi, p0*0.995, colorRed);
}
}
}
fclose( fh );
}
Plot(C, "", colorBlack, styleCandle);
PlotShapes(IIf(Buy,shapeUpArrow,0),colorGreen, 0, BuyPrice);
PlotShapes(IIf(Sell,shapeHollowDownArrow, 0),colorGreen, 0, SellPrice);
PlotShapes(IIf(Short,shapeDownArrow,0),colorRed, 0, ShortPrice);
PlotShapes(IIf(Cover,shapeHollowUpArrow, 0),colorRed, 0, CoverPrice);
|
|
Понадобилось мне тут на график, база которая в рилтайм данные выводит, вывести места входа в сделки, нашел код который как бы это делает.
Вопрос - что должно выводиться на график в данном коде?
И будет ли выводиться в рилтайм базе или только на истории? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Выводится стрелка и надпись "Х Lots". Работать будет везде. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
DennyV8
Зарегистрирован: 11.01.2022
Сообщения: 100
|
000 писал(а): |
Выводится стрелка и надпись "Х Lots". Работать будет везде. |
Да, работает....я забыл еще и тикер поменять, когда менял все остальное )) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|