mGRID EXPERT ADVISOR ver 2.0
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mgrid ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
mGRID EXPERT ADVISOR ver 2.0 — торговый советник для MetaTrader 4, работающий на языке MQL4. Советник относится к классу сеточных стратегий: при отсутствии открытых позиций по заданному магическому номеру он выставляет серию отложенных ордеров Buy Stop и Sell Stop по обе стороны от текущей цены. Количество уровней и шаг между ними задаются входными параметрами. Дальнейшее сопровождение позиций выполняется в обработчике события новой котировки.
Советник поддерживает управление объёмом позиции: базовый лот задаётся вручную либо рассчитывается автоматически в зависимости от баланса счёта и кредитного плеча при включённом режиме управления капиталом. Также предусмотрена возможность ограничить время начала торговли определённым часом сервера. При достижении заданной цели по прибыли или при срабатывании условий завершения цикла советник закрывает рыночные позиции и удаляет отложенные ордера.
В коде используются стандартные торговые функции MetaTrader 4 для открытия, закрытия и удаления ордеров, а также функции получения рыночной информации. Советник выводит на график информационную панель с текущими параметрами счёта и настройками. Точные алгоритмы расчёта целей, последовательность выставления ордеров и внутренние условия проверок в описании не раскрываются.
Настройки программы
| Настройка | Описание |
|---|---|
| INCREMENT | Шаг сетки — Шаг между уровнями сетки отложенных ордеров в пунктах. |
| LOTS | Базовый лот — Базовый торговый объём для ордеров сетки. Может пересчитываться автоматически при включённом управлении капиталом. |
| LEVELS | Количество уровней — Количество уровней сетки отложенных ордеров по каждую сторону от начальной цены. |
| MAX_LOTS | Максимальный лот — Максимальный объём, используемый при частичном закрытии позиций. |
| MAGIC | Магический номер — Уникальный идентификатор (магический номер) ордеров, принадлежащих советнику. |
| CONTINUE | Продолжать работу — Определяет, продолжает ли советник работу после завершения торгового цикла. Если параметр выключен, после завершения сессии новые циклы не начинаются. |
| MONEY_MANAGEMENT | Управление капиталом — Включает автоматический расчёт торгового объёма на основе баланса счёта, кредитного плеча и коэффициента риска. |
| RISK_RATIO | Коэффициент риска — Коэффициент риска, используемый при автоматическом расчёте торгового объёма. |
| UseEntryTime | Использовать время входа — Включает ограничение на открытие нового торгового цикла только в заданный час сервера. |
| EntryTime | Час входа — Час сервера, в который разрешён вход в рынок при включённом параметре UseEntryTime. |
Поиск по коду файла
extern int INCREMENT=35;
extern double LOTS=0.1;
extern int LEVELS=3;
extern double MAX_LOTS=99;
extern int MAGIC=1803;
extern bool CONTINUE=true;
extern bool MONEY_MANAGEMENT=false;
extern int RISK_RATIO=2;
extern bool UseEntryTime=false;
extern int EntryTime=0;
bool UseProfitTarget=false;
bool UsePartialProfitTarget=false;
int Target_Increment = 50;
int First_Target = 20;
bool Enter=true;
int nextTP;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int start()
{
// код доступен только после оплаты
}
int ticket, cpt, profit, total=0, BuyGoalProfit, SellGoalProfit, PipsLot;
double ProfitTarget=INCREMENT*2, BuyGoal=0, SellGoal=0, spread=(Ask-Bid)/Point, InitialPrice=0;
if(INCREMENT<MarketInfo(Symbol(),MODE_STOPLEVEL)+spread) INCREMENT=1+MarketInfo(Symbol(),MODE_STOPLEVEL)+spread;
if(MONEY_MANAGEMENT) LOTS=NormalizeDouble(AccountBalance()*AccountLeverage()/1000000*RISK_RATIO,0)*MarketInfo(Symbol(),MODE_MINLOT);
if(LOTS<MarketInfo(Symbol(),MODE_MINLOT))
{
Comment("Not Enough Free Margin to begin");
return(0);
}
for(cpt=1;cpt<LEVELS;cpt++) PipsLot+=cpt*INCREMENT;
for(cpt=0;cpt<OrdersTotal();cpt++)
{
OrderSelect(cpt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol())
{
total++;
if(!InitialPrice) InitialPrice=StrToDouble(OrderComment());
if(UsePartialProfitTarget && UseProfitTarget && OrderType()<2)
{
double val=getPipValue(OrderOpenPrice(),OrderType());
takeProfit(val,OrderTicket());
}
}
}
if(total<1 && Enter && (!UseEntryTime || (UseEntryTime && Hour()==EntryTime)))
{
if(AccountFreeMargin()<(100*LOTS))
{
Print("Not enough free margin to begin");
return(0);
}
InitialPrice=Ask;
SellGoal=InitialPrice-(LEVELS+1)*INCREMENT*Point;
BuyGoal=InitialPrice+(LEVELS+1)*INCREMENT*Point;
for(cpt=1;cpt<=LEVELS;cpt++)
{
OrderSend(Symbol(),OP_BUYSTOP,LOTS,InitialPrice+cpt*INCREMENT*Point,2,SellGoal,BuyGoal,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
OrderSend(Symbol(),OP_SELLSTOP,LOTS,InitialPrice-cpt*INCREMENT*Point,2,BuyGoal+spread*Point,SellGoal+spread*Point,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
}
} // initial setup done - all channels are set up
else // We have open Orders
{
BuyGoal=InitialPrice+INCREMENT*(LEVELS+1)*Point;
SellGoal=InitialPrice-INCREMENT*(LEVELS+1)*Point;
total=OrdersHistoryTotal();
for(cpt=0;cpt<total;cpt++)
{
OrderSelect(cpt,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC && StrToDouble(OrderComment())==InitialPrice){EndSession();return(0);}
}
if(UseProfitTarget && CheckProfits(LOTS,OP_SELL,true,InitialPrice)>ProfitTarget) {EndSession();return(0);}
BuyGoalProfit=CheckProfits(LOTS,OP_BUY,false,InitialPrice);
SellGoalProfit=CheckProfits(LOTS,OP_SELL,false,InitialPrice);
if(BuyGoalProfit<ProfitTarget)
{
for(cpt=LEVELS;cpt>=1 && BuyGoalProfit<ProfitTarget;cpt--)
{
if(Ask<=(InitialPrice+(cpt*INCREMENT-MarketInfo(Symbol(),MODE_STOPLEVEL))*Point))
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,cpt*LOTS,InitialPrice+cpt*INCREMENT*Point,2,SellGoal,BuyGoal,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
}
if(ticket>0) BuyGoalProfit+=LOTS*(BuyGoal-InitialPrice-cpt*INCREMENT*Point)/Point;
}
}
if(SellGoalProfit<ProfitTarget)
{
for(cpt=LEVELS;cpt>=1 && SellGoalProfit<ProfitTarget;cpt--)
{
if(Bid>=(InitialPrice-(cpt*INCREMENT-MarketInfo(Symbol(),MODE_STOPLEVEL))*Point))
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,cpt*LOTS,InitialPrice-cpt*INCREMENT*Point,2,BuyGoal+spread*Point,SellGoal+spread*Point,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);
}
if(ticket>0) SellGoalProfit+=LOTS*(InitialPrice-cpt*INCREMENT*Point-SellGoal-spread*Point)/Point;
}
}
}
Comment("mGRID EXPERT ADVISOR ver 2.0\n",
Показано первые 50% кода (символов: 6588)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.