OverHedgeV2
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «overhedgev2_www_forex-instruments_info.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
OverHedgeV2 — торговый советник для MetaTrader 4, написанный MrPip (Robert Hill). Советник реализует сеточную торговую стратегию с управлением размером лотов на основе текущего количества открытых позиций. Основной логикой работы является функция start(), вызываемая при каждом тике.
Советник определяет направление тренда с помощью двух экспоненциальных скользящих средних и открывает сделки в соответствующем направлении. При отсутствии открытых позиций проверяется направление рынка: если тренд восходящий — разрешаются только покупки, если нисходящий — только продажи. Объём лота для каждой новой позиции увеличивается в зависимости от количества уже открытых позиций.
Встроена функция контроля прибыли: при достижении заданного целевого значения прибыли все открытые позиции закрываются, что позволяет запустить новый торговый цикл. Также доступна функция аварийного закрытия всех позиций через специальный параметр.
Для отладки советник поддерживает запись логов в глобальные переменные и текстовые файлы. Магический номер используется для идентификации управляемых позиций.
Настройки программы
| Настройка | Описание |
|---|---|
| Debug | Отладка — Включение/выключение режима отладки с записью логов в глобальные переменные и файл |
| TradeLog | Файл лога — Имя текстового файла для записи отладочной информации |
| MagicNumber | Магический номер — Магический номер для идентификации позиций, управляемых советником |
| Lots | Размер лота — Начальный размер лота для торговых операций |
| HedgeBase | Коэффициент наращивания лота — Коэффициент наращивания объёма лота при увеличении количества открытых позиций |
| Slippage | Проскальгивание — Допустимое проскальгивание при исполнении ордеров |
| shutdownGrid | Аварийное закрытие — Переключатель для аварийного закрытия всех открытых позиций и остановки работы советника |
| TunnelWidth | Ширина туннеля — Параметр ширины ценового коридора для открытия позиций |
| if > 0, will close out all positions once the pip target has been met (profitTarget) | Целевая прибыль — Целевое значение прибыли для автоматического закрытия всех открытых позиций |
| original was 7, change based on new optimization Mar06 (EMAShortPeriod) | Период короткой EMA — Период короткой экспоненциальной скользящей средней для определения направления тренда |
| original was 16, change based on new optimization Mar06 (EMALongPeriod) | Период длинной EMA — Период длинной экспоненциальной скользящей средней для определения направления тренда |
| Number of seconds to "sleep" before closing the next winning trade (PauseSeconds) | Пауза перед закрытием — Время ожидания в секундах перед закрытием следующей прибыльной позиции |
| DO NOT CHANGE - Standard multiplier to convert seconds to milliseconds (MillisPerSec) | Множитель миллисекунд — Множитель для преобразования секунд в миллисекунды (значение по умолчанию, не изменять) |
Поиск по коду файла
#include <stdlib.mqh>
extern bool Debug=false;
extern string TradeLog="TradeLog";
extern int MagicNumber=11111;
extern double Lots=0.1;
extern double HedgeBase=2.0;
extern int Slippage=5;
extern bool shutdownGrid=false;
extern int TunnelWidth=20;
extern double profitTarget=100; // if > 0, will close out all positions once the pip target has been met
extern int EMAShortPeriod=8; // original was 7, change based on new optimization Mar06
extern int EMALongPeriod=21; // original was 16, change based on new optimization Mar06
extern int PauseSeconds= 6; // Number of seconds to "sleep" before closing the next winning trade
extern int MillisPerSec=1000; // DO NOT CHANGE - Standard multiplier to convert seconds to milliseconds
double TunnelSize;
string setup;
double startBuyRate, startSellRate;
int currentOpen;
int NumBuyTrades, NumSellTrades; // Number of buy and sell trades in this symbol
bool myWantLongs;
double lotMM;
double Profit;
bool OK2Buy,OK2Sell, FirstDirSell;
int CheckDirection()
{
double SlowEMA, FastEMA;
double Dif;
FastEMA=iMA(NULL,0,EMAShortPeriod,0,MODE_EMA,PRICE_CLOSE,1);
SlowEMA=iMA(NULL,0,EMALongPeriod,0,MODE_EMA,PRICE_CLOSE,1);
Dif=FastEMA-SlowEMA;
if(Dif > 0)return(1);
if(Dif < 0)return(-1);
return(0);
}
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int handle;
if (Debug)
{
if (GlobalVariableCheck("MyHandle"))
{
handle=GlobalVariableGet("MyHandle");
FileFlush(handle);
FileClose(handle);
GlobalVariableDel("MyHandle");
}
}
return(0);
}
int Write(string str)
{
int handle;
if (GlobalVariableCheck("MyHandle"))
{
handle=GlobalVariableGet("MyHandle");
FileWrite(handle,str + " Time " + TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));
}
}
void CloseOpenPositions()
{
int cnt, err;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect (cnt, SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()) continue;
if(OrderMagicNumber()!=MagicNumber) continue;
if(OrderType()==OP_BUY && OrderProfit() < 0)
{
if (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet))
{
if (Debug) Write("Buy Order closed for " + Symbol() + " at " + Bid + ".");
}
else
{
err=GetLastError();
Print("Error closing order : (", err , ") " + ErrorDescription(err));
if (Debug)
{
Write("Error closing order : (" + err + ") " + ErrorDescription(err));
}
}
}
if(OrderType()==OP_SELL && OrderProfit() < 0)
{
if (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet))
{
if (Debug) Write("Sell Order closed for " + Symbol() + " at " + Ask + ".");
}
else
{
err=GetLastError();
Print("Error closing order : (", err , ") " + ErrorDescription(err));
if (Debug)
{
Write("Error closing order : (" + err + ") " + ErrorDescription(err));
}
}
}
}
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect (cnt, SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()) continue;
if(OrderMagicNumber()!=MagicNumber) continue;
if(OrderType()==OP_BUY && OrderProfit() > 0)
{
Sleep(PauseSeconds*MillisPerSec);
if (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Gold))
{
if (Debug) Write("Buy Order closed for " + Symbol() + " at " + Bid + ".");
}
else
{
err=GetLastError();
Print("Error closing order : (", err , ") " + ErrorDescription(err));
if (Debug)
{
Write("Error closing order : (" + err + ") " + ErrorDescription(err));
}
}
}
if(OrderType()==OP_SELL && OrderProfit() > 0)
{
Sleep(PauseSeconds*MillisPerSec);
if (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Gold))
{
Показано первые 50% кода (символов: 6597)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.