Создание портфеля для SiM6

Страницы: 1
RSS
Создание портфеля для SiM6, qpile, не выводит список свечей
 
Добрый день! Пытаюсь создать портфель для фьючерса SiM6 - ничего не выводит и ошибок тоже нет. Причем при замене secCode с SiM6 на RIM6 все выводится. Оба фьючерса у меня квиком загружаются, т.е. я вижу и стакан и вобще весь список фьючерсов FORTS. Привожу код:

PORTFOLIO_EX SIM1111;
DESCRIPTION SIM6 - 1minkijj;
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, "SiM6", "", 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
 
Здравствуйте,
Дело в том что для получения данных по SiM6 требуется указать параметр USE_CASE_SENSITIVE_CONSTANTS
Суть работы этого параметра в том что абсолютно все строковые константы становятся зависимыми от регистра букв.
Это касается не только пользовательских констант, но и служебных.
В частности Ваш код не работает так как служебные константы "High", "Low", "Close" и "Volume" указаны в неправильном регистре.
Согласно документации, они должны быть указаны БОЛЬШИМИ буквами.
 
Никита вы бы не могли на писать пояснения каждого блока что он делает примерно так как на писал я  в своём скрипте просто так проще понять код . И пожалуйста подскажите как можно извлечь данные свечей для продолжения написания кода к примеру если bar2 больше bar3 то выполнить такие то действия. Спасибо за ответ!
 
GET_CANDLE
Функция для обращения к данным «свечек» на графике, а также к значениям  индикаторов технического анализа.
MAP  GET_CANDLE (STRING class_code, STRING sec_code,  STRING parameter_name, STRING interval, STRING graph_type, DOUBLE Date,  DOUBLE Time)
Т е чтобы получить какую либо свечу Вам надо указать для нее дату и время.
Если Вам надо предыдущую, то берете время текущей отнимаете от него величину интервала и получаете свечу .
Примерно так.
 
Что делает вот эта строка minutePart = timeFrame * FLOOR(minutePart / timeFrame)
 
Цитата
дмитрий б написал:
Что делает вот эта строка minutePart = timeFrame * FLOOR(minutePart / timeFrame)
Добрый день.

Как понимаем идет округление данных времени.
Страницы: 1
Читают тему
Наверх