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

monpips_update.mq4

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

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

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

О программе

monpips_update.mq4 — торговый советник для MetaTrader 4, реализующий автоматическое управление ордерами и позициями с множеством параметров риск-контроля. Советник работает в двух режимах управления торговлей (Primary и Secondary), размещает отложенные ордера BUYSTOP и SELLSTOP, а также обрабатывает открытые позиции OP_BUY и OP_SELL.

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

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

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

НастройкаОписание
TradeManager Менеджер торговли — Режим управления торговлей: Primary — основной режим, Secondary — дополнительный режим обработки ордеров.
TradeComment Комментарий к ордерам — Текстовый комментарий, присваиваемый ордерам для идентификации в истории торгов.
MagicNumber Магическое число — Уникальный идентификатор магического числа, присваиваемый ордерам для их идентификации и управления.
Max obchodu (MaxTrades) Максимальное количество ордеров — Максимальное количество одновременно открытых ордеров и позиций, управляемых советником.
Slippage Проскальзывание — Допустимое проскальзывание цены в пунктах при исполнении ордеров.
MaxSpread Максимальный спред — Максимально допустимый уровень спреда в пунктах. При превышении этого значения размещение ордеров блокируется.
FixedLot Фиксированный лот — Фиксированный размер лота для торговли. Если значение равно 0, лот рассчитывается автоматически на основе процента риска.
RiskPercent Процент риска — Процент риска от баланса счёта, используемый для автоматического расчёта размера лота при нулевом фиксированном лоте.
MaxDrawdown Максимальная просадка — Максимальный допустимый процент просадки от баланса счёта, при превышении которого активируются защитные меры.
Max ztrata za den (MaxLoss) Максимальный убыток за день — Максимальный допустимый дневной убыток в денежном выражении. При его достижении все открытые позиции закрываются.
SL Стоп-лосс — Стоп-лосс в пунктах, устанавливаемый при размещении отложенных ордеров. Если равен 0, стоп-лосс не задаётся.
StartHour Начальный час — Начальный час торгового окна (с учётом смещения GMT), в пределах которого допускается размещение ордеров.
EndHour Конечный час — Конечный час торгового окна (с учётом смещения GMT), в пределах которого допускается размещение ордеров.
GMTOffset Смещение GMT — Смещение часового пояса относительно серверного времени брокера для корректного определения торговых часов.
TradeDeviation Допустимое отклонение — Максимальное количество незащищённых позиций и отложенных ордеров, при превышении которого блокируется открытие новых.
TradeDelta Шаг между ордерами — Шаг в пунктах между последовательными отложенными ордерами при размещении нескольких позиций.
Trailing Расстояние трейлинга — Расстояние трейлинг-стопа в пунктах, на которое перемещается стоп-лосс вслед за ценой.
StartTrailing Начало трейлинга — Минимальное движение цены в пунктах от открытой позиции, после которого активируется трейлинг-стоп.
VelocityTrigger Порог скорости — Пороговое значение изменения цены в пунктах, при котором срабатывает сигнал для размещения ордеров или удаления отложенных позиций.
VelocityTime Время измерения скорости — Временной интервал в секундах для измерения скорости изменения цены и определения момента удаления отложенных ордеров.
TickSample Размер выборки тиков — Количество тиков, используемых для расчёта средней скорости изменения цены и усреднённого спреда.
Получить полный код

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

int ActNumber=0;
datetime ExpDate=D'23.12.2025';

#property strict
#property version "3.05"

enum manager {
   P=0, // Primary
   B=1, // Secondary
}; 

extern manager TradeManager = 0;
extern string TradeComment = "iFX NET"; 
extern int MagicNumber = 33431; 
extern int MaxTrades=1;//Max obchodu
extern int Slippage = 3;
extern int MaxSpread = 110;
extern double FixedLot = 0;
extern int RiskPercent = 2; 
extern int MaxDrawdown = 90;
extern double MaxLoss=500;//Max ztrata za den
extern int SL=0;
extern int StartHour = 2; 
extern int EndHour = 22;
extern int GMTOffset = 0;
extern int TradeDeviation = 2;  
extern int TradeDelta = 12;
extern int Trailing = 3;  
extern int StartTrailing = 4;  
extern int VelocityTrigger = 70; 
extern int VelocityTime = 7;  
 int DeleteRatio = 0;  

int OrderExpiry = 0; 
extern int TickSample = 100;  

int r, gmt, brokerOffset, size, digits, stoplevel;

double marginRequirement, maxLot, minLot, lotSize, points, currentSpread, avgSpread, maxSpread, initialBalance, rateChange, rateTrigger, deleteRatio, commissionPoints;

double spreadSize[]; 
double tick[];
double avgtick[];
int tickTime[];   

string testerStartDate, testerEndDate; 

int lastBuyOrder, lastSellOrder;

bool calculateCommission = true;
bool closing;
double max = 0;

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

void commission(){ 
   if( !IsTesting() ){ 
      double rate = 0;
      for( int pos = OrdersHistoryTotal() - 1; pos >= 0; pos-- ) {
         if( OrderSelect( pos, SELECT_BY_POS, MODE_HISTORY ) ) {
            if( OrderProfit() != 0.0 ) {
               if( OrderClosePrice() != OrderOpenPrice() ) {
                  if( OrderSymbol() == Symbol() ) {
                     calculateCommission = false;
                     rate = MathAbs( OrderProfit() / MathAbs( OrderClosePrice() - OrderOpenPrice() ) );
                     commissionPoints = ( -OrderCommission() ) / rate;
                     break;
                  }
               }
            }
         }
      } 
   }
}
int offlineGMT(){
   int bkrH = Hour();
   int gOffset =  bkrH - GMTOffset; 
   if( gOffset < 0 ) gOffset += 24;
   else if( gOffset > 23 ) gOffset -= 24;
   return ( gOffset );
}

int start() {
      // код доступен только после оплаты
   }   
   int totalBuyStop = 0;
   int totalSellStop = 0;  
   int ticket,pos;  
   int totalTrades = 0;
   int totalUnprotected = 0;
   double accountEquity,stop,cena,profdnes=0;
   if( calculateCommission ) commission();
   gmt = offlineGMT();
   prepareSpread();
   manageTicks();  

   if (MaxLoss!=0 && OrdersHistoryTotal()>0)
    {
     for( pos = 0; pos < OrdersHistoryTotal(); pos++ )
      {
       r = OrderSelect( pos, SELECT_BY_POS, MODE_HISTORY );
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderCloseTime()>=iTime(Symbol(),PERIOD_D1,0)) profdnes+=OrderProfit() + OrderCommission() + OrderSwap();
      }
    }

   if (!IsTesting() && !IsOptimization() && AccountNumber()!=ActNumber && ActNumber>0) {Comment("\n !! INVALID ACCOUNT NUMBER !!\n !! TRADING IS NOT ALLOWED !!");return(0);}
   if(ExpDate>0 && TimeCurrent()>=ExpDate) {Comment("\n*** LICENSE EXPIRED ***");return(0);}

   for(pos = OrdersTotal()-1; pos >=0; pos-- )
    {
      r = OrderSelect( pos, SELECT_BY_POS, MODE_TRADES );
      if( OrderSymbol() != Symbol() ) continue;   
      if( OrderMagicNumber() == MagicNumber ){ 
         totalTrades++;
         profdnes+=OrderProfit() + OrderCommission() + OrderSwap();
         switch ( OrderType() ) {
            case OP_BUYSTOP:
               if( (int) TimeCurrent() - lastBuyOrder > VelocityTime )
                  r = OrderDelete( OrderTicket() );
               totalBuyStop++;
               totalUnprotected++;
            break;
            case OP_SELLSTOP:
               if( (int) TimeCurrent() - lastSellOrder > VelocityTime )
                  r = OrderDelete( OrderTicket() );
               totalSellStop++;
               totalUnprotected++;
            break;
            case OP_BUY:    
               accountEquity = AccountBalance() + OrderProfit() + OrderCommission() + OrderSwap(); 
               if( OrderStopLoss() == 0 || ( OrderStopLoss() > 0 && OrderStopLoss() < OrderOpenPrice() ) ) totalUnprotected++;
               if( Bid - OrderOpenPrice() > ( Trailing * Point ) + ( StartTrailing * Point ) + commissionPoints ){  
                  if( OrderStopLoss() == 0.0 || Bid - OrderStopLoss() > Trailing * Point )
                     if( NormalizeDouble( Bid - ( Trailing * Point ), Digits ) != OrderStopLoss() )
                        r = OrderModify( OrderTicket(), OrderOpenPrice(), NormalizeDouble( Bid - ( Trailing * Point ), Digits ), OrderTakeProfit(), 0 );                  
               } else {
                  if( accountEquity > max || accountEquity / AccountBalance() < ( double ) MaxDrawdown / 100 ){
                     if( Bid < OrderOpenPrice() - ( VelocityTrigger * Point ) )
                        if( OrderStopLoss() == 0.0 || Bid - OrderStopLoss() > ( Trailing * Point ) )
                           if( NormalizeDouble( Bid - ( Trailing * Point ), Digits ) != OrderStopLoss() )
                              r = OrderModify( OrderTicket(), OrderOpenPrice(), NormalizeDouble( Bid - ( Trailing * Point ), Digits ), OrderTakeProfit(), 0 ); 
                  }
               } 
            break;
            case OP_SELL:    
               accountEquity = AccountBalance() + OrderProfit() + OrderCommission() + OrderSwap();
               if( OrderStopLoss() == 0 || ( OrderStopLoss() > 0 && OrderStopLoss() > OrderOpenPrice() ) ) totalUnprotected++;
               if( OrderOpenPrice() - Ask > ( Trailing * Point ) + ( StartTrailing * Point ) + commissionPoints ){  
                  if( OrderStopLoss() == 0.0 || OrderStopLoss() - Ask > Trailing * Point ) 
                     if( NormalizeDouble( Ask + ( Trail

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

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

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

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

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

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

Стоимость полного кода
978,10₽ ≈ $11.95