brokers14 0 Share Posted September 2, 2015 Здравствуйте. Подскажите, пожалуйста, как прописать в советнике подтверждающий индикатор? Один индикатор главный, а второй подтверждающий. Quote Link to post Share on other sites
AntFX 6,474 Share Posted September 3, 2015 (edited) Здравствуйте. Подскажите, пожалуйста, как прописать в советнике подтверждающий индикатор? Один индикатор главный, а второй подтверждающий. А какой смысл в том, что один главный а другой не главный? Если по главному индикатору открываются сделки даже если подтверждающий не дает сигнала, то второй индикатор бесполезен и его можно выкинуть, а если сделки не открываются пока нет сигнала с обоих индикаторов, то они оба одинаково главные. Проверка нескольких условий в MQL4 производится с помощью условного оператора if и логических операторов && (и) || (или) Edited September 3, 2015 by AntFX Quote 1 Link to post Share on other sites
OmegaS 21 Share Posted September 3, 2015 (edited) не знаю как разрулить (( прощу помощи. Вопрос отпал, пошел через GlobalVariableGet() Edited September 3, 2015 by OmegaS Quote Link to post Share on other sites
ZeleBoba 662 Share Posted September 3, 2015 (edited) Вопрос к профи в ООП. Проконсультируйте пожалуйста, будет ли правильно работать в MQL неявное преобразование типов при переприсвоении указателя на объект (дескриптор) в следующей конструкции? class X { private: int a; int b; public: int sum() { return(a+b ) ; } }; X *a, *b; ulong c; int d; a = new X; c = a; b = c; d = b.sum(); или всё же надо указывать явное преобразование? Edited September 3, 2015 by ZeleBoba Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
kazakov.v 189 Share Posted September 3, 2015 или всё же надо указывать явное преобразование? А зачем промежуточная переменная? b=a да и всё. Quote Никому верить нельзя. Мне - можно. Link to post Share on other sites
AntFX 6,474 Share Posted September 3, 2015 (edited) Проконсультируйте пожалуйста, будет ли правильно работать в MQL неявное преобразование типов при переприсвоении указателя на объект (дескриптор) в следующей конструкции? Вы пытаетесь присвоить переменной типа указателя на объект значение типа целое и переменной типа целое - значение типа указателя на объект, это конечно работать не будет. Можно получить номер указателя как целое, получится порядковый номер динамического объекта в системе. Вряд ли Вам нужен этот номер... Edited September 3, 2015 by AntFX Quote 1 Link to post Share on other sites
STre 7 Share Posted September 3, 2015 Вы пытаетесь присвоить переменной типа указателя на объект значение типа целое и переменной типа целое - значение типа указателя на объект, это конечно работать не будет. Явное приведение не поможет. Неявное конечно работать не должно. А вот явное - вполне может. Зависит от того, какого типа в MQL поинтеры, это я не помню. Quote Link to post Share on other sites
AntFX 6,474 Share Posted September 3, 2015 (edited) А вот явное - вполне может. Зависит от того, какого типа в MQL поинтеры, это я не помню. Явное тоже работать не будет. Зато вот так можно сделать: a = new X; c = StringToInteger(StringFormat("%i", a)); Получится порядковый номер динамического объекта. Я так делал для отслеживания ошибок, связанных с удалением динамических объектов... Вряд ли товарищу нужно именно это Edited September 3, 2015 by AntFX Quote 1 Link to post Share on other sites
ZeleBoba 662 Share Posted September 4, 2015 А зачем промежуточная переменная? b=a да и всё. Явное тоже работать не будет. Зато вот так можно сделать: a = new X; c = StringToInteger(StringFormat("%i", a)); Получится порядковый номер динамического объекта. Я так делал для отслеживания ошибок, связанных с удалением динамических объектов... Вряд ли товарищу нужно именно это Неявное конечно работать не должно. А вот явное - вполне может. Зависит от того, какого типа в MQL поинтеры, это я не помню. Всем спасибо за ответ. Проблем в следующем. Есть базовый, от него в производных методы все по коду "один в один", только отличаются типом возвращаемого значения (указатели на объекты разных классов). Вот и хотел, чтоб в каждом наследнике не городить "клонов", оставить всё в базовом. Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
STre 7 Share Posted September 4, 2015 Всем спасибо за ответ. Проблем в следующем. Есть базовый, от него в производных методы все по коду "один в один", только отличаются типом возвращаемого значения (указатели на объекты разных классов). Вот и хотел, чтоб в каждом наследнике не городить "клонов", оставить всё в базовом. Ну, простым ответом было бы использование спп-шных шаблонов. Но надо пробовать насколько они реализованы в MQL, Quote Link to post Share on other sites
AntFX 6,474 Share Posted September 4, 2015 (edited) Проблем в следующем. Есть базовый, от него в производных методы все по коду "один в один", только отличаются типом возвращаемого значения (указатели на объекты разных классов). Вот и хотел, чтоб в каждом наследнике не городить "клонов", оставить всё в базовом. Нужно описать максимально подробно исходную задачу. Возможно Вы пытаетесь "почесать левое ухо правой ногой" Edited September 4, 2015 by AntFX Quote 1 Link to post Share on other sites
ZeleBoba 662 Share Posted September 7, 2015 (edited) Нужно описать максимально подробно исходную задачу. Возможно Вы пытаетесь "почесать левое ухо правой ногой" Мне необходимо создавать стеки для объектов различных классов. Конструктивно стек и элемент стека для объектов определенного класса ничем не отличается от стека для объектов другого класса. "Один-в-один". Вот только элемент стека отличается типом одного компонента - указателя на объект, и соответственно методы стека устанавливающие и возвращающие этот указатель отличаются только типом этого указателя, хотя сам он по размеру везде одинаковый (8 байт). Есть базовый класс элемента и стека с виртуальными методами (прототипы) Приходится в производных классах прописывать методы "один-в-один" по коду, только возвращают (или получают) указатель на объект соответствующего класса. И еще вопрос в догонку: подскажите как узнать открыт ли по инструменту хоть один график? Или перебирать запросом окна по всем тайм-фреймам? stack.mq4 Edited September 7, 2015 by ZeleBoba Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
AntFX 6,474 Share Posted September 7, 2015 (edited) Вообще-то похоже на классическую задачу базового класса и его наследников. Вы сначала прописываете базовый класс, потом "наследуете" от него все остальные классы. Далее Вы можете передавать как указатель на базовый класс указатели на все производные классы. Наследование Однако переменную - указатель на объект базового класса привести явно или неявно к указателю на объект производного класса можно только так: void Func(CBaseClass *obj) { CDerived *obj2=obj; // Далее работаем с obj2 } Варианты типа (CDerived *)obj... не проходят в mql4 Edited September 7, 2015 by AntFX Quote 1 Link to post Share on other sites
ZeleBoba 662 Share Posted September 8, 2015 Вообще-то похоже на классическую задачу базового класса и его наследников. Вы сначала прописываете базовый класс, потом "наследуете" от него все остальные классы. Далее Вы можете передавать как указатель на базовый класс указатели на все производные классы. Наследование Однако переменную - указатель на объект базового класса привести явно или неявно к указателю на объект производного класса можно только так: void Func(CBaseClass *obj) { CDerived *obj2=obj; // Далее работаем с obj2 } Варианты типа (CDerived *)obj... не проходят в mql4 Спасибо, это уже кое-что. буду думать и пробовать с этим вариантом. Quote Лучше маленький профит, чем большие рога. Link to post Share on other sites
kazakov.v 189 Share Posted September 8, 2015 Спасибо, это уже кое-что. буду думать и пробовать с этим вариантом. Можно из МТ5 позаимствовать стандартную библиотеку: там есть уже готовые массивы, списки объектов - чтобы велосипед не изобретать. Quote Никому верить нельзя. Мне - можно. Link to post Share on other sites
OmegaS 21 Share Posted September 9, 2015 добрый день! не могу понять одну вещь, сначала ведь должен выполниться весь цикл , а затем то что после цикла. В тестере все ок работает, при постанове советника на реал начинает косить((. Смысл кода: в цикле подсчитываем общий профит открытых сделок, после цикла если общий профит больше 0, то закрываем все сделки. В тестере все нормально, в реале условие по общему профиту говорит что сумма сделок больше 0, хотя только одна сделка в плюсе , предположение что условие срабатывает быстрее чем цикл по открытым ордерам. for (i=0; i<OrdersTotal(); i++) {tt=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol()==Symbol()) { Ob_Profit=Ob_Profit+OrderProfit()+OrderSwap()+OrderCommission(); }} if ((Ob_Profit>0) && (Stavok>=2)) Close_All=1; Quote Link to post Share on other sites
AntFX 6,474 Share Posted September 9, 2015 (edited) не могу понять одну вещь, сначала ведь должен выполниться весь цикл , а затем то что после цикла. В тестере все ок работает, при постанове советника на реал начинает косить((. В этом куске ошибок не видно, значит они до или после. Переменные Ob_Profit и Close_All определяются до, обработка Close_All происходит после, где-то там и закрались ошибки. Edited September 9, 2015 by AntFX Quote 1 Link to post Share on other sites
AntFX 6,474 Share Posted September 9, 2015 сумма сделок больше 0, хотя только одна сделка в плюсе Достаточно того, чтобы 1 сделка была в плюсе, перекрывающем минус всех остальных, чтобы условие сработало. Quote 1 Link to post Share on other sites
OmegaS 21 Share Posted September 9, 2015 (edited) В этом куске ошибок не видно, значит они до или после. Переменные Ob_Profit и Close_All определяются до, обработка Close_All происходит после, где-то там и закрались ошибки. Да Ob_Profit определена перед циклом, Close_All- глобальная , когда ставок=0 Close_All обнуляется. странно просто что в тестере все работает(. Edited September 9, 2015 by OmegaS Quote Link to post Share on other sites
AntFX 6,474 Share Posted September 9, 2015 (edited) Close_All- глобальная , когда ставок=0 Close_All обнуляется То есть там перед циклом есть строчка if(Stavok==0) Close_All=0? Ob_Profit нужно объявлять перед циклом так: double Ob_Profit=0; Короче весь код в студию или велкам в клуб Edited September 9, 2015 by AntFX Quote 1 Link to post Share on other sites
OmegaS 21 Share Posted September 9, 2015 То есть там перед циклом есть строчка if(Stavok==0) Close_All=0? Ob_Profit нужно объявлять перед циклом так: double Ob_Profit=0; Короче весь код в студию или велкам в клуб О точно, спасибо за подсказку, у меня было объявлено так: double Ob_Profit; без присвоения 0, видимо в этом ошибка.. Quote Link to post Share on other sites
SIBARIT 1 Share Posted September 20, 2015 Всем Привэт. Подскажите пожалуйста как прописать?: Если low четырёх последних свечей не отличаются более чем на 5 пунктов. Quote Link to post Share on other sites
AntFX 6,474 Share Posted September 20, 2015 (edited) Если low четырёх последних свечей не отличаются более чем на 5 пунктов. Например так: double diff=50*Point; if(fabs(Low[5]-Low[4]) { // some actions } или так double diff=50*Point; int num=4; bool cond=true; for(int i=1; i { if(fabs(Low[i+1]-Low)>diff) { cond=false; break; } if(cond==true) { // some actions } Edited September 20, 2015 by AntFX 1 Quote 1 Link to post Share on other sites
qee 2 Share Posted September 20, 2015 Можно еще поэкспериментировать с этим: if (iLow(NULL,0,iHighest(NULL,0,MODE_LOW,4,1))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,4,1))<0.00005) 2 Quote Link to post Share on other sites
NewAlex 7 Share Posted September 21, 2015 здравствуйте! подскажите, пож-та, по High[0], Low[0] и т.д... 1. что вернет, напр, High[0], если бар еще не закрылся? самое большое значение "на текущий момент"? 2. что вернет, напр, High[0], в тестере, если бар еще не закрылся? не может такого быть, что при тестировании вернется максимальное значение, когда бар закроется, т.е. "из будущего"? наткнулся на уж больно подозрительно хороший советник, и вот там такое... Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.