Viktor MMM пишет: Для теста пока то да се к другому брокеру подключитесь, много времени не займет, один вопрос снимется. Отпишитесь что как.
Как вариант - думал, есть несколько мелочей из-за которых быстро не получится. Первая депозит на доверенности ну и ... Но второй корзинкой обзавестись надо пока яйца целы. Но есть мысли точно вычислить схему и попробовать обойти жаль времени не хватает.
Дело в том что у меня есть робот который подбирает неэффективность рынка. Т.е. его алгоритм заточен заключать сделку только когда она 100 процентов принесет прибыль. Так и было несколько месяцев. Несколько дней назад ситуация поменялась в корне. Сделки почти все в минус. Как это можно сделать - можно. Если есть желание отогнать кого то от вашей кормушки. Первые мысли конечно на брокера. Он первый в цепи. Ему будет в этом выгода если он просто катает меня возле рынка - но как это проверить? Возможно конечно игра не конкретно против меня а против тех кто использует подобные алгоритмы. Но я знаю что против меня это работает весьма эффективно. Сейчас конечно я запускаю робота только для того что бы выявить схему. Примерно уже понял как это делается есть догадки. Вот если можно бы можно было получить информацию о последних сделках кто был контрагентом???
Можно ли простому смертному узнать кто выставил заявку в стакан? У кого есть такая возможность. Можно ли это сделать через Lua или другие языки? Спрашиваю потому что есть подозрения на то что кто то играет против меня...
lergen пишет: Иногда происходят такие случаи. Замечал задержку в ПЯТЬ минут. Как это вообще возможно. Этот вопрос как то регламентируется. На мой диллетантский взгляд терминал должен поднимать тревогу с сиренами и красными ракетами если это случается. Это как если вы стоите разговариваете с приятелем и тут вас по плечу хлопает прохожий и говорит вам что плохо и вы вдруг замечаете что приятель давно ушел.
Добрый день.
Время сервера внизу окна в строке статуса приведено лишь справочно и оно может останавливаться (при отсутствии обновления таблицы текущих параметров), исчезать (при выведении, например, подсказки), соответственно, руководствоваться им не стоит.
Время сервера не стояло оно изменялось с указанной разницей от локального. Ну да бог с ним с тем случаем понятно что показать мне сейчас не чего. Для себя я добавил контроль задержки данных. Просто хотелось выяснить вопрос как регламентируется этот вопрос?
Иногда происходят такие случаи. Замечал задержку в ПЯТЬ минут. Как это вообще возможно. Этот вопрос как то регламентируется. На мой диллетантский взгляд терминал должен поднимать тревогу с сиренами и красными ракетами если это случается. Это как если вы стоите разговариваете с приятелем и тут вас по плечу хлопает прохожий и говорит вам что плохо и вы вдруг замечаете что приятель давно ушел.
lergen пишет: День добрый! А что этот трабл так и не исправлен в новой версии! Повторюсь что примочка в виде _Exit() bRun = nil не помогает пока не убираем из кода - DestroyTable(t.t_id)
Добрый день.
На какой сейчас у Вас версии Quik проявляется проблема?
День добрый! А что этот трабл так и не исправлен в новой версии! Повторюсь что примочка в виде _Exit() bRun = nil не помогает пока не убираем из кода - DestroyTable(t.t_id)
Ну интересно. А как результат просеивания через патерн распределить по разным переменным? ([%d%.]+) - тут нет ошибки в смысле определения количества цифр в числе?
lergen пишет: Мне же нужно из строки с названием опциона выделить страйк
String.format вам в этом не поможет. Используйте что-то из этого: string.sub (возможно, вместе с string.find) или string.match
На сколько я понял в этих функциях опять же нужно явно указывать то что мне как раз нужно еще только определить. Сделал пока через ТТР - до лучших времен.
В руководстве по Lua лишь вскользь упоминается об опциях этой функции - киньте ссылку пожалуйста у кого есть на описание. В справке по Квику тоже не нашел. Из описания Lua понял что есть опции для работы только со строковыми или только числовыми параметрами. Мне же нужно из строки с названием опциона выделить страйк. Поможет ли данная функция для этого или можно это попроще сделать?
function SendOrder(direction,volume,_price,_typeOrder, comment,_instr, _id,Class) local trans_id=_id local transaction={ ["TRANS_ID"]=tostring(trans_id), ["ACTION"]="NEW_ORDER", ["CLASSCODE"]=Class, ["SECCODE"]=_instr, ["OPERATION"]=direction, ["QUANTITY"]=string.format("%d",tostring(volume)), ["ACCOUNT"]=Account } transaction.type = _typeOrder if Class=="SPBFUT" or Class=="SPBOPT" then transaction.client_code=account if _typeOrder=="L" then if direction=="B" then transaction.price=tostring(GetScalePrice(_price, _instr,Class)) else transaction.price=tostring(GetScalePrice(_price, _instr,Class)) end else if direction=="B" then transaction.price=string.format("%d",tostring(0))--tostring(TTP_Pricemax)-- else transaction.price=string.format("%d",tostring(0))--tostring(TTP_Pricemin)-- end end else transaction.client_code=client_code if _typeOrder=="L" then if direction=="B" then transaction.price=tostring(GetScalePrice(_price, _instr,Class)) else transaction.price=tostring(GetScalePrice(_price, _instr,Class)) end else transaction.price=string.format("%d",tostring(0)) end end if Class=="SPBFUT" or Class=="SPBOPT" then transaction.client_code=tostring(account) else transaction.client_code=tostring(ClientCode) end if comment~=nil then transaction.client_code=string.sub(transaction.client_code..'//'..tostring(comment),0,20) else transaction.client_code=string.sub(transaction.client_code.."//robot",0,20) end local res=sendTransaction(transaction) end Не хочет зараза опционы брать по рынку хотя с фьючами работает.
Подскажите плиз! Как в скрипте при отправке транзакции прописывается рыночная цена опциона? Как мин/макс/возможная цена; как "0" или как то еще? Первых два варианта у меня не прошли хотя с фьючами работает. Если можно пример кода или ссылку на него скиньте плиз?
Заявки по фьючам снимаются без проблем. Заявки по спреду не снимаются - код класса указываю, номер заявки, инструмент, id транзакции, акшн - килл_ордер. Что не так? Для спреда нужно еще какие то параметры указывать?
По видимому формулировка вопроса не ах или же я не стой стороны пытаюсь его разобрать - попробуем иначе. Изложу свой подход к вопросу - возможно кто то решил эту загадку иначе. Буду благодарен за подсказку. По скольку тема для образного понимания несколько мозголомная я попытался подойти к пониманию сути вопроса по аналогии с календарным спредом (КС). Хотя сам КС для понимания и постановки задачи тоже на первый взгляд темный лес но по крайней мере сейчас я вижу 2 реальных метода съема прибыли. Суть в том как правильно посчитать бид и офер самого КС а не отдельных его составляющих. И далее уже все по теории - твой метод говорит что КС в данный момент дешев значит покупаем, дорог значит продаем. А по скольку работа с синтетическим фьючем сводится к арбитражу не двух а уже трех инструментов - я для облегчения задачи попытался смотреть на пару опционов как на фьючерс(синтетический). Для этого нужно лишь правильно составить формулу по которой будет высчитываться бид и офер синтетического фьюча. Собрал тестовый скрипт. Формулу из первого сообщения пробовал менять(вариантов не много -знаки). В итоге выходит какая то галиматья - в некоторые периоды, довольно продолжительные, покупка получеатся дешевле продажи, т.е. можно дешево купить и тут же дорого продать. Это как если заходишь в обменник покупаешь пачку баксов по 10р. и тут же продаешь им обратно по 100. Только не говорите что так и должно быть или все таки ... Вот я лопух похоже все поэтому и молчат и рубят капусту почем зря :)
sam063rus пишет: для начала, что значит "зависание"? если это зависание проходит через 5 сек то, - это одно, а если нет - то ответы будут совсем другими.
Если DestroyTable из кода убираю тогда да есть легкое подвисание на несколько сек. Но когда сабж в коде - если зависание то на глухо. Квик "не отвечает". Но повторюсь еще раз оно далеко не регулярное и закономерности пока ни какой не могу отследить.
Constantin Constantin пишет: lergen , корутины работают по принципу кооперативной многопоточности, то есть пока один поток явно не отдаст управление, другой не продолжит свое выполнение. Фактически работает один поток с переключением на разные точки исполнения программы.
Ок спасибо понятно. Похоже что реально многопоточность можно получить только разделив функции между разными скриптами.
По поводу *coroutine* вопрос. В руководстве по Люа coroutine описывается как средство создания многопоточной среды. В данном случае многопоточность означает одновременное исполнение в двух потоках или это о другом?
Пример кода ниже. На терминале версии 6.15.2.9 все работало без нареканий. После обновления, иногда, остановка скрипта кнопкой приводит к зависанию терминала. function OnStop(s) stopped=true for i_order=0, getNumberOf("orders")-1,1 do order=getItem("orders",i_order) paramOrder=Orderflags2table(getItem("orders",i_order)["flags"]) if order.sec_code==farFuture and order.client_code==ClientCode then if paramOrder.active==true then KillOrder (order.order_num, Future) end end end DestroyTable(t.t_id) end
Если из этого блока убрать DestroyTable(t.t_id) и поместить в конец тела main() то скрипт останавливается заметно медленнее и таблица очищается но не закрывается. Как это можно вылечить?
Николай Камынин пишет: например так: --------------------------- local qtnF=getQuoteLevel2 (ClassCode, nFuture)
if qtnF~=nil then local bid_=qtnF.bid; local bid_count=qtnF.bid_count; if bid~=nil and bid_count~=0 then bid=bid_[bid_count].price --делаем что надо -- end end
Спасибо - помогло. А вот с проверкой времени сервера не прошел вариант.
lergen пишет: поправлюсь - работали две аналогичных копии терминала
Терминалы работали с разными брокерами?
В том то и дело что брокер один. Переключаться скрипт не сможет - не айс! Тогда не плохо было бы иметь возможность отправить оповещение. Где то в сообщениях попадалось упоминание о такой возможности. Мой брокер предоставляет возможность оповещения по СМС - через lua можно создать такое оповещение в нужный для меня момент?
Тогда еще будет вопрос про переключение сервера посредством lua. Т.е. нужно что бы скрипт проанализировав текущее соединение в случае необходимости выдал команду квику на переключение на другой сервер. Для чего нужно - не так давно был момент когда на одной из двух совершенно аналогичных копий скрипта была задержка в получении данных минуты в четыре. При этом скрипт торговал как будто так и надо. Ситуация наводящая на не хорошие мысли (тема для отдельного разговора). после того как переключился на другой сервер все стало хорошо. Поэтому хотелось бы сделать это автоматически если есть такая возможность.
Sergey Gorokhov пишет: Просто заявки не переносятся. Просто потому что в этом нет необходимости, они не привязаны к серверу Quik. А вот стоп заявки привязаны.
Т. е. если до переключения на другой сервер у меня оставались активными просто заявка и стоп заявка то при работе уже через другой сервер простая заявка будет доступна также как и до переключения а стоп заявку нужно "сделать своей" что бы её можно было модифицировать? Я правильно вас понял?
Раньше как будто где то попадалась тема - сегодня не нашел. Возможно ли сделать заявку своей если в настройках соединения будет разрешено переключаться на другой сервер? Суть в том что иногда возникает необходимость перейти на другой сервер и если до разрыва соединения были активные заявки их понятное дело надо вернуть под контроль скрипта.
Уважаемые разработчики подскажите где искать причину. Работают две копии терминала: - на одном компе. - один и тот же брокер. - версия у обоих одна. - на одном и том же соединении и настройках проверки/восстановления связи. - совершенно аналогичные настройки - набор окон... - экспорты все отключены и там и там. На первой копии обрывов очень мало - почти нет, вторая копия грешит - раз от раза. И даже, после вечернего клиринга заметил, не всегда пытается восстановить связь. Что еще может влиять в терминале? На обоих версиях работают скрипты Lua (аналогичные практически) думал на них но сегодня с отключенными скриптами та же история.
Такая же проблема (ошибка по nil) после обрывов связи хотя проверка на соединение проводится, т.е. если связи нет параметры не должны запрашиваться. Как избежать остановки скрипта при кратковременных обрывах связи? function main() while not stopped do if (isConnected()==1 and GetServerTimeNumber()~=nil) then if TimeJob() then qtnF=getQuoteLevel2 (ClassCode, nFuture) bid=qtnF.bid[qtnF.bid_count-0].price ... ... else ... ...
Господа! Помогите разобраться как формируется bid и offer синтетического фьючерса. Если использовать формулу которая растиражирована в Интернете и считать спред между синтетическим фьючем и обычным то в какие то моменты по формуле выходит покупка дешевле продажи т.е. бери и тут же продавай и будет тебе счастье. Как я понял формула предлагается такая: bid_Sint=offer_Put-bid_Call+75000 --рыночная продажа синтетика(шорт) offer_Sint=offer_Call-bid_Put+7500 --рыночная покупка синтетика (лонг) Подразумевается 75000 страйк. Где собака зарыта?