Возможно ли избегнуть много "или" (||) в условиях, вызывающих одно и то же действие? - страница 4

 

borilunad:

Самые сложные вычисления не тормозят так, как функции, проверяющие различные необходимые данные рынка и открытых позиций на каждый тик.

Святая правда, MarketInfo - одна из злейших проблем тестирования. Я обычно для таких случаев пишу по возможности в два блока, делая "настоящие" запросы только для режима реальной торговли. Особенно это эффективно для неизмеяющихся (в тестере) данных, например:

int spread;

int init()
{
...

   if(IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
 
}

int start()
{
...

   if (!IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
}

Также можно отправить в блок if(!IsTesting()) всякие там RefreshRates(), запросы к MODE_BID и MODE_ASK (заменив их на быстрые Bid и Ask) и так далее.

 
alsu:

Святая правда, MarketInfo - одна из злейших проблем тестирования. Я обычно для таких случаев пишу по возможности в два блока, делая "настоящие" запросы только для режима реальной торговли. Особенно это эффективно для неизмеяющихся (в тестере) данных, например:

Также можно отправить в блок if(!IsTesting()) всякие там RefreshRates(), запросы к MODE_BID и MODE_ASK (заменив их на быстрые Bid и Ask) и так далее.

Я имею ввиду функции не MarketInfo, которые у меня в начале старта, а функции, проверяющие различные параметры рынка и открытых позиций, прописанные в условиях, необходимых для принятия действий. Тем более MODE_BID и MODE_ASK мне не нужны, т.к. всегда пользуюсь Бид'ом и Аск'ом.
 
pako:

Большое спасибо, Pako! Ну как я не догадался, да так просто! Сейчас поужинаю и заbool'ю всё, что возможно, и проверю скорость прохождения.

А это я не понимаю, что Вы имеете ввиду. Откуда взяли эти числа? А если интересуетесь короткими названиями переменных, так я предпочитаю короткие длинным. Или что ещё? Да, только заметил, что Вы добавили в мою формулку две скобки перед clo и в конце после clo. Это совсем не нужно, нарушает расчёт. Но всё равно от всей души Вам признателен!

<---   10,444 = 8,087 > 3,908 эт на каком языке? 

Сделал, проверил, получилось, но результат пока меня не обрадовал, практически не сократил время прогона! Завтра попробую заbool'ить всё, что возможно, может, тогда будет какая-нибудь разница.

Но всё равно, главное, что благодаря Вам, Pako, Алексею, Виктору и другим я приобрёл ещё один важный метод написания кода, за что Вам премного благодарен!

 

Я в таких случаях использую функцию.

Например:

...
if (Request()) Action;

bool Request()
{
 if (A) return(true);
 if (B) return(true);
 if (C) return(true);
 if (D) return(true);
 return(false);
}
 
borilunad:
всегда пользуюсь Бид'ом и Аск'ом.

Тогда RefreshRates() Вам таки нужен)))
 
icas:

Я в таких случаях использую функцию.

Например:

 

Как я понимаю, у Вас вариант для выполнения всех условий, а у меня достаточно выполнения только одного условия, да если и выполнятся больше, что вряд ли, уж очень они разные, то до этого уже не дойдёт, т.к. сработает одно условие. Если я не правильно понял, обоснуйте! Я всегда рад всему новому! Спасибо!
 
alsu:

Тогда RefreshRates() Вам таки нужен)))
Да, у меня в начале старта есть RefreshRates(), или этого недостаточно?
 
borilunad:
Да, у меня в начале старта есть RefreshRates(), или этого недостаточно?
Все зависит от того, насколько долго исполняются расчеты. Может быть ситуация, при которой за этот период цена обновилась, а значит Ask и Bid становятся неактуальны. Поэтому лучше дополнительно вызывать RefreshRates() перед выполнением торговых операций (точнее, перед расчетом цен для них).
 
borilunad:
Да, у меня в начале старта есть RefreshRates(), или этого недостаточно?
нет никакого смысла в использовании RefreshRates в начале исполнения функции Start, т.к. Ask и Bid еще не успели устареть.
 
alsu:
Все зависит от того, насколько долго исполняются расчеты. Может быть ситуация, при которой за этот период цена обновилась, а значит Ask и Bid становятся неактуальны. Поэтому лучше дополнительно вызывать RefreshRates() перед выполнением торговых операций (точнее, перед расчетом цен для них).

Значит, нужен RefreshRates() перед каждой серией условий? А то я думал, что и в каждой исполняющей функции, где проверяется на ошибки, также есть RefreshRates() для повторения приказа, и этого достаточно. Тогда попробую проставить больше RefreshRates() и посмотрю, что будет! Спасибо!

И Pap'e Yozh'у также моё спасибо!

Причина обращения: