multibreakout_v0[1].1.3a.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «multibreakout_v0[1].1.3a.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MultiBreakOut — торговый советник для MetaTrader 4, который размещает отложенные ордера BUYSTOP и SELLSTOP на основе цен предыдущего бара с заданным смещением в пунктах. Советник рассчитывает уровни входа, стоп-лосса и тейк-профита на основе текущих рыночных данных и пользовательских параметров.
Советник поддерживает четыре настраиваемые торговые сессии, каждая из которых активируется по часам и может быть включена или отключена отдельно. Также реализована логика закрытия всех открытых и отложенных ордеров в заданную минуту.
Встроены механизмы фиксации безубыточности (Break Even) и плавающей безубыточности (Moving Break Even) для открытых позиций. Плавающая безубыточность активируется через заданное количество часов после начала сессии и модифицирует стоп-лосс ордеров.
Перед размещением ордеров советник проверяет свободный маржинальный баланс на счёте. При недостатке средств размещение ордеров прекращается. Все торговые операции выполняются через стандартные API MetaTrader 4: OrderSend, OrderClose и OrderModify.
Настройки программы
| Настройка | Описание |
|---|---|
| LotSize | Размер лота — Объём лота для каждого размещаемого ордера. |
| BrokerOffsetToGMT | Смещение брокера к GMT — Смещение часового пояса брокера относительно GMT, используемое для корректировки расчёта торгового времени. |
| NumberOfOrdersPerSide X TakeProfitIncrement = Highest TakeProfit Level (NumberOfOrdersPerSide) | Количество ордеров на сторону — Количество отложенных ордеров, размещаемых в каждом направлении за одну сессию. |
| TakeProfitIncrement | Инкремент тейк-профита — Инкремент в пунктах для расчёта уровней тейк-профита по каждому ордеру. |
| Trade1 | Сессия 1 — Переключатель включения или отключения первой торговой сессии. |
| Time1 | Время сессии 1 — Час начала первой торговой сессии. |
| Trade2 | Сессия 2 — Переключатель включения или отключения второй торговой сессии. |
| Time2 | Время сессии 2 — Час начала второй торговой сессии. |
| Trade3 | Сессия 3 — Переключатель включения или отключения третьей торговой сессии. |
| Time3 | Время сессии 3 — Час начала третьей торговой сессии. |
| Trade4 | Сессия 4 — Переключатель включения или отключения четвёртой торговой сессии. |
| Time4 | Время сессии 4 — Час начала четвёртой торговой сессии. |
| ExitMinute | Минута закрытия — Минута, в которой советник закрывает все открытые и отложенные ордера по текущему символу. |
| StopLoss | Стоп-лосс — Расстояние стоп-лосса в пунктах от цены размещения отложенного ордера. |
| PipsForEntry | Пункты для входа — Смещение в пунктах от цен предыдущего бара для расчёта цен размещения отложенных ордеров. |
| BreakEven | Безубыточность — Расстояние в пунктах для активации фиксации безубыточности по открытым позициям. |
| MovingBreakEven | Плавающая безубыточность — Переключатель включения или отключения плавающей безубыточности для открытых позиций. |
| MovingBEHoursToStart | Часы до плавающей безубыточности — Количество часов после начала сессии для активации плавающей безубыточности. |
Поиск по коду файла
/*
Need To Do List:
For v0.2
1. Place only one order for 1 lot.
2. Sell off 0.1 lot when TP levels are met.
*/
#include <stdlib.mqh>
#include <WinUser32.mqh>
extern double LotSize=0.1;
extern int BrokerOffsetToGMT = 0;
extern int NumberOfOrdersPerSide = 20; // NumberOfOrdersPerSide X TakeProfitIncrement = Highest TakeProfit Level
extern int TakeProfitIncrement = 5;
extern bool Trade1 = true;
extern int Time1 = 6;
extern bool Trade2 = true;
extern int Time2 = 12;
extern bool Trade3 = true;
extern int Time3 = 18;
extern bool Trade4 = true;
extern int Time4 = 0;
extern int ExitMinute = 55;
extern int StopLoss = 20;
extern int PipsForEntry = 5;
extern int BreakEven = 10;
extern bool MovingBreakEven = true;
extern int MovingBEHoursToStart = 3;
int start() {
// код доступен только после оплаты
}
int cnt, ticket;
if(Bars<100) {
Print("bars less than 100");
return(0);
}
double BE,MBE;
double TradeTime1=Time1+1;
double TradeTime2=Time2+1;
double TradeTime3=Time3+1;
double TradeTime4=Time4+1;
double PFE=PipsForEntry;
double CurrentHour=TimeHour(CurTime()-(BrokerOffsetToGMT*3600));
double CurrentMinute=TimeMinute(CurTime());
if(TradeTime1>=24) {
TradeTime1=TradeTime1-24;
}
if(TradeTime2>=24) {
TradeTime2=TradeTime2-24;
}
if(TradeTime3>=24) {
TradeTime3=TradeTime3-24;
}
if(TradeTime4>=24) {
TradeTime4=TradeTime4-24;
}
if((CurrentHour==TradeTime1 && CurrentMinute<=59 && Trade1) || (CurrentHour==TradeTime2 && CurrentMinute<=59 && Trade2) ||
(CurrentHour==TradeTime3 && CurrentMinute<=59 && Trade3) || (CurrentHour==TradeTime4 && CurrentMinute<=59 && Trade4)) {
double highprice=iHigh(NULL,60,1);
double lowprice=iLow(NULL,60,1);
}
int total=OrdersTotal();
double Spread=Ask-Bid;
double hprice=Spread+highprice+PFE*Point;
double lprice=lowprice-PFE*Point;
double PreviousBarHigh=iHigh(NULL,0,1);
double PreviousBarLow=iLow(NULL,0,1);
double Previous2ndBarHigh=iHigh(NULL,0,2);
double Previous2ndBarLow=iLow(NULL,0,2);
int TPI=TakeProfitIncrement;
int i,j;
int MBEHour1=Time1+BrokerOffsetToGMT+MovingBEHoursToStart;
int MBEHour2=Time2+BrokerOffsetToGMT+MovingBEHoursToStart;
int MBEHour3=Time3+BrokerOffsetToGMT+MovingBEHoursToStart;
int MBEHour4=Time4+BrokerOffsetToGMT+MovingBEHoursToStart;
bool need_long = true;
bool need_short = true;
bool MovingBE1 = false;
bool MovingBE2 = false;
bool MovingBE3 = false;
bool MovingBE4 = false;
bool FirstBE = false;
if(MBEHour1>=24) {
MBEHour1=MBEHour1-24;
}
if(MBEHour2>=24) {
MBEHour2=MBEHour2-24;
}
if(MBEHour3>=24) {
MBEHour3=MBEHour3-24;
}
if(MBEHour4>=24) {
MBEHour4=MBEHour4-24;
}
if(Hour()>=MBEHour1 && MovingBreakEven) MovingBE1=true;
if(Hour()>=MBEHour2 && MovingBreakEven) MovingBE2=true;
if(Hour()>=MBEHour3 && MovingBreakEven) MovingBE3=true;
if(Hour()>=MBEHour4 && MovingBreakEven) MovingBE4=true;
double SL=StopLoss*Point;
Comment("CurrentHour is ",CurrentHour,"\n",
"CurrentMinute is ",CurrentMinute);
if((CurrentHour==Time1 && CurrentMinute>=ExitMinute && Trade1) || (CurrentHour==Time2 && CurrentMinute>=ExitMinute && Trade2) ||
(CurrentHour==Time3 && CurrentMinute>=ExitMinute && Trade3) || (CurrentHour==Time4 && CurrentMinute>=ExitMinute && Trade4)) {
for(i=total-1;i>=0;i--) {
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol()==Symbol()) {
int type = OrderType();
bool result = false;
switch(type){
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
case OP_SELL : result = OrderClose( OrderПоказано первые 50% кода (символов: 5616)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.