Андрей (Все сообщения пользователя)

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

Страницы: Пред. 1 2
Как разделить строку на отдельные числа?, Исторические данные
 
Цитата
Андрей написал:
но зато зеркальное
было зеркальным))
Как разделить строку на отдельные числа?, Исторические данные
 
Да, забавно получилось)) (количество сообщений разное, но зато зеркальное)
Как разделить строку на отдельные числа?, Исторические данные
 
Я вот тут находил полезную функцию. просто вставляешь ее в код и далее:
Код
S = "Hello//World";
S.split("//");

for i = 1,#S
    message(S[i]);
end
awg_position_price
 
Sergey Gorokhov,

Есть ли новости по заданному мною вопросу ?
Где ошибка при заполнении таблица для стоп лосса и тейк профита ?
 
Подскажите пожалуйста еще, как можно добавить пользовательский комментарий к заявке ?  Мне нужно будет его программно считывать. К сожалению комментарий который я ввожу в поле "COMMENT", не отображается после выставления заявки...
Где ошибка при заполнении таблица для стоп лосса и тейк профита ?
 
Кстати да, попробую сейчас вновь
Где ошибка при заполнении таблица для стоп лосса и тейк профита ?
 
Помогите где я ошибаюсь при заполнении таблицы ?

Заполняю следующим образом:
Код
local T = {
       TRANS_ID = tostring(math.random(1,1000000)),
       CLASSCODE = class_code,
       SEC_CODE = sec_code,
       ACCOUNT = account,
       ACTION = "NEW_STOP_ORDER",
       QUANTITY = tostring(T_position.qty),
       EXPIRY_DATE = "GTC",
       IS_ACTIVE_IN_TIME = "NO",
            OPERATION = "B",
            OFFSET = "0",
            OFFSET_UNITS = "PRICE_UNITS"
     }

-- SL

T["COMMENT"] = "SL";
T["STOPPRICE"] = tostring(SL);
T['MARKET_STOP_LIMIT'] = 'NO'
T["PRICE"] = tostring(getPrice(T["OPERATION"],SL));


--TP

T["COMMENT"] = "TP";
T["STOP_ORDER_KIND"] = "TAKE_PROFIT_STOP_ORDER";
T["STOPPRICE"] = tostring(TP);
T['MARKET_TAKE_PROFIT'] = 'NO'
T["PRICE"] = tostring(getPrice(T["OPERATION"],TP));
Ошибка следующая:
Ошибка выставления стоп-заявки TP:  Не указан инструмент транзакции
awg_position_price
 
Цитата
Sergey Gorokhov написал:
Уточните еще по какому инструменту Вы смотрите данные.
Однако жто как я понял на всех акциях так получается (повторюсь, что я на демке смотрел). и повторюсь что для того что бы описанная проблемма имела место, нужно убрать в функции умножение на 100.
awg_position_price
 
Цитата
Sergey Gorokhov написал:
Уточните еще по какому инструменту Вы смотрите данные

BANEP
MTLR
awg_position_price
 
Цитата
Sergey Gorokhov написал:
Просьба предоставить код скрипта.

Код работает верно сейчас, но если убрать умножение на 100 (там где у меня стоит комментарий " -- Уточнить нужно ли умножать на 100") и попробовать достучаться до цены открытия позиции по акциям, то тогда описанная мною проблема как раз и всплывает (без этого умножения у меня цена возвращается деленная на 100).
Код
select_CurrentDeals = function(account,class_code,sec_code,limit_kind)
      
      isPosition = false;
      T_position={};
      T_position.class_code = class_code;
      T_position.sec_code = sec_code;
      T_position.account = account;
            
      close_price = getParamEx(class_code,sec_code,"last").param_value;
      
      if class_code == "SPBFUT" then
      
      T_position.position_type = 0;
      
         for i = getNumberOf("futures_client_holding")-1,0,-1 do
            T = getItem("futures_client_holding",i);
            
            if T.sec_code == sec_code and
               T.totalnet ~= 0 then
               
               if T.totalnet > 0 then
                  T_position.position_type = 1;
               else
                  T_position.position_type = -1;
               end;
               
               T_position.qty = math.abs(T.totalnet);
               T_position.price = T.avrposnprice;
               
               if T_position.position_type > 0 then
                  T_position.current_PL = close_price - T_position.price;
               else
                  T_position.current_PL =  T_position.price - close_price;
               end;
               
               break;
            end;
         end;
      else
      T_shares = {};
         for i = getNumberOf("depo_limits")-1,0,-1 do
            T = getItem("depo_limits",i);
            
            if T.sec_code == sec_code and 
               T.limit_kind == limit_kind and
               T.trdaccid == account and
               T.currentbal ~= 0 then
               
               isPosition = true;
               T_shares = T;
               break;
            end;
         end;
      
         if isPosition then
            lotSize = 1;
            for i = getNumberOf("securities")-1,0,-1 do
               T = getItem("securities",i);
               if T.code == sec_code and T.class_code == class_code then
                  lotSize = T.lot_size;
                  break;
               end;
            end;
            
            T_position.price = (T_shares.awg_position_price*100); -- Уточнить нужно ли умножать на 100
            T_position.qty = math.abs(T_shares.currentbal/lotSize);
            
            if T_shares.currentbal > 0 then
               T_position.position_type = 1;
            else
               T_position.position_type = -1;
            end;
         
            if T_position.position_type > 0 then
               T_position.current_PL = close_price - T_position.price;
            else
               T_position.current_PL =  T_position.price - close_price;
            end;
         else
            T_position.position_type = 0;
         end;
      end;
      
      return T_position;
   end;
awg_position_price
 
Доброго времени суток. Хотелось бы узнать из за чего происходит следущее:

я стараюсь узнать цену открытия по акциям, но вместо этого получаю в ответ цену деленную на 100. То есть, 1621,5 =  16,215.
Это был тест на демке Арки, на реале не проверял. Это только с демо счетом актуально ? или же на реале так же будет ?
Реальная цена открытия позиции.
 
Цитата
Egor Zaytsev написал:
В этом плане не планируются доработки.
Однако не только для меня это актуальная задача, спрос есть. Да и в квике многие давно не только интрадеем занимаются...
Я вот сейчас задался задачей демона писать который в базу данных цены открытия сохраняет и удаляет после того как позы закрыты... Так что есть еще одна просьба зарегистрировать это пожелание на доработку системы.
Автоматическое снятие стопа
 
Здравствуйте, можно ли как нибудь сделать следующее:
1) Если существует уже открытая позиция, прицепить к ней стоп и тейк одновременно (или же что то одно) с условием если эта позиция была закрыта (либо по рынку, либо по стопу или тейку или же еще как нибудь...) то тогда выставленные стоп лосс и тейк профит снимались бы автоматически ?

2) Открываю заявку по лимитному ордеру (или же по стоп ордеру) и после срабатывания заявки, автоматически ставятся стоп лосс и тейк профит с тем же условием, (что после закрытия позиции или же отмены выставленной заявки и стоп и тейк снимались бы)

Как я понимаю, стоит копать в направлении Связанных заявок, однако я не совсем пойму какие полы нужно заполнять в структуре для достижения требуемого результата...  
OnTrade, OnOrder
 
Цитата
Алексей написал:
В принципе, да. Но в очень специфических случаях, например, когда во время клиринга происходит перевыставление долгосрочных заявок.
Правда, сделки собственно во время клиринга не заключаются, поэтому OnTrade не придет со временем datetime внутри клиринга.
Благодарю Вас за ответ.

Как я понял, фильтровать события пришедшие из за клиринга и события пришедшие из за совершения сделки нужно только по полю времени совершения сделки, верно ? или же есть еще какие либо отличия ?
Реальная цена открытия позиции.
 
Цитата
s_mike@rambler.ru написал:
вы хотите то, чего не может быть в природе.
Ну во первых не правда. это вполне есть в природе.
Лично для меня - это средневзвешанная цена на момент открытия (несколько выходов, цены - усредняем, веса - объемы входа)
Либо на крайний случай подойдет и цена самой первой сделки.

Цитата
s_mike@rambler.ru написал:
поэтому берите стамеску и строгайте "костыль"
Касательно костылей, хранится ли в квике история всех сделок ? или же только сделки за день (ну или с момента запуска терминала) ? И из какой из таблиц их можно достать ?
OnTrade, OnOrder
 
Вопрос по этим коллбекам (OnTrade, OnOrder)

Как я понял, они вызываются, если была совершена сделка либо выставлен ордер (либо изменения по существующим)

1) Считаются и операции совершенные вручную тоже ?
2) Вызываются ли эти коллбеки во время клиринга ?  
Реальная цена открытия позиции.
 
Доброго времени суток. Хотелось бы узнать, как получить реальную цену открытия позиции, а не цену открытия позиции после клиринга ?

Т.е. что бы допустим, я запустил робота, прошел клиринг, а он смог бы узнать реальную цену открытия. или же вдруг на сервере произошла перезагрузка, терминал был выключен после запускаю все заново и робот смог бы опять подхватить реальную цену открытия. (интересует как срочный рынок, так и фондовый) и желательно без костылей вроде сохранения цены открытия в базе данных и прочего...  
Направление прошлой сделки
 
Доброго времени суток. У меня тут вопрос, от куда (кроме таблицы всех сделок) можно получить информацию о направлении прошлой сделки (за последний тик) т.е. мне нужно знать была ли покупка или же продажа на прошлом тике.
Таблица всех сделок вроде дает эту информацию, однако мне нужно сделать так, что бы не нужно было в квике открывать не какие таблицы. т.е. запустил робота, и он сам тягает эту информацию.
Взаимодействие OLua и Lua под Виндой
 
Вот еще кстати одна ссылка в догонку так сказать, тут очень даже хорошо создатель сайта расписал метод стыковки С++ и квика. Сам сейчас сижу с жтой стыковкой воюю. https://quikluacsharp.ru/qlua-c-cpp-csharp/vyzov-funktsij-qlua-lua-iz-dll-napisannoj-na-c-c/

МТ5 довольно гибок, да и для тестов история как раз и нужна, ну что там у Вас я не знаю, так что это вам решать уж...
Взаимодействие OLua и Lua под Виндой
 
Проще всего написать программу думаю которая будет реализовывать все функции Lua - к примеру берет файл с котировкой банально в цикле прогоняет и дергает события Lua (приход нового тика, совершение сделки и прочие...)

Мне кажется, нет я уверен, что хороший все сторонний тестер под Lua не написать (как мин без подключения доп. библиотек на языках типа плюсов и С#) Однако лучше да и правильнее скрипты Lua тестить а не в скриптах тестить) Тот же МТ5 для тестов намного лучше будет (там практически все что нужно есть для оптимизации и прочего...) Но в квике больше возможностей для торговли (опционы к примеру...) Если же использовать MT5 для тестов, то нужно будет переписывать робота на Mql и затем там тестить, оптимизировав уже можно торговать (останется только график нужного Вам инструмента в Мт загрузить там есть такая возможность.).

Вот пара полезных ссылок, возможно Вам пригодятся:
https://habrahabr.ru/post/197300/
https://habrahabr.ru/post/237503/
Все с хабра - сайт и сам по себе популярный так что надеюсь меня не сочтут за рекламщика))
Lua Dll на C++
 
Цитата
Антон написал:
Цитата
Андрей   написал:
Похоже понял, однако уточните единственный ли это способ ? Хочется все варианты перебрать.
Код
    L_ptr   =   lua_newthread(L);
    
Так же скажите пожалуйста где бы взять список всех функций Луа и прочего которые в новом потоке запускаются, и какие в основном? Иначе говоря пренадлежность функция - поток (с точки зрения квика)
Ну ябы выбрал этот вариант. А все варианты... я незнаю для чего вам много потоков) принадлежность к потоку можно проверить GetCurrentThread()
все колбеки - основной поток квика. мэин - вам создали дополнительный, делайте там всю обработку.
у меня там крутиться очередь libuv, вполне удобно.

В итоге сделал так:
1) Выделил L под main и поместил его в класс с мьютексом.
2) L приходящую при инициализации поместил во второй класс с мьютексом.

Все функции внутри main используют класс № 1
Все коллбеки используют L которая у них в параметре приходит, парсят таблицы и передают моим коллбекам как параметр, второй параметр это класс с мьютексом № 2 - его используют все функции внутри других коллбеков.

В итоге получается что если я внутри любого из коллбеков буду организовывать свои потоки то все будет защещино. и с main не как не перекликается.

(я просто заготовку себе делаю что бы ботов не писать на lua)
Взаимодействие OLua и Lua под Виндой
 
Цитата
lergen написал:
Возникла необходимость ускорить обработку данных в написанном тестере стратегий
А как тестер писали ? он на Луа у Вас ?

По теме, можно на С++ он запускает Луа скрипты спокойно, только нужно будет источники данных делать думаю и скрипты квика переписывать под тестер. По сути программа - тестер. (первое что в голову пришло)
Lua Dll на C++
 
Цитата
Андрей написал:
А как мне ассоциировать второй созданный луа стек с квиком ? когда я создаю второй стек, то у меня получается так что соощения которые я в него посылаю ("message") в квике не видны уже. Я могу насоздовать сколько угодно стеков путем
Код
  lua_State  * L_ptr;
L_ptr  =  lua_open();//Создаем стэк
luaL_openlibs(L_ptr);  
Однако это же будут локальные копии внутри библиотеки. И я не смогу через них подписаться на события квика...

Похоже понял, однако уточните единственный ли это способ ? Хочется все варианты перебрать.
Код
L_ptr = lua_newthread(L);
Так же скажите пожалуйста где бы взять список всех функций Луа и прочего которые в новом потоке запускаются, и какие в основном? Иначе говоря пренадлежность функция - поток (с точки зрения квика)
Lua Dll на C++
 
А как мне ассоциировать второй созданный луа стек с квиком ? когда я создаю второй стек, то у меня получается так что соощения которые я в него посылаю ("message") в квике не видны уже. Я могу насоздовать сколько угодно стеков путем
Код
lua_State *L_ptr;
L_ptr = lua_open();//Создаем стэк
luaL_openlibs(L_ptr);
Однако это же будут локальные копии внутри библиотеки. И я не смогу через них подписаться на события квика...
Lua Dll на C++
 
Доброго времени суток. У меня следующий вопрос:
Использую Lua_Api для плюсов. Lua 5.1.

1) Запускаю квик.

2) Квик вызывает скрипт луа и определяет несколько функций запускащихся в разных потоках.
допустим это коллбеки прихода котировок и основной поток - main,
Либо поток main и еще какой либо коллбек из квика работающий в другом потоке

3) Сам скрипт Lua выглядит как вызов Dll, написанной на C++.

   require("My dll");

Внутри Dll я подписываюсь на эти 2 функции (т.е. коллбека от квика) и получается что вызов из терминала, отправляется в Dll и вызываются функции из моей Dll.

3.1) Внутри Dll переменная Lua вынесена в глобальную и к ней подключаются еще нескольку функций, которые могут выполняться, как в каком либо из двух потоков запускаемых квиком, так и в каком либо своем потоке...

----------

Собственно из всего описанного вытек вопрос, нужно ли мне в каждой из функций (включая те что запускаются как коллбеки с программы № 1) делать луа как разделяемый ресурс ? Или же стек сам поймет что его вызывают из другого потока и не будет глючить не чего?

----------
 
Коллбеки Луа, Может ли таблицы получаемые коллбеками быть массивом ?
 
Благодарю
Коллбеки Луа, Может ли таблицы получаемые коллбеками быть массивом ?
 
Доброго времени суток, у меня вопрос касательно коллбеков языка Qlua. Точнее все те коллбеки что в руководстве пользователя занесены в раздел "Функции обратного вызова" и принимающее в качестве параметра - таблицу. Подскажите, может ли так случиться, что данная таблица будет являться массивом таблиц ? (Речь не о специфики Lua, я помню что все таблицы предоставляются как ключ значение и массивов так таковых нет) Меня интересует каким из следующих вариантов может быть принимаемая таблица:

1) Таблица содержит озаглавленные поля в руководстве и каждому из полей (столбцы) присуще только одно значение в таблице (иначе говоря в таблице есть ТОЛЬКО ОДИН РЯД).
2) Таблица содержит озаглавленные поля в руководстве и каждому из полей (столбцы) присуще более одного значения в таблице (иначе говоря в таблице есть МОЖЕТ СОДЕРЖАТЬ БОЛЕЕ ОДНОГО РЯДА).
3) ВМЕСТО таблицы, передается МАССИВ, содержащий таблицу с озаглавленными столбцами и ТОЛЬКО ЛИШЬ ОДНИМ рядом.
Почему не создаются таблицы для таймфреймов выше 1 минуты ?, Подскажите в чем может быть ошибка ? код идентичен, но таблица не создается.
 
Приветствую собравшихся. Помогите решить проблему. У меня есть 2 скрипта по созданию таблиц OHLC данных. один для минутного графика, другой для часовика. Проблема в том, что скрипт для часовика не работает (а точнее не создает требуемую таблицу).

Смотрел пошагово, котировки получаются, таблица формируется, однако не хочет заполняться... Причем код обоих скриптов один и тот же, он отличается лишь в способе расчета времени, Котировки приходят и на часовом и на минутном скрипте, но вот часовой только не хочет отображать их в таблице... Буду признателен Вам за помощь, заранее благодарю.
По этой ссылке, можно скачать оба скрипта:
https://cloud.mail.ru/public/HHF1/7SDzKVRjx

Скрипт работает так "Quick 7.14.1.7" :
1) Строится график цен или же индикатора (к примеру Open Interest)
2) Задается Tag (для минутного RTS_M1, для часового RTS_H1) - Дважды кликнуть по графику, затем вкладка "Дополительно" и в поле идентификатор вставляем требуемый Tag
2) Создается таблица стандартным способом открытия скрипта
Страницы: Пред. 1 2
Наверх