MakeGrid193
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «makegrid193be short.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MakeGrid193 — торговый советник для MetaTrader 4, реализующий стратегию сеточной торговли (grid). Советник размещает отложенные ордера BUY и SELL на заданном расстоянии друг от друга, формируя сетку вокруг текущей цены. Количество ордеров, размер сетки и лот настраиваются пользователем.
Советник поддерживает фильтрацию направлений через индикаторы EMA, MACD и OsMA. Доступны различные режимы входа: breakout (сверх цены) и counter (против цены), а также ограничение направлений по положению цены относительно EMA. Встроена проверка максимального количества открытых позиций.
Для управления рисками предусмотрены trailing stop, перевод стоп-лосса в безубыток (BEPips), ограничение времени удержания позиций, автоматическое закрытие при достижении целевой прибыли, а также функции приостановки и полного завершения работы сетки.
Настройки программы
| Настройка | Описание |
|---|---|
| Magic number of the trades. must be unique to identify (uniqueGridMagic) | Магическое число сетки — Магическое число для идентификации ордеров сетки. Должно быть уникальным для корректного распознавания торговых позиций. |
| Lots | Размер лота — Размер лота для каждого ордера. |
| pips between orders - grid or mesh size (GridSize) | Размер сетки (пипсы) — Расстояние между ордерами в сетке, измеряемое в пипсах. |
| total number of orders to place (GridSteps) | Количество ордеров в сетке — Общее количество ордеров, размещаемых в сетке. |
| number of ticks to take profit. normally is = grid size but u can override (TakeProfit) | Тейк-профит (пипсы) — Уровень тейк-профита в пипсах от цены входа. По умолчанию равен размеру сетки, но может быть переопределён. |
| if u want to add a stop loss. normal grids dont use stop losses (StopLoss) | Стоп-лосс (пипсы) — Уровень стоп-лосса в пипсах от цены входа. Если значение равно 0, стоп-лосс не устанавливается. |
| will trail if > 0 (trailStop) | Трейлинг-стоп (пункты) — Расстояние трейлинг-стопа в пунктах. Если больше 0, активируется trailing stop для открытых позиций. |
| will move the stoploss to BE after x pips of movement (BEPips) | Безубыток (пипсы) — Переводит стоп-лосс в безубыток после указанного количества пунктов движения цены. Если значение равно 0, функция неактивна. |
| update orders every x minutes (UpdateInterval) | Интервал обновления (минуты) — Интервал обновления ордеров в минутах. Советник пересчитывает сетку с заданной периодичностью. |
| do we want long positions (wantLongs) | Разрешить долгие позиции — При значении true разрешает открытие долгих позиций. |
| do we want short positions (wantShorts) | Разрешить короткие позиции — При значении true разрешает открытие коротких позиций. |
| do we want longs above price, shorts below price (wantBreakout) | Разрешить breakout — При значении true разрешает размещение долгих ордеров выше цены и коротких — ниже цены. |
| do we want longs below price, shorts above price (wantCounter) | Разрешить counter — При значении true разрешает размещение долгих ордеров ниже цены и коротких — выше цены. |
| do we want longs above ema only, shorts below ema only (limitEMA) | Ограничение по EMA — При значении true разрешает долгие позиции только выше EMA, а короткие — только ниже EMA. |
| the length of the EMA.. was previously fixed at 34 (EMAperiod) | Период EMA — Период скользящей средней EMA, используемой для фильтрации направлений. Ранее значение было фиксировано на 34. |
| maximum number of open positions : implemented in v1.92 (GridMaxOpen) | Максимум открытых позиций — Максимальное количество открытых позиций. При достижении лимита новые ордера не открываются (реализовано в версии 1.92). |
| if true, will use macd >0 for longs only, macd <0 for shorts only (UseMACD) | Использовать MACD — При значении true использует MACD для фильтрации: долгие позиции только при MACD > 0, короткие — при MACD < 0. При пересечении нулевого уровня отменяет все отложенные ордера. |
| if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD. (UseOsMA) | Использовать OsMA — При значении true использует OsMA для фильтрации: долгие позиции только при OsMA > 0, короткие — при OsMA < 0. Работает аналогично MACD. Если одновременно активны UseMACD и UseOsMA, приоритет имеет OsMA. |
| if UseMACD, do we also close open positions with a loss? (CloseOpenPositions) | Закрытие позиций при сигнале MACD — При активном UseMACD определяет, нужно ли также закрывать открытые позиции с убытком при пересечении сигнала MACD. |
| this will remove long orders below the 34 ema and vv if limitEMA flag is true (doHouseKeeping) | Автоматическая очистка ордеров у EMA — Удаляет ордера на неправильной стороне EMA, если флаг limitEMA активен. |
| in hours - if > 0, all open orders or positions will be closed after this period. fractions are perm (keepOpenTimeLimit) | Лимит времени удержания (часы) — Лимит времени удержания позиций в часах. Если больше 0, все открытые ордера и позиции закрываются по истечении указанного периода. Допускаются дробные значения. |
| parameters for MACD and OSMA (emaFast) | Быстрая EMA (MACD/OsMA) — Быстрая EMA для индикаторов MACD и OsMA. |
| parameters for MACD and OSMA (emaSlow) | Медленная EMA (MACD/OsMA) — Медленная EMA для индикаторов MACD и OsMA. |
| parameters for MACD and OSMA (signalPeriod) | Период сигнальной линии (MACD/OsMA) — Период сигнальной линии для индикаторов MACD и OsMA. |
| parameters for MACD and OSMA (timeFrame) | Таймфрейм (MACD/OsMA) — Таймфрейм для расчёта индикаторов MACD и OsMA. Значение 0 означает текущий таймфрейм. |
| minimum distance from price to place trades. (minFromPrice) | Минимальное расстояние от цены (пункты) — Минимальное расстояние от текущей цены для размещения ордеров, в пунктах. |
| will trade for this number of minutes after being initialised. (tradeForMinutes) | Время торговли (минуты) — Время торговли в минутах после инициализации. После истечения указанного времени все позиции закрываются. |
| positions are opened at price modulo GridSize and offset with this parameter. (gridOffset) | Смещение сетки — Смещение при открытии позиций: ордера открываются по модулю GridSize с учётом данного смещения. Используется для входа на неокруглённых уровнях цены. |
| defines the center point of a fixed width long grid (longGridCenter) | Центр долгой сетки — Центральная точка сетки фиксированной ширины для долгих позиций. Если значение больше одного пункта, сетка центрируется вокруг этого уровня. |
| defines the center point of a fixed width short grid (shortGridCenter) | Центр короткой сетки — Центральная точка сетки фиксированной ширины для коротких позиций. |
| defines the bottom of a fixed width long grid (longGridLow) | Нижняя граница долгой сетки — Нижняя граница сетки фиксированной ширины для долгих позиций. |
| defines the top of a fixed width long grid (longGridHigh) | Верхняя граница долгой сетки — Верхняя граница сетки фиксированной ширины для долгих позиций. |
| defines the bottom of a fixed width short grid (shortGridLow) | Нижняя граница короткой сетки — Нижняя граница сетки фиксированной ширины для коротких позиций. |
| defines the top of a fixed width short grid (shortGridHigh) | Верхняя граница короткой сетки — Верхняя граница сетки фиксированной ширины для коротких позиций. |
| if > 0, will close out all positions once the $ target has been met (profitTarget) | Целевая прибыль (доллары) — Целевая прибыль в долларах. Если больше 0, все позиции закрываются при достижении накопленной прибыли. |
| if set to true, will close all unfilled Orders (suspendGrid) | Приостановка сетки — При значении true закрывает все неисполненные отложенные ордера. |
| if set to true, will close all orders and positions. (shutdownGrid) | Полное завершение сетки — При значении true закрывает все ордера и позиции и завершает работу советника. |
Поиск по коду файла
extern int uniqueGridMagic = 11111; // Magic number of the trades. must be unique to identify
extern double Lots = 0.1; //
extern double GridSize = 6; // pips between orders - grid or mesh size
extern double GridSteps = 10; // total number of orders to place
extern double TakeProfit = 10 ; // number of ticks to take profit. normally is = grid size but u can override
extern double StopLoss = 0; // if u want to add a stop loss. normal grids dont use stop losses
extern int trailStop = 0; // will trail if > 0
extern int BEPips = 0; // will move the stoploss to BE after x pips of movement
extern double UpdateInterval = 1; // update orders every x minutes
extern bool wantLongs = false; // do we want long positions
extern bool wantShorts = true; // do we want short positions
extern bool wantBreakout = true; // do we want longs above price, shorts below price
extern bool wantCounter = true; // do we want longs below price, shorts above price
extern bool limitEMA = true; // do we want longs above ema only, shorts below ema only
extern int EMAperiod = 34; // the length of the EMA.. was previously fixed at 34
extern double GridMaxOpen = 0; // maximum number of open positions : implemented in v1.92
extern bool UseMACD = true; // if true, will use macd >0 for longs only, macd <0 for shorts only
extern bool UseOsMA = false; // if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD.
extern bool CloseOpenPositions = false;// if UseMACD, do we also close open positions with a loss?
extern bool doHouseKeeping = true; // this will remove long orders below the 34 ema and vv if limitEMA flag is true
extern double keepOpenTimeLimit = 0; // in hours - if > 0, all open orders or positions will be closed after this period. fractions are permitted
extern int emaFast = 12; // parameters for MACD and OSMA
extern int emaSlow = 26; // parameters for MACD and OSMA
extern int signalPeriod = 9; // parameters for MACD and OSMA
extern int timeFrame = 0; // parameters for MACD and OSMA
extern int minFromPrice = 0; // minimum distance from price to place trades.
extern int tradeForMinutes=0; // will trade for this number of minutes after being initialised.
extern int gridOffset = 0; // positions are opened at price modulo GridSize and offset with this parameter.
extern double longGridCenter = 0; // defines the center point of a fixed width long grid
extern double shortGridCenter = 0; // defines the center point of a fixed width short grid
extern double longGridLow = 0; // defines the bottom of a fixed width long grid
extern double longGridHigh = 0; // defines the top of a fixed width long grid
extern double shortGridLow = 0; // defines the bottom of a fixed width short grid
extern double shortGridHigh = 0; // defines the top of a fixed width short grid
extern double profitTarget = 15000; // if > 0, will close out all positions once the $ target has been met
extern bool suspendGrid = false; // if set to true, will close all unfilled Orders
extern bool shutdownGrid = false; // if set to true, will close all orders and positions.
string GridName = "Grid"; // identifies the grid. allows for several co-existing grids - old variable.. shold not use any more
double LastUpdate = 0; // counter used to note time of last update
double startTime = 0; // counter to note trade start time.
double closedProfit = 0; // counts closed p&l
double openProfit = 0; // counts open p&l
double accumulatedProfit = 0; // for back testing only
bool haveHitTarget = false; // if there is a target, this flag says we have hit it
int openLongs = 0; // how many longs are open
int openShorts = 0; // how many shorts are open
bool gridActive = true; // is the grid active
bool gridOneShot = false; // is this a one shot? if so, it stops after the profitTarget has been reached
int init()
{
// код доступен только после оплаты
}
bool IsPosition(double atRate, double inRange, bool checkLongs )
{
int totalorders = OrdersTotal();
for(int i=0;i<totalorders;i++) // scan all orders and positions...
{
OrderSelect(i, SELECT_BY_POS);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{ int type = OrderType();
if (MathAbs( OrderOpenPrice() - atRate ) < (inRange*0.9)) // dont look for exact price but price proximity (less than gridsize) - added 0.9 because of floating point errors
{ if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP ) ) || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP ) ) )
{
return(true);
}
}
}
}
return(false);
}
void DeleteAfter( double xHours ) // delete pending orders or open positions after x hours
{
int totalorders = OrdersTotal();
for(int i=totalorders-1;i>=0;i--)
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if (( MathAbs(iTime(Symbol(),5,0)-OrderOpenTime()) >= xHours*60*60 ) && (iTime(Symbol(),5,0)>0))
{ bool result = false;
if ( OrderType() == OP_BUY ) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
if ( OrderType() == OP_SELL ) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
if ( OrderType() > 1 ) result = OrderDelete( OrderTicket() );
}
}
} // proc DeleteAfter()
void CloseAllPendingOrders( )
{
int totalorders = OrdersTotal();
for(int i=totalorders-1;i>=0;i--) // scan all orders and positions...
{
OrderSelect(i, SELECT_BY_POS);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if ( OrderType() > 1 ) bool result = OrderDelete( OrderTicket() );
}
}
return;
}
void ClosePendingOrdersAndPositions()
{
int totalorders = OrdersTotal();
for(int i=totalorders-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
bool result = false;
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if ( OrderType() == OP_BUY ) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
if ( OrderType() == OP_SELL ) result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
if ( OrderType() > 1 ) result = OrderDelete( OrderTicket() );
}
}
return;
}
void CloseOrdersfromEMA( double theEMAValue )
{
int totalorders = OrdersTotal();
for(int i=totalorders-1;i>=0;i--) // scan all orders and positions...
{
OrderSelect(i, SELECT_BY_POS);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
int type = OrderType();
bool result = false;
if ( type == OP_BUYLIMIT && OrderOpenPrice() <= theEMAValue ) result = OrderDelete( OrderTicket() );
if ( type == OP_BUYSTOP && OrderOpenPrice() <= theEMAValue ) result = OrderDelete( OrderTicket() );
if ( type == OP_SELLLIMIT && OrderOpenPrice() >= theEMAValue ) result = OrderDelete( OrderTicket() );
if ( type == OP_SELLSTOP && OrderOpenPrice() >= theEMAValue ) result = OrderDelete( OrderTicket() );
}
}
return;
}
int openPositions( )
{ int op =0;
int totalorders = OrdersTotal();
for(int i=totalorders-1;i>=0;i--) // scan all orders and positions...
{
OrderSelect(i, SELECT_BY_POS);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
int type = OrderType();
if ( type == OP_BUY ) {op=op+1;}
if ( type == OP_SELL ) {op=op+1;}
}
}
return(op);
}
void TestForProfit( int forMagic, double profittarget, bool testOpen, bool testHistory ) // based on trailing stop code from MT site... but modified as per Hiro
{
if (profittarget > 0 )
{
closedProfit = 0; // counts closed p&l
if (testHistory == true) {
int total = HistoryTotal();
for(int i=0;i<total;i++) // scan all closed / cancelled transactions
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
if ( OrderSymbol() == Symbol() && OrderMagicNumber() == forMagic ) // only look if mygrid and symbol...
{
closedProfit = closedProfit + OrderProfit();
}
}
} else {
accumulatedProfit =0;
}
openProfit = 0; // counts open p&l
if (testOpen == true) {
total = OrdersTotal();
openLongs = 0;
openShorts = 0;
for(i=0;i<total;i++) // scan all open orders and positions
{
OrderSelect(i, SELECT_BY_POS );
if ( OrderSymbol() == Symbol() && OrderMagicNumber() == forMagic ) /Показано первые 50% кода (символов: 14471)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.