Уважаемый Игорь! Возможно ли в Вашем советнике e-CloseByPercentProfit.mq4 сделать дополнение чтобы он выставлял TP и SL на ту пару на графике которой он установлен.Это необходимо так как очень часто бывают разрывы связи с интернетом.
//+------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+------------------------------------------------------------------+int NumberOfPositions(string sy="",int op=-1,int mn=-1){int i, k=OrdersTotal(), kp=0;if(sy=="0") sy=Symbol();for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if(op<0||OrderType()==op){if(mn<0||OrderMagicNumber()==mn) kp++;}}}}}return(kp);}
У меня мультивалютный совентник. Пары задаются во внешних параметрах. Со своим магиком (по каждой паре).
Среди условий входа по каждому инструменту присутствует вот такое:
if ( NumberOfPositions(Symbol_1, -1,Magic_1)<1){//если нет открытых
//позиций по 1-му инструменту,
ИЛИ (для второй пары)
if ( NumberOfPositions(Symbol_2, -1,Magic_2)<1){//если нет открытых
//позиций по 2-му инструменту, проверяем ОСТАЛЬНЫЕ условия
Случилось так, что я вчера оба символа зарядила - EURUSD, и утром обнаружила, что открылась только одна сделка, хотя, вроде бы, сигналы были в обоих случаях.
Сначала проверяет наличие открытой позиции по символу. А уж потом всё остальное.
Иначе говоря, если уже есть открытая позиция (этим советником) по инструменту EIRUSD, то вторая позиция, даже с другим магиком , по иному алгоритму - уже не откроется?
Скажите, пож., это так или нет ?
Или я ошибаюсь в своих рассуждениях?, - и функция оценивает все заданные критерии "суммарно", а не по очереди...
Часто использую эту функцию, возвращает все согласно входным параметрам. Перебираемые функцией позиции последовательно сортируются по параметрам. Да сами посмотрите.
int NumberOfPositions(string sy="",int op=-1,int mn=-1){int i, k=OrdersTotal(), kp=0;if(sy=="0") sy=Symbol();for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){//далее внутри символаif(OrderType()==OP_BUY||OrderType()==OP_SELL){if(op<0||OrderType()==op){//далее внутри типа ордераif(mn<0||OrderMagicNumber()==mn) kp++;//внутри магика, и только здесь позиция учтена }}}}}return(kp);}
Т.е., это означает, что у меня советник не сможет открыть вторую позицию EURUSD, даже с другим магиком, пока открыта первая позиция ?...
С точностью до наоборот :)) Это означает, что функция отдельно считает Ваши символы и магики. То есть, если открыта позиция по EURUSD c Magic_1 то NumberOfPositions("EURUSD", -1, Magic_2)==0;, конечно, если не существует еще одной позиции на EURUSD с Magic_2.
В общем виде функция считает открытые позиции по принципу (sy && op && mn), т.е. будут сосчитаны позиции, именно с этими параметрами. Несовпадение хотя бы одного параметра приведет к неучету ордера, функция его не увидит.
Выведите в Comment значения функций и Вы в реальном времени будете отслеживать количество ордеров и правильность работы функции. Скорее всего причина неправильной работы алгоритма находится в коде советника.
KimIV писал(а)>> Angela, компилятор не ожидал именно в этом месте встретить определение моей функции. Это значит, что где-то выше по коду у Вас чего-то нет. Может быть точки с запятой или закрывающей фигурной скобки. Вообщем, проверяйте внимательно код.
Я разобралась с этим, просто я Вашу функцию вставила внутри int start(), когда вынесла за пределы int start(), все откомпилировалось. Проблема в другом, в индикаторе в режиме визуализации в тесторе эта функция не получает данные из советника в индикатор.
Пользуюсь Вашим советником, - очень хороший, вчера хотел прикрутить индикатор через iCustom, но он его не видит, как в него прописывать через iCustom индикаторы? Что интересно встроенные функции типа iHigh, iLow видит без проблем, а по индикатору ни в какую не хочет выставлять отложки, я уже голову сломал в чем может быть проблема?
Вот так прописан сечас по iHigh и iLow дневного бара, с этой функцией работает как положено, отложки выставляет, а вот по индикатору ни в какую(((.... можно показать кусок кода как сделать в этом советнике выставление отложек по индикатору? Индикатор любой можно, лишь бы через вызов функции iCustom.
Добрый день всем.
Вопрос по функции
У меня мультивалютный совентник. Пары задаются во внешних параметрах. Со своим магиком (по каждой паре).
Среди условий входа по каждому инструменту присутствует вот такое:if ( NumberOfPositions(Symbol_1, -1,Magic_1)<1){//если нет открытых //позиций по 1-му инструменту,ИЛИ (для второй пары)if ( NumberOfPositions(Symbol_2, -1,Magic_2)<1){//если нет открытых //позиций по 2-му инструменту, проверяем ОСТАЛЬНЫЕ условияСлучилось так, что я вчера оба символа зарядила - EURUSD, и утром обнаружила, что открылась только одна сделка, хотя, вроде бы, сигналы были в обоих случаях.
И тут мне пришло в голову. Что функция
Сначала проверяет наличие открытой позиции по символу. А уж потом всё остальное.Иначе говоря, если уже есть открытая позиция (этим советником) по инструменту EIRUSD, то вторая позиция, даже с другим магиком , по иному алгоритму - уже не откроется?
Скажите, пож., это так или нет ?
Или я ошибаюсь в своих рассуждениях?, - и функция оценивает все заданные критерии "суммарно", а не по очереди...
Часто использую эту функцию, возвращает все согласно входным параметрам. Перебираемые функцией позиции последовательно сортируются по параметрам. Да сами посмотрите.
Т.е., это означает, что у меня советник не сможет открыть вторую позицию EURUSD, даже с другим магиком, пока открыта первая позиция ?
Видимо, так. Потому, что даже в тестере вроде бы не видно пересекающихся позиций.
//--------------------------------------------------------
Т.е., это означает, что у меня советник не сможет открыть вторую позицию EURUSD, даже с другим магиком, пока открыта первая позиция ?...
С точностью до наоборот :)) Это означает, что функция отдельно считает Ваши символы и магики. То есть, если открыта позиция по EURUSD c Magic_1 то NumberOfPositions("EURUSD", -1, Magic_2)==0;, конечно, если не существует еще одной позиции на EURUSD с Magic_2.
В общем виде функция считает открытые позиции по принципу (sy && op && mn), т.е. будут сосчитаны позиции, именно с этими параметрами. Несовпадение хотя бы одного параметра приведет к неучету ордера, функция его не увидит.
Выведите в Comment значения функций и Вы в реальном времени будете отслеживать количество ордеров и правильность работы функции. Скорее всего причина неправильной работы алгоритма находится в коде советника.
Добавление привязки к символу в вызове функции не помогает. Почему он считает профит для каждой позиции отдельно (рисунок выше)?
Не-е, я лучше предложу Вам свой рисунок...
...и скрипт...
Не-е, я лучше предложу Вам свой рисунок...
...и скрипт...
Понял, что "сам дурак"... Сплюсовав говядину и молоко, вымя получить не удастся...
Angela, компилятор не ожидал именно в этом месте встретить определение моей функции. Это значит, что где-то выше по коду у Вас чего-то нет. Может быть точки с запятой или закрывающей фигурной скобки. Вообщем, проверяйте внимательно код.
Я разобралась с этим, просто я Вашу функцию вставила внутри int start(), когда вынесла за пределы int start(), все откомпилировалось. Проблема в другом, в индикаторе в режиме визуализации в тесторе эта функция не получает данные из советника в индикатор.
Lucky$ & KimIV
http://www.kimiv.ru
Здравствуйте, Игорь!
Пользуюсь Вашим советником, - очень хороший, вчера хотел прикрутить индикатор через iCustom, но он его не видит, как в него прописывать через iCustom индикаторы? Что интересно встроенные функции типа iHigh, iLow видит без проблем, а по индикатору ни в какую не хочет выставлять отложки, я уже голову сломал в чем может быть проблема?
Вот так прописан сечас по iHigh и iLow дневного бара, с этой функцией работает как положено, отложки выставляет, а вот по индикатору ни в какую(((.... можно показать кусок кода как сделать в этом советнике выставление отложек по индикатору? Индикатор любой можно, лишь бы через вызов функции iCustom.
Если будет время конечно, спасибо..