DELETE_ALL_ITEMS() 'ФУНКЦИЯ УДАЛЕНИЯ СТАРЫХ ДАННЫХ ИЗ ТАБЛИЦЫ ADD_ITEM(1,OUTPUT)
IF((CANDLE_1+0=0) or ( GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_1,"TIME") <>0) ) CANDLE_2= CANDLE_1 CANDLE_1= CANDLE END IF
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 ЦЕНА ОТК.; PARAMETER_DESCRIPTION ЦЕНА ; PARAMETER_TYPE STRING(30); END ------------------------------- если надо в таблице видеть предыдущую, то отобразите CANDLE_2 вообще-то все делается гораздо проще (но писать программу за вас не буду) ---------------------------------- надо вычислить время предыдущей свечи, вычитая интервал и времени текущей свечи и снова прочитать с этим временем При этом надо учесть, что для нахождения последней свечи предыдущего дня надо уменьшить день. Но при этом надо учесть, что предыдущий день это не всегда текущий день минус 1. ----------------------------
например, надо найти все активные стоп-заявки, чтобы их удалить. Указываем , что вернуть надо order_num, а ищем по flags. В результате получаем таблицу номеров активных стоп-заявок.
Добрый день, Считаю, что возврат только номеров найденных строк не совсем удачное решение. После этого надо еще вытаскивать эти строки из хранилища. -------------------------------- Предлагаю возвращать таблицу номеров и таблицу самих строк, в которых возвращать лишь параметры, которые не участвовали в поиске. Спасибо
OnParam(STRING class_code, STRING sec_code, STRING paramname) а класс и сек - вообще можно убрать (можно и оставить [дело вкуса])
1) класс и сек нельзя убирать, так как paramname существует у множества инструментов. ------------------------------------------------------------- 2) Сейчас в колбеке надо для данного инструмента вытаскивать строку из хранилища и проверять какой параметр изменился, если нужный то обрабатывать. Раньше я уже предлагал, но возможно забыли. Напишу повторно. Как вариант, Можно передавать в колбек таблицы изменившихся параметров. Тогда мы проверяем наличие в полученной таблице нужного нам параметра и если есть, то работаем. Но вариант с подпиской, полагаю лучше.
Серьезное выражение лица - это не есть признак ума. Серьезные программы - это программы , написанные сильно озабоченными своей значимостью программистами
В качестве совета. чтобы не было мучительно больно при использовании значений X, которые должны быть числами, надо делать так: if type(X)=="number" then ... end чтобы не попадаться на nil при условии, что X может быть лишь числом надо делать так: Z=X or 0;
GET_CANDLE Функция для обращения к данным «свечек» на графике, а также к значениям индикаторов технического анализа. MAP GET_CANDLE (STRING class_code, STRING sec_code, STRING parameter_name, STRING interval, STRING graph_type, DOUBLE Date, DOUBLE Time) Т е чтобы получить какую либо свечу Вам надо указать для нее дату и время. Если Вам надо предыдущую, то берете время текущей отнимаете от него величину интервала и получаете свечу . Примерно так.
предыдущий ответ не совсем верен. API дает возможность делать торговые заявки, но не позволяет получать свечи. чел просит свечи. --------------------------------- свечи можно получать либо через луа, либо получать тики через DDE и потом лепить свечи. ------------------------ Так как Ваши алгоритмы написаны на С++ то рекомендую оформить их как DLL и подключить к скрипту на луа. ----------------------------------------- И будет Вам счастье
Что касается успешной игры на бирже, то могу сказать лишь одно - тренируйте свой мозг. успешно играть можно, но нельзя рассказать как это делать. Т е успех - возникает тогда, когда играет Ваше подсознание, а не сознание. Успехов в игре
Василий написал: Николай Камынин , спасибо, очень доходчиво. Вот вопрос, если как Вы говорите происходит скачок на 1% или более, но у меня выставлены стопы, то тогда потерь больших не будет, ведь терминал закроет позицию в соответствии с установленным стопом? Я читал что при резком изменении возможно проскальзывание стопа, насколько это частое явление? Иначе получается, что если не пытаться сорвать куш, а стабильно выставлять риски, то ничего страшного не произойдёт, то есть действовать по своим правилам.
Стоп - это условная заявка на сервере брокера. Причем Ваша заявка не одна и возможно не первая. Т е при резком движении рынка возможно, что ваш лимит будет выставлен уже с другой стороны рынка. т е например вы поставили стоп-лос на продажу по 99, если цена будет ниже 100. Т е сервер брокера выставит лимит по 99 после того, как цена станет ниже 100. А как быстро это произойдет? Возможно, что в момент выставления цена уже будет 98. Т е Ваш лимит не сработает и зависнет на цене 99, а цена пойдет дальше вниз. ------------------------------------------------ Но еще смешнее будет, если 98 - это дно. Тогда цена развернется и закроет Вашу позицию и пойдет дальше в вашу сторону, а Вы будете сидеть на берегу и смотреть как поезд уходит. --------------------------------------- Некоторые ставят стоп по рынку, в надежде что это спасет их от больших убытков. Но как я уже написал, на сервере очередь и не факт, что в очереди они первые. В этом случае Цена пробъет вниз и на самом дне закроет их позицию и пойдет вверх. И они будут с точкой смотреть на уходящий поезд. У профи есть даже специальный термин таким образом закрывать стопы буратин - называется это - "пугать ворон" Каждый брокер хорошо знает, где эти стопы -вороны сидят на его сервере -дереве. --------------------------------- Ну вот примерно так. Успехов в изучении рынков.
"Подвох" в том, что фьючерсы имеют плечо, которое примерно равно 10. --------------------------------------------- Если Вы сделали на 100 тысячах 3 тысячи то это соответствует движению рынка акций 0.3% Т е это флэт ----------------------------------------- На флете сравнительно просто торговать так как движение рынка внутри горизонтального коридора. --------------------------- Проблема будет реально тогда, когда Вы станете на изломе флета, а рынок не сломается, а пойдет в тренд резко например на 1% В результате Вы получите сразу убыток в 10 тысяч. Вот тут у Вас будет выбор. Либо быстро выйти с убытком в 10 тысяч, перевернуться , либо зависнуть против рынка. так как Вы начинающий, то почти со 100% вероятностью Вы сделаете последнее. А рынок пойдет дальше против вас и на 5% подъеме Вы будете уже с убытком в 50% и получите маржинкол, т е позицию Вам принудительно закроют. ---------------------------- И у Вас будет не 100 т, а уже 50 и Вы начнете все сначала. ---------------------------- Успехов
когда-то давно отказался от globalserver по причине его тихой потери связи с квиком. эту проблему решить нельзя. поэтому советую сразу отказаться от омеги. Уж очень она устарела, хотя и сделана очень хорошо.
Добрый день, Как известно, DDE самый простой и соответственно самый быстрый способ обмена данными. Он давно есть в КВИКЕ и позволяет получить данные из любой таблицы в сторонней программе, например данные из доски опционов, чего невозможно сделать средствами QLUA. ----------------------------- Предлагаю реализовать возможность получать данные по DDE в скриптах на LUA ---------------------------------- Спасибо
Michael Bulychev написал: Основные затраты при поиске перебором используя getItem это передача структур данных из хост-программы через стек в скрипт. SearchItems дает возможность уменьшить эти расходы. Используя Ваш пример я написал похожую реализацию с помощью функции SearchItems. Исходный код я немного модифицировал для подсчета статистики. Исходный пример Пример реализации с SearchItems Результаты тестов на моей машине:
Добрый день, Михаил Просьба протестите еще SearchItems без всех этих приблуд. Просто для конкретного варианта. Сколько будет по сравнению с этими выкрутасами. Спасибо ------------------------------------------------ Универсальная система (программа) - это такая система(программа) , разработчики которой не имеют ни малейшего представления о том, как реально ее будут применять.
Подскажите, можно ли получать данные индикатора RSI, примерно так же, как получаются данные из стакана при его изменении с помощью OnQuote, а можно ли как то получить данные с графика индикатора ?
В стакане - это очередь заявок на торгуемый инструмент. индикатор RSI (если Вы говорите об индикаторе а не о фьючерсе на него) - это интегральный показатель, т е не инструмент. поэтому на него нет никаких заявок и очередей. попробуйте сформулировать свой вопрос более четко. --------------------------------- Четкость в словах - есть ясность в мыслях и точность в действиях.
пардон, опечатка в результате они последовательно как из автомата будут записаны в gTrade и следующие затрут предыдущие. В майне будет обработана лишь последняя
или вот еще прикол. как известно если сделки были совершены часто, то они придут пакетом в результате они последовательно как из автомата gTrade и затрут друг друга.
Michael Bulychev написал: Добрый день. Николай немного сгустил краски. достаточно сохранить ссылку на полученную в колбеке таблицу. Примерно так:
Код
gTrade = {}
function OnTrade (t)
gTrade = t
end
function main ()
--в gTrade будет последняя сделка из OnTrade
end
Если я не правильно Вас понял, то опишите задачу подробнее.
Ну да... А вот такая ситуация сделку приняли по инструменту сбербанк сохранили передали в майн управление а в это время исполнилась сделка по газпрому сделку по сбербанку мы затерли и в майне вместо сбербанка получили газпром. что делать дилетанту?
Добрый день, Предлагаю сделать возможным для колбека OnParam указание списка параметров активации. ---------------------- Поясняю. Так как OnParam реагирует на изменение любых текущих параметров всех инструментов, то его применение очень сильно грузит процессор, так как активация этого колбека происходит по каждому чиху каждому тику каждому изменению в очереди каждом ... ------------------------ В реальности же нет такой задачи, где требуется реагировать на все изменения текущих параметров. ----------------------- Как правило обычно требуется реагировать на изменение одного параметра. ------------------- В 99% это либо изменение очереди заявок, либо совершение сделки по инструменту. И ВСЕ --------------------- Поэтому было бы замечательно указать для OnParam например параметр "bid" и не париться с обработкой всех изменений и не лазить в хранилище для выяснения что же изменилось и кому оно надо. ------------------- Спасибо
универсальное медленнее специального. ------------------ Вам что надо? Быстро или универсально (т е лень писать код) ? -----------------------------------
действительно, создается впечатление, что разработчики сайта имеют не востребованное техническое образование в области проектирования механических систем типа реактивных велосипедов, но суровая реальность заставляет их делать сайт по софту для финансовых рынков . Вот и получается сайт с абстрактными картинками.
Максим Миненко написал: При нажатии F6 с графика цены и объема сейчас программа предлагает создать "Тэйк профит и стоп лимит". Я хочу, чтобы это был обычный "Стоп лос". Как изменить тип заявки по умолчанию?
Варианты решений: 1) Если есть уже снятый стоп, то можно выбрать из таблицы стопов 2) Поместить в караман транзакций и выбирать 3) поместить на график подальше от цены и двигать 4) пойти покурить и желание пройдет.
если работаете с колбеками, то эта функция нужна лишь при запуске скрипта для выборки того, что уже принято, если оно Вам надо. ---------------------------- А при запуске скорости особо и не надо. ------------------------ Поэтому нет особой разницы каким образом выбрать уже принятые данные .
DeSan DeSan написал: привет у биржи есть плата за транзакции как я понял текущая формула - если транзакций больше 2000
Именно так.
Эти сборы касаются брокера (т е участников торгов) Клиенты брокера - не являются участниками торгов на бирже. ------------------------------------------- Сбор за ошибочные транзакции Ошибочными будут признаваться транзакции, которые приводят к возникновению некоторых ошибок, например: "Возникла кросс-сделка", "Недостаточно средств клиента", "Заявка не найдена" (при использовании DelOrder и MoveOrder) и т.д. Расчет сбора будет производиться по логинам участника торгов. Сбор за ошибочные транзакции будет рассчитываться, в том числе в период приостановки торгов во время проведения клиринга и в выходные — в этом случае он будет отражаться в отчетах в понедельник, и списываться во вторник. Методикой расчета сбора за ошибочные транзакции предусмотрено ограничение на минимальную величину сбора за день — 1 000 рублей. Максимальная величина сбора за день составляет 30 000 рублей и вводится с целью ограничения убытков участника торгов из-за неполадок в алгоритмических системах. Кроме того, методикой расчета сбора предусмотрена возможность блокировки Биржей логина с предварительным уведомлением о возможной блокировке (в случае, если это технически возможно).
Если я не ошибаюсь, то плата за транзакции возникает при более 30 транзакций в секунду. Эту плату берут с брокера, а он берет с Вас, если об этом есть в регламенте. например у БКС введено ограничение на не более 30 в секунду если больше то имеют право вообще отключить. узнайте у своего брокера, что он с Вами сделает.
еще хуже в параметрах транзакций. Отсылаем один формат данных и имена параметров, а принимаем другие и даже бинарные. Полагаю, что как у классика - "пуговицы пришивал один, а рукава - другой." ----------------------------------- "К пуговицам претензии есть? - К пуговицам претензий нет!"
ninjatrader написал: да я и сам могу в пятницу программу запустить, только вот неужели нельзя избежать утомительной процедуры открывания графиков на всех тайм-фреймах? куча ведь настроек в квике, неужели нет такой их комбинации, чтобы быстро скачивались необходимые данные при подключении к серверу? в других программах которыми пользуюсь достаточно скачать данные по меньшему тайм-фрейму, а большие уже строятся исходя из этих данных - здесь почему-то такая логика не работает...
В квике свечи строит сервер, а не терминал. Поэтому надо заказывать все таймы Но в скрипте открывать графики не надо. В скрипте надо просто в цикле открыть источник на каждый инструмент и каждый тайм, после прихода закрыть. ----------------------------------- Т е делаете скрипт, запускаете его на квике навсегда. Он например в вечернюю сессию активируется сам и принимает Вам все данные. Вы даже и не заметите как он это все сделает.
Кирилл Мазеин написал: Я пробовал по вашему совету поменять кодировку текста робота - то же самое. Да и на моем скриншоте искажается только русский текст, который в комментариях.
Хотите помощи? Выложите текст. Или Вы полагаете, что будут с экрана набивать Ваш текст для тестирования?
Николай Бехтерев написал: Да, у меня явно нет ясного понимания КоллБек функций. И к сожалению пока не попалось ни одной подробно разъясняющей статьи.
Попробую объяснить. Про колбек. Колбеком называется функция, которая вызывается из вне Вашей программы(скрипта) Такую функцию обычно определяют для обработки каких-либо асинхронных событий, время прихода которых нам заранее неизвестно. В QLUA колбеки - это функции с зарезервированными именами, которые будут вызваны при возникновения определенного в документации события. -------------------------------------- про main Эта функция, которая вызывается при запуске скрипта и используется для его(скрипта) зависания в режиме активности. Такой способ активации скрипта - это изобретение автора QLUA. Решение вполне работающее, но не очевидное для пользователей и не самое лучшее. но как говорят, дареному коню в ... не смотрят. Поэтому что состряпали, то и кушаем. ------------------------- Так вот, колбеки и функция main никаким образом не связаны между собой. Если Вам надо, чтобы в main обрабатывалось то, что будет получено в колбеке, то Вы должны это передать в майн и осуществить синхронизацию работы колбеков и майн. При этом, надо еще и синхронизировать обращение к общей памяти в колбеках и майн, так как это разные потоки. Т е Вы должны решать 1) синхронизацию потоков 2) синхронизацию обновления информации -------------------------- Т е декларация разработчиков о том, что QLUA сделано для дилетантов в программировании - это такой шутка --------------------- Примерно так