makegrid192.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «makegrid192.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MakeGrid192 — торговый советник для MetaTrader 4, реализующий сеточную (grid) торговлю. Советник размещает серию отложенных ордеров buy/sell limit и buy/sell stop на фиксированных расстояниях друг от друга, формируя сетку вокруг текущей цены. Количество ордеров, шаг сетки и объём сделок задаются пользователем через настройки.
Советник поддерживает фильтрацию направлений открытием на основе скользящей средней EMA, а также индикаторов MACD и OsMA. При пересечении сигнальных линий MACD/OsMA возможно автоматическое закрытие всех отложенных ордеров и открытых позиций. Дополнительно реализованы скользящий стоп, ограничение максимального количества открытых позиций и автоматическое удаление ордеров по времени.
Идентификация ордеров советника осуществляется с помощью magic number, что позволяет одновременно использовать несколько сеточных советников на одном счёте. Торговые операции выполняются через стандартные функции OrderSend, OrderClose и OrderModify платформы MetaTrader 4.
Настройки программы
| Настройка | Описание |
|---|---|
| Magic number of the trades. must be unique to identify (uniqueGridMagic) | Magic number (магическое число) для идентификации ордеров сетки. Должен быть уникальным, чтобы отличать ордера данной сетки от ордеров других советников. |
| 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, для открытых позиций активируется отслеживание стоп-лосса по мере движения цены в прибыль. |
| update orders every x minutes (UpdateInterval) | Интервал обновления ордеров в минутах. Советник пересчитывает и обновляет сетку каждые заданные минуты. |
| do we want long positions (wantLongs) | Разрешает открытие длинных (buy) позиций. |
| do we want short positions (wantShorts) | Разрешает открытие коротких (sell) позиций. |
| do we want longs above price, shorts below price (wantBreakout) | Если включено, размещаются лонги выше цены и шорты ниже цены (прорывные ордера). |
| do we want longs below price, shorts above price (wantCounter) | Если включено, размещаются лонги ниже цены и шорты выше цены (контр-трендовые ордера). |
| do we want longs above ema only, shorts below ema only (limitEMA) | Если включено, размещает лонги только выше EMA и шорты только ниже EMA, фильтруя направления ордеров по скользящей средней. |
| the length of the EMA.. was previously fixed at 34 (EMAperiod) | Период экспоненциальной скользящей средней 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 > 0 только для лонгов и MACD < 0 только для шортов. При пересечении сигнальных линий все отложенные ордера отменяются. Работает совместно с параметрами wantLongs и wantShorts. |
| if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD. (UseOsMA) | Если включено, используется OsMA > 0 только для лонгов и OsMA < 0 только для шортов. Работает аналогично MACD. Если одновременно включены UseMACD и UseOsMA, приоритет отдаётся OsMA. |
| if UseMACD, do we also close open positions with a loss? (CloseOpenPositions) | Если UseMACD включён, определяет, нужно ли также закрывать открытые позиции с убытком при пересечении сигнальных линий MACD. |
| this will remove long orders below the 34 ema and vv if limitEMA flag is true (doHouseKeeping) | Если limitEMA включён, удаляет ордера лонгов ниже EMA и шортов выше EMA, очищая ордера, оказавшиеся на неправильной стороне скользящей средней. |
| 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. |
| parameters for MACD and OSMA (emaSlow) | Медленный период EMA, используемый в расчётах MACD и OsMA. |
| parameters for MACD and OSMA (signalPeriod) | Период сигнальной линии, используемый в расчётах MACD и OsMA. |
| parameters for MACD and OSMA (timeFrame) | Таймфрейм, на котором рассчитываются индикаторы MACD и OsMA. |
| minimum distance from price to place trades. (minFromPrice) | Минимальное расстояние от текущей цены до размещения торговых ордеров. |
Поиск по коду файла
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 = 12; // total number of orders to place
extern double TakeProfit = 12 ; // 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 double UpdateInterval = 1; // update orders every x minutes
extern bool wantLongs = true; // 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.
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
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 && OrderOpenPПоказано первые 50% кода (символов: 9168)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.