Нужна помощь профессионального программиста - страница 41

 
prostotrader #:

Ну, отлично, что все выяснили.

Пишите им, удачи!

Добавлено

Напишите сейчас, не ждите понедельника.

Чем раньше напишите, тем быстрее ответят.

Не, наоборот, может затеряться за выходные за новыми письмами. Уже сталкивался с таким.
 
Dmitriy Skub #:
Не, наоборот, может затеряться за выходные за новыми письмами. Уже сталкивался с таким.

:) Вам виднее.

Но, сразу приходит ответ с номером обращения

 
prostotrader #:

Ну, отлично, что все выяснили.

Пишите им, удачи!

Добавлено

Напишите сейчас, не ждите понедельника.

Чем раньше напишите, тем быстрее ответят.

Кстати, техподдержка работает до окончания торгов (23-50)

Раньше, лет 7 назад, я им по ночам звонил :) тогда еще "попугаев" на телефоне не было...

А какие еще потоки нужны, кроме этих 12?

Стаканов там три 5/20/50 - три потока.

А там диагностики нету, что-ли? Или Вы не дошли до этого.

 
Dmitriy Skub #:

А какие еще потоки нужны, кроме этих 12?

Я точно не знаю, но для торговли фьючерсами и эти не все нужны, поэтому я сделал тривью, 

чтобы можно было выбрать только то, что необходимо (чем меньше входных данных, тем быстрее работа).

НО!

В одном соединении не должно быть более 20 потоков (из справки SDK)

 
Dmitriy Skub #:

Стаканов там три 5/20/50 - три потока.

А там диагностики нету, что-ли? Или Вы не дошли до этого.

Глубина стакана, указывается, при открытии логина (на боевом контуре).

Поток один, только, когда Вы создаете слушатель,  Вы сами выбираете какой Вам нужен, если логин позволяет.


Поэтому, в моей проге, нельзя выбрать сразу 3 (2) стакана, только 1 на выбор

Пощелкайте выбор стакана и Вы увидите как изменяется тривью

01.12.2023 20:54:43.280 --> Создание соединения "Трансакции"...
01.12.2023 20:54:43.281 --> Создание соединения "Макет-дата"...
01.12.2023 20:54:43.283 --> Соединение "Трансакции" создано. Создание Паблишера...
01.12.2023 20:54:43.284 --> Соединение "Макет-дата" создано. Создание слушателей "Макет-дата"...
01.12.2023 20:54:43.286 --> Паблишер создан. Создание слушателя "Трансакций"...
01.12.2023 20:54:43.288 --> Слушатели Макет-дата созданы. Открытие соединения "Макет-дата"...
01.12.2023 20:54:43.289 --> Слушатель "Трансакций" создан. Открытие соединения "Трансакции"...
01.12.2023 20:54:43.366 --> Соединение "Трансакции" открыто.
01.12.2023 20:54:43.369 --> Соединение "Макет-дата" открыто. Идет получение начальных данных...
01.12.2023 20:54:43.415 --> Паблишер открыт. Схема данных получена.
01.12.2023 20:54:43.618 --> 01.12.2023 9:40:03: Средства ГО составляют 785 082 324 750.64 руб., изменение к предыдущему дню -3 417 608 246.12 руб.
01.12.2023 20:54:43.620 --> 01.12.2023 9:50:04: Список участников, предоставляющих котировки на большие объемы - https://www.moex.com/s2996
01.12.2023 20:54:43.622 --> 01.12.2023 11:50:06: Курсы валют для расчета Вармаржи и ГO в дневной клиринговой сессии:CAD=65.18170,CHF=101.24800,CNY=12.56500,EUR=98.01110,GBP=112.47240,HKD=11.36100,JPY=0.60268,TRY=3.06670,USD/CHF=0.88802,USD/JPY=1.49200,USD/TRY=29.31810,USR=89.90980
01.12.2023 20:54:43.625 --> 01.12.2023 11:55:01: Начало технического перерыва в 12:00.
01.12.2023 20:54:43.627 --> 01.12.2023 13:44:06: Курсы валют для расчета Вармаржи и ГO в вечерней клиринговой сессии:CAD=65.18170,CHF=101.24800,CNY=12.56330,EUR=97.91370,GBP=112.47240,HKD=11.36100,JPY=0.60268,TRY=3.06670,USD/CHF=0.88814,USD/JPY=1.49200,USD/TRY=29.32240,USR=89.92290
01.12.2023 20:54:43.666 --> Поток FORTS_PROHIBITION_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.669 --> Поток FORTS_USERORDERBOOK_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.712 --> Поток FORTS_POS_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.796 --> Поток FORTS_FEE_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.800 --> Поток FORTS_FEERATE_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.843 --> Поток FORTS_INFO_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.863 --> Поток FORTS_PART_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.917 --> Поток FORTS_AGGR50_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.926 --> Поток FORTS_BROKER_FEE_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.929 --> Поток FORTS_BROKER_FEE_PARAMS_REPL перешел в режим Он-Лайн
01.12.2023 20:54:43.962 --> Поток FORTS_REFDATA_REPL перешел в режим Он-Лайн
01.12.2023 20:54:44.559 --> Поток FORTS_TRADE_REPL перешел в режим Он-Лайн
01.12.2023 20:54:44.562 --> Начальное получение данных завершено. Создание списков инструментов...
01.12.2023 20:54:44.565 --> Инструменты добавлены.
Это с глубиной стакана - 50
 

Дмитрий!

А на какой Вы сейчас стадии в написании коннектора?

 
prostotrader #:

Дмитрий!

А на какой Вы сейчас стадии в написании коннектора?

На стадии изучения лисенеров/паблишеров.

С коннектом нормуль - можно остановить/запустить сервис и коннект восстанавливается.

 
Dmitriy Skub #:

На стадии изучения лисенеров/паблишеров.

С коннектом нормуль - можно остановить/запустить сервис и коннект восстанавливается.

Ок

Для маркет-дата так

https://www.mql5.com/ru/forum/434155/page33#comment_50745833

Нужна помощь профессионального программиста - Если у вас есть демо-доступ к Плаза 2, запустите вложение.
Нужна помощь профессионального программиста - Если у вас есть демо-доступ к Плаза 2, запустите вложение.
  • 2023.11.26
  • www.mql5.com
пожалуйста Да я тоже посмотрел - совпадает с точностью до числа запрошенных таблиц. Хрень какая-то все потоки обрабатываются одинаково. В логах коннектора можно увидеть время обработки коллбэк функций. Время между отправкой заявки и ее исполнением 1 мс
 

Для отправки/приема команд, так

procedure TCGTRConnection.Execute;
var
  h_res: CG_RESULT;
  s: string;
  state: uint32_t;
  conn_done: boolean;
  pub_done: boolean;
begin
  conn_done:= false;
  pub_done:= false;
  MemoStr:= 'Создание соединения "Трансакции"...';
  Synchronize(UpdMemo);
//--- Create listener and publisher ---
  if(CGCntr.cgSettings.ConType = 'p2tcp') then
   s:= CGCntr.cgSettings.ConType + '://' + CGCntr.cgSettings.Host + ':' +
       CGCntr.cgSettings.Port +
       ';app_name=tr_' + CGCntr.cgSettings.ProgName +
       ';timeout=' + CGCntr.cgSettings.RoutTOut +
       ';local_timeout=' + CGCntr.cgSettings.LocTOut +
       ';name=transaction' else
   s:= CGCntr.cgSettings.ConType + '://' + CGCntr.cgSettings.Host + ':' +
       CGCntr.cgSettings.Port +
      ';app_name=tr_' + CGCntr.cgSettings.ProgName +
       ';timeout='  + CGCntr.cgSettings.RoutTOut +
       ';local_timeout=' + CGCntr.cgSettings.LocTOut +
       ';lrpcq_buf=' + CGCntr.cgSettings.BuffSize +
       ';name=transaction';
   h_res:= cg_conn_new(PAnsiChar(RawByteString(s)), hConn);
   if(h_res <> CG_ERR_OK) then
   begin
     case h_res of
       CG_ERR_INVALIDARGUMENT: begin
         MemoStr:= 'Ошибка: Функции создания соединения "Трансакции" были переданы некорректные аргументы.';
         Synchronize(UpdMemo);
       end;
       CG_ERR_INTERNAL: begin
         MemoStr:= 'Ошибка: Внутренняя ошибка в функци создания соединения "Трансакции".';
         Synchronize(UpdMemo);
       end;
     end;
   end else
   begin
//--- Publisher ---
     MemoStr:= 'Соединение "Трансакции" создано. Создание Паблишера...';
     Synchronize(UpdMemo);
     if(SchemVer = '') then
       s:= 'p2mq://FORTS_SRV;category=FORTS_MSG;name=' + pubName + ';timeout=5000' else
     s:= 'p2mq://FORTS_SRV;category=FORTS_MSG;name=' + pubName +
         ';timeout=5000;scheme=|FILE|forts_messages.ini|message;version=' + SchemVer;
     h_res:= cg_pub_new(hConn, PAnsiChar(RawByteString(s)), Pub);
     if(h_res <> CG_ERR_OK) then
     begin
       MemoStr:= 'Ошибка: Паблишер не создан!';
       Synchronize(UpdMemo);
     end;
     MemoStr:= 'Паблишер создан. Создание слушателя "Трансакций"...';
     Synchronize(UpdMemo);
     Lsnr.Settings:= 'p2mqreply://;ref=' + PubName;
//--- Create listener ---
     h_res:= MakeCallBack(hConn, Lsnr.Settings, Lsnr.Lsn, @Lsnr.StreamData);
     if(h_res <> CG_ERR_OK) then
     begin
       MemoStr:= 'Ошибка: Слушатель "Трансакций" ' + Lsnr.Settings + ' не создан!';
       Synchronize(UpdMemo);
     end;
     MemoStr:= 'Слушатель "Трансакций" создан. Открытие соединения "Трансакции"...';
     Synchronize(UpdMemo);
//---
    while (not Terminated) do
    begin
      h_res:= cg_conn_getstate(hConn, state);
      if(h_res = CG_ERR_OK) then
      begin
        case state of
          CG_STATE_CLOSED: cg_conn_open(hConn, nil);
          CG_STATE_ERROR: cg_conn_close(hConn);
          CG_STATE_OPENING: ;  // TODO  ???????????
          CG_STATE_ACTIVE: begin
            if(conn_done = false) then
            begin
              conn_done:= true;
              MemoStr:= 'Соединение "Трансакции" открыто.';
              Synchronize(UpdMemo);
            end;
            h_res:= cg_conn_process(hConn, 1, nil);
            if((h_res <> CG_ERR_OK) and (h_res <> CG_ERR_TIMEOUT)) then
            begin
              MemoStr:= 'Внимание: Состояние соединения "Трансакции" не определено.';
              Synchronize(UpdMemo);
            end;
//--- query publisher state ---
            h_res:= cg_pub_getstate(Pub, state);
            if(h_res = CG_ERR_OK) then
            begin
              PubState:= state;
              case state of
                CG_STATE_ERROR: begin
                  cg_pub_close(Pub);
                  pub_done:= false;
                end;
                CG_STATE_CLOSED: cg_pub_open(Pub, Nil);
                CG_STATE_OPENING: ;  // TODO  ???????????
                CG_STATE_ACTIVE: if(pub_done = false) then
                  begin
                    pub_done:= true;
                    h_res:= cg_pub_getscheme(Pub, PubScheme);  // Get publisher scheme
                    if(h_res = CG_ERR_OK) then
                    begin
                      MemoStr:= 'Паблишер открыт. Схема данных получена.';
                      Synchronize(UpdMemo);
                    end;
                  end;
              end;
            end;
//--- Query Listeners state ---
            h_res:= cg_lsn_getstate(Lsnr.Lsn, state);
            if(h_res = CG_ERR_OK) then
            begin
              case state of
                CG_STATE_ERROR: cg_lsn_close(Lsnr.Lsn);
                CG_STATE_CLOSED: begin
                  s:= Lsnr.LsnParams.LifeStrNum +
                      UintToStr(Lsnr.StreamData.LifeNum);
                  cg_lsn_open(Lsnr.Lsn, PansiChar(RawByteString(s)));
                end;
                CG_STATE_OPENING: ;  // TODO  ???????????
                CG_STATE_ACTIVE: {nothing};
              end;
            end else
            begin
              MemoStr:= 'Внимание: Состояние слушателя "Трансакций" не определено.';
              Synchronize(UpdMemo);
            end;
          end;
        end;
      end;
    end;
  end;
end;
 
Мужики, я преклоняюсь перед вашим упорством, трудолюбием, профессионализмом, целеустремленностью.
Не завидую тем нубам, которые гадают "что надежнее форекс или биржа" если они попадутся у вас на пути.
Именно такие как вы и достойны победы на финансовых рынках. Снимаю шляпу!
Причина обращения: