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

fedtm billioner.mq4

Вы автор или правообладатель?

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

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

О программе

Советник для платформы MetaTrader 4, работающий на нескольких таймфреймах одновременно. Анализирует восемь периодов (M1, M5, M15, M30, H1, H4, D1, W1) с использованием пользовательских индикаторов EMA, MFI и RSI. Открывает сделки в направлении совпадающего сигнала всех таймфреймов. Поддерживает обратное направление торговли, трейлинг-стоп, трейлинг-тейк-прибыль и функцию выхода в безубыток.

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

НастройкаОписание
REVERSE_TRADING Обратная торговля — Переключатель направления торговли: при включении советник открывает сделки в противоположном направлении по сравнению с сигналом индикаторов.
USE_TRAILING Использовать трейлинг-стоп — Включает или отключает автоматическое перемещение стоп-лосса в сторону прибыли по мере движения цены.
EA_COMMENT Комментарий советника — Текстовый комментарий, который присваивается каждой открываемой сделке для идентификации ордеров, размещённых данным советником.
Получить полный код

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

#property version   "1.0"
#property strict
#include  <stdlib.mqh>

bool        BackTestAllowed  = TRUE;                                 //IF TRUE BACKTEST ALLOWED AND IF FALSE BACKTEST NO ALLOWED
bool        UseAccountNumber = TRUE;
int         ValidAccountNumber = *******;                            // TYPE HERE THE VALID ACCOUNT NUMBER WHICH U WANT RUN THIS PROGRAMME(IT WILL RUN ONLY ON THAT ACCOUNT)               
int         ExpiryDate = D'25.07.2020 00:00';                         // GIVE HERE PROGRAMME EXPIRY DATE (FORMAT DD.MM.YYYY HH:MM)

extern bool    REVERSE_TRADING   = FALSE;
extern double  LOT_SIZE          = 0.1,
               TAKE_PROFIT       = 50,
               STOP_LOSS         = 50;

bool           USE_FIRSTORDER    = FALSE,
               CLOSE_ON_REVERS   = TRUE;

extern bool    USE_TRAILING      = TRUE;
extern int     TRAILING_PIPS     = 35,
               TRAILING_STEP     = 5,
               TP_TRAILING_PIPS  = 35;

extern string  EA_COMMENT        = "FEDTM Billioner";               

bool           TradeAllowed, TradeTime, FirstOrder, FirstEntry, SL_UPDATED,
               USE_M1=TRUE, USE_M5=TRUE, USE_M15=TRUE, USE_M30=TRUE, USE_H1=TRUE, USE_H4=TRUE, USE_D1=TRUE, USE_W1=TRUE;

double         Poin, DAILY_ACHIEVED_PROFIT, MyOrderProfit,
               BUY_PRICE, SEL_PRICE;

int            trade, ticket, MagicNumber = 123, OrderSlipage = 3, intResult, OrderBar,
               BUY_OPENS,SEL_OPENS, BUYSTOP_OPENS, SELSTOP_OPENS, PREV_PERIOD;               

string         strComment, strPrevOrder, ChartComment;               

string         LblName = "forex.eamster_", M1_Trend, M5_Trend, M15_Trend, M30_Trend, H1_Trend, H4_Trend, D1_Trend, W1_Trend;

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

void OnDeinit(const int reason)
  {

   EventKillTimer();
   ObjectDelete("forex.eamster_L_1");
   ObjectDelete("forex.eamster_L_2");
   ObjectDelete("forex.eamster_L_3");
   ObjectDelete("forex.eamster_L_4");
   ObjectDelete("forex.eamster_L_5");
   ObjectDelete("forex.eamster_L_6");         
  }

void PlaceBuy(double NewLot)
{
   int Tries=0;
   if(AccountFreeMargin()<=0)return;
   if(USE_FIRSTORDER) 
   {if(!FirstOrder){FirstOrder=True;strPrevOrder="BUY";}}

   for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
      intResult = OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderType() == OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber()== MagicNumber))return;    
   }   
   if(CLOSE_ON_REVERS)CloseAll(1, "ON REVERSE");
   double TP=0, SL=0;
   if (TAKE_PROFIT>0) TP = Ask + TAKE_PROFIT*Poin;
   if (STOP_LOSS  >0) SL = Bid - STOP_LOSS*Poin; 

   while(true)
     {
      RefreshRates();
      ticket = OrderSend(Symbol(),OP_BUY,NewLot,Ask,OrderSlipage,0,0,strComment, MagicNumber,0,Green);
      RefreshRates();      
      if (ticket > 0) //
      {
         Print("SL :", SL);
         intResult = OrderSelect(ticket,SELECT_BY_TICKET);         
         intResult = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,Green);
         OrderPrint();
         strPrevOrder = "BUY";
         OrderBar = Bars;
         FirstEntry=True;
         SL_UPDATED=False;
         break;         

      }
      else
      {
         Print("Order Modify Error(",GetLastError(),"): ",ErrorDescription(GetLastError()));
         int error = GetLastError();

         Print("Error(",error,"): ",ErrorDescription(error));
         if(error==134){break;}
         Tries++;
         if(Tries>=3)break;                  

         Sleep(1000);

         RefreshRates();
      } 
     }
}

void PlaceSell(double NewLot)
{
   int Tries=0;
   if(AccountFreeMargin()<=0)return;
   if(USE_FIRSTORDER) 
   {if(!FirstOrder){FirstOrder=True;strPrevOrder="SELL";}}

   for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
      intResult = OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderType() == OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber()== MagicNumber))return;    
   }
   if(CLOSE_ON_REVERS)CloseAll(0, "ON REVERSE");
   double TP=0, SL=0;
   if (TAKE_PROFIT>0) TP = Bid - TAKE_PROFIT*Poin; 
   if (STOP_LOSS  >0) SL = Ask + STOP_LOSS*Poin;   

   while(true)
     {
      RefreshRates();

      ticket = OrderSend(Symbol(),OP_SELL,NewLot,Bid,OrderSlipage,0,0,strComment, MagicNumber,0,Red);
      RefreshRates();
      if (ticket > 0) 
      {           
         intResult = OrderSelect(ticket,SELECT_BY_TICKET);
         intResult = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,Green);          
         OrderPrint();
         strPrevOrder = "SELL";
         OrderBar = Bars;
         FirstEntry=True;
         SL_UPDATED=False;
         break;         

      }
      else
      {
         Print("Order Modify Error(",GetLastError(),"): ",ErrorDescription(GetLastError()));

         int error=GetLastError();

         Print("Error(",error,"): ",ErrorDescription(error));
         if(error==134){break;}
         Tries++;
         if(Tries>=3)break;                  

         Sleep(1000);

         RefreshRates();         
      }                        
     }
}

void GetOpenOrders()
{
   BUY_OPENS=0;BUYSTOP_OPENS=0;SEL_OPENS=0;SELSTOP_OPENS=0;MyOrderProfit=0;
   BUY_PRICE=0; SEL_PRICE=0;
   for(trade=0;trade<OrdersTotal();trade++)             //SELECT FROM STARTS

   {
     if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
     {
	   if (OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
	   {					  	  

	  	  if (OrderType()==OP_BUY)       {BUY_OPENS++;BUY_PRICE +=OrderOpenPrice();}
	  	  if (OrderType()==OP_SELL)      {SEL_OPENS++;SEL_PRICE +=OrderOpenPrice();} 
	  	  if (OrderType()==OP_BUYSTOP)   BUYSTOP_OPENS++;
	  	  if (OrderType()==OP_SELLSTOP)  SELSTOP_OPENS++; 	  	  	  	  
	  	  MyOrderProfit += OrderProfit()+OrderCommission()+OrderSwap(); 
	   }
	  }
   } 
}

string GetLastOpenOrdType(int MyMagic)
{

   for(trade=OrdersTotal()-1;trade>=0;trade--)        //SELECTS FROM LASTS
   {
     if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
     {
	      if (OrderSymbol()==Symbol() && OrderMagicNumber() == MyMagic)
	      {
	         if(OrderType()==0){return("BUY");}
	         if(OrderType()==1){return("SELL");}	         
	      }	      
	  }
   }   
   return("-");
}     

void CloseAll(int OrdType, string CloseReason)
{
   bool Closed;

      for(trade=OrdersTotal()-1;trade>=0;trade--)
        {
         intResult = OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber) // && OrderType()==OrdType) 
           {               
               Closed=Close_Orders(OrdType);
               if(!Closed){Sleep(500); Closed=Close_Orders(OrdType);}
               if(!Closed){Sleep(500); Closed=Close_Orders(OrdType);}
               if(!Closed){Sleep(500); Closed=Close_Orders(OrdType);}
               if (Closed){Print("*****Closing Reason :", CloseReason);}               
           }        
        }//Profit_Pips = Profit_Pips + Prev_Pips;  
}           

bool Close_Orders(int OrdType)
{
   double Price=0;
   bool Closed=False;   
   RefreshRates();
   if(OrdType<2)
   {  
      if(OrderType()==OP_BUY)Price=Bid;
      if(OrderType()==OP_SELL)Price=Ask;
      Closed=OrderClose(OrderTicket(),OrderLots(),Price,3,Blue);
   }
   else if(OrdType>1)
   {
      Closed=OrderDelete(OrderTicket());
   }
   return(Closed);
}

void TrailingStopStep( int byPips, int byStep ){
   for (int i = 0; i < OrdersTotal(); i++) {
      intResult = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == MagicNumber))){
         if (OrderType() == OP_BUY){
            if (Bid - OrderOpenPrice() > byPips * Poin){
               if (OrderStopLoss() < Bid - (byPips+byStep) * Poin){
                  intResult = OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (byPips+byStep) * Poin, OrderTakeProfit(), Red);
               }
              }
             } 
            else if (OrderType() == OP_SELL){
               if (OrderOpenPrice() - Ask > (byPips) * Poin){
                  if ((OrderStopLoss() > Ask + (byPips+byStep) * Poin) || (OrderStopLoss() == 0)){
                     intResult = OrderModify(OrderTicket(), OrderOpenPrice(),Ask + (byPips+byStep) * Poin, OrderTakeProfit(), Red);
        }
       }
      }
     }
	 }
  }    

void TrailingTP( int byPips, int byStep ){
   for (int i = 0; i < OrdersTotal(); i++) {
      intResult = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == MagicNumber))){
         if (OrderType() == OP_BUY){
            if (OrderOpenPrice()-Ask > byPips * Poin){ //(Bid - OrderOpenPrice() > byPips * Poin){
               if (Ask < OrderTakeProfit() - (byPips+byStep) * Poin){
                  intResult = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Ask + (byPips) * Poin, Lime);
               }
              }
             } 
            else if (OrderType() == OP_SELL){
               if (Bid-OrderOpenPrice() > (byPips) * Poin){  //(OrderOpenPrice() - Ask > (byPips) * Poin){
                  if (Bid > OrderTakeProfit() + (byPips+byStep) * Poin){//if ((OrderStopLoss() > Ask + (byPips+byStep) * Poin) || (OrderStopLoss() == 0)){
                     intResult = OrderModify(OrderTicket(), OrderOpenPrice(),OrderStopLoss(), Ask - (byPips) * Poin, Red);
        }
       }
      }
     }
	 }
  }        

void TrailingStopStepNew(int byPips, int byStep)
{   
   double NewTrail;

   for (int i = 0; i < OrdersTotal(); i++) 
   {
      intResult = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == MagicNumber)))
      {
         if (OrderType() == OP_BUY)
         {

	         if(Ask>OrderOpenPrice()+byPips*Poin)
	         {
	            if(OrderStopLoss()<OrderOpenPrice())
	            {
	               NewTrail=OrderOpenPrice()+byStep*Poin;
	               intResult = OrderModify(OrderTicket(), OrderOpenPrice(), NewTrail, OrderTakeProfit(), Lime);
	            }

	            if(OrderStopLoss()>=OrderOpenPrice()&&Ask>OrderStopLoss()+byPips*Poin)
	            {
	               NewTrail=OrderStopLoss()+byStep*Poin;	            
	               intResult = OrderModify(OrderTicket(), OrderOpenPrice(), NewTrail, OrderTakeProfit(), Lime);
	            }
	         }
	      }

	      if (OrderType()==OP_SELL)
	      {
	         if(Bid<OrderOpenPrice()-byPips*Poin)
	         {

	               if(OrderStopLoss()>OrderOpenPrice()||OrderStopLoss()==0)
	               {

	                  NewTrail=OrderOpenPrice();
	                  intResult = OrderModify(OrderTicket(), OrderOpenPrice(), NewTrail, OrderTakeProfit(), Lime);	            
	               }

	               if(OrderStopLoss()<=OrderOpenPrice()&&Bid<OrderStopLoss()-byPips*Poin)
	               {

	                  NewTrail=OrderStopLoss()-byStep*Poin;
	                  intResult = OrderModify(OrderTicket(), OrderOpenPrice(), NewTrail, OrderTakeProfit(), Lime);	            
	               }
	         }	       
	      }	       	         
	  }
   }
}

void BreakEven(double byPips)
{
   for (int i = 0; i < OrdersTotal(); i++) {
      intResult = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if ( OrderSymbol()==Symbol() && (OrderMagicNumber() == MagicNumber) && (OrderStopLoss()!=OrderOpenPrice())){
         if (OrderType() == OP_BUY){
            if (Bid - OrderOpenPrice() > byPips * Poin){ //100-90=10
                  intResult = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), Lime);

              }
             } 
            else if (OrderType() == OP_SELL){
               if (OrderOpenPrice() - Ask > byPips * Poin){ //110-100=10
                     intResult = OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice(), OrderTakeProfit(), Red);

       }
      }
     }
	 }
}  

double LastClosed()
{
  int EXPONENT=2;double CummLoss=0, Required_Profit=0;
  if(EXPONENT<=0)return(LOT_SIZE);
  double LastOrdProfit=0;
  MyOrderProfit=0;CummLoss=0;
  double LastLot=LOT_SIZE;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--)
  {   
      intResult=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()==MagicNumber)) 
      {
           MyOrderProfit = OrderProfit()+OrderSwap()+OrderCommission();

           if(MyOrderProfit<Required_Profit)
           {   //LostOrders++; 
               if(MyOrderProfit>0)break;
               CummLoss += MyOrderProfit;
               if(LastOrdProfit==0)LastOrdProfit = MyOrderProfit;

               LastLot = MathMax(LastLot, OrderLots());
               Print("LastLot: ", LastLot, " OrderLots(): ", OrderLots(), " MyOrderProfit: ", MyOrderProfit, " LastOrdProfit: ", LastOrdProfit);

           }
           else if(MyOrderProfit>0)break;
      }            
  }  

  Print("*****MyOrderProfit*****: ", MyOrderProfit, " CummLoss: ", CummLoss, " LastLot: ", LastLot);    

  if(LastOrdProfit>0&&CummLoss<0)return(LastLot);

  if(MyOrderProfit!=0)
  {
      if(MyOrderProfit<Required_Profit){return(LastLot*EXPONENT);}
  } 

  if(CummLoss<0){return(LastLot*EXPONENT);}

  return(LOT_SIZE);

}  

string EQG_SIGNAL() 
{     
  string log_file_name = "EQG.txt";
  int    str_size;
  int handle = FileOpen(log_file_name, FILE_READ|FILE_WRITE|FILE_CSV);
  if (handle > 0) {
    str_size=FileReadInteger(handle,INT_VALUE);  
    string FileData = FileReadString(handle, str_size);
    FileClose(handle);    

    return(FileData);
  }
  return("NO SIGNAL");
} 

double DoubleOnLoss(int MyMagic)
{

  double MyOrdProfit=0;
  int LostOrders=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--)
  {   

      intResult=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()==MyMagic)) //||OrderMagicNumber()==Magic+1||OrderMagicNumber()==Magic+2))            
      {

           MyOrdProfit = OrderProfit()+OrderSwap()+OrderCommission();
           if(MyOrdProfit<=0)return(OrderLots()*2);
           else if(MyOrdProfit>0)break;
      }            
  }  

  return(LOT_SIZE);
} 

void SL_UPDATE()
{
   GetOpenOrders();   
   double MySL=0;
   if(BUY_OPENS>0)MySL=BUY_PRICE/BUY_OPENS;
   if(SEL_OPENS>0)MySL=SEL_PRICE/SEL_OPENS;

   for (int i = 0; i < OrdersTotal(); i++) 
   {
      intResult = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if ( OrderSymbol()==Symbol() && (OrderMagicNumber() == MagicNumber))
      { 
         if (OrderType() == OP_BUY){intResult = OrderModify(OrderTicket(), OrderOpenPrice(), MySL-STOP_LOSS*Poin, 0, Lime);}
         else if (OrderType() == OP_SELL){intResult = OrderModify(OrderTicket(), OrderOpenPrice(), MySL+STOP_LOSS*Poin, 0, Red);}
      }
      SL_UPDATED=TRUE;
   }

   return;
}

void MyLabel() {
   int Lbl_FontSize=15;
   if(USE_M1)
   {
      string name_0 = LblName + "L_1";
      if (ObjectFind(name_0) == -1) {
         ObjectCreate(name_0, OBJ_LABEL, 0, 0, 0);
         ObjectSet(name_0, OBJPROP_CORNER, 2);
         ObjectSet(name_0, OBJPROP_XDISTANCE, 50);   //390);
         ObjectSet(name_0, OBJPROP_YDISTANCE, 50);
      }
      int M1_LblColour = DarkGray;

      if(M1_Trend=="BUY")M1_LblColour=Lime;

      if(M1_Trend=="SELL")M1_LblColour=Red;

      ObjectSetText(name_0, " M1 ", Lbl_FontSize, "Arial Black", M1_LblColour);   
   }   

   if(USE_M5)
   {
      string name_0 = LblName + "L_2";
      if (ObjectFind(name_0) == -1) {
         ObjectCreate(name_0, OBJ_LABEL, 0, 0, 0);
         ObjectSet(name_0, OBJPROP_CORNER, 2);
         ObjectSet(name_0, OBJPROP_XDISTANCE, 100);   //390);
         ObjectSet(name_0, OBJPROP_YDISTANCE, 50);
      }
      int M5_LblColour = DarkGray;

      if(M5_Trend=="BUY")M5_LblColour=Lime;

      if(M5_Trend=="SELL")M5_LblColour=Red;

      ObjectSetText(name_0, " M5 ", Lbl_FontSize, "Arial Black", M5_LblColour);   
   }      

   if(USE_M15)
   {
      string name_0 = LblName + "L_3";
      if (ObjectFind(name_0) == -1) {
         ObjectCreate(name_0, OBJ_LABEL, 0, 0, 0);
         ObjectSet(name_0, OBJPROP_CORNER, 2);
         ObjectSet(name_0, OBJPROP_XDISTANCE, 150);   //390);
         ObjectSet(name_0, OBJPROP_YDISTANCE, 50);
      }
      int M15_LblColour = DarkGray;

      if(M15_Trend=="BUY")M15_LblColour=Lime;

      if(M15_Trend=="SELL")M15_LblColour=Red;

      ObjectSetText(name_0, " M15 ", Lbl_FontSize, "Arial Black", M15_LblColour);   
   }      

   if(USE_M30)
   {
      string name_0 = 

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

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

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

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

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

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

Стоимость полного кода
2 584,80₽ ≈ $31.59