Закрытие позиций за 5 секунд до закрытия
Atom Ответить
17.12.2012


Всем привет, подскажите как сделать событие которое будет срабатывать за 5 секунд до закрытия вечерней сессии? Ориентируясь на время биржи.

Теги:


Спасибо:




34 Ответов
< 1 2 
VassilSanych

Фотография
Дата: 01.02.2013
Ответить


Замучила совесть: исправил свой код.
Теперь - в одном дополнительном потоке и без вложенных исключений.
Саму синхронизацию выделил в отдельный метод.
Возможно стоит перебрать сервера из списка
http://tf.nist.gov/tf-cgi/servers.cgi
, выбрать вручную несколько хороших и выбирать из их списка, не доверяя стандартному адресу.
Уж больно он нестабильный. Наверное, большинство серверов перманентно в дауне.
Спасибо:

aerv

Фотография
Дата: 02.02.2013
Ответить


Без рекурсии:
Код
        void TimeSync(object state) {
      int count = 0;
      const int maxAttempts = 100;
      while (true) {
        try {
          // Getting time offset
          // Logging
          break;
        } catch {
          count++;
          // Logging
        }
        if (count >= maxAttempts)
          break;
        Thread.Sleep((int) (1000*(3 + Math.Exp(count/5.0))));  // Рассчитывать задержку можно как угодно
      }
      ((ManualResetEvent) state).Set();
    }

    [TestMethod]
    public void TimeCorrectTest() {
      var ev = new ManualResetEvent(false);
      ThreadPool.QueueUserWorkItem( TimeSync, ev );
      ev.WaitOne(); // Блокировка - для теста
    }



Кстати, для синхронизации времени вполне достаточно настроить штатную службу времени в Windows.
параметры реестра
сервера
пул серверов
Это для общего понимания
Спасибо:

VassilSanych

Фотография
Дата: 02.02.2013
Ответить


aerv Перейти
А зачем рекурсия-то?

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

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

Там есть небольшая сносочка с предупреждением. По смыслу - "осторожно! мы сами этой хрени не доверяем".

Спасибо:

MenDel

Фотография
Дата: 02.02.2013
Ответить


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

Так ведь никакой рекурсии не будет?

Код
ThreadPool.QueueUserWorkItem(_ => TimeSync());

private void TimeSync()
        {
            IPStatus status = IPStatus.Unknown;
            try
            {
                PingReply pr = new Ping().Send(@"google.ru");
                status = pr.Status;
            }
            catch { }

            if (status == IPStatus.Success)
            {
                int i = 0;
                while(true)
                {
                    i++;
                    try
                    {
                        LoggingHelper.SyncMarketTime(50);
                        this.GuiAsync(() => Message("Время синхронизировано"));
                        break;
                    }
                    catch
                    {
                        if (i%10 == 0)
                        {
                            PingReply pr = new Ping().Send(@"google.ru");
                            status = pr.Status;
                        }
                        if (status != IPStatus.Success) break;
                        if (i <= 10) Thread.Sleep(1000);
                        else if (i > 10 && i <= 50) Thread.Sleep(10000);
                        else if (i > 50) Thread.Sleep(60000);
                    }
                }
            }
        }
Автор топика
Спасибо:

aerv

Фотография
Дата: 03.02.2013
Ответить


VassilSanych Перейти
aerv Перейти
Кстати, для синхронизации времени вполне достаточно настроить штатную службу времени в Windows.
параметры реестра

Там есть небольшая сносочка с предупреждением. По смыслу - "осторожно! мы сами этой хрени не доверяем".

Ну, у меня много месяцев она работает так как надо. Разумеется, я никому ничего не навязываю. )

MenDel Перейти
Да кстати можно ещ добавить проверку инета, а то вдруг его отрубят а он будет все пытвться время узнать.
Так ведь никакой рекурсии не будет?

А смысл всего этого? Если инет есть, то и по NTP ответ придет. Если инета нет, то и сделать ничего нельзя.

Спасибо:

VassilSanych

Фотография
Дата: 03.02.2013
Ответить


Для России хороши сервера
0.ru.pool.ntp.org
1.ru.pool.ntp.org
2.ru.pool.ntp.org
3.ru.pool.ntp.org
Они во-первых работают, а во-вторых пинг до них в 4-10 раз меньше, чем до серверов Пиндостана.
Спасибо:

VassilSanych

Фотография
Дата: 03.02.2013
Ответить


Безотносительно к трейдингу
Синхронизация часов в Windows
Код
w32tm /config /syncfromflags:manual /manualpeerlist:0.ru.pool.ntp.org,1.ru.pool.ntp.org,2.ru.pool.ntp.org,3.ru.pool.ntp.org /update
w32tm /resync
w32tm /query /status

При запущенном сервисе времени и достаточно небольшом смещении времени (не годы).
Спасибо:

aerv

Фотография
Дата: 04.02.2013
Ответить


VassilSanych Перейти
Безотносительно к трейдингу

w32tm /monitor /computers:0.ru.pool.ntp.org
Покажет смещение времени на сервере относительно локального времени:
Кстати, вместо DNS имен можно указывать IP адреса. Это снимает риски отказа DNS серверов.
Спасибо:

VassilSanych

Фотография
Дата: 04.02.2013
Ответить


aerv Перейти
Это снимает риски отказа DNS серверов.

Но добавляет риски неожиданной смены IP

Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy