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

mahadgeea.mq4

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Советник для платформы MetaTrader 4, написанный на языке MQL4. Предназначен для автоматической торговли на валютном рынке Форекс. Обрабатывает рыночные данные в реальном времени и выполняет торговые операции через встроенные API MetaTrader.

Советник анализирует ценовые данные с использованием скользящей средней и на её основе принимает решения о входе в сделки. Поддерживается как покупка, так и продажа с возможностью включения или отключения каждого направления отдельно.

Имеются функции фиксации прибыли по уровню Take Profit, трейлинг-стоп для защиты прибыли, а также возможность управления лотностью. Поддерживаются дополнительные настройки времени торговли, фильтрации по времени и ручного управления через кнопки на графике.

Настройки программы

НастройкаОписание
TradeSetting Название группы настроек торговли — Текстовый разделитель для визуальной группировки параметров в интерфейсе
EA_Name Имя советника — Идентификационное имя, используемое в комментариях к ордерам
CommentTrade Комментарий сделки — Текст комментария, добавляемый к каждой открываемой позиции
MagicNumber Магический номер — Уникальный идентификатор ордеров данного советника
Signal_ Разделитель сигналов — Текстовый разделитель для визуальной группировки параметров сигналов
TradeBuy Разрешить покупку — Включает или отключает возможность открытия длинных позиций
TradeSell Разрешить продажу — Включает или отключает возможность открытия коротких позиций
UseMA Использовать скользящую среднюю — Включает анализ ценового графика относительно скользящей средней для принятия торговых решений
Period_MA_1_ Период скользящей средней — Количество баров, используемых для расчёта скользящей средней
Shift_MA_1_ Сдвиг скользящей средней — Сдвиг индикатора скользящей средней относительно текущего бара
Mode_MA_1_ Тип скользящей средней — Метод расчёта скользящей средней
Price_MA_1_ Цена для скользящей средней — Тип цены, используемой для расчёта скользящей средней
Parameter Разделитель параметров — Текстовый разделитель для визуальной группировки параметров
Lots Лотность — Размер лота для каждой сделки
HiddenTP Скрытый Take Profit — Определяет, отображается ли уровень фиксации прибыли на графике
TakeProfit Take Profit — Уровень фиксации прибыли в пунктах от цены входа
Multiplier Множитель лота — Множитель, используемый при расчёте размера лота для дополнительных позиций
PipRange Диапазон в пунктах — Расстояние в пунктах для размещения отложенных ордеров
UseTrail Использовать трейлинг-стоп — Включает автоматическое перемещение стоп-лосса вслед за прибыльной позицией
TrailingStop Трейлинг-стоп в пунктах — Расстояние в пунктах между текущей ценой и стоп-лоссом при активном трейлинге
TrailingStep Шаг трейлинга в пунктах — Минимальное расстояние в пунктах для перемещения стоп-лосса при трейлинге
Получить полный код

Поиск по коду файла

#property version     "1.00"

#property strict
#include      <stdlib.mqh>
#include      <stderror.mqh>

enum model{Manual};

model   ModeOrder       = Manual;

extern string  TradeSetting    = " ---------------------------------- ";
extern string  EA_Name         = "Ma HadgeEA";
bool    ContinueTrade   = true;
extern string  CommentTrade    = "Ma HadgeEA";
extern int     MagicNumber     = 20200917;
extern string Signal_          = " ---------------- Signal ---------------- ";
extern bool   TradeBuy         = true;
extern bool   TradeSell        = true;
extern bool   UseMA            = true;
extern int     Period_MA_1_    = 50;
extern int     Shift_MA_1_     = 0;
extern ENUM_MA_METHOD Mode_MA_1_       = MODE_EMA;
extern ENUM_APPLIED_PRICE Price_MA_1_  = PRICE_CLOSE;
extern string Parameter          = " ---------------- Parameter ---------------- ";
extern double  Lots            = 0.01; 
extern bool    HiddenTP        = true;
extern int     TakeProfit      = 30;
extern double  Multiplier      = 2;
extern int     PipRange        = 20;
extern bool    UseTrail        = false;
extern int     TrailingStop    = 20;
extern int     TrailingStep    = 10;
bool    Use_TpMoney     = false;
double  TpMoney         = 10;
bool    Use_SLMoney     = false;
double  SL_Money        = 10;
string TimeFilter       = " ---------------- TimeFilter ---------------- ";
bool   UseTimeFilter    = false;
string StartTime_        = "01:00";
string StartTime1       = "00:01";
string EndTime1         = "23:59";
string EndTime_          = "20:00";
int     StopLoss        = 0;

static double  tppercent;
int turun        = 10;
int Warna;
int     POModifyMinute  = 999999;
int     MaxOrderLocking = 9999;
bool    OFF_After_Close = false;
bool    Debug           = false;
string         namelineH        = "BuyStop";
string         namelineL        = "SellStop";
string  TimeStart      = "00:00";
string  TimeStop       = "23:59";
int     MagicMaster     = 12345;
double price;
int range; 
double lotbuy,lotsell;
int            Corner          = 1;              
int            PT              = 1,
               DIGIT,SlipPage;
double         POINT;  
int            fot;
double         lpb,lps,ll;
string         lc;
double         openbuylots, openselllots;
static int     first_time;
double         tpline_buy,slline_buy,tpline_sell,slline_sell;
static double  start_trailing_price;
static int     status_BEP;
static double  price_BEP;
static int     status_trailing;
bool mabuy;
bool masel;  
bool buy1;
bool sell1;    
bool CloseAllPair;
double targetmoney;

string name_tpbuy         = "TP BUY";
string name_slbuy         = "SL BUY";
string name_tp_sell       = "TP SELL";
string name_sl_sell       = "SL SELL";
string name_BEP           = "BEP";
string name_buy           = "BUY";
string name_sell          = "SELL";
string name_closeall      = "CLOSE ALL";
datetime      StartTime;
color linetpbuy = clrNONE;
color linetpsel = clrNONE;
bool isTime;
bool isTime1;
int            lastordertype; 

int OnInit()
{
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
{  
   del_button();
   DelObject();
   Comment("");
	return;
}

void OnTick()
{
      // код доступен только после оплаты
   }

void SetupTrade()
{
   double MA1_  = iMA(Symbol(),Period(),Period_MA_1_,Shift_MA_1_,Mode_MA_1_,Price_MA_1_,1);

         if(UseMA){
         mabuy   = MA1_<Close[1];
         masel   = MA1_>Close[1];}
         else 
         if(!UseMA){mabuy = true;masel = true;}

         buy1   = mabuy && TradeBuy;
         sell1  = masel && TradeSell;     

   if(Volume[0]<10 && TotalOrder()==0)
   {  

      if(buy1)  
      {
         Order_1(OP_BUY,CommentTrade);

         status_BEP = 0;
         price_BEP = 0;
         status_trailing = 0;
         start_trailing_price = 0;
      }   
      else
      if(sell1) 
      {
         Order_1(OP_SELL,CommentTrade);

         status_BEP = 0;
         price_BEP = 0;
         status_trailing = 0;
         start_trailing_price = 0;
      }
   }
}

bool IsOrder(string comment)
{
   bool isOrder = true;

   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
   {
      if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
      {  
         if(StringFind(OrderComment(),comment) != -1) isOrder = false;

         if(OrderType() == OP_BUY)
         {
            if(OrderStopLoss() > OrderOpenPrice()) isOrder = false;
         }

         if(OrderType() == OP_SELL)
         {
            if(OrderStopLoss() < OrderOpenPrice() && OrderStopLoss() > 0) isOrder = false;
         }
      }
   }

   return(isOrder);
}

double TotalPips()
{
   double totalPip = 0, pip = 0;
   string date     = TimeToString(TimeCurrent(),TIME_DATE);

   for(int i = OrdersHistoryTotal()-1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
         {
            if(StringFind(TimeToString(OrderCloseTime(),TIME_DATE),date) != -1)
            {
               if(OrderType() == OP_BUY)
               {
                  pip = (OrderClosePrice()-OrderOpenPrice())/POINT;
                  totalPip += pip;
               }

               if(OrderType() == OP_SELL)
               {
                  pip = (OrderOpenPrice()-OrderClosePrice())/POINT;
                  totalPip += pip;
               }
            }
         }
      }
   }

   return(totalPip);
}

int TotalOrder(int ordertype = -1)
{
   int Order = 0;

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
         {
            if(ordertype == -1) 
               Order++;
            else if(ordertype == OrderType()) 
               Order++;
         }
      }
   }

   return(Order);
}

double SetupLot(int orderType)
{
   double lot    = 0, firstLot = 0,
          MinLot = MarketInfo(Symbol(),MODE_MINLOT),
          MaxLot = MarketInfo(Symbol(),MODE_MAXLOT), 
          lotStep  = MarketInfo(Symbol(),MODE_LOTSTEP); 
   int    lotDigit = 1; if(lotStep == 0.01) lotDigit = 2; if(lotStep == 0.001) lotDigit = 3;        

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
         {
            lot = MathMax(lot,OrderLots());
         }
      }
   }

   lot = Lots;

   if(MinLot == 0.01)
      firstLot = NormalizeDouble(firstLot,2);  
   else
      firstLot = NormalizeDouble(firstLot,1);

   if(lot == 0)
   {
         lot = Lots;
   } 

   if(lot < MinLot) lot = MinLot;
   if(lot > MaxLot) lot = MaxLot;   

   return(lot);
}

double AskPrice(string symbol = "")
{
   if(symbol == "") symbol = Symbol();
   return(MarketInfo(symbol,MODE_ASK));
}

double BidPrice(string symbol = "")
{
   if(symbol == "") symbol = Symbol();
   return(MarketInfo(symbol,MODE_BID));
}

int StopLevel(string symbol = "")
{
   if(symbol == "") symbol = Symbol();
   return((int)MarketInfo(symbol,MODE_STOPLEVEL));
}

string OrderCmd(int ordertype)
{
   string label;

   switch(ordertype)
   {
      case 0: label = "Buy";        break;
      case 1: label = "Sell";       break;
      case 2: label = "Buy Limit";  break;
      case 3: label = "Sell Limit"; break;
      case 4: label = "Buy Stop";   break;
      case 5: label = "Sell Stop";  break;
   }

   return(label);
}

double SetupLot_1()
{
   double lot    = 0, firstLot = 0,
          MinLot = MarketInfo(Symbol(),MODE_MINLOT),
          MaxLot = MarketInfo(Symbol(),MODE_MAXLOT); 

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            lot = MathMax(lot,OrderLots());
         }
      }
   }

   lot = Lots;

   if(MinLot == 0.01)
      firstLot = NormalizeDouble(firstLot,2);  
   else
      firstLot = NormalizeDouble(firstLot,1);

   if(lot == 0)
   {
         lot = Lots;
   }     
   if(lot < MinLot) lot = MinLot;
   if(lot > MaxLot) lot = MaxLot;   

   if(MinLot == 0.01)
      lot = NormalizeDouble(lot,2);  
   else
      lot = NormalizeDouble(lot,1);

   return(lot);
}

int Order_1(int ordertype, string comment)
{
   int             ticket;
   double          lot         = SetupLot_1(),buytp,selltp, sl = 0, tp = 0;

   if(ordertype == OP_BUY)  
   {
      price = AskPrice(); 
      if(StopLoss > 0)   sl = 0;
      selltp = NormalizeDouble(price+(TakeProfit*POINT),DIGIT);
      if(!HiddenTP && TakeProfit > 0){ tp = NormalizeDouble(price+(TakeProfit*POINT),DIGIT);CreateLine("TP_Buy",tp,linetpbuy);}   
      if(HiddenTP && TakeProfit > 0){tp =0;CreateLine("TP_Buy",selltp,clrRed);}
   }

   if(ordertype == OP_SELL) 
   {
      price = BidPrice(); 
      if(StopLoss > 0)   sl = 0;
      buytp = NormalizeDouble(price-(TakeProfit*POINT),DIGIT);
      if(!HiddenTP && TakeProfit > 0) {tp = NormalizeDouble(price-(TakeProfit*POINT),DIGIT); CreateLine("TP_Sell",tp,linetpsel);   } 
      if(HiddenTP && TakeProfit > 0){tp =0;CreateLine("TP_Sell",buytp,clrRed);}
   }

   ticket = OrderSend(Symbol(),ordertype,lot,price,SlipPage,sl,tp,comment,MagicNumber,0);
   if(ticket == -1) ShowError("Order " + OrderCmd(ordertype));

   return(ticket);
}

int Order(int ordertype, string comment, double uselot = 0)
{
   int             ticket;
   double          lot         = uselot,buytp,selltp, sl = 0, tp = 0;

   if(ordertype == OP_BUY)  
   {
      price = AskPrice(); 
      if(StopLoss > 0)   sl = 0;
      buytp = NormalizeDouble(price+(TakeProfit*POINT),DIGIT);
      if(!HiddenTP && TakeProfit > 0){ tp = NormalizeDouble(price+(TakeProfit*POINT),DIGIT);   CreateLine("TP_Buy",tp,linetpbuy);  }
      if(HiddenTP && TakeProfit > 0){ tp = 0;   CreateLine("TP_Buy",buytp,clrRed);  } 
   }

   if(ordertype == OP_SELL) 
   {
      price = BidPrice(); 
      if(StopLoss > 0)   sl = 0;
      selltp = NormalizeDouble(price-(TakeProfit*POINT),DIGIT);
      if(!HiddenTP && TakeProfit > 0) {tp = NormalizeDouble(price-(TakeProfit*POINT),DIGIT);  CreateLine("TP_Sell",tp,linetpsel); }
      if(HiddenTP && TakeProfit > 0) {tp = 0;  CreateLine("TP_Sell",selltp,clrRed); }    
   }

   ticket = OrderSend(Symbol(),ordertype,lot,price,SlipPage,sl,tp,comment,MagicNumber,0);
   if(ticket == -1) ShowError("Order " + OrderCmd(ordertype));

   return(ticket);
}

int OrderPO(int ordertype, string comment, double price_, double lots)
{
   int             ticket;
   double          sl = 0, tp = 0;

   ticket = OrderSend(Symbol(),ordertype,lots,price_,SlipPage,sl,tp,comment,MagicNumber,0);
   if(ticket == -1) ShowError("Order " + OrderCmd(ordertype));

   return(ticket);
}

int TotalOrderNoMagic(int ordertype=-1)
  {
   int Order=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,0)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(ordertype==-1)
         Order++;
      if(ordertype==OrderType())
         Order++;
     }

   return(Order);
  }
void TargetProfit()
{  
   double profit = 0;
   if(TotalOrder() > 0)
   {
      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
				   profit = profit+(OrderProfit()+OrderSwap()+OrderCommission());
            }
         }
      }

      if(TotalOrder() > 0)targetmoney = TpMoney;

      if(TpMoney > 0)
      {
         if(profit >= TpMoney)  CloseAllPair = true;
         {
          if(CloseAllPair) 
            {         
            while(TotalOrder() > 0)
            {
               CloseOrder();
            }
            Print("Close by TP Money");
            }
         }
      }    
   }
   if(TotalOrder() == 0) 
   {
      CloseAllPair = false;

   }   
}

void TargetLoss()
{  
   double loss = 0;
   if(TotalOrder() > 0)
   {
      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
				   loss = loss+(OrderProfit()+OrderSwap()+OrderCommission());
            }
         }
      }

      if(TotalOrder() > 0)targetmoney = -SL_Money;

      if(TpMoney > 0)
      {
         if(loss < -targetmoney)  CloseAllPair = true;
         {
          if(CloseAllPair) 
            {         
            while(TotalOrder() > 0)
            {
               CloseOrder();
            }
            Print("Close by SL Money");
            }
         }
      }    
   }
   if(TotalOrder() == 0) 
   {
      CloseAllPair = false;

   }   
}

void CloseOrder(int ordertype = -1)
{   
   for(int i = OrdersTotal()-1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
         {
            if(ordertype == -1)
            {
               if(OrderType() == OP_BUY) 
               {     
                  if(!OrderClose(OrderTicket(),OrderLots(),BidPrice(OrderSymbol()),SlipPage,Blue)) ShowError("Close " + OrderCmd(OrderType())); 
               }
               else if(OrderType() == OP_SELL)
               {      
                  if(!OrderClose(OrderTicket(),OrderLots(),AskPrice(OrderSymbol()),SlipPage,Red)) ShowError("Close " + OrderCmd(OrderType()));
               } 
               else
               {
                  if(!OrderDelete(OrderTicket())) ShowError("Delete Pending Order " + OrderCmd(OrderType()));
               }
            }
            else
            {
               if(OrderType() == ordertype)
               {
                  if(ordertype == OP_BUY)
                  {   
                     if(!OrderClose(OrderTicket(),OrderLots(),BidPrice(OrderSymbol()),SlipPage,Blue)) ShowError("Close " + OrderCmd(OrderType()));
                  } 
                  else if(ordertype == OP_SELL)   
                  {
                     if(!OrderClose(OrderTicket(),OrderLots(),AskPrice(OrderSymbol()),SlipPage,Red)) ShowError("Close " + OrderCmd(OrderType()));
                  } 
                  else
                  {
                     if(!OrderDelete(OrderTicket())) ShowError("Delete Pending Order " + OrderCmd(OrderType()));
                  }
               }
            }
         }
      }
   }
}

void CloseOrderComment(int ordertype = -1, string comment = "")
{   
   for(int i = OrdersTotal()-1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderComment()==comment)
         {
            if(ordertype == -1)
            {
               if(OrderType() == OP_BUY) 
               {     
                  if(!OrderClose(OrderTicket(),OrderLots(),BidPrice(OrderSymbol()),SlipPage,Blue)) ShowError("Close " + OrderCmd(OrderType())); 
               }
               else if(OrderType() == OP_SELL)
               {      
                  if(!OrderClose(OrderTicket(),OrderLots(),AskPrice(OrderSymbol()),SlipPage,Red)) ShowError("Close " + OrderCmd(OrderType()));
               } 
               else
               {
                  if(!OrderDelete(OrderTicket())) ShowError("Delete Pending Order " + OrderCmd(OrderType()));
               }
            }
            else
            {
               if(OrderType() == ordertype)
               {
                  if(ordertype == OP_BUY)
                  {   
                     if(!OrderClose(OrderTicket(),OrderLots(),BidPrice(OrderSymbol()),SlipPage,Blue)) ShowError("Close " + OrderCmd(OrderType()));
                  } 
                  else if(ordertype == OP_SELL)   
                  {
                     if(!OrderClose(OrderTicket(),OrderLots(),AskPrice(OrderSymbol()),SlipPage,Red)) ShowError("Close " + OrderCmd(OrderType()));
                  } 
                  else
                  {
                     if(!OrderDelete(OrderTicket())) ShowError("Delete Pending Order " + OrderCmd(OrderType()));
                  }
               }
            }
         }
      }
   }
}

double TotalProfit()
{  
   double profit = 0;
   if(TotalOrder() > 0)
   {

      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual)) 
            {
               profit += OrderProfit()+OrderCommission()+OrderSwap();
            }
         }
      }
   }

   return(profit);
}

void ShowError(string label)
{
	string Error;
	int    error = GetLastError();

	Error        = StringConcatenate("Terminal: ",TerminalName(),"\n",
	                                  label," error ",error,"\n",
	                                  ErrorDescription(error));
	if(error > 2) 
	{
	  if(IsTesting())
	     Comment(Error);
	  else   
	     Alert(Error);
   }
}

void AutoDigit()
{
   POINT = MarketInfo(Symbol(),MODE_POINT);
   DIGIT = (int)MarketInfo(Symbol(),MODE_DIGITS);

   if (DIGIT == 3 || DIGIT == 5)
   {
      PT              = 10;
      SlipPage       *= 10;
      TakeProfit     *= 10;
      StopLoss       *= 10;
      TrailingStop   *= 10;
      TrailingStep   *= 10;      
      PipRange       *= 10;         

   }
}

bool IsTrade()
{
   bool trade = true;

   if(!IsTesting())
   {
      if(!IsTradeAllowed()) 
      {
         Alert("Allow live trading is disable, press F7, \nselect Common tab, check Allow live trading");
         trade = false;
      }

      if(!IsExpertEnabled()) 
      {
         Alert("Expert Advisor is disable, click AutoTrading button to activate it ");
         trade = false;
      }   
   }

   return(trade);
}

void DelObject(string objectName = "")
{
   for(int i = ObjectsTotal()-1; i >= 0; i--)
	{
	   if(StringFind(ObjectName(i),WindowExpertName()) != -1)
	   {
	   	if(objectName == "")
	  			ObjectDelete(ObjectName(i));
	   	else
	   		if(StringFind(ObjectName(i),objectName) != -1) ObjectDelete(ObjectName(i));
		}
	}
}

void expired_po()
{
   int i;

   double upper = NormalizeDouble(AskPrice()+(PipRange*POINT),DIGIT);
   double lower = NormalizeDouble(BidPrice()-(PipRange*POINT),DIGIT); 

   for(i=0; i<OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS)) 
      if ((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
      {
         if((OrderType()==OP_BUYSTOP && upper < OrderOpenPrice()) || (OrderType()==OP_SELLSTOP && lower > OrderOpenPrice()))
         {
            if(TimeCurrent() >= OrderOpenTime()+POModifyMinute*60)
            {
               if(!OrderDelete(OrderTicket())) ShowError("Delete Pending Order " + OrderCmd(OrderType()));
            }
         }
      }
   }
}  

void FirstOrderType()
{
   datetime EarliestOrder = D'2099/12/31';

   for (int i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) {
         if ((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual)) {
            if (EarliestOrder > OrderOpenTime()) {
                EarliestOrder = OrderOpenTime();
                fot = OrderType();
            }
         }  
      }
   }      
}

double last_price(int ordertype = -1)
{
   int i;
   for(i=0; i<OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS)) 
      if ((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
      {
         if(OrderType()==ordertype)
         {
            price = NormalizeDouble(OrderOpenPrice(),DIGIT);
         }
      }
   }
   return(price);
}

void last_lot()
{
   int i;
   for(i=0; i<OrdersTotal(); i++)
   {
    if(OrderSelect(i,SELECT_BY_POS)) 
     if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
      {
       ll = OrderLots();
      }
   }
}

void last_comment()
{
   int i;
   for(i=0; i<OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS)) 
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
      {
         lc = OrderComment();
      }
   }
}

void LotsTotal()
{
   int r;
   if(OrdersTotal()>0)
   {
      openbuylots = 0; openselllots = 0;    //  set the variables to zero
      for(int i=0;i<OrdersTotal();i++)
      {
         r = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if((OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) || (OrderSymbol() == Symbol() && ModeOrder == Manual))
         {  
            if(OrderCloseTime()==0)
            {
               if(OrderType()==OP_BUY) openbuylots += OrderLots();          
               if(OrderType()==OP_SELL) openselllots += OrderLots();
            }
         }
      }
   }
}

void hedging()
{
   int ticket;

   FirstOrderType(); LotsTotal();

   double nextbuy, nextsell; last_comment();

   int totalopen = TotalOrder(OP_BUY)+TotalOrder(OP_SELL);

   if(totalopen >= 1)range = PipRange;

   if(TotalOrder(OP_SELLSTOP)>0 && lc != EA_Name && TotalOrder(OP_BUY)>0)
   {
      CloseOrder(OP_SELLSTOP);
   }

   if(TotalOrder(OP_BUYSTOP)>0 && lc != EA_Name && TotalOrder(OP_SELL)>0)
   {
      CloseOrder(OP_BUYSTOP);
   }

   double price_buystop  = NormalizeDouble(BidPrice()+(PipRange*POINT),DIGIT);
   double price_sellstop = NormalizeDouble(BidPrice()-(PipRange*POINT),DIGIT);

   double tp_buystop = 0,linetp_buystop = 0, sl_buystop = 0, linesl_buystop = 0;
   double tp_sellstop = 0, linetp_sellstop = 0, sl_sellstop = 0, linesl_sellstop = 0;

   if(fot == 0)//OP_BUY
   {
      if(TotalOrder(OP_BUY)>TotalOrder(OP_SELL) && TotalOrder(OP_BUY) > 0)
      {
         last_price_buy(); last_comment(); last_lot();
         nextsell = NormalizeDouble(lpb-(range*POINT),DIGIT);
         if(TakeProfit > 0)
         {
         if(!HiddenTP){
         tp_sellstop = NormalizeDouble(nextsell-(TakeProfit*POINT),DIGIT); 
         CreateLine("TP_Sell",tp_sellstop,linetpsel);  }
         if(HiddenTP){
         tp_sellstop = 0; 
         linetp_sellstop = NormalizeDouble(nextsell-(TakeProfit*POINT),DIGIT);  
         CreateLine("TP_Sell",linetp_sellstop,clrRed);  }         
         }

         if

Показано первые 50% кода (символов: 34677)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
3 467,70₽ ≈ $42.38