для этого Вам надо ознакомиться с форматом файлов Excel и написать программу. -------------------------------------------- все в этом мире возможно, вопрос лишь в том, сколько на это надо .... и есть ли у Вас столько.
Полагаю, что в правильной программе выставление заявки по Вашему алгоритму не зависит от задержки общения с брокером. Если у Вас зависит, то ищите ошибки в логике программы. ------------------------ В качестве совета: Ваш алгоритм робота удобно реализовать в индикаторе (без заморочкой с колбеками и ТВС)
попробую объяснить еще раз. ------------------------ На графике цифрами обозначены штрихи (красный цвет) 3 -нормальный штрих 1 и 2 - штрих который изменен приведенным выше кодом. ----------------------------------- собственно это и есть весь код ------------------------- Теперь про ошибку. Ваша функция SetValue изменяет одну точку, но эта точка отображается отрезком линии ( штрих) так как выбран тип штриховой. ------------------ Проблема в том, что в свечном графике используются два места для изображения свечи, или как Вам удобнее - две точки. ------------------------------- Поэтому на свечном графике штрих состоит из двух частей - двух точек, а функция SetValue меняет лишь одну точку (половинку штриха)- последнюю. поэтому штрих на свечах разрывается на две точки (половинки штриха) --------------------- Попробуйте сами нарисовать штриховую линию на свечном графике и изменить любое значение свечи - получите два огрызка штриха.
объяснение Вашей ошибки следующее. У Вас штрих рисуется двум отрезками. функция SetValue корректирует лишь последний, поэтому первый остается без изменения.
Добрый день, вот такая ошибочка выходит: В данном случае применяется функция SetValue(i-1,m+2,GetValue(i-2, m+2)) где m+2 -номер индикатора, i - текущая свеча. алгоритм: Предыдущее значение заменяется на препердыдущее. В результате линия индикатора на свече делится пополам (1 и 2) Половинка 1 остается на старом уровне а половинка 2 переходит на новый.
диспетчером задач посмотрите 1) сколько занято памяти и сколько в пике 2) какая загрузка процессора когда тормозится 3) закройте все, что не нужно для торговли.
попробуйте из дома сделать пинг на ip брокера. Если сервер брокера не ответит то на московскую биржу и сравните с временем задержки ответа сервера В приведенной Вами картинки это 31 mc. если пинг у Вас будет меньше, то переход на свой комп будет работать также как сервером, иначе будет хуже.
Похоже что в киеве. С первого взгляда выгоды от виртуалки почти нет. Я такие параметры получаю на своем компе(но не у всякого брокера). Есть брокеры у которых сервера тормозятся сильно. А где будет комп?
возможно Вы неправильно указываете цену (точность либо формат) кроме того, res содержит сообщение об ошибке. Надо его (res) вывести на экран либо в файл либо посмотреть в отладке.
нашел у финама: до 30 транзакций в секунду примерно 5 т р в месяц + 5 т р установка + еще что-то для моего места нахождения обещают уменьшение задержки в 6 раз.
Я пользуюсь таким алгоритмом для отличия первого колбека от последующих Создаем таблицу событий по которым следим за колбеками (активным событиям) при поступлении колбека по событию изменяем его состояние в таблице событий. Если событие стало неактивным, то удаляем его из таблицы состояний. Проблем с кучей колбеков на одно и тоже событие у меня нет.
еще замечу автору вопроса: если обратитесь к литературе, то обнаружите, что EMA это простейший цифровой фильтр с бесконечной импульсной характеристикой. Так как фильтрацию делаем на конечном интервале, то вне 3000 значений мы как бы придумываем Есть различные варианты продления данных за интервал наблюдения. Это тоже есть в книжках. Если интересно, что там за горизонтом, можно прочитать в книжках перед изобретением колеса.
выкладываю модуль расчета индикаторов EMA написал очень давно, результаты должны быть как в квике
Код
local modname = ...
--автор Николай Камынин kamnik@mail.ru www.kamynin.ru
local M = {}
_G[modname] = M
package.loaded[modname] = M
local _G=_G -- глобальная таблица
setfenv(1, M)
function EMAt(y,x,m,i,n) --x- таблица
if m>=i then local s=0; for j=0,i-1 do s=s+x[i-j] end y[i]=s/i;
else if n==nil then y[i]=(y[i-1]*(m-1)+2*x[i])/(m+1); else y[i]=y[i-1] -(x[i-m] -x[i])/m; end
end
end
function EMAf(y,x,m,i,n) --x- функция
if m>=i then local s=0; for j=0,i-1 do s=s+x(i-j) end y[i]=s/i;
else if n==nil then y[i]=(y[i-1]*(m-1)+2*x(i))/(m+1); else y[i]=y[i-1]-(x(i-m)-x(i))/m; end
end
end
function sEMA(y,x,m,i)
local s=y;
if m>=i then s=((m-1)*s+x)/m; else s=(s*(m-1)+2*x)/(m+1); end
return s;
end --скользящее среднее x период m n если не задано то ехпонента или простое сглаживание
Для справки: Реализовал открытие источников без графиков для индикаторов. ------------------- алгоритм следующий: 1) сделал библиотеку для запуска функций любого скрипта из других скриптов 2) Написал скрипт, который отвечает за открытие источников и находится в спящем потоке. 3) Если индикатору или скрипту нужны данные по истории, то он обращается за данными к спящему скрипту, который возвращает индикатору требуемые данные. --------------------
Поясню еще раз. ----------------------- 1) Железо можно взять любое, лишь бы памяти не менее 2 Гб. На этом сервере у Вас 1.5 а пик более 1.5 т е бывает выгрузка на диск - это плохо. Поэтому памяти не менее 2. -------------------------- 2) сейчас у Вас квик у брокера в дата центре. сделайте в работающем КВИКЕ во 10:00, 12:00 и 21:00 информационное окно в расширенном варианте и покажите, тогда можно будет сказать конкретно на сколько хуже.
для начала читаем документацию: OnOrder Функция вызывается терминалом QUIK при получении новой заявки или при изменении параметров существующей заявки. Черным по белому написано: придет onOrder, так как произошло изменение позиции, т е изменились параметры выставленной заявки. Т е у заявки на бирже изменились параметры. Новая не выставлялась.
Андрей Мурга написал: Ви не поняли,Смотрите if aaa>bbb then buy end if aaa<bbb then закрить бай и открить селл,Как ето записать кодом? тоесть банальний реверс просто увиличить контракт не поможет робот потом запутается
if aaa<bbb then sell end ---------------------------------------- если продать столько же сколько в позиции, то она закроется, если продать больше, чем есть (если бумага маржируемая), то откроется short.
На указанном железе будет плохо. Если хотите очень хорошо, то робот надо ставить на удаленном выделенном железном сервере, в крайнем случае виртуальном, возможно как сейчас у Вас.
Вячеслав, Все что я написал - есть правда. Но причину ошибки я указал неверно. Вы тоже неверно указали причину ошибки. ------------------- Ошибка в том, что переменная order не содержит элемента order_num Поэтому вызов функции onOrder с параметрами или без не спасает от этой ошибки.
программа на луа делает один цикл купить-продать, программу скачал с интернета. работает. или сам переделал. она купила или продала по индикатору и встала.