DreamWorks Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 Переменная, объявленная с модификатором sinput, является входным параметром MQL4-программы, значение этого параметра можно изменять при её запуске. Но при этом данная переменная не участвует в процессе оптимизации входных параметров, то есть не производится перебор её значений при поиске наилучшего набора параметров по заданному критерию. А дальше документацию дочитать? Вот что ниже метаквоты пишут:Но при этом есть одно исключение из данного правила – sinput-переменные можно варьировать в задачах оптимизации с помощью функции ParameterSetRange(). Данная функция создана специально для программного управления пространством доступных значений для любых input-переменных, в том числе и объявленных как static input (sinput). Другая функция ParameterGetInput() позволяет при запуске оптимизации (в обработчике OnTesterInit()) получить значения input-переменных и в случае необходимости переопределить шаг изменения и диапазон, в пределах которого будет перебираться значение оптимизируемого параметра.Таким образом, сочетание модификатора sinput и двух функций по работе с input-параметрами позволяет создавать гибкие правила для задания интервалов оптимизации одних input-переменных в зависимости от значения других input-переменных.Но на деле в MQL4 функции ParameterSetRange() нет. А ведь она задумывалась именно для решения описанной задачи при оптимизации. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 CountSell() и CountBuy() достаточно вызвать один раз и результат использовать в выражении. Слишком много перебора с использованием оператора цикла, что вроде нагружает процесор, тут решил одну идею проверить чтобы один раз вызвать и все сравнить. Компилятор пропустил, значит можно использовать. if(((((CountBuy())>1) { // ураааааа } Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 Спойлер Переменная, объявленная с модификатором sinput, является входным параметром MQL4-программы, значение этого параметра можно изменять при её запуске. Но при этом данная переменная не участвует в процессе оптимизации входных параметров, то есть не производится перебор её значений при поиске наилучшего набора параметров по заданному критерию. А дальше документацию дочитать? Вот что ниже метаквоты пишут:Но при этом есть одно исключение из данного правила – sinput-переменные можно варьировать в задачах оптимизации с помощью функции ParameterSetRange(). Данная функция создана специально для программного управления пространством доступных значений для любых input-переменных, в том числе и объявленных как static input (sinput). Другая функция ParameterGetInput() позволяет при запуске оптимизации (в обработчике OnTesterInit()) получить значения input-переменных и в случае необходимости переопределить шаг изменения и диапазон, в пределах которого будет перебираться значение оптимизируемого параметра.Таким образом, сочетание модификатора sinput и двух функций по работе с input-параметрами позволяет создавать гибкие правила для задания интервалов оптимизации одних input-переменных в зависимости от значения других input-переменных.Но на деле в MQL4 функции ParameterSetRange() нет. А ведь она задумывалась именно для решения описанной задачи при оптимизации. Я особо не вникал дальше, да и как то сложно понять для не професионального програмиста, тем более я с такими проблемами не сталкивался и не считаю нужным копать дальше, пока текущих по MQL4 знаний достаточно, а большего нам и не надо.так как парнишке помочь? Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 CountSell() и CountBuy() достаточно вызвать один раз и результат использовать в выражении. Слишком много перебора с использованием оператора цикла, что вроде нагружает процесор, тут решил одну идею проверить чтобы один раз вызвать и все сравнить. Компилятор пропустил, значит можно использовать. if(((((CountBuy())>1) { // ураааааа } vitek01, к чему такие сложности? :-/ Чтобы избежать многократного вызова функции CountBuy() (а соответственно и многократных ненужных переборов), достаточно сохранить полученные из функции данные в переменную. nixxer это и имел ввиду. Вот так:int buyOrders=CountBuy();//вызываем функцию один раз//а дальше используем эту переменную if((buyOrders > 0 && Bid >= envup0) || (buyOrders > 0 && ma82 >= ma132 && ma81 // (buyOrders > 0 && open2 close1 && close1 > (OrderOpenPrice() + CloseDelta * Point) && time1 > OrderOpenTime())|| (buyOrders > 0 && close1 > NormalizeDouble(OrderOpenPrice() + CloseDelta * Point,Digits) && close1 OrderOpenTime()) || (buyOrders > 0 && Bid > NormalizeDouble(OrderOpenPrice() + CloseDelta * Point,Digits) && Bid OrderOpenTime())) Через несколько дней Вы напрочь забудете какой смысл Вы вкладывали в это условие if(((((CountBuy())>1) Изменено 6 апреля, 2017 пользователем DreamWorks 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 так как парнишке помочь? Затрудняюсь ответить. Видимо mobidik прав:Ни как, тетстер не знает, что при false нужно пропустить то и то. Только в два этапа прогона: с установленным параметром на Ордер_2 = true и с галками по перебору его TP, SL и т.д. и с выключенным, Ордер_2 = false и без галок по перебору. Предварительно сохранив предыдущие результаты тестирования. P.S. В MQL5 думаю эту проблему можно решить. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 Спойлер CountSell() и CountBuy() достаточно вызвать один раз и результат использовать в выражении. Слишком много перебора с использованием оператора цикла, что вроде нагружает процесор, тут решил одну идею проверить чтобы один раз вызвать и все сравнить. Компилятор пропустил, значит можно использовать. if(((((CountBuy())>1) { // ураааааа } vitek01, к чему такие сложности? :-/ Чтобы избежать многократного вызова функции CountBuy() (а соответственно и многократных ненужных переборов), достаточно сохранить полученные из функции данные в переменную. nexxer это и имел ввиду. Вот так:int buyOrders=CountBuy();//вызываем функцию один раз//а дальше используем эту переменную if((buyOrders > 0 && Bid >= envup0) || (buyOrders > 0 && ma82 >= ma132 && ma81 // (buyOrders > 0 && open2 close1 && close1 > (OrderOpenPrice() + CloseDelta * Point) && time1 > OrderOpenTime())|| (buyOrders > 0 && close1 > NormalizeDouble(OrderOpenPrice() + CloseDelta * Point,Digits) && close1 OrderOpenTime()) || (buyOrders > 0 && Bid > NormalizeDouble(OrderOpenPrice() + CloseDelta * Point,Digits) && Bid OrderOpenTime())) Через несколько дней Вы напрочь забудете какой смысл Вы вкладывали в это условие if(((((CountBuy())>1) Спасибо, я уже понял свою ошибку, в следующий раз сначала подумаю потом скажу, а не наоборот. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vasiliy Pupkin Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 Здравствуйте! Да у Вас не "вопросик", а ВОПРОСИЩЕ! Если компилятор не выдает ошибок, то дело естественно в логической ошибке. А чтобы кому-то ее найти, надо разобраться и вникнуть в каждую строчку. Потратить на это уйму времени. И ради чего? Научиться программировать это Вам не поможет. Потому что нельзя вот так вот посмотреть три урока, скопировать кусок чужого кода, абсолютно не понимая что там внутри, увидеть что что-то не работает, прибежать на форум, задать подобный вопрос и научиться программировать. НЕЛЬЗЯ. Также нельзя таким образом по-бырому и свой "грааль запилить" (если Вы так торопитесь сделать именно это). А здесь тема по обучению MQL. Чтобы обучаться программированию, смотрите уроки последовательно, делайте домашние задания, читайте документацию по MQL, пишите несложные вещи но СВОИМИ руками и СВОЕЙ головой. Не пользуйтесь чужим кодом, пока не научитесь хорошо его читать. Идите от простого к сложному и все получиться. И если что-то непонятно именно в материале, в документации и т.п., то задавайте ради Бога вопросы в этой ветке. А Вы же пытаетесь из первого класса прыгнуть в одиннадцатый. Здравствуйте! Есть правда в Ваших словах, но во всем согласиться не могу. В третьем уроке дается пример того, как можно сделать советник на внешнем индикаторе. И для того, чтобы сделать советник на другом индикаторе, не обязательно переписывать советник «с нуля», достаточно заменить индикатор и поправить сигналы на открытие и закрытие ордеров применительно к новому индикатору и стратегии.Собственно говоря, это и было сделано: вместо индикатора ТМА вставлен индикатор Genesis Matrix. Т.к. Genesis состоит из 4 входящих в него индикаторов - TVI, CCI, T3 и GHL, у него 8 буферов, четыре из которых (0,2,4 и 6) дают сигнал «up» (для каждого из 4 входящих в него индикаторов) и четыре (1,3,5 и 7) - «down». Если все 4 буфера дают сигнал «up» или «down» одновременно, индикатор дает общий сигнал на покупку или продажу соответственно. Именно это и было предусмотрено советнике - при получении 4 сигналов «up» открытие ордера на покупку, при получении 4 сигналов «down» - открытие ордера на продажу. Закрытие ордеров по такому же принципу при наличии открытых ордеров.Так что, как видите, маневров для ошибки было не так уж и много. А вопрос задал, так как считаю, что косяк системный и кто-то из опытных наверняка сталкивался с чем-то подобным.Небольшое дополнение к вопросу. При прогоне в тестере стратегий сделки совершаются, при этом тестер тормозит и в режиме визуализатора после окончания в окне с графиком оказывается 256 индикаторов Genesis Matrix.Так что если кто сталкивался подобным, подскажите, плиз. Google ничего найти не может :-) Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 6 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2017 Здравствуйте! Есть правда в Ваших словах, но во всем согласиться не могу. В третьем уроке дается пример того, как можно сделать советник на внешнем индикаторе. И для того, чтобы сделать советник на другом индикаторе, не обязательно переписывать советник «с нуля», достаточно заменить индикатор и поправить сигналы на открытие и закрытие ордеров применительно к новому индикатору и стратегии.Собственно говоря, это и было сделано: вместо индикатора ТМА вставлен индикатор Genesis Matrix. Т.к. Genesis состоит из 4 входящих в него индикаторов - TVI, CCI, T3 и GHL, у него 8 буферов, четыре из которых (0,2,4 и 6) дают сигнал «up» (для каждого из 4 входящих в него индикаторов) и четыре (1,3,5 и 7) - «down». Если все 4 буфера дают сигнал «up» или «down» одновременно, индикатор дает общий сигнал на покупку или продажу соответственно. Именно это и было предусмотрено советнике - при получении 4 сигналов «up» открытие ордера на покупку, при получении 4 сигналов «down» - открытие ордера на продажу. Закрытие ордеров по такому же принципу при наличии открытых ордеров.Так что, как видите, маневров для ошибки было не так уж и много. А вопрос задал, так как считаю, что косяк системный и кто-то из опытных наверняка сталкивался с чем-то подобным.Небольшое дополнение к вопросу. При прогоне в тестере стратегий сделки совершаются, при этом тестер тормозит и в режиме визуализатора после окончания в окне с графиком оказывается 256 индикаторов Genesis Matrix.Так что если кто сталкивался подобным, подскажите, плиз. Google ничего найти не может :-) То что тормозит, то тут нет ничего удивительного. Тормозить может, и скорее всего, из-за тяжелых алгоритмов самих индикаторов. Не факт, что индикаторы какие-то кривые, просто Вы используете 4 индикатора (8 буферов). При этом Вы на каждом тике проверяете все 8 буферов. При каждом обращении к буферу производятся вычисления в индикаторах. Вот и представьте себе объем этих вычислений. Если ТС не требует проверки показателей индикаторов на каждом тике, то можно тут оптимизировать (например, проверять с интервалом от нескольких секунд, а может и раз в минуту). Возможно не нужно следить за индикаторами, когда позиция в рынке... Ну и т.д. Все зависит от стратегии.В конце тестирования в режиме визуализации на графике рисуются все индикаторы, которые используются - это норма. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Кетариец Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Затрудняюсь ответить. Видимо mobidik прав: Ни как, тетстер не знает, что при false нужно пропустить то и то. Только в два этапа прогона: с установленным параметром на Ордер_2 = true и с галками по перебору его TP, SL и т.д. и с выключенным, Ордер_2 = false и без галок по перебору. Предварительно сохранив предыдущие результаты тестирования. P.S. В MQL5 думаю эту проблему можно решить. Всем спасибо за участие )) Боюсь, что при прогоне в два этапа резы будут искаженными... При одних параметрах, например, Ордера_1 или чего-то другого, включенный Ордер_2 даст дополнительную прибыль, а при других может дать противоположный эффект... И наоборот. Поэтому, при отключенном Ордере_2, параметры Ордера_1 должны быть одни, а при включенном другие. Это никак не покажет прогон в два этапа ((Так что, видимо, придется терять время, но гонять с лишними прогонами в один этап. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Roman 13 Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Здравствуйте, через раз выполняется вот это условие Bid > NormalizeDouble(OrderOpenPrice() + CloseDelta * Point,Digits) && Bid OrderOpenTime())) т.е. ордер должен закрываться только при условии когда цена выше цены открытия на определенное кол-во пунктов, но на деле условие может и не выполниться, подскажите что можно с этим сделать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kirk Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Помогите, не могу разобраться. Советник открывает ордер на каждый тик, как от этого избавиться. Спойлер void OnTick(){ boprice = iHigh(_Symbol, PERIOD_D1,1)+DistancePoint*_Point; soprice = iLow(_Symbol, PERIOD_D1,1)-DistancePoint*_Point; soprice2 = iLow(_Symbol, PERIOD_D1,2)-DistancePoint*_Point; boprice2 = iHigh(_Symbol, PERIOD_D1,2)+DistancePoint*_Point; TP =0; SL =0; OP =0; if(CountBuy()==0 && UseDojiCandles&&Doji()==1) { SL = soprice2; TP = NormalizeDouble(Ask+(Ask-soprice2)*TPCoef, Digits); if(!OrderSend(Symbol(),OP_BUY,0.1,Ask,0,SL,TP,NULL,0,0,Blue)) Print("Не удалось отправить ордер в покупку"); } if(UseDojiCandles&&Doji()==-1 && CountSell()==0) { SL = boprice2; TP = NormalizeDouble(Bid-(boprice2-Bid)*TPCoef, Digits); if(!OrderSend(Symbol(),OP_SELL,0.1,Bid,0,SL,TP,NULL,0,0,Red)) Print("Не удалось отправить ордер в продажу"); }}//+------------------------------------------------------------------+int CountSell(){ int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber&& OrderType() == OP_SELL) count++; } } return(count);}int CountBuy(){ int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber&& OrderType() == OP_BUY) count++; } } return(count);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Здравствуйте, через раз выполняется вот это условие Bid > NormalizeDouble(OrderOpenPrice() + CloseDelta * Point,Digits) && Bid OrderOpenTime())) т.е. ордер должен закрываться только при условии когда цена выше цены открытия на определенное кол-во пунктов, но на деле условие может и не выполниться, подскажите что можно с этим сделать? Из этой строчки не видно, какие значения могут принимать используемые в ней переменные (CloseDelta, low1, time1). Судя по всему Вы не хотите показать весь Ваш код полностью, ну или хотя-бы ту часть, где не будет неизвестных переменных. Если этого не сделаете, по подобным фрагментам Вам никто не поможет. А вообще все просто на самом деле: если программа не выполняет каких-либо действий, то условия для их выполнения НЕ НАСТУПИЛИ. Вот и все. Другого не дано. Копайте в этом направлении. Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Помогите, не могу разобраться. Советник открывает ордер на каждый тик, как от этого избавиться. Функцию Doji() в студию. Аааа.... просмотрел. Вы Magic то ордерам задайте :) Изменено 7 апреля, 2017 пользователем DreamWorks Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kirk Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Помогите, не могу разобраться. Советник открывает ордер на каждый тик, как от этого избавиться. Функцию Doji() в студию. Аааа.... просмотрел. Вы Magic то ордерам задайте :) Огромное спасибо! Неделю бился. Слона и не приметил ~x( Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Приветствую. Помогите разобраться с классами, я уже задавал вопрос:"Подскажите, как сделать чтоб для каждого нового ордера создавались отдельные переменные (пусть А, В, С для каждого) ? Предполагаю что это что-то типа Peremennaja+ticket=А12345, В12345, С12345."Мне ответили что нужно написать класс и для каждого ордера создавать объект класса. Может кто поможет примерами или мануалом именно для такой или подобной ситуации? Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 7 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2017 Приветствую. Помогите разобраться с классами, я уже задавал вопрос:"Подскажите, как сделать чтоб для каждого нового ордера создавались отдельные переменные (пусть А, В, С для каждого) ? Предполагаю что это что-то типа Peremennaja+ticket=А12345, В12345, С12345."Мне ответили что нужно написать класс и для каждого ордера создавать объект класса. Может кто поможет примерами или мануалом именно для такой или подобной ситуации? Здравствуйте. Думаю, что необязательно для этих целей класс ордера писать. Можно обойтись объявлением структуры, в которой будут все необходимые переменные для работы с ордером. Затем создаете массив структур и храните/меняете в нем всю необходимую информацию, связанную с конкретным ордером. Просто начать знакомство с ООП со структур будет проще. Разобраться в этом Вам поможет документация по MQL. Также есть отличные видеоуроки от xbms по структурам и классам. Плюс, море информации по объектно-ориентированному программированию по запросу в Google. Вообще это безусловно мощнейший инструмент, который надо изучать и уметь пользоваться. Без этого некоторые задачи решить практически невозможно, ну или крайне-крайне сложно. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Daletar Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 Проблема такая: нужно объявить динамический двумерный массив, в котором второе измерение устанавливается через переменную. Примерно так//---input int lvlF=5;//---double array[][2*lvlF+3];Компилятор ругается английскими буквами '[' - invalid index value уже вроде всё перепробовал :( Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 Проблема такая: нужно объявить динамический двумерный массив, в котором второе измерение устанавливается через переменную. Примерно так//---input int lvlF=5;//---double array[][2*lvlF+3];Компилятор ругается английскими буквами '[' - invalid index value уже вроде всё перепробовал :( При объявлении массива, его размер нельзя задавать выражением. Для изменения размера массива служит функция ArrayResize(). Но с ее помощью можно задать размер только для первого измерения массива. Изменение размера второго измерения массива в MQL, если не ошибаюсь, не предусмотрено. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Levis_rock Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 Здравствуйте, помогите с проблемой..На терминале работает один бот на разных парах. Перед кодом открытия ордера, стоит if(total==0), total - переменная, если её убрать, то бот открывает тысячи сделок одновременно, в противном случае бот не открывает ордера по другим парам, если в терминале уже есть любой открытый ордер, хоть и разные магики, как можно исправить ситуацию ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 Здравствуйте, помогите с проблемой..На терминале работает один бот на разных парах. Перед кодом открытия ордера, стоит if(total==0), total - переменная, если её убрать, то бот открывает тысячи сделок одновременно, в противном случае бот не открывает ордера по другим парам, если в терминале уже есть любой открытый ордер, хоть и разные магики, как можно исправить ситуацию ? Предположу что процедура выбора и подсчета ордеров прописана не корректно, раз на работу влияет наличие других ордеров. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 Здравствуйте, помогите с проблемой..... как можно исправить ситуацию ? Здравствуйте. Переменной total присваивается некое значение. Смотрите где и как это делается. Скорее всего это некая функция, подсчитывающая количество каких-то ордеров. От того какие именно ордера при подсчете учитывает функция и надо отталкиваться в решении Вашей проблемы. А так, что-то внятное и полезное сказать невозможно не видя кода. Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 бот не открывает ордера по другим парам, если в терминале уже есть любой открытый ордер, хоть и разные магики, как можно исправить ситуацию ? Скорее всего, раз меджики разные, у Вас переменной total присваивается значение функции OrdersTotal(). Следует вместо неё использовать отдельную функцию по подсчету ордеров открытых только этой совой. // Результат работы OrdersTotal() не зависит от пары и меджика. // Ссылка на сообщение Поделиться на другие сайты More sharing options...
Levis_rock Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 бот не открывает ордера по другим парам, если в терминале уже есть любой открытый ордер, хоть и разные магики, как можно исправить ситуацию ? Скорее всего, раз меджики разные, у Вас переменной total присваивается значение функции OrdersTotal(). Следует вместо неё использовать отдельную функцию по подсчету ордеров открытых только этой совой. // Результат работы OrdersTotal() не зависит от пары и меджика. // Видимо нужно ордер тотал заменить на что то другое, вот код:if (Hour()>=2 && Hour() if (Hour()>=5 && Hour() if (Hour()>=10 && Hour() if (Hour()>=14 && Hour() if (Hour()>=16 && Hour() if (Hour()>=18 && Hour() if (total==0) // если нет позиций { // Buy if(Close[2]BB_Up && MA_1_Long>MA_2_Long) { OrderSend(Symbol(),OP_BUY,Lots,Ask,50,BB_Low-reserve*Point,0,"Buy MIN RISK",86388,0,Green); return(0); } И есть в закрытии ордеров : total=OrdersTotal(); for(cnt=0;cnt Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 total=OrdersTotal(); Вот именно, подключите готовую или напишите свою функцию подсчета ордеров вместо OrdersTotal() и будет Вам счастье, удачи. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Levis_rock Опубликовано 11 апреля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 апреля, 2017 total=OrdersTotal(); Вот именно, подключите готовую или напишите свою функцию подсчета ордеров вместо OrdersTotal() и будет Вам счастье, удачи. Я пробую к примеру int Total = OrderCount(-1, 0, "USDCHF"); только по паре.но у меня не определяется OrderCount, пишет ошибку Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти