Падает скорость вычисления массивов
Здравствуйте. Произвожу вычисления с участием массивов. Первые вычисления производит быстро. Далее скорость падает в геометрической прогрессии. Ниже код. Скажите пожалуйста, в чем причина и как ее исправить?
#include "mainwindow.h" #include "ui_mainwindow.h" void MainWindow::StrategyCod() //код стратегии { for (int NMA=5;NMA<1000;NMA=NMA+50)//3------------------------------------------------------------------------------------------------------------------------------------------------------------------------- { //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- int NOpenPosition=0; //число открытых позиций double Profit=0; double PriceEnter,PriceExit; //цена входа и выхода QDate DateOpenPosition; //Дата открытия позиции //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //int NMA=20;//период ma QVector<double> SMA(NBar); //ma for(long long bar = NMA; bar <NBar; bar++) //ma { double Summa=0;//summa for(long long i=bar-NMA;i<bar;i++)//summa { Summa=Summa+Close[i]; } SMA[bar]=Summa/NMA; } for(long long bar = NMA; bar <NBar; bar++)//основной цикл { if (NOpenPosition!=0)//2------------------------------------------------------------------------------------------------------------------------------------------------------- { if ((Close[bar-1]<SMA[bar-1])&&(Close[bar]>SMA[bar])) { PriceExit=Close[bar]-qrand()%MaxSlippage; //цена закрытия позиции if (PriceEnter>High[bar]){PriceEnter=High[bar];} if (PriceEnter<Low[bar]){PriceEnter=Low[bar];} NOpenPosition=NOpenPosition-1; Profit=PriceEnter-PriceExit-Commission; } } else//1-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- { if ((Close[bar-1]>SMA[bar-1])&&(Close[bar]<SMA[bar])) { PriceEnter=Close[bar]+qrand()%MaxSlippage; //цена открытия позиции //покупка if (PriceEnter>High[bar]){PriceEnter=High[bar];} if (PriceEnter<Low[bar]){PriceEnter=Low[bar];} NOpenPosition=NOpenPosition+1; DateOpenPosition=Date[bar]; } } //1--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- }//2------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ qDebug()<<NMA; qDebug()<<Profit; qDebug()<<QDateTime::currentDateTime(); }//3------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ }
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
AD
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
How to make game using Qt - Lesson 3. Interaction with other objects what is priligy tablets What happens during the LASIK surgery process
Using variables declared in CMakeLists.txt inside C ++ files where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
QML - Tutorial 035. Using enumerations in QML without C ++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
Qt/C++ - Lesson 052. Customization Qt Audio player in the style of AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
Now discuss on the forum
добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderCheOct. 31, 2024, 3:43 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь МаксимовOct. 3, 2024, 4:05 a.m.
У вас очень большие проблемы с синтаксисом.
Правильно:1. Между знаками < > = - и так далее должны быть пробелы. Не склеивайте все в одно, читать очень-очень тяжело.
2. Во вторых в цикле for используйте всегда префикс ++i вместо постфикса i++ если только вы точно не знаете что вам нужен постфикс.
3. Если у вас не очень сложный и большой цикл for то никогда для индекса не используйте ничего кроме одной буквы.
Неправильно:
4. нету смысла в цикле обьявлять переменные. В первом цикле у вас
Вынесите все это перед внешним циклом.
5. Во втором цикле нету смысла использовать long long так как исходя из первого цикла у вас од 0 до 1000. А это значит там или обычный int или без знаковый quint32.
Исправте это все и проверте.
И еще, отступы для новой строки должны быть 1 таб это 3 пробела. У вас там походу 2 пробела. Смотрится ужасно.
День добрый!
long long нужен, т.к. NBar может быть больше int.
Напомните смысл SMA и NMA. Насколько помню - это два различных индикатора средней скользящей?
Не вижу смысла делать расчёт для SMA при каждом расчёте одной позиции NMA. Почему бы не рассчитать отдельно SMA и NMA, а потом уже в цикле сравнить их?
в моем случае, NMA - размер цикла SMA. Размер цикла меняется->нужно менять среднюю.
Хорошо. Тогда здесь нет ничего удивительного, что увеличивается время подсчёта. Вы увеличиваете NMA, что означает, что для SMA нужно подсчитать больше элементов для расчёта одной точки на графике. Чем больше NMA, тем длительнее расчёт.
Спасибо.
По поводу распараллеливания. Думаю, что это можно сделать следующим способом.
Изменил логику расчета, теперь считает все в 1000 раз быстрее.
Молодцом. В чём заключалось изменение?
Пересчет суммы. Я от предыдущей отнимаю одно и добавляю одно значение, а не пересчитываю все заново.
То есть отнимаете первое в сумме значение из предыдущего подсчёта, а добавляете последнее в новом подсчёте. Весьма хорошо. Я как-то об этом не подумал.