Jump to content
kaif

Определение тренда

Recommended Posts

kaif

что-нибудь в этом духе...

 

double Gauss()

{

  double u;

  double v;

  double s;

  double k;

  while (true)
  {
    u = 2 * Random() - 1;
    v = 2 * Random() - 1;
    s = u * u + v* v;
    if (s == 0 || s > 1)
      continue;
    return( u * Sqrt(-2*ln(s)/s));
  }
}

  • Upvote 1

механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
Player 2
5 minutes ago, DIMtrade said:

Помоги функцию кайфа в c# перевести, я в дельфи не силен(((

        private Random random = new Random();

        private double Gauss()
        {
            double u = 0;
            double v = 0;
            double s = 0;
            while (true)
            {
                u = 2 * random.NextDouble() - 1;
                v = 2 * random.NextDouble() - 1;
                s = u * u + v * v;
                if (s == 0 || s > 1) continue;
                return u * Math.Sqrt(-2 * Math.Log(s) / s);
            }
        }

 

  • Upvote 1

Share this post


Link to post
Share on other sites
DIMtrade

Ага, замутил, тока что еле мышка на компе ожила, думал все на ресет уже жать придется, у меня тут еще другого полно запущено)))


Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
kaif

Хотелось бы увидеть код распараллеливания потоков... Для общего развития.)


механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
DIMtrade
37 минут назад, Player 2 сказал:

        private Random random = new Random();

        private double Gauss()
        {
            double u = 0;
            double v = 0;
            double s = 0;
            while (true)
            {
                u = 2 * random.NextDouble() - 1;
                v = 2 * random.NextDouble() - 1;
                s = u * u + v * v;
                if (s == 0 || s > 1) continue;
                return u * Math.Sqrt(-2 * Math.Log(s) / s);
            }
        }

 


Вот тут проблемка возникает, приходится делить рандом между ядрами, пока одно из ядер вызывает Next, другие 7 курят((((

                lock (locker)
                {
                    u = 2 * random.NextDouble() - 1;
                    v = 2 * random.NextDouble() - 1;
                }


Как решить, не знаешь? Т.е. как лок убрать

Хотя понял, объявить Random для каждого ядра отдельно, 8 раз

Edited by DIMtrade

Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
DIMtrade

Пока в таком виде скорость около 10 миллионов итераций в 1 секунду


Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
DIMtrade
12 минут назад, kaif сказал:

Хотелось бы увидеть код распараллеливания потоков... Для общего развития.)

Дам код, но я не прогарммист, так что там красивостей не будет


Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
Player 2
1 minute ago, DIMtrade said:


Вот тут проблемка возникает, приходится делить рандом между ядрами, пока одно из ядер вызывает Next, другие 7 курят((((

                lock (locker)
                {
                    u = 2 * random.NextDouble() - 1;
                    v = 2 * random.NextDouble() - 1;
                }


Как решить, не знаешь? Т.е. как лок убрать

А не надо его делить. Для каждого потока сделай свой random, и лок убрать можно будет. Но тут есть одна засада потенциальная. Random генерируется с инициализацией от текущего количества миллисекунд в часах. Поэтому если ты создашь несколько Random подряд, то они будут инициализированы одинаково и будут порождать одинаковую последовательность. Чтобы такого не было (обычно такое не нужно), я использую такой код:

 

        /// <summary>
        /// Генератор Random. Для генерации инициализирующих значений всех других Random в приложении.
        /// </summary>
        private static Random generalRandom = new Random();
        /// <summary>
        /// Возвращает экземпляр класса Random с инициализацией случайным Seed.
        /// </summary>
        /// <returns></returns>
        public static Random GetRandomInstance()
        {
            return new Random(generalRandom.Next(Int32.MaxValue));
        }

Когда мне надо создать новый Random, я вызываю функцию GetRandomInstance. Она инициализирует Random на основе другого Random, не имея при этом тех проблем что получаются при простом создании Random через new.

 

Но вообще если сравнивать языки, то проще в одном потоке.

 

 

5 minutes ago, kaif said:

Хотелось бы увидеть код распараллеливания потоков... Для общего развития.)

Чисто технически это делается так:

        private void ThreadFunctionx()
        {
            // thread code
        }

        private void MultiThreadProcessing()
        {
            int threadCount = 8;
            Thread[] threads = new Thread[threadCount];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread(ThreadFunctionx);
            }
            // Запускаем потоки.
            for (int i = 0; i < threadCount; i++)
            {
                threads[i].Start();
            }
            // Ждем завершения потоков.
            for (int i = 0; i < threadCount; i++)
            {
                threads[i].Join();
            }
        }

Функция ThreadFunctionx должна содержать код потока. Как правило там будет часть отвечающая за синхронизацию потоков, чтобы они разделяли объем работы между собой, не мешали друг другу и не дублировали свои вычисления. Это всё индивидуально и зависит от алгоритма.

  • Upvote 1
  • Thanks 1

Share this post


Link to post
Share on other sites
kaif

2 Player 2.

Спасибо.

Завершение всех потоков возвращает управление родительскому потоку?

 

Edited by kaif

механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
kaif

Интересно, какая скорость будет на Java.

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


механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
Player 2
3 minutes ago, kaif said:

2 Player 2.

Спасибо.

Завершение всех потоков возвращает управление родительскому потоку?

 

Оно никогда не теряется. Функция Join просто ждет пока поток, для которого она вызвана, закончится. Можно её не вызывать и работать дальше в текущем потоке - запущенные потоки будут работать параллельно.

Деление между ядрами делает операционная система. В принципе можно задавать ядра для потоков, насколько я знаю, но не уверен и никогда этого не делал. ОС сама всё делает достаточно эффективно.

Share this post


Link to post
Share on other sites
AntFX

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

Edited by AntFX

1

Share this post


Link to post
Share on other sites
Player 2
39 minutes ago, kaif said:

Хотелось бы увидеть код распараллеливания потоков... Для общего развития.)

На Делфи тоже можно потоки создавать. Я, правда, никогда этого не делал.

Share this post


Link to post
Share on other sites
DIMtrade

Пока на загруженном проце (много всего запущено) работает так:

02:27:35 Testing...
02:27:36 13676261 Elapsed time 00:00:01.0624052 / Speed: 12872917 per sec
02:27:37 25598583 Elapsed time 00:00:01.9980433 / Speed: 12811817 per sec
02:27:38 38460425 Elapsed time 00:00:02.9978465 / Speed: 12829358 per sec
02:27:39 51317683 Elapsed time 00:00:04.0013027 / Speed: 12825246 per sec
02:27:40 64275773 Elapsed time 00:00:04.9972696 / Speed: 12862185 per sec
02:27:41 77211209 Elapsed time 00:00:05.9968339 / Speed: 12875330 per sec
02:27:42 90151222 Elapsed time 00:00:06.9970555 / Speed: 12884170 per sec
02:27:43 100000000 Elapsed time 00:00:07.7501232 / Speed: 12903021 per sec
02:27:43 Completed / Elapsed time 00:00:07.7501232 / Speed: 12903021 per sec

Что интересно, скорость растет после старта, видимо винда отжимает процессор у других приложений.
Около 13мл в сек

Clip2net_190219023110.png.93bbaa554c8a7a01e0c14314622f94ac.png

Edited by DIMtrade

Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
kaif

Я делал потоки в Delphi. Но не люблю этим заниматься.

Ну что же? В расчете на один поток C# не так чтобы сильно обгоняет Delphi.

 

 

Edited by kaif

механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
DIMtrade

Чет ниче не понимаю, в 1 потоке сокрость больше чем на 8 потоках
Увеличиваю число потоков - скорость падает, а не растет. Попробую другой рандом использовать.

02:41:33 Completed / Elapsed time 00:00:06.8805590 / Speed: 14533703 per sec


Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
kaif

Интересно, сколько жрет вызов самой функции.

Если внутрь цикла засунуть то, что внутри функции, возможно, скорость еще поднимется.


механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
DIMtrade

т.е. в одном потоке 14 млн в сек, а в 8 потоках 13)))))


Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
Player 2
Just now, DIMtrade said:

т.е. в одном потоке 14 млн в сек, а в 8 потоках 13)))))

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

  • Upvote 1

Share this post


Link to post
Share on other sites
DIMtrade
2 минуты назад, Player 2 сказал:

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

Проц тогда почему на 100 грузиться? Думаю в рандом дело, сейчас Guid попробую за место него, я рандом вообще не использую, он очень псевдослучаынй.


Платформа для построения ТС и исследования рынка. Бьёт белке в глаз.
Мониторинг Myfxbook.comОсновная ПАММ ветка

Не использую мартингейл, усреднения, сетки, локи и пересиживание

Share this post


Link to post
Share on other sites
kaif

А как с загрузкой процессора по ядрам дело обстоит?


механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites
Player 2
Just now, DIMtrade said:

Проц тогда почему на 100 грузиться? Думаю в рандом дело, сейчас Guid попробую за место него, я рандом вообще не использую, он очень псевдослучаынй.

Тогда может дело в алгоритме оценки скорости.

У меня Random проблем никогда не вызывал в многопоточных операциях кроме той которую я уже описал.

 

Just now, kaif said:

Какой еще GUID?

Там есть какой-то класс который уникальные GUID генерит.

Share this post


Link to post
Share on other sites
kaif

Кто сказал, что GUID имеет равномерное распределение? Нам это очень важно. Гораздо важнее его случайности и уникальности.

Edited by kaif

механическая торговая система на основе индикатора AT-линий
описание торговой стратегии LTR-AUTO, хроника событий
Docendo discimus

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×