Портфель с SiM6 из QUIK. Есть у меня файл для портфелей qlp. Для RIM6 все нормально отображает. Для SiM6 - пусто. Пишу так: secClass = "SPBFUT" secCode = "SiM6"? Такое ощущение что переводит в заглав
Андрей К, В скрипте ниже если заменить «SiM6» на «RIM6» все работает. У меня есть и стакан и в текущей таблице параметров SiM6. Насчет галочки я так понимаю сарказм был. Или реально где-то какая херня в настройках. Авторов квика хотелось бы лично встретить…
Андрей К, Не по FORTS вобще все получаю… так что не в этом дело. Тут скорее всего из-за маленькой буквы i на названии. И главное что ни ошибок никаких — ничего.
Запустил ваш скрипт в режиме отладки, вообще CANDLE получает, а потом идет ошибка в коде и из за этого не срабатывает if (open > 0), в следствие чего не получаются далее данные.
Андрей К, А у Вас сам график SiM6 в QUIK открыт в этом-же тайфрейме? Просто, функция GET_CANDLE обращается к данным «свечек» на графике… Нет графика — нет данных…
Андрей К,
1. Этот скрипт не мой… :) Автор данного поста другой… :)
2. "/1" и "+0" в данном случае носят одинаковый смысл — перевод в числовой формат и никакой разницы нет… Можно указать и так, и так...
3. Ради интереса я загрузил данный скрипт для проверки...
Если минутный график SiH6 в QUIK открыт, то скрипт работает, стоит его закрыть — в таблице пусто...
Разумеется, что сначала надо исправить несколько других ошибок, которые возникли при копировании скрипта:
— «» заменить на ""
- (candle, «Open») заменить на (candle, «OPEN»)
— аналогично High, Low и т.д.
if monthPart < 1
monthPart = 12
yearPart = yearPart — 1
end if
end if
end if
end if
end for
func GetDataString(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 GetTimeString(hour, min)
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 Дата cвечки;
PARAMETER_TYPE STRING(30);
END
PARAMETER Time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время cвечки;
PARAMETER_TYPE STRING(30);
END
PARAMETER OpenPrice;
PARAMETER_TITLE Цена открытия;
PARAMETER_DESCRIPTION Цена открытия свечки;
PARAMETER_TYPE NUMERIC(10,2);
END
if minutePart<0 minutePart =60-timeFrame hourPart =hourPart-1
if hourPart<0 hourPart =23 dayPart = dayPart-1
if dayPart<1 dayPart =31 monthPart =monthPart-1
if monthPart<1 monthPart=12 yearPart =yearPart-1 end if end if end if end if end for
func GetDataString(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 GetTimeString(hour, min) 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 Дата cвечки; PARAMETER_TYPE STRING(30); END
PARAMETER Time; PARAMETER_TITLE Время; PARAMETER_DESCRIPTION Время cвечки; PARAMETER_TYPE STRING(30); END
PARAMETER OpenPrice; PARAMETER_TITLE Цена открытия; PARAMETER_DESCRIPTION Цена открытия свечки; PARAMETER_TYPE NUMERIC(10,2); END
1. Этот скрипт не мой… :) Автор данного поста другой… :)
2. "/1" и "+0" в данном случае носят одинаковый смысл — перевод в числовой формат и никакой разницы нет… Можно указать и так, и так...
3. Ради интереса я загрузил данный скрипт для проверки...
Если минутный график SiH6 в QUIK открыт, то скрипт работает, стоит его закрыть — в таблице пусто...
Разумеется, что сначала надо исправить несколько других ошибок, которые возникли при копировании скрипта:
— «» заменить на ""
- (candle, «Open») заменить на (candle, «OPEN»)
— аналогично High, Low и т.д.
только на луа
Сам скрипт:
PORTFOLIO_EX SIM;
DESCRIPTION SIM6 — 1min;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
secClass = «SPBFUT»
secCode = «SiM6»
timeFrame = 1
candleMaxCount = 100
DELETE_ALL_ITEMS()
dateTime = GET_DATETIME()
yearPart = GET_VALUE(dateTime, «YEAR»)
monthPart = GET_VALUE(dateTime, «MONTH»)
dayPart = GET_VALUE(dateTime, «DAY»)
hourPart = GET_VALUE(dateTime, «HOUR»)
minutePart = GET_VALUE(dateTime, «MIN»)
minutePart = timeFrame * FLOOR(minutePart / timeFrame)
for i from 1 to candleMaxCount
dateString = GetDataString(yearPart, monthPart, dayPart)
timeString = GetTimeString(hourPart, minutePart)
candle = GET_CANDLE(secClass, secCode, "", timeFrame, «PRICE», dateString, timeString)
open = GET_VALUE(candle, «Open») + 0
if (open > 0)
high = GET_VALUE(Candle, «High»)
low = GET_VALUE(Candle, «Low»)
close = GET_VALUE(Candle, «Close»)
volume = GET_VALUE(candle, «Volume»)
output = CREATE_MAP()
output = SET_VALUE(output, «Date», dateString)
output = SET_VALUE(output, «Time», timeString)
output = SET_VALUE(output, «OpenPrice», open)
output = SET_VALUE(output, «HighPrice», high)
output = SET_VALUE(output, «LowPrice», low)
output = SET_VALUE(output, «ClosePrice», close)
output = SET_VALUE(output, «Volume», volume)
ADD_ITEM(i, output)
end if
minutePart = minutePart — timeFrame
if minutePart < 0
minutePart = 60 — timeFrame
hourPart = hourPart — 1
if hourPart < 0
hourPart = 23
dayPart = dayPart — 1
if dayPart < 1
dayPart = 31
monthPart = monthPart — 1
if monthPart < 1
monthPart = 12
yearPart = yearPart — 1
end if
end if
end if
end if
end for
func GetDataString(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 GetTimeString(hour, min)
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 Дата cвечки;
PARAMETER_TYPE STRING(30);
END
PARAMETER Time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время cвечки;
PARAMETER_TYPE STRING(30);
END
PARAMETER OpenPrice;
PARAMETER_TITLE Цена открытия;
PARAMETER_DESCRIPTION Цена открытия свечки;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER HighPrice;
PARAMETER_TITLE Максимальная цена;
PARAMETER_DESCRIPTION Максимальная цена свечки;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER LowPrice;
PARAMETER_TITLE Минимальная цена;
PARAMETER_DESCRIPTION Минимальная цена свечки;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER ClosePrice;
PARAMETER_TITLE Цена закрытия;
PARAMETER_DESCRIPTION Цена закрытия свечки;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER Volume;
PARAMETER_TITLE Объем;
PARAMETER_DESCRIPTION Объем сделок в свечке;
PARAMETER_TYPE NUMERIC(10,0);
END
END_PORTFOLIO_EX
PORTFOLIO_EX SIM-2; DESCRIPTION SIM6 — 1min; CLIENTS_LIST ALL_CLIENTS; FIRMS_LIST ALL_FIRMS; USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
secClass = «SPBFUT» secCode = «SiM6» timeFrame = 1 candleMaxCount = 100
DELETE_ALL_ITEMS()
dateTime = GET_DATETIME() yearPart = GET_VALUE(dateTime, «YEAR») monthPart = GET_VALUE(dateTime, «MONTH») dayPart = GET_VALUE(dateTime, «DAY») hourPart = GET_VALUE(dateTime, «HOUR») minutePart = GET_VALUE(dateTime, «MIN»)
minutePart = timeFrame*FLOOR(minutePart/timeFrame)
for i from 1 to candleMaxCount dateString = GetDataString(yearPart, monthPart, dayPart) timeString = GetTimeString(hourPart, minutePart)
'candle = GET_CANDLE(..)'
'if (open > 0)
candle = GET_CANDLE(secClass, secCode, "", timeFrame, «PRICE», dateString, timeString)' open = GET_VALUE(candle, «Open») + 0
' open = GET_VALUE(candle," OPEN")/1 + 0
if (open>0) high = GET_VALUE(Candle, «High») low = GET_VALUE(Candle, «Low») close = GET_VALUE(Candle, «Close») volume = GET_VALUE(candle, «Volume»)
output = CREATE_MAP() output = SET_VALUE(output, «Date», dateString) output = SET_VALUE(output, «Time», timeString) output = SET_VALUE(output, «OpenPrice», open) output = SET_VALUE(output, «HighPrice», high) output = SET_VALUE(output, «LowPrice», low) output = SET_VALUE(output, «ClosePrice», close) output = SET_VALUE(output, «Volume», volume)
ADD_ITEM(i,output) end if
minutePart = minutePart-timeFrame
if minutePart<0 minutePart =60-timeFrame hourPart =hourPart-1
if hourPart<0 hourPart =23 dayPart = dayPart-1
if dayPart<1 dayPart =31 monthPart =monthPart-1
if monthPart<1 monthPart=12 yearPart =yearPart-1 end if end if end if end if end for
func GetDataString(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 GetTimeString(hour, min) 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 Дата cвечки; PARAMETER_TYPE STRING(30); END
PARAMETER Time; PARAMETER_TITLE Время; PARAMETER_DESCRIPTION Время cвечки; PARAMETER_TYPE STRING(30); END
PARAMETER OpenPrice; PARAMETER_TITLE Цена открытия; PARAMETER_DESCRIPTION Цена открытия свечки; PARAMETER_TYPE NUMERIC(10,2); END
PARAMETER HighPrice; PARAMETER_TITLE Максимальная цена; PARAMETER_DESCRIPTION Максимальная цена свечки; PARAMETER_TYPE NUMERIC(10,2); END
PARAMETER LowPrice; PARAMETER_TITLE Минимальная цена; PARAMETER_DESCRIPTION Минимальная цена свечки; PARAMETER_TYPE NUMERIC(10,2); END
PARAMETER ClosePrice; PARAMETER_TITLE Цена закрытия; PARAMETER_DESCRIPTION Цена закрытия свечки; PARAMETER_TYPE NUMERIC(10,2); END
PARAMETER Volume; PARAMETER_TITLE Объем; PARAMETER_DESCRIPTION Объем сделок в свечке; PARAMETER_TYPE NUMERIC(10,0); END
END_PORTFOLIO_EX
этот в режиме отладки видно считает. много ошибок синтаксиса.кавычки.
нет данных всё равно в таблице
candle = GET_CANDLE(secClass, secCode, "", timeFrame, «PRICE», dateString, timeString)' open = GET_VALUE(candle, «OPEN») + 0
' open = GET_VALUE(candle," OPEN")/1 + 0
вот работает!
только опэн.охлс свечей надо брать данные!.. кэндл переписать.
Только зарегистрированные и авторизованные пользователи могут оставлять ответы.
Залогиниться
Зарегистрироваться