Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 7269
- Рейтинг:
- Опубликован:
- 2023.01.26 11:10
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Написано по просьбе и описанию тут.
Код для МТ4
/********************************************************************\ | Simple advisor.mq4 | | © 2023, Alexey ViktoroV | | https://www.mql5.com/ru/users/alexeyvik/news | \********************************************************************/ #property copyright "© 2023, Alexey ViktoroV" #property link "https://www.mql5.com/ru/users/alexeyvik/news" #property version "1.00" #property strict //--- input string flatStart = "14:00"; // начало «флета» input string flatStop = "14:30"; // конец «флета» input string endRun = "20:00"; // завершение работы input double lot = 0.01; // размер контракта input int expID = 13; // магик советника //--- datetime timeStart, timeStop, runStop; int ticketBuy = 0, ticketSell = 0, bars; double contract = 0.0; //--- /*******************Expert initialization function*******************/ int OnInit() { double volume_min = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN), volume_max = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); contract = lot < volume_min ? volume_min : lot > volume_max ? volume_max : lot; return(INIT_SUCCEEDED); }/*******************************************************************/ /************************Expert tick function************************/ void OnTick() { static bool ordOpen = false; MqlTick tick; SymbolInfoTick(_Symbol, tick); double flatHigh, flatLow, tp, open, otstup = (tick.ask-tick.bid)*2; if(NewBar(PERIOD_D1)) { timeStart = StringToTime(flatStart); timeStop = StringToTime(flatStop); runStop = StringToTime(endRun); ordOpen = false; } if(!ordOpen && TimeCurrent() > timeStop) { ordOpen = true; int shift = iBarShift(_Symbol, PERIOD_M5, timeStart)+1, indexHigh = iHighest(_Symbol, PERIOD_M5, MODE_HIGH, shift), indexLow = iLowest(_Symbol, PERIOD_M5, MODE_LOW, shift); flatHigh = iHigh(_Symbol, PERIOD_M5, indexHigh); flatLow = iLow(_Symbol, PERIOD_M5, indexLow); datetime timeHigh = iTime(_Symbol, PERIOD_M5, indexHigh), timeLow = iTime(_Symbol, PERIOD_M5, indexLow); tp = flatHigh-flatLow; if(AccountFreeMarginCheck(_Symbol, OP_BUY, contract) <= 0.0) return; open = NormalizeDouble(flatHigh+otstup, _Digits); ticketBuy = OrderSend(_Symbol, OP_BUYSTOP, contract, open, INT_MAX, flatLow, NormalizeDouble(flatHigh+tp, _Digits), TimeToString(timeHigh), expID); if(AccountFreeMarginCheck(_Symbol, OP_BUY, contract) <= 0.0) return; open = NormalizeDouble(flatLow-otstup, _Digits); ticketSell = OrderSend(_Symbol, OP_SELLSTOP, contract, open, INT_MAX, flatHigh, NormalizeDouble(flatLow-tp, _Digits), TimeToString(timeLow), expID); } if(ordOpen) { //if(OrderSelect(ticketBuy, SELECT_BY_TICKET) && OrderType() == OP_BUY) // if(OrderSelect(ticketSell, SELECT_BY_TICKET) && OrderType() == OP_SELLSTOP && OrderCloseTime() == 0) // if(!OrderDelete(ticketSell)) // Print(GetLastError()); //if(OrderSelect(ticketSell, SELECT_BY_TICKET) && OrderType() == OP_SELL) // if(OrderSelect(ticketBuy, SELECT_BY_TICKET) && OrderType() == OP_BUYSTOP && OrderCloseTime() == 0) // if(!OrderDelete(ticketBuy)) // Print(GetLastError()); if(TimeCurrent() >= runStop) for(int i = OrdersTotal(); i-- > 0;) { if(OrderSelect(i, SELECT_BY_POS)) { if(OrderType() > OP_SELL) { if(OrderDelete(OrderTicket())) Print("Delete ", OrderTicket()); else if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), INT_MAX)) Print("Close ", OrderTicket()); } } } } }/******************************************************************/ /**********************Expert OnDeinit function**********************/ void OnDeinit(const int reason) { Comment(""); }/******************************************************************/ bool NewBar(ENUM_TIMEFRAMES tf) { static datetime nt = 0; datetime tm = iTime(_Symbol, tf, 0); if(tm == 0) return false; if(tm != nt) { nt = tm; return true; } return false; }/******************************************************************/

Простой скрипт для быстрого вывода информации о спредах валютных пар, имеющихся в окне MarketWatch.

Индикатор Standard Deviation Volatility использует исторические ценовые данные для определения высокой и низкой волатильности, определяя потенциальные точки входа и выхода для сделок. Он использует стандартное отклонение и скользящее среднее для создания полос, и трейдеры могут использовать эту информацию для принятия решений о покупке или продаже.

Простой советник, который в ходе торгов выводит комментарий о текущем проценте прибыли или убытка на счёту трейдера.

Скользящая средняя Хала является полезным индикатором, который дает хорошие сигналы для момента разворота цены, для входа и выхода из рынка. Также ее можно применять в качестве фильтра.