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

sa_ea_600.mq4

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

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

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

О программе

SA_EA_600 — торговый советник для MetaTrader 4, который получает ценовые данные от мастер-сервера через именованный канал Windows и открывает позиции BUY/SELL при достижении заданного уровня отклонения в пипсах от мастер-цен. Торговые решения подтверждаются в течение заданного времени и при условии отсутствия загруженности торгового контекста.

Советник реализует фиксацию прибыли (TargetPips) и защиту убытков (StopPips) для каждой открытой позиции, а также контроль максимальной просадки (MaxDD): при превышении порога вход в новые сделки блокируется. Размер лота рассчитывается на основе параметра MM как процента от свободного маржинального баланса с учётом минимального и максимального размера лота.

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

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

НастройкаОписание
MaxDD MaxDD — Максимально допустимая просадка в процентах от максимального баланса. При превышении вход в новые сделки блокируется.
MM MM — Параметр управления размером лота в процентах от свободного маржинального баланса.
PipeName PipeName — Имя именованного канала Windows для получения данных от мастер-сервера.
BidCorrection BidCorrection — Коррекция, добавляемая к полученной цене Bid мастера перед расчётами.
AskCorrection AskCorrection — Коррекция, добавляемая к полученной цене Ask мастера перед расчётами.
ActionPips ActionPips — Количество пипсов отклонения от цен мастера, при достижении которого открывается позиция (BUY или SELL).
TargetPips TargetPips — Тейк-профит в пипсах для открытых позиций.
StopPips StopPips — Стоп-лосс в пипсах для открытых позиций.
VirtualStops VirtualStops — Переключатель режима виртуальных стопов: при значении false стопы и тейк-профиты устанавливаются через OrderModify.
ConfirmMS ConfirmMS — Задержка в миллисекундах для повторной проверки условий перед открытием позиции.
SleepMS SleepMS — Интервал ожидания в миллисекундах между итерациями основного цикла советника.
Slippage Slippage — Допустимый проскальзывание в пипсах при исполнении торговых ордеров.
Magic Magic — Магический номер для идентификации ордеров, управляемых советником.
Получить полный код

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

extern double MaxDD          = 30;
extern double MM             = 30;

extern string PipeName       = "SA_600";
extern string ServerPairName = "";
extern double BidCorrection  = 0;
extern double AskCorrection  = 0;

extern int    ActionPips     = 2;
extern int    TargetPips     = 5;
extern int    StopPips       = 15;
extern int    VirtualStops   = false;

extern int    ConfirmMS     = 20;
extern int    SleepMS       = 20;
extern int    Slippage      = 1;    
extern int    Magic         = 2013; 

#define PIPE_BASE_NAME     "\\\\.\\pipe\\mt4-"     // MUST tally with client code
#define ERROR_MORE_DATA 234

#import "kernel32.dll"
	int CallNamedPipeW(string pipeName, uchar& outBuffer[], int outBufferSz, uchar& inBuffer[], int inBufferSz, int& bytesRead[], int timeOut);
#import

datetime StartTime=0;
double   MinLots=0.1;
double   MaxLots=0.1;
double   LotStep=0.1;
double   MyPoint=0.0001;

string   MasterPair="";
double   MaxBalance=0;
double   TotalPips=0;
int      TotalTrades=0;
double   EntrySlippage=0;
int      EntryMS=0;
int      OpenErrors=0;

int      LastTicket=0;
double   MasterBid=0;
double   MasterAsk=0;

string   LastQ="";

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

int deinit()
  {
   Comment("");
   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   double CurrentPips=0;
   string sInfo="";
   if(IsStopped() || !IsConnected())
      return(0);

   if(Digits<=3)
      MyPoint=0.01;
   MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);

   if(StartTime<=0)
     {
      MaxBalance=AccountBalance();
      StartTime=TimeLocal();
      TotalPips=0;
      EntrySlippage=0;
      TotalTrades=0;
      EntryMS=0;
      LastTicket=0;
      OpenErrors=0;
     }

   while(!IsStopped())	
     {
      RefreshRates();
      double dBid=Bid;
      double dAsk=Ask;
      int OldTicket=LastTicket;
      LastTicket=0;
      for(int j=OrdersTotal()-1; j>=0; j--) 
          if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
            if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic))
              {
               if(OrderType()==OP_BUY)
                  CurrentPips=dBid-OrderOpenPrice();
               else
                  CurrentPips=OrderOpenPrice()-dAsk;
               CurrentPips=CurrentPips/MyPoint;
               LastTicket=OrderTicket();
               if((CurrentPips>=TargetPips || CurrentPips<=-StopPips) && IsTradeContextBusy()==false)
                 {
                  if(OrderType()==OP_BUY)
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(dBid,Digits), Slippage*MyPoint/Point, Blue);
                  else
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(dAsk,Digits), Slippage*MyPoint/Point, Red);
                 }
               else  
               if(VirtualStops==false && OrderStopLoss()<Point && IsTradeContextBusy()==false)
                 {
                  double MinDistance=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point+MyPoint;
                  if(OrderType()==OP_BUY)
                     OrderModify(OrderTicket(),OrderOpenPrice()
                                ,MathMin(OrderOpenPrice()-StopPips*MyPoint,dBid-MinDistance)
                                ,MathMax(OrderOpenPrice()+TargetPips*MyPoint,dAsk+MinDistance),0); 
                  else  
                     OrderModify(OrderTicket(),OrderOpenPrice()
                                ,MathMax(OrderOpenPrice()+StopPips*MyPoint,dAsk+MinDistance)
                                ,MathMin(OrderOpenPrice()-TargetPips*MyPoint,dBid-MinDistance),0); 
                 }

              }

      if(LastTicket==0 && OldTicket>0)
         if(OrderSelect(OldTicket, SELECT_BY_TICKET, MODE_HISTORY))
           {
            if(OrderType()==OP_BUY)
               TotalPips=TotalPips+(OrderClosePrice()-OrderOpenPrice())/MyPoint;
            else
               TotalPips=TotalPips+(OrderOpenPrice()-OrderClosePrice())/MyPoint;
           }

      MaxBalance=MathMax(MaxBalance,AccountBalance());
      if(AccountBalance()<=0)
         break;
      sInfo="";
      CheckMaster();
      if(MaxDD<=100*(MaxBalance-AccountBalance())/MaxBalance)
         sInfo=sInfo+"\nMaximum Drawdawn Reached !!!";
      else   
      if(MasterBid>=Point && MasterAsk>=Point)
         sInfo=sInfo+"\nBuy/Sell Levels: "+DoubleToStr((MasterBid-dAsk)/MyPoint-ActionPips,1)+" / "+DoubleToStr((dBid-

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

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

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

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

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

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

Стоимость полного кода
649,70₽ ≈ $7.94