nikolz (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 18 19 20 21 22 23 24 25 26 27 28 ... 77 След.
Функция getCandlesByIndex() и закрытие свечки
 
Цитата
Денис написал:
Погуглив немного нашел кое-что похожее для определения нового бара. Подправил, сейчас переменная first_candle_index обновляет свой индекс как только появляется новая свеча.
Но как это прикрутить для дальнейших вычислений, пока не допер.
Тут на форуме нашел вот что, цитирую : SetUpdateCallback при смене индекса даст вам как раз момент открытия новой свечи.
Вот как ее прикрутить к функции поиска индекса ниже? Или может есть другие методы какие?

function newbar()
ds, error_desc = CreateDataSource("SPBFUT", "SiM3", INTERVAL_M1)
local try_count = 0
while ds:Size() == 0 and try_count < 1000 do
sleep(100)
try_count = try_count + 1
end
if error_desc ~= nil and error_desc ~= "" then
message("Ошибка получения таблицы свечей:" .. error_desc)
return 0
end

local today_day = tonumber(os.date("%m"))
local current_candle = ds:Size()
local max_candles = math.min(20, ds:Size())
local first_candle_index = nil

while first_candle_index == nil and current_candle > ds:Size() - max_candles do
if tonumber(ds:T(current_candle).day) ~= today_day then

first_candle_index = current_candle - 1
end
end

return first_candle_index
end
Рекомендую начать написание своего робота не в виде скрипта а в виде индикатора.
Если будете торговать каким-то конкретным инструментом, то этого вполне достаточно, будет проще сделать работающий.
-----------------
Кроме того, рекомендую писать не торговый робот, а торговый советник.
Так будет меньше шансов слить свой счет.
-----------------
Потом перепишите советник в робота,
а затем если  захотите большего -возьметесь за скрипты.
--------------------
В итоге напишите все быстрее и качественнее.
Проблема установки связи с QUICK Сбербанка
 
Попробуйте, когда будет проблема сделать пинг по IP сервера
Проблема установки связи с QUICK Сбербанка
 
Цитата
Иван__ написал:
Anzhelika Belokur,

Цитата
Anzhelika Belokur написал:
Данная ошибка связана с сетевыми проблемами на стороне клиента (т.е у Вас), рекомендуем попробовать сменить канал для связи или провайдера.
Проблема не с провайдером. Сегодня попробовал через ноутбук на этом же соединении. И проводное и вайфай работают.

На ноутбуке стоит вин 10. Возможно проблема в этом.

Через ноутбук работать не удобно.

Плюс я уже описал обращение к провайдеру. Они проверили и у себя  еще у двух провайдеров. Какая-то проблема с сервером сбербанка.

nikolz,
Цитата
nikolz написал:
Попробуйте обновить кэш DNS.  
Попробовал. Не помогло.
Надеюсь, Вы кэш обновили не у браузера.
Отложенная покупка
 
Цитата
Александр_1976 написал:
Здравствуйте!
Ожидаю что в течении пары месяцев цена на акцию упадет.
Хучу выставить отложенную заявку на покупку по более низкой чем сейчас цене.
Есть ли разница в выставлении заявки через "стоп цена по другой бумаге"  или через "тейк профит"?
Пробовал через стоп лимит, заявка через несколько секунд заявка отклоняется.
Как правильно выставить отложенную заявку на покупку по цене ниже рынка?
Вы кандидат на нобелевскую премию. Так как ранее получатели ее доказали, что  прогноз с таким горизонтом невозможен.
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
Цитата
nikolz написал:
 
Цитата
Денис  написал:
FUTURES_CLIENT_HOLDING
 openbuys - Активные на покупку
opense[[s - Активные на продажу

Эти переменные содержат число, а не логическую переменную
В них либо ноль либо не ноль, а не TRUE и FALSE
--------------------------
Но запускать заново скрипт или main нет надобности в вашем случае.

Тут сорян, я не все написал видимо, то что переменные сравниваются с цифрами это так, я просто потом новую ввожу если ~=0 то запоминаю как TRUE, что есть активная лимитка.
По поводу возвращаемых данных есть смысл писать в функции Return? или в LUA в коде можно сразу писать   например -- If   Buy_Active_Limit == true и т.д.?

function check_active_position ()
  for i = 0,getNumberOf("FUTURES_CLIENT_HOLDING") - 1 do
      if getItem("FUTURES_CLIENT_HOLDING",i).sec_code == instrument then
       if getItem("FUTURES_CLIENT_HOLDING",i).openbuys ~= 0 then
         Buy_Active_Limit = true;
         
      end;
      end;
       end;
    return Buy_Active_Limit
end
Ликбез:
луа отличается например от СИ тем, что 0 - это не false, а true. Т е все числа - это true.
----------------------
return надо писать если что-то возвращаете из функции.
----------------
Ваш пример лучше написать так:
Код
function check_active_position ()
 for i = 0,getNumberOf("FUTURES_CLIENT_HOLDING") - 1 do
   local x=getItem("FUTURES_CLIENT_HOLDING",i);
   if x.sec_code == instrument then
     if x.openbuys ~= 0 then  return x.openbuys; end;
   end
 rnd
end

В этом варианте два момента.
1)  работает быстрее так как у Вас три раза ходите в архив, что существенно дольше чем работа с локальной переменной х
2)   если x.oprnbus  не равен нулю то функция вернет это значение
иначе она вернет nil  - а это false
Проблема установки связи с QUICK Сбербанка
 
Цитата
Иван__ написал:
Примерно с пару недель начала регулярно появляться ошибка при попытки установки связи с сервером:

connection was closed by peer cant get message size from net

Появляется преимущественно в утренние с 09-10 и вечерние после 23-х часы (по крайней мере что я заметил).
При обращении в сбер поддержку пиняют на провайдера.


Обратился к провайдеру. Провайдер проверил у себя и у двух других провайдеров (РОСТЕЛЕКОМ, МГТС, БИЛАЙН).
Проблема явно с сервером сбера.

Провел трасеровку айпи адреса через командную строку виндовс 2/3 пакетов теряется.

Подскажите как быть. Торговать не возможно. Не получается оставить заявку когда мне это нужно.
В поддержке Сбера сообщили что разбираться с заявкой будут месяц.

Как-то можно в медийное поле это вытащить, чтобы они зашевелились??


PS операционка Windows 7
Эта проблема может возникать при использовании устаревших DNS серверов или отключении используемого.
Попробуйте обновить кэш DNS.  
Функция getCandlesByIndex() и закрытие свечки
 
Цитата
Денис написал:
Похоже не просто будет мне получить информацию о том, что текущая свеча закрылась. Из ответов выше кроме костылей с обработкой времени баров других вариантов нет?
В питоне есть candle_close = true or false, в Амиброкере тоже есть свой костыль.
Попробовал что-то изобразить, но сессия закончилась.
У меня вроде стандартная задача - начинать расчет баров (обычное сравнение Bar-1 и Bar-2), но только когда текущая свеча закрылась. То что после закрытия текущей те бары сдвинуться на 1 - это понятно.
Может есть какие варианты с меньшим количеством костылей?
Спасибо.
закрытие свечи - это завершение интервала .Простейший алгоритм - синхронизируете ком от сервера точного времени и контролируете завершение текущего интервала времени.
---------------------
Но относительно нового бара вы ошибаетесь.
Новый бар возникнет не тогда, когда закроется предыдущая свеча, а тогда, когда появится сделка. Т е если сделки в новом интервале нет, то и бара нет.
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
FUTURES_CLIENT_HOLDING
openbuys - Активные на покупку
opense[[s - Активные на продажу

Эти переменные содержат число, а не логическую переменную
В них либо ноль либо не ноль, а не TRUE и FALSE
--------------------------
Но запускать заново скрипт или main нет надобности в вашем случае.
Создание отложенной покупки в сбере андроид x
 
Цитата
Серёга187 написал:
Цитата
Серёга187 написал:
Опытные подскажите: правильно ли я выставляю заявку на отложенную покупку? А то еще ни разу не сработала. Брокер сбер.
Все правильно делал. Просто цена сильно быстро росла и стоп не сработал...
если правильно, то стоп должен сработать, и либо заявка исполнится, либо  в стакане останется неисполненная заявка.
-------------------------
Если этого нет, то неправильно что-то сделал.
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
Понятно, стебутся коллеги значит )))

Может быть можно перезапустить как-то функцию main()?
Как выйти из нее это понятно, но есть ли перезапуск?
Поясните подробнее, что и зачем хотите сделать, возможно объясню как это реализовать.
Скрипт для перезапуска другого скрипта
 
возможно Вы хотите запустить скрипт из файла как дополнительную библиотеку или исполняемый код - это можно стандартной функцией dofile
Скрипт для перезапуска другого скрипта
 
при запуске скрипта в терминале создается VMLua в ней вызывается  в дополнительном потоке функция main как дочерняя.  
Скрипт для перезапуска другого скрипта
 
Цитата
Денис написал:
в
Ликбез:
Вообще-то, скрипт запускается не в QLUA, а в терминале QUIK.
QLUA - это библиотека на CИ для обращения на языке луа к функциям и архиву данных терминала QUIK.
Поэтому нет в библиотеках луа функции запуск скрипта терминала из подобного скрипта
===============
Можно из скрипта терминал квик запускать  еще скрипты в дополнительных потоках, но это не тоже самое и функции в чистом луа для этого нет.
-------------------
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Ликбез о том какие ресурсы скрыты от создателей роботов на чистом Lua.
----------------------
Cделал тест сравнения быстродействия чистого LUA и
LUA совместно с функцией на СИ c использованием системы команд AVX2.
---------------
в тесте вычисляется в цикле 32000 раз
сумма элементов таблиц размером в 32000.
вот этот тест:
Код
MAX_SIZE=32000;
local pX,hFM,hfl=nkarray.cr(32768,4,"nkQUIK1");
local pY,hFM,hfl=nkarray.cr(32768,4,"nkQUIK2");
-------------------------------------
local N=MAX_SIZE
startA();
for j=1,N do  opVC(2,1,pY,1,N,pX,1); end
local t1=stopA();
------------------------------
local x1={}  local x2={} for i=1,N do x1[i]=0; x2[i]=1; end
startA();
for j=1,N do  for i=1,N do x1[i]=x1[i]+x2[i]; end  end
local t=stopA();
print("t1="..(0.1*t1/1000)..",t="..(0.1*t/1000)..",t/t1="..t/t1)
а вот результат LUA+C+AVX2 в 153 раза быстрее "чистого LUA":
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "test_funClua.lua"
t1=159.3,t=24433.3,t/t1=153.3
>Exit code: 0
Лимитная заявка
 
Цитата
Дмитрий написал:
nikolz, почему же стоп-лимит - это заявка на закрытие убыточной позиции?
Вот у автора нет позиции, он хочет купить при пробитии вверх. Если цена выставляемой лимитной заявки не будет выше макс возможной, и рынок за время выставления не уйдет выше этой цены, это желание автора исполнится
Безусловно, можно и микроскопом забить гвоздь.
и все названия - это лишь условности, которые упрощают понимание сущности вещей.
--------------------------
Поэтому я пытаюсь объяснить, что название  заявок было придумано не просто так, а с целью указать на их назначение.
-----------------------
Любая заявка направлена на совершение сделки.
--------------------------
Но некоторым конструкциям заявок авторы дают название. Стоп - означает "остановить"
----------------------------
В документации КВИК сказано:
В системе QUIK существуют следующие типы условных заявок:  (указано правильно типы условных заявок, а не типы стоп-заявок  Иначе масло - масленое).
  1. «Стоп-лимит» - стоп-заявка, порождающая при исполнении лимитированную заявку.

    НАЗНАЧЕНИЕ: Ограничение величины убытков при изменении цен сделок в сторону,  противоположную ожидаемой.

-------------------------
Выше я показал, что согласно документации в QUIK вообще все отложенные заявки назвали стоп-заявками.
-------------------------------
А кроме этого для каждой стоп заявки еще придумали тип стоп-заявки.
-----------------------
Квиковское определение в глоссарии стоп-заявки не выдерживает критики и не соответствует введенным ими же типам.
======================
Поэтому квиковские стоп-заявки  - это не стоп-заяки в классическом понимании,
так как стоп-заявка существует лишь в одном исполнении,  как указано в документации КВИК под типом Стоп-лимит.
==========================
 Поэтому  выставить заявку против рынка с помощью отложенной заявки типа "стоп-лимит" можно.  
Это можно сделать и заявкой типа  «Стоп-цена по другому инструменту»
=====================
Если бы квиковцы не изобретали велосипед в терминологии рынка,
то не возникало бы такой путаницы и многих вопросов, что можно, а что нельзя.  
------------------------------
В действительности, названные ими стоп-заявки - это ОТЛОЖЕННЫЕ заявки.
-------------------------
Т е в отличии от заявок, которые отправлены на биржу, эти заявки остаются на сервере брокера до момента возникновения условия отправки их на биржу.   И слово "стоп" вообще не имеет смысла в их названии.
-----------------------------
Это заявки можно назвать отложенными -условными  или отложенными-алгоритмическими.
Но самое бессмысленное название для них - это "Стоп заявки"
-----------------------
Т е мы имеем наглядный пример, как дилетантское применение  общепринятого в профессиональной области понятие стоп-заявки приводит к путанице, а не к упрощению понимания сущности.  
Лимитная заявка
 
и еще
В некоторых стоп-заявках терминала квик указывается более 2 значений цен.
Согласно определению это уже не стоп-заявки.
------------------
Тогда это что за заявки?
Лимитная заявка
 
Цитата
Kalmar написал:
Kalmar
пардон, опечатка
-----------------------
Исправляю
согласно документации КВИК
Разработчики QUIK дали свое собственное определение стоп-заявки:
--------------------------------------
Стоп-заявка – поручение, исполняемое брокером в зависимости
от достижения рыночной ценой инструмента определенного уровня. В такой заявке
указывается два значения цены.

Прикольно, но первое предложение этого определения - это условие лимитной заявки.
Второе предложение не верно, если заявка будет выполнена по рыночной цене.
-------------------------
Таким образом, определение стоп-заявки придуманное разработчиками КВИК - не выдерживает никакой критики.
Это масло масленое.
====================
Очевидно, понимая, что они написали бессмыслицу, далее они уточняют:
«Стоп-лимит» – это  стандартная стоп-заявка;
------------------------
Поэтому в приведенном выше ликбезе
следует согласно документации читать  
стандартная стоп-заявка - «Стоп-лимит» – это заявка на закрытие убыточной позиции
=========================
и далее
Можно конечно использовать ее для открытия новой позиции, вне зависимости от наличия позиции,
но для этого есть другие типы стоп-заявок.
--------------------
Ув, разработчики может имеет смысл убрать это Ваше определение стоп-заявок?
Просто ужас какой-то.
Лимитная заявка
 
Ликбез:
------------------------
стоп-заявка - это заявка, которая хранится на сервере брокера.
-----------------------
Название стоп-заявка означает, что ее назначение закрыть убыточную позицию.
--------------------------------
Условия стоп-заявки проверяет сервер брокера.
------------------------------
При возникновения условий,
стоп-заявка переписывается сервером в заявку и отправляется на биржу.
------------------------
Можно конечно использовать ее для открытия новой позиции, вне зависимости от наличия позиции,
но для этого есть другие типы заявок.  
Лимитная заявка
 
Собака лает, караван идет.
Лимитная заявка
 
Цитата
Танечка написал:
Подскажите, как создать в квике лимитную заявку например на покупку выше текущей цены?  Устанавливаю цену, галочка по рынку не стоит, все-равно входит по рынку. Что за фигня.... В приложении скрин  МТ5 - там называется BUY stop. Как это сделать в квике?
попробуйте почитать руководство пользователя QUIK , а не MT5
------------------------------
Ввод заявки

кнопка Назначение

Формирование и передача на исполнение новой заявки на покупку/продажу  инструментов.

Открытие окна «Ввод заявки» осуществляется:

  • Нажатием кнопки на панели инструментов;
  • Двойным нажатием левой кнопки мыши;
  • Нажатием клавиши «F2»;
  • Выбором в таблице пункта контекстного меню «Новая заявка»;
  • Выбором пункта меню Действия;
  • Использованием Общего способа выполнения транзакций с выбором операции «Ввод
    заявки»;
  • Из окна «Графики». Подробнее см. Ввод заявки из окна
    «Графики».

Если кнопка на панели инструментов неактивна
(серая), значит, ввод заявки по выбранному инструменту невозможен.  

Ввод заявки возможен в таблицах: Таблица котировок  (очередь заявок), Объединенные котировки, Таблица заявок, Таблица сделок,  Таблица обезличенных сделок, Таблица текущих торгов, Карман  транзакций.

Если при вводе заявки из таблицы неизвестен инструмент, по которому подается  заявка (в таблице нет выделенных строк, или таблица пустая), то на экран  выводится форма выбора инструмента для новой заявки:  

 

Для выбора доступны только те классы, по которым у пользователя есть право  активных операций и для которых получена соответствующая операции транзакция.  

Признак «Только активные инструменты» позволяет исключить из списка  инструменты или контракты, не имеющие заявок, сделок или открытых позиций.  

При нажатии кнопки «Выбрать» открывается форма ввода заявки по выбранному  инструменту.  

См. также Управление заявками из Таблицы котировок  


Руководство пользователя QUIK © ARQA Technologies / www.arqatech.com/ru/products/quik/.
Снятие заявки, server check failed
 
getOrderByNumber

Функция возвращает таблицу Lua, содержащую описание параметров Таблицы заявок и индекс заявки в хранилище терминала.  

TABLE order NUMBER indx getOrderByNumber(STRING class_code, NUMBER  order_id)

Если заявка с указанным номером не существует, то возвращаемые параметры -  «nil».

Снятие заявки, server check failed
 
Цитата
Надежда Аверьянова написал:
Цитата
nikolz написал:
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Я получила номер заявки через OnOrder, записала его в переменную и эту переменную записала в ключ ["BASE_ORDER_KEY"], но квик опять говорит что не указан номер базовой заявки. Что не так? Получить номер из таблицы заявок у меня тоже не получается - одни ошибки выдает. Помогите составить кусок кода на получение номера заявки из таблицы заявок пожалуйста
покажите скрипт
Снятие заявки, server check failed
 
колбек OnTransReply  это реакция на транзакцию, а не на состояние заявки.
Для заявки надо работать по OnOrder OnStopOrder либо по таблицам заявок и стоп-заявок
Конкурентноспосбный Quik (не только для торговли), но и обучения, ошибки, пожелания и полезные предложения.
 
Все очень просто и банально.
-----------------------
Деньги разработчикам QUIK платят  брокеры.
--------------------------------------
Брокерам платят их клиенты.
----------------
Два вопроса знатокам
-------------------------
1) С какого бодуна Вы жалуетесь разработчикам на хреновые услуги брокеров
2) C какого бодуна разработчики квик обязаны делать что-то для Вас.
-----------------------
Надо искать там, где потеряли, а не там, где светло.
Невозможно войти в КВИК, Невозможно войти в КВИК из-за сертификатов.
 
У меня вин 10 все работает нормально у сбербанка.
Возможно не установили сертификат.
У меня никаких кнопок в квике не появилось.
Попробуйте переустановить сертификат  
не могу войти в квик сбербанка, после ввода логина и пароля выскакивает Цепочка сертификатов обработана, но обработка прервана на корне
 
Цитата
serg написал:
как загрузить квик сбербанковский? все время надпись выскакивает:"Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия."
c 1 апреля в КВИК сбербанка можно зайти если у вас установлен на компе сертификат минцифры
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Про  Pine Script.
это разработка  TradingView
и скрипты исполняются на их сервере.
т е все что вы напишите - это их собственность
На их сайте для Вас дан ответ на вопрос:
----------------------------
Почему я не должен использовать скрипт Pine?

Основная причина, по которой вы не захотите использовать скрипт Pine, заключается в том, что вы ограничены вселенной TradingView.

Вот некоторые конкретные ограничения:

Данные. Если TradingView не предлагает нужные вам данные, вам не повезло. Конечно, TradingView имеет очень обширную базу данных. Но если ваша стратегия предполагает торговлю на малоизвестных рынках, данные о ценах могут быть недоступны.

Сервис выходит за рамки данных о ценах. Некоторые стратегии включают экономические или статистические данные. TradingView предлагает некоторые данные (в основном данные Quandl) в этой категории, но в настоящее время они ограничены.

Если вы используете альтернативные данные в своей стратегии, вероятно, будет проще использовать другой язык программирования, который обеспечивает большую гибкость.

Внешние библиотеки. Pine Script не подходит, если вы хотите использовать внешние библиотеки для выполнения таких задач, как машинное обучение. Есть лучшие альтернативы, если ваша стратегия основана на использовании науки о данных или других сторонних библиотек.

Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
для питона тоже есть JIT    
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
и еще
все веб приложения (PineScript,) работают очень медленно по сравнению даже с питоном.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
Станислав написал:
Цитата
nikolz написал:
 
Цитата
Станислав  написал:
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
 Не видел торговых систем на их основе
Подключать к КВИКУ не планирую.
Вполне устраивает Lua, MQL5 и C.
PineScript, TradingView, терминал Тинькофф.  

Да я и не прошу его подключать к квик.
Сейчас молодежь со школы учат программировать на python, наверное, это был бы самый востребованный вариант в будущем. (сам не программирую на нем)
Давно торгую на MOCEX и давно использую QUIK.
Как я писал ранее на форуме, QUIK позволяет работать с высокой скоростью.
----------------------------
Если возникнет необходимость в использовании TradingView, то напишу для него.
Пока мне этого не надо.
-----------------------------
Относительно питона.
Тоже кое что использую для разработки встроенного софта IOT.
------------------------------
Проведенный тест показал что его интерпретатор почти в 100 раз медленне C и в 50 раз медленнее LuaJIT.
Прикручивать его с КВИКУ смысла не вижу.
-----------------------------------
В школе учился давно, тогда там программировать не учили, но это мне не мешает программировать сейчас на любом языке, если надо.
Полагаю, что в будущем молодежь освоит все что ей понадобится самостоятельно.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
Станислав написал:
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
Не видел торговых систем на их основе
Подключать к КВИКУ не планирую.
Вполне устраивает Lua, MQL5 и C.
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Цитата
TGB написал:
Цитата
nikolz написал:
Один компьютер может обсчитывать очень сложный алгоритм по одному инструменту в реальном времени.
Например нейронную сеть на 1 миллиард  нейронных связей.
------------------------Делаем в интернет пул скажем 1000 компьютеров Получаем распределенный кластер прогнозирования 1000 инструментов в реальном времени.
 :: .
«Остапа понесло  …..
Остап со вчерашнего дня еще ничего не ел. Поэтому красноречие его было необыкновенно»
     Ильф и Петров:  «Двенадцать стульев»
«МУЖАЙТЕСЬ! ЗАПАД НАМ  НЕ ПОМОЖЕТ»
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Цитата
Александр М написал:
Цитата
nikolz написал:
Один компьютер может обсчитывать очень сложный алгоритм по одному инструменту в реальном времени.
Например нейронную сеть на 1 миллиард  нейронных связей.
------------------------
Делаем в интернет пул скажем 1000 компьютеров
Получаем распределенный кластер прогнозирования 1000 инструментов в реальном времени.
При таком размахе нужен не QUIK, а плаза, а там совсем другой подход.
Ликбез:
плаза - это протокол , а не терминал.
---------------------
Plaza II Шлюз FORTS — Программное обеспечение, обеспечивающее обмен данными между Серверной частью ПО – Торговой и клиринговой системы рынка фьючерсных контрактов и опционов (Торговой системой FORTS)
и сертифицированной брокерской системой Интернет-трейдинга (читай сервер QUIK ) по протоколу Plaza II.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Прикольно,.
Интерпретатор питона версия 3.10 на тесте фибо  в 3 раза медленнее, чем Lua 5.3.  
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Один компьютер может обсчитывать очень сложный алгоритм по одному инструменту в реальном времени.
Например нейронную сеть на 1 миллиард  нейронных связей.
------------------------
Делаем в интернет пул скажем 1000 компьютеров
Получаем распределенный кластер прогнозирования 1000 инструментов в реальном времени.
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Цитата
Александр М написал:
Сами по себе цифры конечно красивые и проделана видимо огромная работа, но вот практическая целесообразность такой оптимизации под вопросом для реальных задач из под QUIK.
нет никакой оптимизации.
-------------------------
Какую реальную задачу Вы сейчас решаете? Возможно она потому и не решается, что решается примитивно.
---------------------------------
Представьте , что можно на КВИКЕ решать задачу   в 100 раз сложнее за тоже время, что у Вас сейчас.
----------------------------------------
А учитывая возможность запуска много потоков,
сложность решаемой задачи на квик может быть в 500...1000  чем решаемая Вами сейчас.
-------------------------------------
И это на обычном компьютере без CUDA.
----------------------
Прикиньте сколько стоит компьютер, который в 100 раз быстрее вашего считает? А 2 1000?
Вот эту задачу это и решает.
--------------------
Если вы пришли на рынок за баблом  то не ждите, что Вам его примитивный скрипт принесет.  
Скорее всего он его сольет.
Чудес не бывает.
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
 
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
 
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
пардон опечатка
Это сглаженное значение максимального диапазона движения либо свечи за последний день, либо  гэпа.
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
пардон опечатка
Это сглаженное значение максимального диапазона движения либо свечи за последний день, либо свечи с учетом гэпа.
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
Цитата
Sergey написал:
Спасибо за ответ!
Я вчера размышлял пока засыпал и пришел к такому выводу. Выражаясь вашими словами, разность движений направлений за день, определяет и направление по которому будет следовать индикатор. Проще говоря, если цена закрытия ниже половины ATR, то направление индикатора будет вниз, даже если свеча при этом будет зеленой.  
Каждый индикатор предполагает некоторую модель рынка.
В данном случае предполагается, что во первых рынок очень ликвидный.
-----------------
Индикатор ATR
Расчетная формула ATR:
ATR = Moving Average(TRj, n),
где
TRj = максимальному из модулей трех значений
|High — Low|, |High — Closej-1|, |Low — Closej-1|.
-------------------
Понимать его можно так:
Это сглаженное значение максимального диапазона движения либо последней свечи за день, либо свечи с учетом гэпа.
Т е это индикатор движения (волатильности) рынка.
-----------------------
ATR - это индикатор разности, поэтому некорректно сравнивать его с ценой.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
 
Какое значение находит эта формула?, Популярная формула 2*Close-Low-High
 
Модель данного индикатора такая.
Предполагается, что направление движения цены определяет направление денежного потока на рынке.
-----------------------------
Так как все широко известные индикаторы были предложены до компьютеров,
то они предполагают интервал от дня и выше.
------------------------
Для конкретики рассмотрим интервал день.
--------------
Чтобы было наглядно, нарисуйте один период синусоиды
--------------------------
(Close-Low) -диапазон движения цены вниз относительно закрытия за день,
--------------------
(High-Close) -диапазон движения цены вверх день
------------------
Предполагаем , что это разное направление движения денег .
----------------
2*Close-Low-High =(Close-Low)-(High-Close) - разность направлений движения денег за день
-------------------
High-Low - это весь диапазон движения денег за день
--------------------
((2*Close-Low-High)/(High-Low)) - относительное изменение денежного потока
-------------------
((2*Close-Low-High)/(High-Low))*Volume - абсолютное изменение денежного потока за день
 
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
 
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
   
Сравни LUA5.3 и LUAJIT в QUIK
 
Добрый день,
Ранее сообщал, что сделал возможность запуска скриптов QUIL  в отдельных потоках в LUAJIT.
----------------
кратко это работает так.
В колбек OnParam приходят сделки инструментов, которые передаются в функцию main()
-----------------------
В main - это LUA 5.3  по каждому инструменту запускается скрипт алгоритма робота в отдельном потоке из пула потоков  под LUAJIT.
======================
На просторах интернета нашел тесты по которым разработчики сравнивали MT5  сравнивали  MQL5 и LUA в QUIK.
---------------------
вот сами тесты:
Код
-- TestQuickSort
local array={}
local function QuickSort(arr,left,right)
  local  i=left
  local  j=right
  local  center=arr[math.floor((i+j)/2)]
    while i<=j do
        while(arr[i]<center and i<right) do   i=i+1  end
        while(arr[j]>center and j>left) do  j=j-1   end
        if i<=j then  local   x=arr[i]   arr[i]=arr[j]    arr[j]=x     i=i+1    j=j-1  end
    end
    if left<j then  QuickSort(arr,left,j)  end
    if right>i then  QuickSort(arr,i,right)  end
end

local function Start1()
    for i=0,MAX_SIZE-1 do  array[i]=i%100 end
    start=os.clock()
    QuickSort(array,0,MAX_SIZE-1)
    res=(os.clock()-start)*1000
    print("TestQuickSort SIZE="..MAX_SIZE..", time=" .. res .. " ms")
    for i=1,MAX_SIZE-1 do
        if array[i]<array[i-1] then  print("Array not sorted"); break;
        end
    end
end

local str=""
local a={}
local function PiCalculate(digits)
local   d = 0
local   c = (math.floor(digits/4)+1)*14
local   f = 10000
   for i=0,c do a[i]=20000000   end
   c=c-14
   b=c
   while b>0 do
      e=d%f
      d=e
      while b-1>0 do
         b=b-1
         d = d * b + a[b]
         g = (b * 2) - 1
         a[b]=(d%g)*f
            d=math.floor(d/g)
        end
        r=e+math.floor(d/f)
      if r<1000 then
         if(r>99) then
            str=str .. "0"
         else
            if(r > 9) then
               str=str .. "00"
            else
               str=str .. "000"
            end
         end
      end
      str=str .. string.format("%d",r)
      c=c-14
      b=c
   end
end

function Start2()
   start=os.clock()
   PiCalculate(MAX_SIZE)
   res=(os.clock()-start)*1000
   print("TestPiCalculated SIZE="..MAX_SIZE..", time=" .. res .." ms  Pi="..string.sub(str,1,16))
end

-- TestFibo

local fib={}
local function TestFibo(n)
   if n<2 then return 1 else return TestFibo(n-2)+TestFibo(n-1) end
end

local function Start3()
   start=os.clock()
   for i=0,MAX_SIZE-1 do    fib[i]=TestFibo(i) end
   res=(os.clock()-start)*1000
   print("TestFibo SIZE="..MAX_SIZE..", time="..res.." ms Fibo[39]="..fib[39])
end

-- TestArrays
local function Start4()
   local  x={}    local y={}
    local start=os.clock()
    for i=1,MAX_SIZE,1 do   x[i]=i  y[i]=0   end
    y[MAX_SIZE]=0
    for k=1,MAX_SIZE,1 do
        for i=MAX_SIZE, 1,-1 do  y[i]=y[i]+x[i] end
    end
    local res=(os.clock()-start)*1000
    local check=0
    for k=1,MAX_SIZE,1 do check=check+y[k]  end
    print("Test Arrays SIZE="..MAX_SIZE..", Time = "..res.." ms check=".. check)
end

local function Ackermann(m,n)
        if(m==0) then return(n+1) end
        if(n==0) then return(Ackermann(m-1,1)) end
        return(Ackermann(m-1,Ackermann(m,(n-1))))
end

-- TestAckermann
local function Start5()
    local check=0
    local start=os.clock()
        for i=1,MAX_SIZE do  check=check+Ackermann(1+i%3,1+i%5); end
    local finish=os.clock()
    local res=(finish-start)*1000
    print("TestAckermann SIZE="..MAX_SIZE..",time=".. string.format("%.0f",res).." ms check="..check)
end


-- TestFloat
local f0=0.0
local f1=123.456789
local f2=98765.12345678998765432
local f3=12345678943.98

function TestFloat(MAX_SIZE)
   MAX_SIZE=MAX_SIZE-1
   for i=0, MAX_SIZE do
        for j=0, MAX_SIZE do
            f0=f0+(f1/(i+1))-f2+(f3*i);
        end
    end
end

function Start6()
   local t=os.clock()
   TestFloat(MAX_SIZE)
   local res=(os.clock()-t)*1000
 local  check=f0
   print("TestFloat SIZE="..MAX_SIZE..", time=" ..res.." ms  check="..tostring(check));
end


MAX_SIZE=35000; Start6()
MAX_SIZE=120000; Start5()
MAX_SIZE=32000; Start4()
MAX_SIZE=40; Start3()
MAX_SIZE=22000; Start2()
MAX_SIZE=16000000; Start1()
===================
На этих тестах я провел тест LUA 5.3 и LUAJIT.
==================
Результаты  говорят сами за себя:

Когда подключу MT5 к QUIK, то сделаю тест и для него.
-----------------------
Следите за новостями.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
Станислав написал:
Очень интересно, поздравляю с успехом коллега!

Не понимаю, где была инициализирована переменная  nk1?PS: К сожалению, не являюсь программистом на C/C++.
nk1 инициализирована в другом потоке и скрипте на  Lua5.3.
Применительно к скриту QUIK  - в функции main()
------------------
Т е таким образом в этот поток в скрипт LuaJIT передаются любые параметры из потока со скриптом на Lua5.3
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
В качестве ликбеза.
----------------------
LUAJIT - это компилятор с оптимизацией в реальном времени.
---------------------------
Так как любой робот это циклическое повторение расчета алгоритма прогноза по полученным данным, то LuaJIT
выполняет компиляцию и оптимизацию скрипта совместно с виртуальной машиной.
----------------------------
В итоге с каждым новым циклом скрипт работает все быстрее и быстрее, приближаясь по скорости к чистому CИ.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
сделал библиотеку , которая позволяет из скрипта  на Lua5.3...5.4  вызвать в отдельных потоках  скрипты на LuaJIT.
Теперь можно запустить в скрипте КВИКА  программный пакет  TORCH ( ФАКЕЛ) .
----------------------------------
Вот пример бесконечного цикла скрипта в LuaJIT с синхронизацией потоков по событиям и вызов функций СИ через библиотеку FFI.
--------------------------------.
В этом примере из потока скрипта Lua5.3 передаются данные в  поток скрипта  LuaJIT через переменную nk1, которая выводится в файл.
Код
local ffi = require("ffi")

ffi.cdef[[
void Sleep(int ms);
long OpenEventA(uint64_t dwDesiredAccess, int bInheritHandle, const char* S);
long WaitForSingleObject( uint64_t hHandle, long  dwMilliseconds);
long CreateEventA(int dwDesiredAccess, int M,int bInheritHandle, const char* S);
int SetEvent(uint64_t hEvent);
int ResetEvent(uint64_t hEvent);
]]
path = "D:/QUIK_SCRIPT/nk_bot/"
Log=io.open("D:/QUIK_SCRIPT/nk_bot/test_jit.log","w")
local event=ffi.C.OpenEventA(0x1f0003,0,"event");
while true do
   local x=ffi.C.WaitForSingleObject(event,-1); --ждем события
   local z=nk1;
   Log:write(os.time()..","..tostring(z).."\n"); Log:flush();
   ffi.C.ResetEvent(event)
--   print(x)
end
RSI старшего таймфрейма
 
это не ложные шипики.
Посмотрите формулу RSI
RSI считается по разности закрытия свечей. Поэтому увеличение периода сглаживания не тоже самое что RSI на большем интервале.
На интервале 1 день все свечи с интервалом 1 ча просто не существуют.
Я конечно понимаю, что Вам все равно, так как Вы не понимаете смысла индикаторов.
Страницы: Пред. 1 ... 18 19 20 21 22 23 24 25 26 27 28 ... 77 След.
Наверх