Чтобы ответить более точно, нужно смотреть код советника. Но обычно такое случается когда при написании советника не учитываются некоторые особенности работы советников с вызываемыми индикаторами. Советники сами не рассчитывают значения индикаторов,а берут их из индикаторных буферов готовыми. Поэтому если надо, например,запоминать предыдущие значения индикатора, или еще что нибудь, что делает сам индикатор.все это надо предусматривать в советнике. По крайней мере в кодобазе мне такие встречались.Ну и еще бывают "кривые" индикаторы, хотя у вас, вроде, стандартный стоххастик и к нему это не относится.
Спасибо за ответ, но он мне не очень помог, еще раз выкладываю проблему, может у кого-то еще есть какие-то мысли по этому поводу???
Добрый день! Помогите пожалуйста, не могу понять почему открываются ненужные ордера ((, на скрине обведены красным, код прилагается...
Эта функция возвращает флаг закрытия последней позиции по тейку. Флаг поднят - True - сработал TakeProfit. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
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(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Эта функция возвращает флаг закрытия последней позиции по тейку. Флаг поднят - True - сработал TakeProfit. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
Спасибо, я тут сам наткнулся на Библиотеки КИМА..(товарищ Ким видимо как МАРКС форексного мира - написал КАПИТАЛ...и мы все его теперь цитируем (т.е.вставляем в свои советники)) ... там есть "флаги" последних сделок в разных вариациях...
вот только я еще не разу не пользовался # includ-ом....
не поясните в двух словах?
сверху пишу # include (имя файл mqh)
а вот в коде? просто где нужно вставить польз.функ ? например
GetTypeLastClosePos ();
а что дальше ?
вот из этого ЧТО ИМЕННО мне вернет ТИП позиции?
int GetTypeLastClosePos(string sy="", int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal(), r=-1;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderType();
}
}
}
}
}
return(r);
}
OrderType() ?
т.е. дальше if (OrderType() ==TRUE ) сделать то-то и то-то... так?
Спасибо, я тут сам наткнулся на Библиотеки КИМА..(товарищ Ким видимо как МАРКС форексного мира - написал КАПИТАЛ...и мы все его теперь цитируем (т.е.вставляем в свои советники)) ... там есть "флаги" последних сделок в разных вариациях...
вот только я еще не разу не пользовался # includ-ом....
не поясните в двух словах?
сверху пишу # include (имя файл mqh)
а вот в коде? просто где нужно вставить польз.функ ? например
GetTypeLastClosePos ();
а что дальше ?
вот из этого ЧТО ИМЕННО мне вернет ТИП позиции?
OrderType() ?
т.е. дальше if (OrderType() ==TRUE ) сделать то-то и то-то... так?
Функции нужно вставлять после return(0);
Функция GetTypeLastClosePos() вернет 0 если был бай и 1 если сэлл или -1 если в истории ничего нет.
//+------------------------------------------------------------------+//| 123.mq4 |//| Copyright 2012, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----if (isCloseLastPosByTake()==true) Comment("Профит"); elseComment("ХЗ");
//----return(0);
}
//+------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
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(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Чтобы ответить более точно, нужно смотреть код советника. Но обычно такое случается когда при написании советника не учитываются некоторые особенности работы советников с вызываемыми индикаторами. Советники сами не рассчитывают значения индикаторов,а берут их из индикаторных буферов готовыми. Поэтому если надо, например,запоминать предыдущие значения индикатора, или еще что нибудь, что делает сам индикатор.все это надо предусматривать в советнике. По крайней мере в кодобазе мне такие встречались.Ну и еще бывают "кривые" индикаторы, хотя у вас, вроде, стандартный стоххастик и к нему это не относится.
Спасибо за ответ, но он мне не очень помог, еще раз выкладываю проблему, может у кого-то еще есть какие-то мысли по этому поводу???
Добрый день! Помогите пожалуйста, не могу понять почему открываются ненужные ордера ((, на скрине обведены красным, код прилагается...
Если так, тогда это вопрос к разработчикам справки.
разработчики тут оказались не причем. :__
вместо ( Hour()>=10 || Hour()<20 ) надо было сделать простое Hour()>=10 && Hour()<20
и все заработало
подскажите где порыться чтобы посмотреть как кодируется условие "если последняя закрытая по тейкпрофиту сделка была > 0 то...."
т.е. учет уже закрытых (автоматом) сделок .
подскажите где порыться чтобы посмотреть как кодируется условие "если последняя закрытая по тейкпрофиту сделка была > 0 то...."
т.е. учет уже закрытых (автоматом) сделок .
https://www.mql5.com/ru/forum/131859
https://www.mql5.com/ru/forum/131859/page4#434230
Функция isCloseLastPosByTake().
Эта функция возвращает флаг закрытия последней позиции по тейку. Флаг поднят - True - сработал TakeProfit. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
https://www.mql5.com/ru/forum/131859
https://www.mql5.com/ru/forum/131859/page4#434230
Функция isCloseLastPosByTake().
Эта функция возвращает флаг закрытия последней позиции по тейку. Флаг поднят - True - сработал TakeProfit. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
Спасибо, я тут сам наткнулся на Библиотеки КИМА..(товарищ Ким видимо как МАРКС форексного мира - написал КАПИТАЛ...и мы все его теперь цитируем (т.е.вставляем в свои советники)) ... там есть "флаги" последних сделок в разных вариациях...
вот только я еще не разу не пользовался # includ-ом....
не поясните в двух словах?
сверху пишу # include (имя файл mqh)
а вот в коде? просто где нужно вставить польз.функ ? например
GetTypeLastClosePos ();
а что дальше ?
вот из этого ЧТО ИМЕННО мне вернет ТИП позиции?
OrderType() ?
т.е. дальше if (OrderType() ==TRUE ) сделать то-то и то-то... так?
Спасибо, я тут сам наткнулся на Библиотеки КИМА..(товарищ Ким видимо как МАРКС форексного мира - написал КАПИТАЛ...и мы все его теперь цитируем (т.е.вставляем в свои советники)) ... там есть "флаги" последних сделок в разных вариациях...
вот только я еще не разу не пользовался # includ-ом....
не поясните в двух словах?
сверху пишу # include (имя файл mqh)
а вот в коде? просто где нужно вставить польз.функ ? например
GetTypeLastClosePos ();
а что дальше ?
вот из этого ЧТО ИМЕННО мне вернет ТИП позиции?
OrderType() ?
т.е. дальше if (OrderType() ==TRUE ) сделать то-то и то-то... так?
Функции нужно вставлять после return(0);
Функция GetTypeLastClosePos() вернет 0 если был бай и 1 если сэлл или -1 если в истории ничего нет.
Функции нужно вставлять после return(0);
Функция GetTypeLastClosePos() вернет 0 если был бай и 1 если сэлл или -1 если в истории ничего нет.
понял, спасибо.
а все-таки, если функция находится в #include-файле, тогда как ею распорядиться?