Фондовый рынок. Акции. Скорость исполнения торговых приказов. - страница 8

 
Replikant_mih #:

Чего нельзя?) Лучший оффер - 10.1, я кидаю лимитку на покупку по 11, собираю весь стакан до 11 если объема в стакане до 11 не хватает чтобы исполнить всю заявку, либо останавливаюсь где-то посередине. Если надо чтобы точно исполнилась, ну делать захлест побольше и всё. В идеале смотреть максимальную разрешенную цену и где-то перед ней цену ставить если прям горит исполнить весь объем точно. Вообще если  сметаю весь стакан на большую глубину - для меня это скорее сигнал, что я делаю что-то не так))).


IOC - ну исполняешь все что на пути, дальше сам снимаешь остаток. Вот тебе и IOC). Я арбитраж не торгую, может какой-то узкой специфики не понимаю. Если хочется съесть все заявки до какого-то уровня - ну можно смотреть какой там объем, и кидать росно столько, если уж не устраивает вариант снять остаток. Короче, мне задача не понятна).

Я уже говорил, что так и делаю в Квик

procedure TExpert.SellBuySpot;
var
  outStr, id: string;
  res: long;
  ErrCode: long;
  ErrSize: Dword;
  ErrStr: LPSTR;
  Dt: TDateTime;
begin
  FOrder:= 0;
  FTransID:= GetTransID();
  id:= IntToStr(TransID);
  case BuySell of
    1: outStr:= 'ACCOUNT=' + ExpData.SpotAccaunt + '; CLIENT_CODE=' +
               ExpData.Client + '; TYPE=L; TRANS_ID=' + id + '; CLASSCODE=' +
               ExpData.SpotData.ClassCode + '; SECCODE=' + ExpData.SpotData.SecCode +
               '; ACTION=NEW_ORDER; OPERATION=B' + '; PRICE=' +
               FloatToStr(ExpData.SpotData.SellPrice + 10 * ExpData.SpotData.Step) +
               '; QUANTITY=' + FloatToStr(aVol) + ';';
    2: outStr:= 'ACCOUNT=' + ExpData.SpotAccaunt + '; CLIENT_CODE=' +
               ExpData.Client + '; TYPE=L; TRANS_ID=' + id + '; CLASSCODE=' +
               ExpData.SpotData.ClassCode + '; SECCODE=' + ExpData.SpotData.SecCode +
               '; ACTION=NEW_ORDER; OPERATION=S' + '; PRICE=' +
               FloatToStr(ExpData.SpotData.BuyPrice - 10 * ExpData.SpotData.Step) +
               '; QUANTITY=' + FloatToStr(aVol) + ';';
  end;
  ErrCode:= 0;
  ErrSize:= 0;
  ErrStr:= nil;
  res:= T2QSendASyncTrans(LPSTR(AnsiString(outStr)), ErrCode, ErrStr, ErrSize);
  if(res <> TRANS2QUIK_SUCCESS) then
  begin
    FTransID:= 0;
    FTransBusy:= false;
  end else
  begin
    Dt:= now();
    FMemo.Lines.Add(DateToStr(Dt) + ' ' + FormatDateTime('hh:mm:ss.zzz', Now()) +
                              ' --> Ордер ' + ExpData.SpotData.SecCode + ' отправлен.');
  end;
end;

 сдвигаю цену, но иногда (редко но бывает) ордер остается стоять в стакане, следовательно

его нужно снимать, и выставлять новый и опять следить, - все это лишнее время.

К тому же он может исполнится, пока ты его соберешься снимать!

Поэтому надежней всего IOC, но его нет на споте

В арбитраже все очень просто, если ты купил 100 единиц одной ноги, то тут же должен продать 100 единиц другой ноги (ключевое слово ТУТ ЖЕ)

Поэтому стоит задача как можно быстрее совершить ответную сделку по нужной цене и с нужным объемом.

Добалено

В МТ-5 все гораздо проще, быстрее и есть варианты

Например, нет никаких проблем пробежаться по стакану СПОТа и взять сразу не лучшую цену, посчитав суммарный объем выбранной цены + предыдущих (лучших цен)

Поэтому меня и волновала скорость исполнения торговых приказов на Фондовом в МТ-5.

Но все-равно, нет гарантии, что стакан резко изменится, а если брать цену слишком глубоко, то можешь выйти за пределы арбитражной ситуации!

В Квик, скорость сделки на СПОТ была от 240 до 490 мс., при пинге 3-4 мс!

На ФОРТС, при этом же пинге, сделка проходит от 4,5 до 12 мс.

К сожалению, из-за низкой ликвидности на фортс, необходимо продавать фьючерс первым.

 
prostotrader #:

Я уже говорил, что так и делаю в Квик

 сдвигаю цену, но иногда (редко но бывает) ордер остается стоять в стакане, следовательно

его нужно снимать, и выставлять новый и опять следить, - все это лишнее время.

К тому же он может исполнится, пока ты его соберешься снимать!

Поэтому надежней всего IOC, но его нет на споте

В арбитраже все очень просто, если ты купил 100 единиц одной ноги, то тут же должен продать 100 единиц другой ноги (ключевое слово ТУТ ЖЕ)

Поэтому стоит задача как можно быстрее совершить ответную сделку по нужной цене и с нужным объемом.

Добалено

В МТ-5 все гораздо проще, быстрее и есть варианты

Например, нет никаких проблем пробежаться по стакану СПОТа и взять сразу не лучшую цену, посчитав суммарный объем выбранной цены + предыдущих (лучших цен)

Поэтому меня и волновала скорость исполнения торговых приказов на Фондовом в МТ-5.

Но все-равно, нет гарантии, что стакан резко изменится, а если брать цену слишком глубоко, то можешь выйти за пределы арбитражной ситуации!

В Квик, скорость сделки на СПОТ была от 240 до 490 мс., при пинге 3-4 мс!

На ФОРТС, при этом же пинге, сделка проходит от 4,5 до 12 мс.

К сожалению, из-за низкой ликвидности на фортс, необходимо продавать фьючерс первым.


Понял.
А что, реально в лоб арбитражить акцию против фьюча на скростях mt5-Quik? Или нужна какая-то "интеллектуальная" составляющая чтобы как-то со скоростными товарищами конкурировать?

 
Replikant_mih #:


Понял.
А что, реально в лоб арбитражить акцию против фьюча на скростях mt5-Quik? Или нужна какая-то "интеллектуальная" составляющая чтобы как-то со скоростными товарищами конкурировать?

Если только Классика, то и Квик сносно справляется, а если, как я хочу попробовать, скальпинг, то нужен как минимум МТ-5 (2 терминала) 

 
prostotrader #:

Если только Классика, то и Квик сносно справляется, а если, как я хочу попробовать, скальпинг, то нужен как минимум МТ-5 (2 терминала) 

2 из-за того, что брок не дает в одном терминале и акции и фьючи торговать (как Открытие) или из-за того, что у вас через связь терминалов все работает и поэтому переделывать ничего не надо будет? Просто будет mt5-mt5 вместо mt5-Quik.

 
Replikant_mih #:

2 из-за того, что брок не дает в одном терминале и акции и фьючи торговать (как Открытие) или из-за того, что у вас через связь терминалов все работает и поэтому переделывать ничего не надо будет? Просто будет mt5-mt5 вместо mt5-Quik.

Нет, сейчас только Квик, я начал писать МТ5 - МТ5

Добавлено

Ну, вот, написал.

Теперь, не понятно, когда можно будет оттестировать...


 
prostotrader #:

Нет, сейчас только Квик, я начал писать МТ5 - МТ5

Добавлено

Ну, вот, написал.

Теперь, не понятно, когда можно будет оттестировать...


Поздравляю! 

А как планируете - на каждую пару спот-фьючерс своего советника или один советник на все пары?

 
Andrey Miguzov #:

Поздравляю! 

А как планируете - на каждую пару спот-фьючерс своего советника или один советник на все пары?

Свой комплект клиент-сервер на каждую пару

Зачем головная боль отслеживать все фьючерсы и СПОТы из одного советника?

Советник, по существу, только один (клиент), сервер просто исполнитель - костыль  для покупки СПОТа :)

Добавлено

Советник - клиент автоматически посылает (принимает) на (от) сервер все необходимые данные.

Не важно какая пара, советник настраивается на пару фьюч-спот автоматически. 

 
prostotrader #:

Зачем головная боль отслеживать все фьючерсы и СПОТы из одного советника.

Честно скажу, что сильно вдохновился Вашими скринами из личного кабинета Открытия и пока отлаживаю советника для торговли фьючерс-акция (не скальпинг, а класика в лоб).

По логике -  входить нужно по той паре где прибыль до экспирации получается больше (с учетом комиссии и фактического количества контрактов).

Соответственно необходимо анализировать все актуальные пары. Если ставить советника на каждую пару - они будут работать независимо друг от друга.

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


ЗЫ: Учитывая текущее значение ставки, в ближайшее время прибыльность по такой стратегии будет ещё больше, если биржа откроется конечно :)

По видео вижу + Вы сами писали, что пишете для скальпинга. Средний вход и выход - это средняя EMA (ссылка) или как-то ещё усредняете (если не секрет)?

 
Andrey Miguzov #:

Средний вход и выход - это средняя EMA (ссылка) или как-то ещё усредняете (если не секрет)?

Нет никакого секрета, просто тупо считаю среднее значение, при каждом обращении к функции

exp_data.midle_enter = exp_data.midle_enter * exp_data.m_ent_cnt;
  exp_data.m_ent_cnt++;
  exp_data.midle_enter = (exp_data.midle_enter + result)/exp_data.m_ent_cnt; 

exp_data.midle_exit = exp_data.midle_exit * exp_data.m_exit_cnt;
  exp_data.m_exit_cnt++;
  exp_data.midle_exit = (exp_data.midle_exit + result)/exp_data.m_exit_cnt;

Эти данные нужны для понимания уровня цен на данной паре.

 
prostotrader #:

Нет никакого секрета, просто тупо считаю среднее значение, при каждом обращении к функции

Эти данные нужны для понимания уровня цен на данной паре.

Понял, если в терминологии машек, то это SMA. Но ведь, чем дальше от начала расчета, тем сильнее будет среднее значение отходить от текущего.

Грубо, такой способ усреднения не "забывает" старые значения, т.к. exp_data.m_ent_cnt всё больше увеличивается с каждым обращением и каждое новое значение оказывает всё меньший эффект на итоговый результат.

По моим наблюдениям, в течении дня среднее значение меняется и достаточно чувствительно.

В теории EMA для скальпинга больше должно подходить, код будет приблизительно таким:

double EMA_period = 100.0; //Период ЕМА для усреднения, тиков
double SmoothFactor = 2.0/(1.0+EMA_period);
 
if (EMA_ask<0) EMA_ask=ask; //первый тик
   else
  EMA_ask=ask*SmoothFactor+EMA_ask*(1.0-SmoothFactor);
Причина обращения: