В эксперте есть функция которая при срабатывании TP и SL позиции отслеживает её и закрывает все ордера.
Функцию выкладываю ниже:
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.05.2008 |
//| Описание : Возвращает флаг закрытия последней позиции по тейку. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=777)
{
datetime t;
double ocp, otp;
int dg, i, j=-1, k = OrdersHistoryTotal();
if ((kol_buy()== 0)&&(kol_sell()== 0)) // Мои критерии срабатывания функции
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol()==sy || sy=="")
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (op<0 || OrderType()==op)
{
if (mn<0 || OrderMagicNumber()==mn)
{
if (t<OrderCloseTime())
{
t=OrderCloseTime();
j = i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
{
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg); if ((ocp==otp)&&((kol_buy()== 8)||(kol_sell()== 8))) return(True); // Мои критерии срабатывания функции }
return(False);
}
Как указано у меня есть свои критерии срабатывания данной функции.
Когда позиция с Magic 777 система закрывает по TP, данная функция отслеживает это действие и возвращает значение TRUE в эксперт.
Но проблема в том что это значение не обнуляется в FALSE и постоянно остается в TRUE.
Каким образом можно сделать чтобы данная функция забывала последнюю закрытую позицию с Magic 777 по TP.
Помогите а то сам ни как понять не могу как это можно реализовать !!!
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Проблема такая :
В эксперте есть функция которая при срабатывании TP и SL позиции отслеживает её и закрывает все ордера.
Функцию выкладываю ниже:
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.05.2008 |
//| Описание : Возвращает флаг закрытия последней позиции по тейку. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=777)
{
datetime t;
double ocp, otp;
int dg, i, j=-1, k = OrdersHistoryTotal();
if ((kol_buy()== 0)&&(kol_sell()== 0)) // Мои критерии срабатывания функции
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol()==sy || sy=="")
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (op<0 || OrderType()==op)
{
if (mn<0 || OrderMagicNumber()==mn)
{
if (t<OrderCloseTime())
{
t=OrderCloseTime();
j = i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
{
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if ((ocp==otp)&&((kol_buy()== 8)||(kol_sell()== 8))) return(True); // Мои критерии срабатывания функции
}
return(False);
}
Как указано у меня есть свои критерии срабатывания данной функции.
Когда позиция с Magic 777 система закрывает по TP, данная функция отслеживает это действие и возвращает значение TRUE в эксперт.
Но проблема в том что это значение не обнуляется в FALSE и постоянно остается в TRUE.
Каким образом можно сделать чтобы данная функция забывала последнюю закрытую позицию с Magic 777 по TP.
Помогите а то сам ни как понять не могу как это можно реализовать !!!