alsu: Можно ускорить и еще, например, если мы знаем, что условие A выполняется в среднем чаще, чем С, а С чаще, чем В, то расположить их надо именно в таком порядке: if(!a){if(!c)if{(!b) M=false;}}
Еще сильнее можно ускорить, комбинируя вероятность выполенния условия с его вычислительной сложностью: например, взяв за критерий произведение вероятности выполнения на величину, обратную времени вычисления, первыми следует проверять те условия, которые наиболее вероятны и имеют наименьшую вычислитеьлную сложность, т.е. те, которые имеют наибольшее значение заданного нами критерия.
Еще сильнее можно ускорить, комбинируя вероятность выполенния условия с его вычислительной сложностью: например, взяв за критерий произведение вероятности выполнения на величину, обратную времени вычисления, первыми следует проверять те условия, которые наиболее вероятны и имеют наименьшую вычислитеьлную сложность, т.е. те, которые имеют наибольшее значение заданного нами критерия.
Я уже давно их в таком порядке расположил. Но если даже вдруг выполнится больше одного условия, тогда выполнится первое попавшееся.
И это без разницы, т.к. потом прописаны общие для всех вариантов заключительные условия.
Еще сильнее можно ускорить, комбинируя вероятность выполенния условия с его вычислительной сложностью: например, взяв за критерий произведение вероятности выполнения на величину, обратную времени вычисления, первыми следует проверять те условия, которые наиболее вероятны и имеют наименьшую вычислитеьлную сложность, т.е. те, которые имеют наибольшее значение заданного нами критерия.
Алексей, ещё раз отвечаю на Ваше предложение поменять местами условия в зависимости от их влияния на скорость исполнения действий. И вот, что я обнаружил! Самые сложные вычисления не тормозят так, как функции, проверяющие различные необходимые данные рынка и открытых позиций на каждый тик. Эти функции я уже достаточно упростил по совету одного из форумчан, выкинув все ненужности в моём случае, что ускорило их действие почти вдвое. Насчёт выбора работы на "каждом" тике, ещё раньше убедился, что только этот режим даёт большее приближение к реально возможным результатам. Так вот, поставив эти функции после всех вычислений, проверок индикаторов и текущей цены, скорость увеличилась ещё вдвое, что составляет сейчас 7 минут прогона в тестере за полгода и, соответственно, 14 минут за год. Отказаться от функций не могу, выполняющие необходимые проверки, если предыдущие условия позволяют. Теперь буду пробовать оптимизировать код, меняя && на ) if (. Рад буду узнать, какие есть ещё возможности в оптимизации кодов. Спасибо Вам и всем за помощь!
Ни один из операторов не подходит. Может, есть какой-нибудь другой способ без if(A || B || C || D || E) Action;?
Прошу модераторов не отправлять в общую ветку вопрошающих ввиду важности вопроса, над которым думаю и не могу найти более рационального решения! Спасибо!
if(A || B || C || D || E) Action; я бы так сделал if((A + B + C + D + E) > 0) Action; если для Action нужно минимум 3 сигнала, вместо 0 пишем 2
FION: Если A,B,C,D - функции , то нужно считать по сложности начиная с самой легкой и постоянно проверять на истинность. Так будет работать быстрее.
Благодарю Вас за участие! А, В, С ... не функции, а условия, содержащие функции и не содержащие их, и к тому же взаимоисключающие! И достаточно одного условия, чтобы перейти к другим условиям, которые уже вызывают действие. Если бы были только функции, тогда бы не было проблемы:
double А = function1(); double B = function2(); double C = function3(); double D = function4(); double E = function5(); и далее, как предложил Pako:
if((A + B + C + D + E) > 0)
{другие условие с зеркально различающимися по направлению для закрытия Байев или Сэллов} Action;НО:
А мне нужно, чтобы А = условие1, В = условие2, С = условие3, D = условие4, Е = условие5. Возможно или нет?! Или это невозможно и всё тут!
Можно ускорить и еще, например, если мы знаем, что условие A выполняется в среднем чаще, чем С, а С чаще, чем В, то расположить их надо именно в таком порядке: if(!a){if(!c)if{(!b) M=false;}}
Еще сильнее можно ускорить, комбинируя вероятность выполенния условия с его вычислительной сложностью: например, взяв за критерий произведение вероятности выполнения на величину, обратную времени вычисления, первыми следует проверять те условия, которые наиболее вероятны и имеют наименьшую вычислитеьлную сложность, т.е. те, которые имеют наибольшее значение заданного нами критерия.
Можно ещё таким способом оптимизировать вычисления:
А может, так попробовать:
Спасибо!
Еще сильнее можно ускорить, комбинируя вероятность выполенния условия с его вычислительной сложностью: например, взяв за критерий произведение вероятности выполнения на величину, обратную времени вычисления, первыми следует проверять те условия, которые наиболее вероятны и имеют наименьшую вычислитеьлную сложность, т.е. те, которые имеют наибольшее значение заданного нами критерия.
Я уже давно их в таком порядке расположил. Но если даже вдруг выполнится больше одного условия, тогда выполнится первое попавшееся.
И это без разницы, т.к. потом прописаны общие для всех вариантов заключительные условия.
Еще сильнее можно ускорить, комбинируя вероятность выполенния условия с его вычислительной сложностью: например, взяв за критерий произведение вероятности выполнения на величину, обратную времени вычисления, первыми следует проверять те условия, которые наиболее вероятны и имеют наименьшую вычислитеьлную сложность, т.е. те, которые имеют наибольшее значение заданного нами критерия.
Ни один из операторов не подходит. Может, есть какой-нибудь другой способ без if(A || B || C || D || E) Action;?
Прошу модераторов не отправлять в общую ветку вопрошающих ввиду важности вопроса, над которым думаю и не могу найти более рационального решения! Спасибо!
if(A || B || C || D || E) Action; я бы так сделал if((A + B + C + D + E) > 0) Action; если для Action нужно минимум 3 сигнала, вместо 0 пишем 2
скорость, я не замерял
if(A || B || C || D || E) Action; я бы так сделал if((A + B + C + D + E) > 0) Action; если для Action нужно минимум 3 сигнала, вместо 0 пишем 2
скорость, я не замерял
Ускорение будет колоссальное. Решение очень оригинальное
Ускорение будет колоссальное. Решение очень оригинальное
Если A,B,C,D - функции , то нужно считать по сложности начиная с самой легкой и постоянно проверять на истинность. Так будет работать быстрее.
Благодарю Вас за участие! А, В, С ... не функции, а условия, содержащие функции и не содержащие их, и к тому же взаимоисключающие! И достаточно одного условия, чтобы перейти к другим условиям, которые уже вызывают действие. Если бы были только функции, тогда бы не было проблемы:
double А = function1(); double B = function2(); double C = function3(); double D = function4(); double E = function5(); и далее, как предложил Pako:
if((A + B + C + D + E) > 0)
{другие условие с зеркально различающимися по направлению для закрытия Байев или Сэллов} Action; НО:
А мне нужно, чтобы А = условие1, В = условие2, С = условие3, D = условие4, Е = условие5. Возможно или нет?! Или это невозможно и всё тут!
Например:
Что пробовать-делать не знаю!
А мне нужно, чтобы А = условие1, В = условие2, С = условие3, D = условие4, Е = условие5. Возможно или нет?! Или это невозможно и всё тут!