Ответы на вопросы

Ответы на вопросы | Портфель с SiM6 из QUIK. Есть у меня файл для портфелей qlp. Для RIM6 все нормально отображает. Для SiM6 - пусто. Пишу так: secClass = "SPBFUT" secCode = "SiM6"? Такое ощущение что переводит в заглав

Портфель с SiM6 из QUIK. Есть у меня файл для портфелей qlp. Для RIM6 все нормально отображает. Для SiM6 — пусто. Пишу так: secClass = «SPBFUT» secCode = «SiM6»? Такое ощущение что переводит в заглав
  • Ключевые слова:
  • quik,
  • LUA
★1
Надо наверное проверить в списках инструментов, грузится ли SiM6, стоит ли на нем галочка.
avatar

Андрей К

Андрей К, В скрипте ниже если заменить «SiM6» на «RIM6» все работает. У меня есть и стакан и в текущей таблице параметров SiM6. Насчет галочки я так понимаю сарказм был. Или реально где-то какая херня в настройках. Авторов квика хотелось бы лично встретить…
Илья Гаврилов, сарказма не было. Галочка в потоке получения котировок и потоке обезличенных сделок. В хелпе все написано по этому поводу.
avatar

Андрей К

Андрей К, Не по FORTS вобще все получаю… так что не в этом дело. Тут скорее всего из-за маленькой буквы i на названии. И главное что ни ошибок никаких — ничего. 

Сам скрипт:

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

avatar

Илья Гаврилов

Запустил ваш скрипт в режиме отладки, вообще CANDLE получает, а потом идет ошибка в коде и из за этого не срабатывает if (open > 0), в следствие чего не получаются далее данные.
avatar

Андрей К

Андрей К, А у Вас сам график SiM6 в QUIK открыт в этом-же тайфрейме? Просто, функция GET_CANDLE обращается к данным «свечек» на графике… Нет графика — нет данных…
Андрей Кольцов, когда делал отладку вашего скрипта, открывал. Ниже написал, что нужно сделать. Вдруг не увидели
avatar

Андрей К

Андрей К, 
1. Этот скрипт не мой… :) Автор данного поста другой… :)
2. "/1" и "+0" в данном случае носят одинаковый смысл — перевод в числовой формат и никакой разницы нет… Можно указать и так, и так...
3. Ради интереса я загрузил данный скрипт для проверки...
Если минутный график SiH6 в QUIK открыт, то скрипт работает, стоит его закрыть — в таблице пусто...
Разумеется, что сначала надо исправить несколько других ошибок, которые возникли при копировании скрипта:
— «» заменить на ""
- (candle, «Open») заменить на (candle, «OPEN»)
— аналогично High, Low и т.д.
Андрей Кольцов, прошу прощение, перепутал автора с вами.
avatar

Андрей К

Исправьте на это. 

candle = GET_CANDLE(..)
open = GET_VALUE(candle, «OPEN»)/1
if (open > 0)

avatar

Андрей К

Что это даёт. Если свеча началась т зелёная.стоп программой и в этой свече род максимальное закрытие продать.ро краям свечи! На луа успеет! гоааль?
avatar

френк френков

френк френков, разве в показанном коде был алгоритм торговых действий?
avatar

Андрей К

Андрей К, нет.идея торг на свече осуществима луа языком?
Андрей К, можно сделать робота по закрытию свечи. известно она закроется по времени. к закрытию времени. эвристическая модель!
только на луа

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
этот в режиме отладки видно считает. много ошибок синтаксиса.кавычки.
нет данных всё равно в таблице

avatar

френк френков

рим6 не работает. и не должно. на графике индетификатор есть. его ищет программа. нет данных снимаемых с чего.ссылками"
avatar

френк френков

в отладке есть и снимает как то находит названиями… но титлы не заносит. доделать.
avatar

френк френков

 

 candle = GET_CANDLE(secClass, secCode, "", timeFrame, «PRICE», dateString, timeString)' open = GET_VALUE(candle, «OPEN») + 0

'  open = GET_VALUE(candle," OPEN")/1 + 0
вот работает!
только опэн.охлс свечей надо брать данные!.. кэндл переписать.

avatar

френк френков

 открытие свечи есть.нет закрытия и максимальное значение…
avatar

френк френков


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UPDONW