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

MA_Angle_EA

ma_angle_eav3.mq4

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговgeniusv101-ecn.mq4MQL4 / MetaTrader 4 · 2 общих теговmarket crusher ea guidlines.txtMQL · 2 общих тегов2 to 1 strategy with signals.pineTradingView · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

MA_Angle_EA — это торговый советник для MetaTrader 4, написанный на MQL4. Он анализирует направление и наклон скользящей средней и на основе этого принимает решения об открытии и закрытии позиций. Советник работает по барам: новые решения принимаются только после закрытия очередного бара, а в каждый момент времени по одному символу допускается не более одной открытой позиции.

Советник поддерживает несколько типов скользящих средних (SMA, EMA, SMMA, LWMA и LSMA) и различные варианты применяемой цены. Для входа в рынок используется порог угла наклона средней, для выхода — отдельный порог. Управление позицией включает настраиваемые стоп-лосс и тейк-профит, а также несколько режимов трейлинг-стопа: немедленный, отложенный, трёхуровневый и режим перевода стопа в безубыток с фиксацией прибыли.

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

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

НастройкаОписание
Change to true to allow print (Debug) Отладка — Включает вывод отладочных сообщений в журнал.
MA_Period Период MA — Период скользящей средней.
m Заголовок типов MA — Заголовок группы настроек типов скользящей средней.
m0 Пояснение SMA — Пояснение: значение 0 соответствует SMA.
m1 Пояснение EMA — Пояснение: значение 1 соответствует EMA.
m2 Пояснение SMMA — Пояснение: значение 2 соответствует SMMA.
m3 Пояснение LWMA — Пояснение: значение 3 соответствует LWMA.
m4 Пояснение LSMA — Пояснение: значение 4 соответствует LSMA.
MA_Type Тип MA — Тип скользящей средней: SMA, EMA, SMMA, LWMA или LSMA.
p Заголовок применяемой цены — Заголовок группы настроек применяемой цены.
p0 Пояснение close — Пояснение: значение 0 соответствует цене закрытия.
p1 Пояснение open — Пояснение: значение 1 соответствует цене открытия.
p2 Пояснение high — Пояснение: значение 2 соответствует максимуму.
p3 Пояснение low — Пояснение: значение 3 соответствует минимуму.
p4 Пояснение median — Пояснение: значение 4 соответствует медианной цене.
p5 Пояснение typical — Пояснение: значение 5 соответствует типичной цене.
p6 Пояснение weighted — Пояснение: значение 6 соответствует взвешенной цене.
MA_AppliedPrice Применяемая цена MA — Тип применяемой цены для расчёта скользящей средней.
What size angle to trigger a trade (EntryAngle_Threshold) Порог угла входа — Порог угла наклона скользящей средней для открытия сделки.
ExitAngle_Threshold Порог угла выхода — Порог угла наклона скользящей средней для закрытия сделки.
PrevMAShift Сдвиг предыдущей MA — Сдвиг предыдущего значения скользящей средней в барах.
CurMAShift Сдвиг текущей MA — Сдвиг текущего значения скользящей средней в барах.
mm Заголовок управления капиталом — Заголовок группы настроек управления капиталом.
Lots Размер лота — Фиксированный размер лота при отключённом управлении капиталом.
MaxLot Максимальный лот — Максимально допустимый размер лота при управлении капиталом.
Change to false to shutdown money management controls. (UseMoneyManagement) Управление капиталом — Включает управление капиталом для расчёта размера позиции.
BrokerIsIBFX Брокер IBFX — Указывает, что брокер — IBFX, и включает соответствующий расчёт размера позиции.
mm1 Пояснение по типу счёта — Пояснение о выборе мини- или микро-счёта для стандартного счёта.
Change to whatever percent of equity you wish to risk. (TradeSizePercent) Процент риска — Процент от средств счёта, используемый для расчёта размера позиции.
BrokerPermitsFractionalLots Дробные лоты брокера — Разрешает использование дробных лотов при расчёте размера позиции.
Maximum pips willing to lose per position. (StopLoss) Стоп-лосс — Максимальный убыток в пунктах на одну позицию.
TakeProfit Тейк-профит — Уровень тейк-профита в пунктах.
Possible fix for not getting filled or closed (Slippage) Проскальзывание — Допустимое проскальзывание цены в пунктах при открытии и закрытии сделок.
tsp Заголовок типов трейлинг-стопа — Заголовок группы настроек типов трейлинг-стопа.
tsp0 Пояснение: нет трейлинга — Пояснение: значение 0 — трейлинг-стоп отключён.
tsp1 Пояснение: немедленный — Пояснение: значение 1 — немедленный трейлинг-стоп.
tsp2 Пояснение: отложенный — Пояснение: значение 2 — отложенный трейлинг-стоп.
tsp3 Пояснение: три уровня — Пояснение: значение 3 — трёхуровневый трейлинг-стоп.
tsp4 Пояснение: безубыток — Пояснение: значение 4 — безубыток с фиксацией прибыли.
TrailingStopType Тип трейлинг-стопа — Тип трейлинг-стопа: 1 — немедленный, 2 — отложенный, 3 — трёхуровневый, 4 — безубыток с фиксацией прибыли.
ts2 Заголовок типа 2 — Заголовок группы настроек трейлинг-стопа типа 2.
Change to whatever number of pips you wish to trail your position with. (TrailingStop) Трейлинг-стоп — Количество пунктов трейлинг-стопа для режима типа 2.
ts3 Заголовок типа 3 — Заголовок группы настроек трейлинг-стопа типа 3.
Type 3 first level pip gain (FirstMove) Первый уровень прибыли — Прибыль в пунктах для первого уровня трейлинг-стопа типа 3.
Move Stop to Breakeven (FirstStopLoss) Первый стоп-лосс — Уровень стоп-лосса в пунктах для первого уровня трейлинг-стопа типа 3.
Type 3 second level pip gain (SecondMove) Второй уровень прибыли — Прибыль в пунктах для второго уровня трейлинг-стопа типа 3.
Move stop to lock is profit (SecondStopLoss) Второй стоп-лосс — Уровень стоп-лосса в пунктах для второго уровня трейлинг-стопа типа 3.
type 3 third level pip gain (ThirdMove) Третий уровень прибыли — Прибыль в пунктах для третьего уровня трейлинг-стопа типа 3.
Move stop and trail from there (TrailingStop3) Трейлинг-стоп типа 3 — Количество пунктов трейлинг-стопа для третьего уровня режима типа 3.
ts4 Заголовок типа 4 — Заголовок группы настроек трейлинг-стопа типа 4.
BreakEven Уровень безубытка — Прибыль в пунктах, после достижения которой стоп-лосс переводится в безубыток в режиме трейлинг-стопа типа 4.
Profit Lock in pips (LockInPips) Фиксация прибыли в пунктах — Количество пунктов прибыли, фиксируемых при переводе стопа в безубыток.
sm0 Заголовок фильтра часов — Заголовок группы настроек фильтра торговых часов.
sm2 Пояснение фильтра часов — Пояснение по включению фильтра торговых часов.
UseTradingHours Использовать торговые часы — Включает фильтр торговых часов (0 — нет, 1 — да).
sm4 Пояснение азиатской сессии — Пояснение по включению торговли в азиатскую сессию.
TradeAsianMarket Торговля в азиатскую сессию — Разрешает торговлю в азиатскую сессию (0 — нет, 1 — да).
Start trades after time (AsianStart) Начало азиатской сессии — Время начала торговли в азиатскую сессию в формате часы-минуты.
Stop trading after time (AsianStop) Окончание азиатской сессии — Время окончания торговли в азиатскую сессию в формате часы-минуты.
sm5 Пояснение европейской сессии — Пояснение по включению торговли в европейскую сессию.
TradeEuropeanMarket Торговля в европейскую сессию — Разрешает торговлю в европейскую сессию (0 — нет, 1 — да).
Start trades after time (EurStart) Начало европейской сессии — Время начала торговли в европейскую сессию в формате часы-минуты.
Stop trading after time (EurStop) Окончание европейской сессии — Время окончания торговли в европейскую сессию в формате часы-минуты.
sm6 Пояснение нью-йоркской сессии — Пояснение по включению торговли в нью-йоркскую сессию.
TradeNewYorkMarket Торговля в нью-йоркскую сессию — Разрешает торговлю в нью-йоркскую сессию (0 — нет, 1 — да).
Start trades after time (NYStart) Начало нью-йоркской сессии — Время начала торговли в нью-йоркскую сессию в формате часы-минуты.
Stop trading after time (NYStop) Окончание нью-йоркской сессии — Время окончания торговли в нью-йоркскую сессию в формате часы-минуты.
Получить полный код

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

#include <stdlib.mqh>

#define UP 1
#define DOWN 2

#define LONG 1
#define SHORT -1
#define FLAT 0

#define SMA 0
#define EMA 1
#define SMMA 2
#define LWMA 3
#define LSMA 4

extern bool Debug = false;               // Change to true to allow print

extern int     MA_Period=34;
extern string  m = "--Moving Average Types--";
extern string  m0 = " 0 = SMA";
extern string  m1 = " 1 = EMA";
extern string  m2 = " 2 = SMMA";
extern string  m3 = " 3 = LWMA";
extern string  m4 = " 4 = LSMA";
extern int     MA_Type = 1;
extern string  p = "--Applied Price Types--";
extern string  p0 = " 0 = close";
extern string  p1 = " 1 = open";
extern string  p2 = " 2 = high";
extern string  p3 = " 3 = low";
extern string  p4 = " 4 = median(high+low)/2";
extern string  p5 = " 5 = typical(high+low+close)/3";
extern string  p6 = " 6 = weighted(high+low+close+close)/4";
extern int     MA_AppliedPrice = 0;
extern double  EntryAngle_Threshold=10;   // What size angle to trigger a trade
extern double  ExitAngle_Threshold=2;
extern int     PrevMAShift=3;
extern int     CurMAShift=1;

extern string  mm = "---Money Management---";
extern double  Lots=0.1;
extern double  MaxLot = 30;
extern bool    UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern bool    BrokerIsIBFX = false;
extern string  mm1="Set mini and micro to false for standard account";
extern bool    AccountIsMini = true;
extern bool    AccountIsMicro = false;
extern double  TradeSizePercent = 1;  // Change to whatever percent of equity you wish to risk.
extern bool    BrokerPermitsFractionalLots = true;

extern double StopLoss = 0;        // Maximum pips willing to lose per position.
extern int TakeProfit = 0;
extern int Slippage = 3;           // Possible fix for not getting filled or closed    
extern string  tsp = "--Trailing Stop Types--";
extern string  tsp0 = " 0 = None";
extern string  tsp1 = " 1 = Trail immediately";
extern string  tsp2 = " 2 = Wait to trail";
extern string  tsp3 = " 3 = Uses 3 levels before trail";
extern string  tsp4 = " 4 = Breakeven + Lockin";
extern int     TrailingStopType = 4;

extern string  ts2 = "Settings for Type 2";
extern double  TrailingStop = 15;      // Change to whatever number of pips you wish to trail your position with.

extern string  ts3 = "Settings for Type 3";
extern double  FirstMove = 20;        // Type 3  first level pip gain
extern double  FirstStopLoss = 50;    // Move Stop to Breakeven
extern double  SecondMove = 30;       // Type 3 second level pip gain
extern double  SecondStopLoss = 30;   // Move stop to lock is profit
extern double  ThirdMove = 40;        // type 3 third level pip gain
extern double  TrailingStop3 = 20;    // Move stop and trail from there

extern string  ts4 = "Settings for Type 4";
extern double  BreakEven = 30;
extern int     LockInPips = 1;        // Profit Lock in pips
 int SignalCandle = 1;

extern string  sm0="--Trading Hours Filter--";
extern string  sm2="UseTradingHours - Enter 0 for false, 1 for true";
extern int    UseTradingHours = 0;
extern string  sm4="TradeAsian - Enter 0 for false, 1 for true";
extern int    TradeAsianMarket = 1;
extern int     AsianStart = 100;       // Start trades after time
extern int     AsianStop = 400;      // Stop trading after time
extern string  sm5="Trade Europe - Enter 0 for false, 1 for true";
extern int    TradeEuropeanMarket = 1;
extern int     EurStart = 1000;       // Start trades after time
extern int     EurStop = 1200;      // Stop trading after time
extern string  sm6="Trade NY - Enter 0 for false, 1 for true";
extern int    TradeNewYorkMarket = 1;
extern int     NYStart = 1600;       // Start trades after time
extern int     NYStop = 1800;      // Stop trading after time

string setup;
double lotMM;
int TradesInThisSymbol;
int MagicNumber;
bool YesStop;
double myPoint, mFactor;

double MACurrent, MAPrevious;

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

int deinit()
  {
   return(0);
  }

double fLSMA(int LSMAPeriod, int LSMAPrice,int shift)
{
   double wt;

   double ma1=iMA(NULL,0,LSMAPeriod,0,MODE_SMA ,LSMAPrice,shift);
   double ma2=iMA(NULL,0,LSMAPeriod,0,MODE_LWMA,LSMAPrice,shift);
   wt = MathFloor((3.0*ma2-2.0*ma1)/myPoint)*myPoint;
   return(wt);
}  

double Get_mFactor()
{
   string Sym;
   double Factor;
   int ShiftDif;

   Factor = 100000.0;
   Sym = StringSubstr(Symbol(),3,3);
   if (Sym == "JPY") Factor = 1000.0;
   ShiftDif = PrevMAShift-CurMAShift;
   Factor /= ShiftDif;

   return (Factor);
}

void GetMAs (int TrendMethod, int MAPeriod, int Prev, int Cur)
{
   switch (TrendMethod)
   {
     case LSMA :  MACurrent=fLSMA(MAPeriod,MA_AppliedPrice,Cur);
                  MAPrevious=fLSMA(MAPeriod,MA_AppliedPrice,Prev);
                  break;
     default : MACurrent=iMA(NULL,0,MAPeriod,0,MA_Type,MA_AppliedPrice,Cur);
               MAPrevious=iMA(NULL,0,MAPeriod,0,MA_Type,MA_AppliedPrice,Prev);
   }
}

bool CheckExitCondition(int cmd)
{
	double maAngle;

   GetMAs(MA_Type, MA_Period , PrevMAShift, CurMAShift);
   maAngle = mFactor * (MACurrent - MAPrevious)/2.0;
   switch (cmd)
   {
      case OP_BUY : if (maAngle < ExitAngle_Threshold) return(true);
                    break;
      case OP_SELL : if (maAngle > -ExitAngle_Threshold) return(true);
   }

   return(false);
}

int GetSignal()
{

	double maAngle;

   GetMAs(MA_Type, MA_Period , PrevMAShift, CurMAShift);
   maAngle = mFactor * (MACurrent - MAPrevious)/2.0;

   if (maAngle > EntryAngle_Threshold) return(LONG);
   if (maAngle < -EntryAngle_Threshold) return(SHORT);

   return(FLAT);

}

bool NewBar()
{
   static datetime dt = 0;

   if (Time[0] != dt)
   {
      dt = Time[0];
      return(true);
   }
   return(false);
}

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

void OpenBuyOrder()
{
   int err,ticket, digits;
   double TPprice,STprice;

   ticket=OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,0,0,setup,MagicNumber,0,Green); 
	if (ticket > 0)
	{
		if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
		{
		   if (Debug) Print("BUY order opened : ", OrderOpenPrice());
         if (StopLoss != 0 || TakeProfit != 0)
	      {
            TPprice = 0;
            if (TakeProfit > 0) TPprice=TakeLong(OrderOpenPrice(), TakeProfit);
            STprice = 0;
            if (StopLoss > 0)
            {
              STprice=StopLong(OrderOpenPrice(), StopLoss);
		        STprice = ValidStopLoss(OP_BUY,Bid, STprice);
		      }   

            if (Digits > 0) 
            {
              STprice = NormalizeDouble( STprice, Digits);
              TPprice = NormalizeDouble( TPprice, Digits); 
            }
		      ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
		   }
		}
	}
	else
	{ 
		   err = GetLastError();
         Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription( err) );
   }
}

void OpenSellOrder()
{
   int err, ticket, digits;
   double TPprice,STprice;

   ticket=OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,0,0,setup,MagicNumber,0,Red); 
	if (ticket > 0)
	{
		if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
	   {
			if (Debug) Print("SELL order opened : ", OrderOpenPrice());
         if (StopLoss != 0 || TakeProfit != 0)
	      {
            TPprice = 0;
            if (TakeProfit > 0) TPprice=TakeShort(OrderOpenPrice(),TakeProfit);
            STprice = 0;
            if (StopLoss > 0)
            {
              STprice=StopShort(OrderOpenPrice() ,StopLoss);
		        STprice = ValidStopLoss(OP_SELL,Ask, STprice); 
		      }  

            if (Digits > 0) 
            {
              STprice = NormalizeDouble( STprice, Digits);
              TPprice = NormalizeDouble( TPprice, Digits); 
            }
		      ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
		   }
	   }
	}
	else 
   {
      err = GetLastError();
      Print("Error opening Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); 
   }
}

int CheckOpenPositions()
{
   int cnt, total, NumPositions;
   int NumBuyTrades, NumSellTrades;   // Number of buy and sell trades in this symbol

   NumBuyTrades = 0;
   NumSellTrades = 0;
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
      if ( OrderSymbol() != Symbol()) continue;
      if ( OrderMagicNumber() != MagicNumber)  continue;

      if(OrderType() == OP_BUY )  NumBuyTrades++;
      if(OrderType() == OP_SELL ) NumSellTrades++;

     }
     NumPositions = NumBuyTrades + NumSellTrades;
     return (NumPositions);
  }

int CloseOrder(int ticket,double numLots,int type)
{
   int CloseCnt, err;
   double close_price;

    CloseCnt = 0;
    while (CloseCnt < 3)
    {
       switch (type)
       {
         case OP_BUY : close_price = MarketInfo(Symbol(),MODE_BID);
                       break;
         case OP_SELL : close_price = MarketInfo(Symbol(),MODE_ASK);
       }
       if (!OrderClose(ticket,numLots,close_price,Slippage,Violet))
       {
         err=GetLastError();
         Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));
         if (err > 0) CloseCnt++;
       }
       else
       {
         CloseCnt = 3;
       }
    }
}

int ModifyOrder(int ord_ticket,double op, double price,double tp, color mColor)
{
    int CloseCnt, err;

    CloseCnt=0;
    while (CloseCnt < 3)
    {
       if (OrderModify(ord_ticket,op,price,tp,0,mColor))
       {
         CloseCnt = 3;
       }
       else
       {
          err=GetLastError();
          Print(CloseCnt," Error modifying order : (", err , ") " + ErrorDescription(err));
         if (err>0) CloseCnt++;
       }
    }
}

int HandleTrailingStop(int type, int ticket, double op, double os, double tp)
{
   switch (TrailingStopType)
   {
     case 1 : Immediate_TrailingStop (type, ticket, op, os, tp);
              break;
     case 2 : Delayed_TrailingStop (type, ticket, op, os, tp);
              break;
     case 3 : ThreeLevel_TrailingStop (type, ticket, op, os, tp);
              break;
     case 4 : BreakEven_TrailingStop (type, ticket, op, os, tp);
              break;
              break;
	}
   return(0);
}

void BreakEven_TrailingStop(int type, int ticket, double op, double os, double tp)
{

   int digits;
   double pBid, pAsk, BuyStop, SellStop;

   digits = MarketInfo(Symbol(

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

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

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

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

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

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

Стоимость полного кода
1 618,20₽ ≈ $19.78