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

PZ Parabolic Sar EA

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

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

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

О программе

PZ Parabolic Sar EA — советник для MetaTrader 4, использующий индикатор Parabolic SAR для генерации сигналов на открытие позиций. Советник открывает покупку, когда SAR расположен ниже цены закрытия свечи, и продажу — когда SAR выше цены закрытия. Стоп-лосс рассчитывается на основе индикатора ATR с настраиваемым периодом и множителем.

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

Для управления ордерами используются стандартные торговые функции MetaTrader 4: OrderSend, OrderClose и OrderModify. Советник фильтрует позиции по магическому номеру и символу торгового инструмента. Параметры проскальзывания и торгового шага настраиваются отдельно.

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

НастройкаОписание
TL_Ex Настройки временных ограничений — Группа настроек временных ограничений торговли
StartHour Час начала торговли — Час начала торговой сессии (0 — без ограничений)
StartMinute Минута начала торговли — Минута начала торговой сессии (0 — без ограничений)
EndHour Час окончания торговли — Час окончания торговой сессии (0 — без ограничений)
EndMinute Минута окончания торговли — Минута окончания торговой сессии (0 — без ограничений)
PS_Ex Настройки Parabolic SAR — Группа настроек индикатора Parabolic SAR
PS_Ex2 Настройки стратегии входа — Подгруппа настроек стратегии входа в позицию
TradeStep Шаг SAR (вход) — Шаг SAR для стратегии входа в позицию
TradeMax Максимум SAR (вход) — Максимальное значение SAR для стратегии входа
PS_Ex3 Настройки стратегии выхода — Подгруппа настроек стратегии выхода из позиции
StopStep Шаг SAR (стоп-лосс) — Шаг SAR для расчёта стоп-лосса
StopMax Максимум SAR (стоп-лосс) — Максимальное значение SAR для стоп-лосса
SL_Ex Настройки стоп-лосса — Группа настроек стоп-лосса
ATRPeriod Период ATR (стоп-лосс) — Период индикатора ATR для расчёта стоп-лосса
ATRMultiplier Множитель ATR (стоп-лосс) — Множитель ATR для расчёта стоп-лосса
TS_Ex Настройки трейлинг-стопа — Группа настроек трейлинг-стопа
TS_Enabled Трейлинг-стоп включён — Включает или отключает функцию трейлинг-стопа
TSATRPeriod Период ATR (трейлинг-стоп) — Период индикатора ATR для расчёта уровня трейлинг-стопа
TSATRMultiplier Множитель ATR (трейлинг-стоп) — Множитель ATR для расчёта уровня трейлинг-стопа
BE_Ex2 Настройки частичного закрытия и безубыточного перевода — Группа настроек частичного закрытия и безубыточного перевода
PartialClosing Частичное закрытие — Включает частичное закрытие позиции при достижении определённой прибыли
BreakEven Безубыточный перевод — Включает автоматический перевод стоп-лосса в безубыточную зону
MM_Ex Настройки управления капиталом — Группа настроек управления капиталом
MoneyManagement Управление капиталом — Включает расчёт размера лота на основе процента риска от баланса счёта
RiskPercent Процент риска — Процент риска от баланса счёта для расчёта размера лота при включённом управлении капиталом
LotSize Размер лота — Фиксированный размер лота при отключённом управлении капиталом
EA_Ex Настройки советника — Группа общих настроек советника
Slippage Проскальзывание — Допустимое проскальзывание цены при исполнении ордеров
MagicNumber Магический номер — Магический номер для идентификации ордеров советника
Получить полный код

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

#import "stdlib.ex4"
   string ErrorDescription(int e);
#import

#define  ShortName         "PZ Parabolic Sar EA"
#define  StopDivisor       1
#define  PercentageToClose 0.50
#define  Shift             1

extern string TL_Ex                    = "------- Hour settings: set to zero for no limitations";
extern int    StartHour                = 00;
extern int    StartMinute              = 30;
extern int    EndHour                  = 23;
extern int    EndMinute                = 30;
extern string PS_Ex                    = "------- Parabolic SAR Settings";
extern string PS_Ex2                   = ">> Entry strategy";
extern double TradeStep                = 0.002;
extern double TradeMax                 = 0.2;
extern string PS_Ex3                   = ">> Exit strategy";
extern double StopStep                 = 0.004;
extern double StopMax                  = 0.4;              
extern string SL_Ex                    = "------- Stop-loss Settings";
extern int    ATRPeriod                = 30;
extern double ATRMultiplier            = 2.5;
extern string TS_Ex                    = "------- Trailing-Stop Settings";
extern bool   TS_Enabled               = false;
extern double TSATRPeriod              = 30;
extern double TSATRMultiplier          = 1.75;
extern string BE_Ex2                   = "------- Partial Closing and Break Even";
extern bool   PartialClosing           = true;
extern bool   BreakEven                = true;
extern string MM_Ex                    = "------- Money management";
extern bool   MoneyManagement          = true;
extern double RiskPercent              = 2;
extern double LotSize                  = 0.1;
extern string EA_Ex                    = "------- EA Settings";
extern int    Slippage                 = 5;
extern int    MagicNumber              = 12345;

double   DecimalPip;

int      LastOrderTicket[2];
datetime LastOrderTime[2];
double   LastOrderLots[2];

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

int deinit()
{
   return(0);
}

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

/**
* Returns total opened trades
* @param    int   Type
* @param    int   Magic
* @return   int
*/
int GetTotalTrades(int Type, int Magic)
{
   int counter = 0;
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        Print(ShortName +" (OrderSelect Error) "+ ErrorDescription(GetLastError()));
      } else if(OrderSymbol() == Symbol() && (OrderType() == Type || Type == EMPTY_VALUE) && OrderMagicNumber() == Magic) {
            counter++;
      }
   }
   return(counter);
}

/**
* Closes desired orders 
* @param    int   Type
*/
void CloseOrder(int Type, int Magic = EMPTY_VALUE)
{
   int l_type;
	if(Magic == EMPTY_VALUE) Magic = MagicNumber;
	for(int i = OrdersTotal()-1; i >= 0; i--)
	{
		OrderSelect(i, SELECT_BY_POS, MODE_TRADES); l_type = OrderType();
		if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && Type == l_type)
		{ 
	      if(Type == OP_BUY || Type == OP_SELL)  
	      {
            if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Gold))
               Print(ShortName +" (OrderClose Error) "+ ErrorDescription(GetLastError()));
         }
      }
   }
}

/**
* Places an order
* @param    int      Type
* @param    double   Lotz
* @param    double   PendingPrice
*/
void PlaceOrder(int Type, double Lotz, int Magic = EMPTY_VALUE)
{
   int err;
   color  l_color;
   double l_price, l_sprice, l_stoploss = 0;
   string action;
   RefreshRates();

   if(Magic == EMPTY_VALUE) Magic = MagicNumber;

   if(Type == OP_BUY){ l_price = Ask;  l_color = Blue; action = "Buy"; }
   if(Type == OP_SELL){ l_price = Bid; l_color = Red; action = "Sell"; } 

   while (IsTradeContextBusy()) Sleep(1000);
   int l_datetime = TimeCurrent();

   int l_ticket = OrderSend(Symbol(), Type, Lotz, l_price, Slippage, 0, 0, "", Magic, 0, l_color);

   if (l_ticket == -1)
   {
      while(l_ticket == -1 && TimeCurrent() - l_datetime < 60 && !IsTesting())
      {
         err = GetLastError();
         if (err == 148) return;
         Sleep(1000);
         while (IsTradeContextBusy()) Sleep(1000);
         RefreshRates();
       

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

Что вы получите после оплаты

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

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

Стоимость полного кода
814₽