![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здесь, если Orderselect равен FALSE, как советник может вернуться к строке кода: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )
???
Здесь, если Orderselect равен FALSE, как советник может вернуться к строке кода: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )
???
Этот код неправильный...
cnt должен начинаться с OrdersTotal() - 1 и уменьшаться до cnt >= 0 ... ... первая запись - 0, а не 1.
Вот почему я попросил показать код. . и вы показали достаточно, чтобы определить проблему... возможно. ;-)
Этот код неправильный... ...
cnt должен начинаться с OrdersTotal() - 1 и уменьшаться до cnt >= 0. . . . . . первая запись - 0, а не 1.
Вот почему я попросил показать код. . и вы показали достаточно, чтобы определить проблему... возможно. ;-)
Очень правильно. Спасибо, Виземан!
Очень правильно. Спасибо, Wizeman!
И еще одна идея:
Если у меня много условий, вы можете написать:
If( X>b && B>S && NB<F......)
{
BBB= 5;
}f.e.
Здесь эксперт должен вычислить каждое условие внутри скобки.
Но если вы ищете эффективность (4 000 строк кода...), я предпочитаю иметь:
If ( X>b )
{
while (B>S)
{
While (NB<F...)
{
BBB=5;
}
break;
}
break;
}
Являются ли эти 2 варианта одинаковыми?
Y.
crossy, когда вы пишете код, пожалуйста, используйте кнопку SRC, это будет гораздо более читабельно.
Итак, это будет выглядеть так
Объяснение цикла "if, while и for" в mql4 https://book.mql4.com/operators/assign
Во втором коде все в порядке, поскольку вы используете break, однако, это долгий путь, чтобы получить BBB = 5. Я предпочитаю первый код, он использует меньше ресурсов.
И еще одна идея:
Если у меня много условий, вы можете написать:
If( X>b && B>S && NB<F......)
{
BBB= 5;
}f.e.
Здесь эксперт должен вычислить каждое условие внутри скобки.
Но если вы ищете эффективность (4 000 строк кода...), я предпочитаю иметь:
Используйте кнопку SRC для отображения вашего кода для лучшего чтения, пожалуйста :)
Вы неправильно закодировали OrderSelect(). Сравните свой код с этим. Затем напишите, осталась ли у вас проблема или нет :)
Особая благодарность onewithzachy,
Я не знал, что ORDERSELECT migth not catch, поэтому у вас могут быть неизвестные ошибки.
Мой код, который был 4016 строк кода, стал почти 4500 строк - но без ошибок.
Спасибо всем, друзья.
Y.
Здравствуйте, друзья,
После долгого путешествия здесь, у меня был хороший прогресс с моим советником, но у меня есть еще одна проблема, как указано ниже:
У меня есть следующая строка кода:
CLOSE_Single_P(Pair1, "LONG",OrderT,OrderL);
как:
Pair1 - это символ,
"LONG"- признак длинной сделки,
OrderT - номер билета ордера,
OrderL - размер лота ордера.
.
Функция выглядит следующим образом:
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
double PRC;
bool Check = false;
for ( int cntt=0; cntt<20000; cntt++ )
{
if ( Check )
{
Check_Ini();
return;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
Check = false;
if ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID);
else
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK);
Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
if ( Check )
break;
} }
}
}
return;
}
Моя ПРОБЛЕМА заключается в следующем: Иногда советник закрывает сделку очень хорошо, но иногда советник закрывает сделку, НО продолжает искать тикет для ее закрытия, хотя она уже была закрыта.
(Я получаю ошибку: "Неизвестный номер тикета...").
Я думаю, что у меня логическая ошибка.
Спасибо за помощь.
Y
Пожалуйста........