Добрый день, уважаемые коллеги! Есть скрипт передачи данных из Квика в Эксель по номеру свечи(взятый от сюда
www.trade-bot.ru/kak-po-nomeru-bara-poluchit-kotirovku/#more-48 я его чуть переделал, для получения данных по объемам), но работает только на данных интрадей.Помогите пожалуйста переделать его на дневные свечи.Или может его вообще можно тупо упростить, т.к. нужны ОНLCV текущей дневной свечи, наверное циклы можно поубирать и сделать как то проще.Я сам в программировании 0, прошу не судить строго.Вот сам скрипт...
PORTFOLIO_EX OHLC;
DESCRIPTION OHLC;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
' Настраиваемые параметры
ClassCodeList=«SPBFUT» ' код класса инструмента
INSTRUMENT =«SiH4» ' Задаем инструмент, внимательно указываем регистр у Si маленькая i, а у RI большая
Interval=60 ' интервал (таймфрейм) на графике
DayToFind=10 ' сколько дней назад искать свечи (можно уменьшить, чтоы ускорить работу программы)
CandleToFind=1 ' сколько свечей надо найти
OutFile = «c:\quotes.csv» ' файл, куда записывать данные в формате CSV
DELETE_ALL_ITEMS()
CandleCount=0
CurYear=get_value(GET_DATETIME(), «YEAR»)
CurMonth=get_value(GET_DATETIME(), «MONTH»)
CurDay=get_value(GET_DATETIME(), «DAY»)
CurHour = GET_VALUE(GET_DATETIME(), «HOUR»)
CurMin = GET_VALUE(GET_DATETIME(), «MIN»)
CurMin = Interval*Floor(CurMin/Interval) ' округляем минуты до «интервальных»
for i from 1 to (DayToFind*24)*(Floor(60/Interval))
TextData=fTextData(CurYear,CurMonth,CurDay) &""
TextTime=fTextTime(CurHour,CurMin) & ""
if (CandleCount<CandleToFind) ' если нашли сколько нам надо свечей — гоняем пустой цикл
Candle=GET_CANDLE(ClassCodeList,Instrument, "", Interval & "", «PRICE», TextData, TextTime)
Open=GET_VALUE (Candle, «OPEN»)+0
if (Open>0)
CandleCount=CandleCount+1
High=GET_VALUE (Candle, «HIGH»)+0
Low=GET_VALUE (Candle, «LOW»)+0
Close=GET_VALUE (Candle, «CLOSE»)+0
Volume=GET_VALUE (Candle, «VOLUME»)+0
output=CREATE_MAP()
output=SET_VALUE(output,«DATE»,TextData)
output=SET_VALUE(output,«TIME»,TextTime)
output=SET_VALUE(output,«OPEN»,Open)
output=SET_VALUE(output,«HIGH»,High)
output=SET_VALUE(output,«LOW»,Low)
output=SET_VALUE(output,«CLOSE»,Close)
output=SET_VALUE(output,«VOLUME»,Volume)
ADD_ITEM(CandleCount,output)
WRITELN(OutFile, TextData & "," & TextTime & "," & Open & "," & High & "," & Low & "," & Close &"," & Volume )
end if
' откат на «интервал» назад
CurMin=CurMin-Interval
if CurMin<0
CurMin=60+CurMin
CurHour=CurHour-1
if CurHour<0
CurHour=23
CurDay=CurDay-1
if curDay<1
CurDay=31
CurMonth=CurMonth-1
if CurMonth<1
CurMonth=12
CurYear=CurYear-1
if CurYear<0
message («Не найдены котировки до рождества Христова! <img src=»
www.trade-bot.ru/wp-includes/images/smilies/icon_biggrin.gif" alt=":-D" class=«wp-smiley»> ",1)
end if
end if
end if
end if
end if
end if
end for
' функция перевода даты в текстовый формат
func fTextData(Year,Month,Day)
if (LEN(Month) < 2)
Month = «0» & Month
end if
if (LEN(Day) < 2)
Day = «0» & Day
end if
result = Year & Month & Day
end func
' функция перевода времени в текстовый формат
func fTextTime(Hour,Min,Sec)
if (LEN(Hour) < 2)
Hour = «0» & Hour
end if
if (LEN(Min) < 2)
Min = «0» & Min
end if
result = Hour & Min & «00»
end func
END_PROGRAM
PARAMETER Date;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата;
PARAMETER_TYPE STRING(30);
END
PARAMETER Time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING(30);
END
PARAMETER Open;
PARAMETER_TITLE Open;
PARAMETER_DESCRIPTION Open;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER High;
PARAMETER_TITLE High;
PARAMETER_DESCRIPTION High;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Low;
PARAMETER_TITLE Low;
PARAMETER_DESCRIPTION Low;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Close;
PARAMETER_TITLE Close;
PARAMETER_DESCRIPTION Close;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Volume;
PARAMETER_TITLE Volume;
PARAMETER_DESCRIPTION Volume;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX
DESCRIPTION OHLC;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
' Настраиваемые параметры
ClassCodeList=«SPBFUT» ' код класса инструмента
INSTRUMENT =«SiH4» ' Задаем инструмент, внимательно указываем регистр у Si маленькая i, а у RI большая
Interval=-1+0 ' интервал (таймфрейм) на графике
OutFile = «c:\quotes.csv» ' файл, куда записывать данные в формате CSV
DELETE_ALL_ITEMS()
CurYear=get_value(GET_DATETIME(), «YEAR»)
CurMonth=get_value(GET_DATETIME(), «MONTH»)
CurDay=get_value(GET_DATETIME(), «DAY»)
TextData=fTextData(CurYear,CurMonth,CurDay) &""
TextTime=«100000»
Candle=GET_CANDLE(ClassCodeList,Instrument, "", Interval & "", «PRICE», TextData, TextTime)
Open=GET_VALUE (Candle, «OPEN»)+0
if (Open>0)
High=GET_VALUE (Candle, «HIGH»)+0
Low=GET_VALUE (Candle, «LOW»)+0
Close=GET_VALUE (Candle, «CLOSE»)+0
Volume=GET_VALUE (Candle, «VOLUME»)+0
output=CREATE_MAP()
output=SET_VALUE(output,«DATE»,TextData)
output=SET_VALUE(output,«TIME»,TextTime)
output=SET_VALUE(output,«OPEN»,Open)
output=SET_VALUE(output,«HIGH»,High)
output=SET_VALUE(output,«LOW»,Low)
output=SET_VALUE(output,«CLOSE»,Close)
output=SET_VALUE(output,«VOLUME»,Volume)
ADD_ITEM(CandleCount,output)
WRITELN(OutFile, TextData & "," & TextTime & "," & Open & "," & High & "," & Low & "," & Close &"," & Volume )
end if
' функция перевода даты в текстовый формат
func fTextData(Year,Month,Day)
if (LEN(Month) < 2)
Month = «0» & Month
end if
if (LEN(Day) < 2)
Day = «0» & Day
end if
result = Year & Month & Day
end func
END_PROGRAM
PARAMETER Date;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата;
PARAMETER_TYPE STRING(30);
END
PARAMETER Time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING(30);
END
PARAMETER Open;
PARAMETER_TITLE Open;
PARAMETER_DESCRIPTION Open;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER High;
PARAMETER_TITLE High;
PARAMETER_DESCRIPTION High;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Low;
PARAMETER_TITLE Low;
PARAMETER_DESCRIPTION Low;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Close;
PARAMETER_TITLE Close;
PARAMETER_DESCRIPTION Close;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Volume;
PARAMETER_TITLE Volume;
PARAMETER_DESCRIPTION Volume;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX
Candle=GET_CANDLE(ClassCodeList,Instrument,"",-1, «PRICE»,TextData,0)
И еще, очень рекомендую — замените множественные вызовы GET_DATETIME() на один.