← К каталогу
Исходный код · ID 3952

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 и перейдите к оплате.

Стоимость полного кода
740,20₽ ≈ $9.05