Stop Hunter
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «stop_hunter.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Stop Hunter — торговый советник для MetaTrader 4, основанный на стратегии «Охота за стопами крупных игроков». Советник размещает отложенные ордера BuyStop и SellStop на уровне округлённых ценовых целей с заданным расстоянием от этих уровней. Используются скрытые значения TakeProfit и StopLoss, которые скрыты от брокера.
Советник управляет количеством открытых позиций и лотностью в зависимости от настроек риска и свободного маржи. При достижении ценой целевого уровня срабатывают отложенные ордера, после чего советник отслеживает позиции и управляет их закрытием. На графике отображаются уровни целей и зоны расстановки ордеров в виде горизонтальных линий.
Настройки программы
| Настройка | Описание |
|---|---|
| Zeroes | Нули — Количество знаков после запятой для определения ценового уровня цели. |
| Distance | Расстояние — Расстояние в пунктах от ценового уровня цели до размещения отложенного ордера. |
| TakeProfit | Тейк-профит — Скрытое значение тейк-профита в пунктах, устанавливаемое при открытии позиции. |
| StopLoss | Стоп-лосс — Скрытое значение стоп-лосса в пунктах, устанавливаемое при открытии позиции. |
| LongOrders | Лонговые ордера — Включает или отключает размещение отложенных BuyStop ордеров. |
| ShortOrders | Шортовые ордера — Включает или отключает размещение отложенных SellStop ордеров. |
| Risk_percent | Риск в процентах — Процент от свободного маржи, используемый для расчёта размера лота. |
| minLots | Минимальный лот — Минимально допустимый размер лота для расчёта. |
| maxLots | Максимальный лот — Максимально допустимый размер лота для расчёта. |
| maximum Buy positions at once (MaxBuyPos) | Максимум лонг позиций — Максимальное количество одновременно открытых Buy позиций. |
| maximum Sell positions at once (MaxSellPos) | Максимум шорт позиций — Максимальное количество одновременно открытых Sell позиций. |
| magic | Магическое число — Идентификатор ордеров советника для фильтрации и управления позициями. |
Поиск по коду файла
extern int Zeroes = 2;//
extern int Distance = 15;
extern int TakeProfit = 5;
extern int StopLoss = 95;
extern bool LongOrders = TRUE;
extern bool ShortOrders = TRUE;
extern double Risk_percent = 5;
extern double minLots = 0.01;
extern double maxLots = 0.01;
extern int MaxBuyPos = 1;//maximum Buy positions at once
extern int MaxSellPos = 1;//maximum Sell positions at once
extern int magic = 3265;
int POS_n_BUY;
int POS_n_SELL;
int POS_n_BUYSTOP;
int POS_n_SELLSTOP;
int POS_n_total;
double Lots;
double NewLots;
double OrderLevelB;
double OrderLevelS;
int TP2= 0;
int SL2= 0;
bool SecondTrade = FALSE;
string name = "Stop_Hunter";
int init()
{
// код доступен только после оплаты
}
int deinit()
{
DeleteBuyStop();
DeleteSellStop();
DeleteObjects();
return(0);
}
int start()
{
// код доступен только после оплаты
}
int cnt, total;
int ticketB, ticketS, ticketC;
int MaxOpenPos = MaxBuyPos + MaxSellPos;
int digits = MarketInfo(Symbol(), MODE_DIGITS);
string DisplayText;
string LongStat;
string ShortStat;
string BidString ;
int Len;
if(LongOrders) LongStat = "YES"; else LongStat = "NO";
if(ShortOrders) ShortStat = "YES"; else ShortStat = "NO";
count_position();
RefreshRates();
BidString = DoubleToStr(Bid,digits);
Len = StringLen(BidString)-1;
double LevelB = MathCeil(Bid / (Point* MathPow(10,Zeroes))) * Point* MathPow(10,Zeroes);
if(LevelB - Distance*Point <= Ask) {LevelB = LevelB + MathPow(10,Zeroes)*Point;}
if( (LevelB > getGlobal("LevelB") || Ask < getGlobal("LevelB")-MathPow(10,Zeroes)*Point-Distance*50*Point)&& getGlobal("LevelB")!=0){ DeleteBuyStop(); }
double LevelS = LevelB - MathPow(10,Zeroes)*Point;
if(LevelS + Distance*Point >= Bid) {LevelS = LevelS - MathPow(10,Zeroes)*Point; }
if( (LevelS < getGlobal("LevelS") || Bid > getGlobal("LevelS")+MathPow(10,Zeroes)*Point+Distance*50*Point) && getGlobal("LevelS")!=0){ DeleteSellStop(); }
if(Zeroes >= Len || Zeroes <= 0)
{
DisplayText = "\n" + "______ Stop Hunter ______\n" +
"Coded By: MT-Coder\n" +
"** M******r*@hotmail.com **\n" +
""
+ "Wrong settings\n" + "Zeroes should be smaller than " + Len + " and bigger than 0";
Comment(DisplayText);
return(0);
}
else
DisplayText = "\n" + "______ Stop Hunter ______\n" +
"Coded By: MT-Coder\n" +
"** M******r*@hotmail.com **\n" +
"" +
"Up Target: " + DoubleToStr(LevelB,digits) + "| Long Orders " + LongStat + "\n" +
"Dn Target: " + DoubleToStr(LevelS,digits) + "| Short Orders " + ShortStat;
Comment(DisplayText);
DrawObjects("up",LevelB);
DrawObjects("upup",LevelB + Distance*Point);
DrawObjects("updn",LevelB - Distance*Point);
DrawObjects("dn",LevelS);
DrawObjects("dnup",LevelS + Distance*Point);
DrawObjects("dndn",LevelS - Distance*Point);
if(POS_n_total < MaxOpenPos)
{
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
Call_MM();
if(LongOrders && POS_n_BUYSTOP + POS_n_BUY < MaxBuyPos && POS_n_SELL == 0)
{
ticketB=OrderSend(Symbol(),OP_BUYSTOP,Lots,LevelB-Distance*Point,1,0,0,"Stop Hunter",magic,0,Green);
if(ticketB>0)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Stop order sent : ",OrderOpenPrice());
setGlobal("LevelB",LevelB);
}
else {
Print("Error sending BUY Stop order : ",GetLastError());
return(0);
}
return(0);
}
if(ShortOrders && POS_n_SELLSTOP + POS_n_SELL < MaxSellPos && POS_n_BUY == 0)
{
ticketS=OrderSend(Symbol(),OP_SELLSTOP,Lots,LevelS+Distance*Point,1,0,0,"Stop Hunter",magic,0,Red);
if(ticketS>0)
{
if(OrderSelect(ticketS,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Stop order sent : ",OrderOpenPrice());
setGlobal("LevelS",LevelS);
}
else {
Print("Error sending SELL Stop order : ",GetLastError());
return(0);
}
return(0);
}
}
total=OrdersTotal();
for(cnt=total-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() != magic) break;
if(OrderType()==OP_BUYSTOP && POS_n_SELL != 0 && OrderSymbol() == Symbol())
{
OrderDelete(OrderTicket());
}
if(OrderType()==OP_SELLSTOP && POS_n_BUY != 0 && OrderSymbol() == Symbol())
{
OrderDelete(OrderTicket());
}
RefreshRates();
if(OrderType()==OP_BUY && OrderSymbol() == Symbol())
{
if(Bid >= OrderOpenPrice() + (TakeProfit+TP2)*Point || Ask <= OrderOpenPrice() - (StopLoss+SL2)*Point)
{
if(!SecondTrade && Bid >= OrderOpenPrice() + (TakeProfit+TP2)*Point)
{
NeПоказано первые 50% кода (символов: 7402)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.