Бахром Балтабаев #: Здравствуйте уважаемые. Подскажите где я могу найти скрипт или индикатор который отправляет уведомление на телефон,при достижении цены определенного уровня ,указаного мной. чтоб всё время не следить за терминалом.Спасибо
Недавно написал алерт: #18550. Но его можно доработать добавив SendNotification:
В исходник следует добавить строки которые я выделил, бросить в папку Indicators и скомпилировать. Данный индикатор можно добавить в чарт сколько угодно раз и получать сигналы при пересечении разных уровней. Код дорабатывал онлайн. Результат не проверял.
Подскажите в чем проблема, Код должен закрывать ордера и если их нет то открывать новый.
Но почему то, он закрывает только 1 ордер и останавливается до следующего сигнала.
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 < clos 1.1304 ExistPosSell 0 2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 > clos 1.1304 ExistPosBuy 1 2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 < clos 1.1306 ExistPosSell 0 2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 > clos 1.1306 ExistPosBuy 1 2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 < clos 1.1296 ExistPosSell 0 2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 > clos 1.1296 ExistPosBuy 1 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 < clos 1.1283 ExistPosSell 0 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: close #1 buy 0.01 EURUSD at 1.13598 at price 1.12831 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 > clos 1.1283 ExistPosBuy 1 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: open #4 buy 0.01 EURUSD at 1.13512 ok 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 < clos 1.135 ExistPosSell 0 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 > clos 1.135 ExistPosBuy 1
if(isNewBar()==true) {
if(Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_BUY, Magic) == true) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(ExistPositions( NULL, OP_BUY, Magic) == False) //----------- если позиции BUY отсутствуют то
ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию SELLif(Signal < clos ) { //--------------------- МА ниже цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_SELL, Magic) == true) //---------------- Если есть позиция SELL то
ClosePosWithMaxProfitInCurrency(); //---------------------закрытие одной позиции с максимальным профитом в валюте депозита.if(ExistPositions( NULL, OP_SELL, Magic) == False) //----------- если позиции SELL отсутствуют то
ticket=OpenPosition(NULL,OP_BUY, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию BUY
} return;
Если вы уделите немного больше внимания вашему вопросу и вашему коду, то сами поймёте в чём проблема.
Там вопрос - что должен закрываться на 1 баре 1 самый прибыльный ордер, дальше ждем новый бар и опять закрываем 1 прибыльный ордер. А не сразу все.
Тогда нужно правильно формулировать вопросы. У вас появляется всего 1 сигнал. И то на открытии нового бара. А если будет только 1 сигнал, то сколько ордеров закроется?... И то только если сигнал появится на новом баре. А если не появится, то ордера закроются на следующих барах. И опять же при наличии сигнала.
Тогда нужно правильно формулировать вопросы. У вас появляется всего 1 сигнал. И то на открытии нового бара. А если будет только 1 сигнал, то сколько ордеров закроется?... И то только если сигнал появится на новом баре. А если не появится, то ордера закроются на следующих барах. И опять же при наличии сигнала.
В подобных случаях обычно помогает блоксхема. Или нужно подробно расписать алгоритм по пунктам на листке бумаги либо в текстовом файле. И только тогда вы поймете как нужно писать ваш код.
2) Если МА выше цены закрытия предыдущего бара то переходим к п.3 если MA ниже цены закрытия то переходим к п.4.
3) Если есть позиция BUY то закрываем одну позицию с максимальным профитом в валюте депозита.
3.1)Если нет открытых ордеров BUYоткрываем позицию SELL.
4) Если есть позиция SELL то закрываем одну позицию с максимальным профитом в валюте депозита.
4.1)Если нет открытых ордеров SELLоткрываем позицию BUY .
И теперь опять вопрос, что не правильно прописано в этом коде из Выше неписаного алгоритма:
В коде прописан набор команд. Терминал не знает что вам нужно, он знает только то что написано в коде!
...
if(isNewBar()) {
if(Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_BUY, Magic)) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(!ExistPositions( NULL, OP_BUY, Magic))//----------- если позиции BUY отсутствуют тоsellSignal= true;
}
// и аналогично для п.4.
}
return;
...
voidOnTimer() {
if (sellSignal) {
ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com); //------------ открываем позицию SELLsellSignal= false;
}
// и аналогично для buy
}
Переменные buySignal и sellSignal пропишите на глобальном уровне.
Добавил пример с открытием позиций в таймере в предыдущем посте. Чтобы позиция гарантированно открывалась. Можете подставить туда свою функцию.
Хотя не так. Нужно отслеживать результат работы
ClosePosWithMaxProfitInCurrency
или новой вашей функции в OnTradeTransaction. И если нет позиций, то входить. Или записывать сигнал в buySignal или sellSignal и обрабатывать в OnTimer как я показал в примере.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Здравствуйте уважаемые. Подскажите где я могу найти скрипт или индикатор который отправляет уведомление на телефон,при достижении цены определенного уровня ,указаного мной. чтоб всё время не следить за терминалом.Спасибо
Недавно написал алерт: #18550. Но его можно доработать добавив SendNotification:
В исходник следует добавить строки которые я выделил, бросить в папку Indicators и скомпилировать. Данный индикатор можно добавить в чарт сколько угодно раз и получать сигналы при пересечении разных уровней. Код дорабатывал онлайн. Результат не проверял.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
GlaVredFX, 2022.01.17 18:59
Подскажите в чем проблема, Код должен закрывать ордера и если их нет то открывать новый.
Но почему то, он закрывает только 1 ордер и останавливается до следующего сигнала.
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 < clos 1.1304 ExistPosSell 0
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 > clos 1.1304 ExistPosBuy 1
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 < clos 1.1306 ExistPosSell 0
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 > clos 1.1306 ExistPosBuy 1
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 < clos 1.1296 ExistPosSell 0
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 > clos 1.1296 ExistPosBuy 1
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 < clos 1.1283 ExistPosSell 0
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: close #1 buy 0.01 EURUSD at 1.13598 at price 1.12831
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 > clos 1.1283 ExistPosBuy 1
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: open #4 buy 0.01 EURUSD at 1.13512 ok
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 < clos 1.135 ExistPosSell 0
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 > clos 1.135 ExistPosBuy 1
Если вы уделите немного больше внимания вашему вопросу и вашему коду, то сами всё поймёте.
Там вопрос - что должен закрываться на 1 баре 1 самый прибыльный ордер, дальше ждем новый бар и опять закрываем 1 прибыльный ордер. А не сразу все.
А плучается на одном первом баре закрывается, а уже на следующем баре не чего не происходит.
Там вопрос - что должен закрываться на 1 баре 1 самый прибыльный ордер, дальше ждем новый бар и опять закрываем 1 прибыльный ордер. А не сразу все.
Тогда нужно правильно формулировать вопросы. У вас появляется всего 1 сигнал. И то на открытии нового бара. А если будет только 1 сигнал, то сколько ордеров закроется?... И то только если сигнал появится на новом баре. А если не появится, то ордера закроются на следующих барах. И опять же при наличии сигнала.
Тогда нужно правильно формулировать вопросы. У вас появляется всего 1 сигнал. И то на открытии нового бара. А если будет только 1 сигнал, то сколько ордеров закроется?... И то только если сигнал появится на новом баре. А если не появится, то ордера закроются на следующих барах. И опять же при наличии сигнала.
В подобных случаях обычно помогает блоксхема. Или нужно подробно расписать алгоритм по пунктам на листке бумаги либо в текстовом файле. И только тогда вы поймете как нужно писать ваш код.
Нужна функция закрытия 1 ордера, открытого самым первым из всех имеющихся. Кто может поделится.
Так если заметили, то в коде алгоритм прописан.
1) Появление нового бара
2) Если МА выше цены закрытия предыдущего бара то переходим к п.3 если MA ниже цены закрытия то переходим к п.4.
3) Если есть позиция BUY то закрываем одну позицию с максимальным профитом в валюте депозита.
3.1)Если нет открытых ордеров BUY открываем позицию SELL.
4) Если есть позиция SELL то закрываем одну позицию с максимальным профитом в валюте депозита.
4.1)Если нет открытых ордеров SELL открываем позицию BUY .
И теперь опять вопрос, что не правильно прописано в этом коде из Выше неписаного алгоритма:
В коде прописан набор команд. Терминал не знает что вам нужно, он знает только то что написано в коде!
Переменные buySignal и sellSignal пропишите на глобальном уровне.В коде прописан набор команд. Терминал не знает что вам нужно, он знает только то что написано в коде!
Я это сообщение удалил, так как проблема нашлась, в том что надо закрывать ордера не по профиту а по времени.
Так как профит есть не всегда и не там где надо.
Потому нужна функция "Закрытие одной позиции, открытой самой первой из всех имеющихся"
Я это сообщение удалил, так как проблема нашлась, в том что надо закрывать ордера не по профиту а по времени.
Так как профит есть не всегда и не там где надо.
Потому нужна функция "Закрытие одной позиции, открытой самой первой из всех имеющихся"
Добавил пример с открытием позиций в таймере в предыдущем посте. Чтобы позиция гарантированно открывалась. Можете подставить туда свою функцию.
Добавил пример с открытием позиций в таймере в предыдущем посте. Чтобы позиция гарантированно открывалась. Можете подставить туда свою функцию.
Хотя не так. Нужно отслеживать результат работы
или новой вашей функции в OnTradeTransaction. И если нет позиций, то входить. Или записывать сигнал в buySignal или sellSignal и обрабатывать в OnTimer как я показал в примере.