С вопросом закрытия ордеров по мейджику я постараюсь разобраться в
понедельник (сейчас форекс не работает, выходные). Не помолучться -
сильно не пинайте, спрошу в этой ветке. :)
Я правильно понял, что нельзя закрыть ордер по магическому номер "в лоб". Надо перебирать все ордера по номеру в списке/тикету и смотреть, какой у него магический номер. Так?
Я правильно понял, что нельзя закрыть ордер по магическому номер "в лоб". Надо перебирать все ордера по номеру в списке/тикету и смотреть, какой у него магический номер. Так?
Я правильно понял, что нельзя закрыть ордер по магическому номер "в лоб". Надо перебирать все ордера по номеру в списке/тикету и смотреть, какой у него магический номер. Так?
Напрямую по меджику закрыть нельзя. Меджик вообще не обязательная штука - может быть всегда нулем. Необходим он только для того, чтобы советники (если их допустим больше одного) работали только со своими ордерами (ордерами со своими меджиками), да и то каждый из этих советников должен уметь выделять для работы ордера со своими меджиками, а то часто бывает сырые или очень простенькие совы "думают" что они вообще одни на целом свете и пытаются работать со всеми открытыми ордерами невзирая на меджик и прочее...
Функция закрытия открытого ордера только одна и она по тикету:
int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
Закрытие позиции. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
ticket
-
Уникальный порядковый номер ордера.
lots
-
Количество лотов для закрытия.
price
-
Цена закрытия.
slippage
-
Значение максимального проскальзывания в пунктах.
Color
-
Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.
Напрямую по меджику закрыть нельзя. Меджик вообще не обязательная штука - может быть всегда нулем. Необходим он только для того, чтобы советники (если их допустим больше одного) работали только со своими ордерами (ордерами со своими меджиками), да и то каждый из этих советников должен уметь выделять для работы ордера со своими меджиками, а то часто бывает сырые или очень простенькие совы "думают" что они вообще одни на целом свете и пытаются работать со всеми открытыми ордерами невзирая на меджик и прочее...
Функция закрытия открытого ордера только одна и она по тикету:
int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
Закрытие позиции. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
ticket
-
Уникальный порядковый номер ордера.
lots
-
Количество лотов для закрытия.
price
-
Цена закрытия.
slippage
-
Значение максимального проскальзывания в пунктах.
Color
-
Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.
Пример:
Спасибо за ответ. Мейджики меня привлекли лишь потому, что некоторые ДЦ в новых сутках переоткрывают ордера и, как следствие, у них меняются тикеты. Наверное, в этом случае и мейджик может потеряться.
Я тут подумаю и скоро представлю новую версию кода. Просьба не исчезать. :)
Напрямую по меджику закрыть нельзя. Меджик вообще не обязательная штука - может быть всегда нулем. Необходим он только для того, чтобы советники (если их допустим больше одного) работали только со своими ордерами (ордерами со своими меджиками), да и то каждый из этих советников должен уметь выделять для работы ордера со своими меджиками, а то часто бывает сырые или очень простенькие совы "думают" что они вообще одни на целом свете и пытаются работать со всеми открытыми ордерами невзирая на меджик и прочее...
Функция закрытия открытого ордера только одна и она по тикету:
int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
Закрытие позиции. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
ticket
-
Уникальный порядковый номер ордера.
lots
-
Количество лотов для закрытия.
price
-
Цена закрытия.
slippage
-
Значение максимального проскальзывания в пунктах.
Color
-
Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.
Пример:
Написал программку. Ошибок при компилировании нет, программа не виснет, работает, но ордера не открываются.
extern double L1=0.01;
extern int ticket.1;
extern int M=0;
int MassivTicketov[3]={0, 0, 0};
int init()
{
return(0);
}
С вопросом закрытия ордеров по мейджику я постараюсь разобраться в понедельник (сейчас форекс не работает, выходные). Не помолучться - сильно не пинайте, спрошу в этой ветке. :)
Рынок не работает, а тестер работает...
Как вариант, ф-я
int AccountNumber()
Возвращает номер текущего счета.
Пропишите в коде условие:
if (AccountNumber() != заданный номер) return(0);
А можно пример написания ф-ии, куда ее лепить?
А можно пример написания ф-ии, куда ее лепить?
Можно в самом начале функции Старт:
Рынок не работает, а тестер работает...
Я правильно понял, что нельзя закрыть ордер по магическому номер "в лоб". Надо перебирать все ордера по номеру в списке/тикету и смотреть, какой у него магический номер. Так?
Я правильно понял, что нельзя закрыть ордер по магическому номер "в лоб". Надо перебирать все ордера по номеру в списке/тикету и смотреть, какой у него магический номер. Так?
Так
Я правильно понял, что нельзя закрыть ордер по магическому номер "в лоб". Надо перебирать все ордера по номеру в списке/тикету и смотреть, какой у него магический номер. Так?
Напрямую по меджику закрыть нельзя. Меджик вообще не обязательная штука - может быть всегда нулем. Необходим он только для того, чтобы советники (если их допустим больше одного) работали только со своими ордерами (ордерами со своими меджиками), да и то каждый из этих советников должен уметь выделять для работы ордера со своими меджиками, а то часто бывает сырые или очень простенькие совы "думают" что они вообще одни на целом свете и пытаются работать со всеми открытыми ордерами невзирая на меджик и прочее...
Функция закрытия открытого ордера только одна и она по тикету:
https://docs.mql4.com/ru/trading/OrderClose
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75) { OrderClose(order_id,1,Ask,3,Red); return(0); }Напрямую по меджику закрыть нельзя. Меджик вообще не обязательная штука - может быть всегда нулем. Необходим он только для того, чтобы советники (если их допустим больше одного) работали только со своими ордерами (ордерами со своими меджиками), да и то каждый из этих советников должен уметь выделять для работы ордера со своими меджиками, а то часто бывает сырые или очень простенькие совы "думают" что они вообще одни на целом свете и пытаются работать со всеми открытыми ордерами невзирая на меджик и прочее...
Функция закрытия открытого ордера только одна и она по тикету:
https://docs.mql4.com/ru/trading/OrderClose
Спасибо за ответ. Мейджики меня привлекли лишь потому, что некоторые ДЦ в новых сутках переоткрывают ордера и, как следствие, у них меняются тикеты. Наверное, в этом случае и мейджик может потеряться.
Я тут подумаю и скоро представлю новую версию кода. Просьба не исчезать. :)
Спасибо Ktest0 за кураторство. Все заработало. От мейджиков отказался.
Вроде при переносе через сутки номера тикетов у меня не меняются.
Странно, что человек писал о смене тикетов.
Напрямую по меджику закрыть нельзя. Меджик вообще не обязательная штука - может быть всегда нулем. Необходим он только для того, чтобы советники (если их допустим больше одного) работали только со своими ордерами (ордерами со своими меджиками), да и то каждый из этих советников должен уметь выделять для работы ордера со своими меджиками, а то часто бывает сырые или очень простенькие совы "думают" что они вообще одни на целом свете и пытаются работать со всеми открытыми ордерами невзирая на меджик и прочее...
Функция закрытия открытого ордера только одна и она по тикету:
https://docs.mql4.com/ru/trading/OrderClose
Написал программку. Ошибок при компилировании нет, программа не виснет, работает, но ордера не открываются.
extern double L1=0.01;extern int ticket.1;
extern int M=0;
int MassivTicketov[3]={0, 0, 0};
int init()
{
return(0);
}
int start()
{
Alert(" 1 ");
RefreshRates(); // Обновление данных
NormalizeDouble(Ask,Digits); //для цены
NormalizeDouble(L1,2); //для лота.
ticket.1=OrderSend ("AUDCAD", OP_BUY, L1, Ask, 3, 0, 0, 0, 0, CLR_NONE);
MassivTicketov[M]=ticket.1; M++;
//
Alert(" 2 ");
RefreshRates(); // Обновление данных
NormalizeDouble(Ask,Digits); //для цены
NormalizeDouble(L1,2); //для лота.
MassivTicketov[M]=ticket.1; M++;
ticket.1=OrderSend ("AUDCAD", OP_BUY, L1, Ask, 3, 0, 0, 0, 0, CLR_NONE);
//
Alert(" 3 ");
RefreshRates(); // Обновление данных
NormalizeDouble(Ask,Digits); //для цены
NormalizeDouble(L1,2); //для лота.
ticket.1=OrderSend ("AUDCAD", OP_BUY, L1, Ask, 3, 0, 0, 0, 0, CLR_NONE);
MassivTicketov[M]=ticket.1; M=0;
//
Alert(" 1.1 ");
RefreshRates(); // Обновление данных
NormalizeDouble(Bid,Digits); //для цены
NormalizeDouble(L1,2); //для лота.
ticket.1=MassivTicketov[M]; M++;
OrderSelect(ticket.1, SELECT_BY_TICKET);
OrderClose (ticket.1, L1, Bid, 3);
//
Alert(" 1.2 ");
RefreshRates(); // Обновление данных
NormalizeDouble(Bid,Digits); //для цены
NormalizeDouble(L1,2); //для лота.
ticket.1=MassivTicketov[M]; M++;
OrderSelect(ticket.1, SELECT_BY_TICKET);
OrderClose (ticket.1, L1, Bid, 3);
//
Alert(" 1.3 ");
RefreshRates(); // Обновление данных
NormalizeDouble(Bid,Digits); //для цены
NormalizeDouble(L1,2); //для лота.
ticket.1=MassivTicketov[M]; M=0;
OrderSelect(ticket.1, SELECT_BY_TICKET);
OrderClose (ticket.1, L1, Bid, 3);
//
return(0);
}
int deinit()
{
return(0);
}