Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Давайте так. Вы показываете код, который перебирает ордера с пояснением, как он должен это делать, и только потом уже можно будет говорить что так, а что не так. Просто названия функций Вас к итогу не приблизят.
Здравствуйте ...спасибо, что согласились мне помочь ... казалось бы небольшая затея, озвучить закрытие ордеров, обойдётся простым добавлением нужного события в соответствующую папку - оказалось всё не так то просто ... вот пример кода, который я взял из Справочник MQL4 Торговые функции :
int OrdersHistoryTotal();
// retrieving info from trade historyint i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
}
... функция возвращает количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала.
Как она их будет перебирать, и зачем это нужно, мне не понятно ... разве что для того, чтобы запомнить и отбросить, дабы не мешали?
Озвучивать предполагается вновь закрытые ордера в момент их закрытия коротким звуковым сигналом. Все закрываемые ордера в моём клиентском терминале только двух типов: по TrailStopLoss и TakeProfit усреднения. При закрытии ордера (группы ордеров), не важно какого направления (Sell или Buy), необходимо их разделять только по виду команды к закрытию StopLoss или TakeProfit, и передавать в соответствующую функцию PlaySound.
Здравствуйте ...спасибо, что согласились мне помочь ... казалось бы небольшая затея, озвучить закрытие ордеров, обойдётся простым добавлением нужного события в соответствующую папку - оказалось всё не так то просто ... вот пример кода, который я взял из Справочник MQL4 Торговые функции :
int OrdersHistoryTotal();
// retrieving info from trade historyint i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
}
... функция возвращает количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала.
Как она их будет перебирать, и зачем это нужно, мне не понятно ... разве что для того, чтобы запомнить и отбросить, дабы не мешали?
Озвучивать предполагается вновь закрытые ордера в момент их закрытия коротким звуковым сигналом. Все закрываемые ордера в моём клиентском терминале только двух типов: по TrailStopLoss и TakeProfit усреднения. При закрытии ордера (группы ордеров), не важно какого направления (Sell или Buy), необходимо их разделять только по виду команды к закрытию StopLoss или TakeProfit, и передавать в соответствующую функцию PlaySound.
Перебирать ордера нужно в обратной последовательности, т.к. 0 - самый первый. accTotal-1 - последний. В этот код после "// работа с ордером" запоминайте комментарий и проверяйте в нем наличие комментария закрытия по СЛ или по ТП.
int OrdersHistoryTotal();
// retrieving info from trade historyint i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
}
string OrderComment();
string comment;if(OrderSelect(10,SELECT_BY_TICKET)==false)
{
Print("OrderSelect() вернул ошибку - ",GetLastError());
return(0);
}
comment = OrderComment();
// ...
Спасибо за ответ ... после добавления кода функции OrderComment, (Справочник MQL4 Торговые функции ) которая возвращает комментарий выбранного функцией OrdersHistoryTotal ордера, общий код принимает следующий вид ... а нет ли у нас функции отслеживания в истории терминала новых закрытых ордеров? ... "0 - самый первый. accTotal-1 - последний" - имеется ввиду "первый закрытый" и "последний" в истории терминала, это по времени?... я правильно понял?
а нет ли у нас функции отслеживания в истории терминала новых закрытых ордеров?
Стандартных нет.
string comment;
for(i=accTotal-1;i>=0;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
comment = OrderComment();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
Стандартных нет.
string comment;
for(i=accTotal-1;i>=0;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
comment = OrderComment();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
Спасибо ... Вы имеете ввиду функцию StringFind = Поиск подстроки в строке.
);
Возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена.
... или функцию StringCompare - Сравнивает две строки ?...
Спасибо ... Вы имеете ввиду функцию StringFind = Поиск подстроки в строке.
);
Возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена.
...
Верно.
Спасибо ... код далее будет иметь вид:
int i,accTotal=OrdersHistoryTotal();
int StringFind(string comment;
for(i=accTotal-1;i>=0;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
comment = OrderComment();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
string string_value, // строка, в которой ищем
string match_substring, // что ищем
int start_pos=0 // с какой позиции начинать поиск
);
Спасибо ... код далее будет иметь вид:
int i,accTotal=OrdersHistoryTotal();
int StringFind(string comment;
for(i=accTotal-1;i>=0;i++)
{
//---- check selection result
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
// работа с ордером ...
comment = OrderComment();
// Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
}
string string_value, // строка, в которой ищем
string match_substring, // что ищем
int start_pos=0 // с какой позиции начинать поиск
);
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих
A1exPit, 2016.11.30 22:14
Подскажите OrderSelect по SELECT_BY_POS какой 0 ордер последний выставленный или первый? А то и так и наоборот пробую, а ошибка модифи #0 вылетает.