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

NewsTrader_v5

newstrader_v5.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 общих тегов
Вы автор или правообладатель?

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

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

О программе

NewsTrader_v5 — это торговый советник для MetaTrader 4, предназначенный для торговли на основе событий экономического календаря. Программа считывает данные о новостях из CSV-файла, фильтрует их по валютным парам и рейтингам, а затем открывает отложенные ордера (BUYSTOP/SELLSTOP) на заданном расстоянии от текущей цены в момент наступления новостного события.

Советник поддерживает множество параметров управления позициями: фиксированный и стоп-лосс, тейк-профит, трейлинг-стоп и безубыточность. Доступна функция удаления противоположных отложенных ордеров, а также визуализация новостных событий на графике в виде линий и текстовых меток.

Встроенная система управления рисками позволяет задать коэффициент риска и максимальный убыток на лот, а также настраивать объём позиции через параметры управления капиталом. Советник работает с несколькими валютными парами и позволяет ограничивать торговлю по времени сессии.

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

НастройкаОписание
ExpertName Имя экспертного советника, используемое в комментариях ордеров.
Magic Магический номер для идентификации ордеров советника.
Slippage Допустимое проскальзывание в пунктах.
Main_Parameters Описание основных параметров торговли.
CalendarName Имя CSV-файла с данными экономического календаря.
Lot size (Lots) Размер лота для торговых операций.
Difference between server time and local time (TimeZone) Разница между серверным временем и локальным временем (в часах).
Time Gap between News Time and Order Open Time in min (TimeGap) Разница в минутах между временем новостного события и временем открытия ордера.
Order Duratiton Time in min (OrderDuration) Время жизни отложенных ордеров в минутах.
Order processing Time in min (ProcessTime) Время обработки ордера в минутах (окно открытия).
Session End Time (SessionEnd) Время окончания торговой сессии (часы).
Session End Time in Friday (FridayEnd) Время окончания торговой сессии в пятницу (часы).
Number of pending orders from one side (OrdersNum) Количество отложенных ордеров с одной стороны.
Gap for Pending Orders from current price in pips (PendOrdGap) Отступ от текущей цены для размещения отложенных ордеров в пунктах.
Step between orders in pips (OrdersStep) Шаг между отложенными ордерами в пунктах.
Switch of orders deleting: 0-off,1-on (DelOpposite) Переключатель удаления противоположных отложенных ордеров: 0 — выключено, 1 — включено.
Trailing of Opposite Orders: 0-off,1-on (TrailOpposite) Переключатель трейлинг-стопа для противоположных ордеров: 0 — выключено, 1 — включено.
Take Profit in pips (TakeProfit) Тейк-профит в пунктах для отложенных ордеров.
Trailing Stop in pips (TrailingStop) Трейлинг-стоп в пунктах.
Initial Stop in pips (InitialStop) Начальный стоп-лосс в пунктах для вновь открытых отложенных ордеров.
Breakeven in pips (BreakEven) Уровень безубыточности в пунктах. При достижении указанной прибыли стоп-лосс переносится в безубыточную зону.
Display Line Option (Visualization mode) (DisplayLine) Отображение вертикальных линий новостных событий на графике (режим визуализации).
Display Text Option (Visualization mode) (DisplayText) Отображение текстовых меток новостных событий на графике (режим визуализации).
cFilter Описание фильтра валютных пар.
USD Включение/отключение торговых операций для валютной пары USD.
EUR Включение/отключение торговых операций для валютной пары EUR.
GBP Включение/отключение торговых операций для валютной пары GBP.
JPY Включение/отключение торговых операций для валютной пары JPY.
AUD Включение/отключение торговых операций для валютной пары AUD.
CAD Включение/отключение торговых операций для валютной пары CAD.
CHF Включение/отключение торговых операций для валютной пары CHF.
NZD Включение/отключение торговых операций для валютной пары NZD.
rFilter Описание фильтра рейтингов новостей.
MaxRating Максимальный рейтинг новостных событий для фильтрации.
MinRating Минимальный рейтинг новостных событий для фильтрации.
MM_Parameters Описание параметров управления капиталом.
?? Switch (MM) Переключатель системы управления капиталом: 0 — выключено, 1 — включено.
Risk Factor (MaxRisk) Коэффициент риска для расчёта объёма позиции при включённом управлении капиталом.
Maximum Loss by 1 Lot (LossMax) Максимальный убыток на 1 лот.
Получить полный код

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

#include <stdlib.mqh>

extern string     ExpertName       = "NewsTrader_v5";

extern int        Magic            =   55555;
extern int        Slippage         =       6;

extern string     Main_Parameters  = " Trade Volume & Trade Method";
extern string     CalendarName     = "Calendar0207.txt";
extern double     Lots             =     0.1; // Lot size
extern int        TimeZone         =       0; // Difference between server time and local time   
extern int        TimeGap          =       5; // Time Gap between News Time and Order Open Time in min 
extern int        OrderDuration    =      15; // Order Duratiton Time in min
extern int        ProcessTime      =       2; // Order processing Time in min
extern int        SessionEnd       =      24; // Session End Time
extern int        FridayEnd        =      23; // Session End Time in Friday
extern int        OrdersNum        =       1; // Number of pending orders from one side
extern double     PendOrdGap       =      20; // Gap for Pending Orders from current price in pips
extern double     OrdersStep       =      10; // Step between orders in pips
extern int        DelOpposite      =       0; // Switch of orders deleting: 0-off,1-on
extern int        TrailOpposite    =       0; // Trailing of Opposite Orders: 0-off,1-on
extern double     TakeProfit       =     100; // Take Profit in pips       	
extern double     TrailingStop     =       0; // Trailing Stop in pips      
extern double     InitialStop      =      50; // Initial Stop in pips 
extern double     BreakEven        =       0; // Breakeven in pips  
extern bool       DisplayLine      =   false; // Display Line Option (Visualization mode) 
extern bool       DisplayText      =   false; // Display Text Option (Visualization mode)

extern string     cFilter          = " Currency Filter ";
extern bool       USD              =    true;
extern bool       EUR              =    true;
extern bool       GBP              =    true;
extern bool       JPY              =    true;
extern bool       AUD              =    true;
extern bool       CAD              =    true;
extern bool       CHF              =    true;
extern bool       NZD              =    true;

extern string     rFilter          = " Rating Filter ";
extern int        MaxRating        =       3;
extern int        MinRating        =       1;  

extern string     MM_Parameters    = " MoneyManagement by L.Williams ";
extern bool       MM               =   false; // ?? Switch
extern double     MaxRisk          =    0.05; // Risk Factor
extern double     LossMax          =       0; // Maximum Loss by 1 Lot

datetime FinTime=0;
string   sDate[1000];          // Date
string   sTime[1000];          // Time
string   sCurrency[1000];      // Currency
string   sDescription[1000];   // Description
string   sRating[1000];        // Rating
datetime dt[1000];
int      BEvent=0, NewsNum, TriesNum=5;

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

double MoneyManagement()
{
   double lot_min =MarketInfo(Symbol(),MODE_MINLOT);
   double lot_max =MarketInfo(Symbol(),MODE_MAXLOT);
   double lot_step=MarketInfo(Symbol(),MODE_LOTSTEP);
   double contract=MarketInfo(Symbol(),MODE_LOTSIZE);
   double vol;

   if(lot_min<0 || lot_max<=0.0 || lot_step<=0.0) 
   {
   Print("CalculateVolume: invalid MarketInfo() results [",lot_min,",",lot_max,",",lot_step,"]");
   return(0);
   }
   if(AccountLeverage()<=0)
   {
   Print("CalculateVolume: invalid AccountLeverage() [",AccountLeverage(),"]");
   return(0);
   }

   if ( MM )
   vol=NormalizeDouble(AccountFreeMargin()*MaxRisk*AccountLeverage()/contract,2);
   else
   vol=Lots;

   vol=NormalizeDouble(vol/lot_step,0)*lot_step;
   if(vol<lot_min) vol=lot_min;
   if(vol>lot_max) vol=lot_max;

   return(vol);
}   

void TrailStop()
{
   int    error;  
   bool   result=false;
   double Gain = 0;

   for (int cnt=0;cnt<OrdersTotal();cnt++)
   { 
   OrderSelect(cnt, SELECT_BY_POS);   
   int mode=OrderType();    
      if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) 
      {
         if (mode==OP_BUY) 
         {
			   if ( BreakEven > TrailingStop && BEvent==0 )
			   {
			   Gain = (MarketInfo(Symbol(),MODE_BID) - OrderOpenPrice())/Point;
			      if( Gain >= BreakEven && OrderStopLoss()<=OrderOpenPrice()+1*Point) 
			      {
			      double BuyStop = NormalizeDouble(OrderOpenPrice()+1*Point,Digits);
			      BEvent=1;
			      }
			   }
			   else 			   
			   if( TrailingStop > 0) BuyStop = NormalizeDouble(Bid - TrailingStop*Point,Digits);

			   if( NormalizeDouble(OrderOpenPrice(),Digits)<= BuyStop || OrderStopLoss() == 0) 
            {   
			      if ( BuyStop > NormalizeDouble(OrderStopLoss(),Digits)) 
			      {
			         for(int k = 0 ; k < TriesNum; k++)
                  {
                  result = OrderModify(OrderTicket(),OrderOpenPrice(),
			                              BuyStop,
			                              OrderTakeProfit(),0,Lime);
                  error=GetLastError();
                     if(error==0) break;
                     else {Sleep(5000); RefreshRates(); continue;}
                  }   		 
               }            
            }
         }   

         if (mode==OP_SELL)
         {
            if ( BreakEven > TrailingStop && BEvent==0)
			   {
			   Gain = (OrderOpenPrice()-MarketInfo(Symbol(),MODE_ASK))/Point;
			      if( Gain >= BreakEven && OrderStopLoss()>=OrderOpenPrice()-1*Point) 
			      {
			      double SellStop = NormalizeDouble(OrderOpenPrice()-1*Point,Digits);
			      BEvent=-1;
			      }
			   }
			   else 
			   if( TrailingStop > 0) SellStop = NormalizeDouble(MarketInfo(Symbol(),MODE_ASK) + TrailingStop*Point,Digits);   

            if((NormalizeDouble(OrderOpenPrice(),Digits) >= SellStop && SellStop>0) || OrderStopLoss() == 0) 
            {
               if( SellStop < NormalizeDouble(OrderStopLoss(),Digits)) 
               {
                  for( k = 0 ; k < TriesNum; k++)
                  {
                  result = OrderModify(OrderTicket(),OrderOpenPrice(),
			                              SellStop,
			                              OrderTakeProfit(),0,Orange);
                  error=GetLastError();
                     if(error==0) break;
                     else {Sleep(5000); RefreshRates(); continue;}
                  }
               }   
   			}	    
         }
      }
   }     
}

int SellOrdOpen(double price,double sl,double tp,int num) 
{		     
   int ticket = 0;
   int tr = 1;

   while ( ticket <= 0 && tr <= TriesNum)
   {
   ticket = OrderSend( Symbol(),OP_SELLSTOP,MoneyManagement(),
	                    NormalizeDouble(price , Digits),
	                    Slippage,
	                    NormalizeDouble(sl, Digits),
	                    NormalizeDouble(tp, Digits),
	                    ExpertName+" SELL:"+num,Magic,0,Red);

      if(ticket > 0) 
      {
      BEvent=0;   
         if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
         Print("SELLSTOP order opened : ", OrderOpenPrice());
      }
	   else 	
      if(ticket < 0)
	   { 	
      Sleep(5000);
      RefreshRates();
      tr += 1;
      if(GetLastError()>0)
      Print("SELLSTOP: OrderSend failed with error #",ErrorDescription(GetLastError()));
      }
   }   
   return(ticket);
}

int BuyOrdOpen(double price,double sl,double tp,int num)
{		     
   int ticket = 0;
   int tr = 1;

   while ( ticket <= 0 && tr <= TriesNum)
   {
   ticket = OrderSend(Symbol(),OP_BUYSTOP,MoneyManagement(),
	                   NormalizeDouble(price , Digits),
	                   Slippage,
	                   NormalizeDouble(sl, Digits), 
	                   NormalizeDouble(tp, Digits),
	                   ExpertName+" BUY:"+num,Magic,0,Blue);

      if(ticket > 0) 
      {
      BEvent=0;
         if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
         Print("BUYSTOP order opened : ", OrderOpenPrice());

      }
      else 
	   if(ticket < 0)
	   { 	
      Sleep(5000);
      RefreshRates();
      tr += 1;
      if(GetLastError()>0)      
      Print("BUYSTOP : OrderSend failed with error #",ErrorDescription(GetLastError()));
      }
   }   
   return(ticket);
} 

int ScanTrades(int ord,int mode)
{   
   int total = OrdersTotal();
   int numords = 0;
   bool type = false; 
   int trd = 0;

   for(int cnt=0; cnt<total; cnt++) 
   {        
   OrderSelect(cnt, SELECT_BY_POS);            
   if ( ord != 0 )
   {
   if ( OrderType()==0 || OrderType()==2 || OrderType()==4 ) trd =  1;
   if ( OrderType()==1 || OrderType()==3 || OrderType()==5 ) trd =  2;      
   } else trd=0;

   if (mode == 0) type = OrderType()<=OP_SELLSTOP;
   if (mode == 1) type = OrderType()<=OP_SELL;   
   if (mode == 2) type = OrderType()>OP_SELL && OrderType()<=OP_SELLSTOP; 

   if(OrderSymbol() == Symbol() && type && trd==ord && OrderMagicNumber() == Magic)  
   numords++;
   }
   return(numords);
}  

datetime FinishTime(int Duration)
{   
   int total = OrdersTotal();
   datetime ftime=0;

   for(int i=0; i<total; i++) 
   {        
   OrderSelect(i, SELECT_BY_POS);            
   if(OrderSymbol() == Symbol() && OrderType()<=OP_SELLSTOP && OrderMagicNumber() == Magic) 
   ftime=OrderOpenTime()+ Duration*60;
   }
   return(ftime);
}

void PendOrdDel(int mode)
{
   bool result = false;

   for (int i=0; i<OrdersTotal(); i++)  
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ( Symbol()==OrderSymbol() && OrderMagicNumber()==Magic)     
      {
         if((mode==0 || mode==1) && OrderType()==OP_BUYSTOP)
         {     
         result = OrderDelete(OrderTicket());
         if(!result) Print("BUYSTOP: OrderDelete failed with error #",GetLastError());
         }
         else
         if((mode==0 || mode==2) && OrderType()==OP_SELLSTOP)
         {     
         result = OrderDelete( OrderTicket() );  
         if(!result) Print("SEL

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

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

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

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

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

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

Стоимость полного кода
1 310,40₽ ≈ $16.02