Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 379

 
ALXIMIKS:


...

4) зачем отложки перебирать???

...


О! А покажитека, как их можно не перебирать?

Вопрос конечно интересный, что лучше, прибавлять ли лишний раз OrderProfit() + OrderCommission() + OrderSwap(), которые в сумме равны 0 и ничего не меняют, или же для каждого ордера делать еще if?

 
Example2:


Какая разница как перебирать, главное что он работает.


В некторых случаях есть некоторая разница. Если for (int i = 0; i < OrdersTotal(); i++), то на каждом цикле вызываеся функция OrdersTotal(), а если for (int i = OrdersTotal()-1; i>=0; i--), то функция OrdersTotal() вызывается только один раз. В mql не не экспериментировал на сколько меняется скорость выполнения. Было дело на php, функция count(), прямой цикл работал 17 секунд, обратный 0.01 секунды.
 
Померил скорость прямого и обратного цикла. 100 ордеров, обратный цикл в 5 раз быстрее. Но так много ордеров не бывает, максимум штук 10. Если 10 ордеров, скорость различается в 3 раза. Ощутимо, чтобы выбрать обратный цикл.
 
Integer:
Померил скорость прямого и обратного цикла. 100 ордеров, обратный цикл в 5 раз быстрее. Но так много ордеров не бывает, максимум штук 10. Если 10 ордеров, скорость различается в 3 раза. Ощутимо, чтобы выбрать обратный цикл.


Не подскажете как нормализовать цену?(Мой пост выше) .

 
Example2:


Не подскажете как нормализовать цену?(Мой пост выше) .

Есть функция NormalizeDouble().

NormalizeDouble(_High+Point*20,Digits);

При умножении на первое место лучше ставить double, затем int, а то в некторых случаях можно потерять дробную часть.

 
if(Line_7 > Lines_1 > Line_6)
{
Alert("Сигнал на покупку");
OrderSend(Symbol(),OP_BUY,Lots_Typ,Ask,5,SL_Typ,TP_Typ);
}
return;}
Можно ли таким образом задавать открытие ордера?
 
Link_x:
Можно ли таким образом задавать открытие ордера?


Нет.

Вот так надо:

if(Line_7 > Lines_1 && Lines_1 > Line_6)
 

Еще проверил скорость подсчета прибыли суммируя прибыли всех ордеров и выбирая только рыночные:

Prof1+=OrderProfit()+OrderSwap()+OrderCommission();

и

if(OrderType()==OP_BUY || OrderType()==OP_SELL){
 Prof2+=OrderProfit()+OrderSwap()+OrderCommission();
}
Первый вариант немного быстрее, но незначительно. Соотношение скорости примерно как 1/1.1
 
Integer:

Есть функция NormalizeDouble().

При умножении на первое место лучше ставить double, затем int, а то в некторых случаях можно потерять дробную часть.


Теперь мне выдает ошибку 3: "В торговую функцию переданы неправильные параметры, например, неправильный символ, неопознанная торговая операция, отрицательное допустимое отклонение цены, несуществующий номер тикета и т.п. Необходимо изменить логику программы."

 
Example2:


Теперь мне выдает ошибку 3: "В торговую функцию переданы неправильные параметры, например, неправильный символ, неопознанная торговая операция, отрицательное допустимое отклонение цены, несуществующий номер тикета и т.п. Необходимо изменить логику программы."


Переведите крусор на первую открывающую скобку после OrderSend, удалите эту скобку, введите заново, при этом откроется подсказка с типом параметров, проверьте, все ли параметры соответствют по типу.