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

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

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

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

О программе

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

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

Советник написан на языке MQL4 и предназначен для работы в среде MetaTrader 4. Все торговые операции выполняются через стандартные API платформы. Настройки параметров доступны пользователю непосредственно в интерфейсе терминала.

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

НастройкаОписание
Expert_Name Имя советника — Имя экспертного советника, отображаемое в комментариях к ордерам.
MagicNumberBase Базовый магический номер — Базовое значение магического номера для идентификации ордеров советника.
UserComment Комментарий к ордерам — Текстовый комментарий к ордерам советника.
stf0 Заголовок таймфрейма — Заголовок раздела выбора таймфрейма.
stf1 Месяц — Название таймфрейма — месяц.
stf2 Неделя — Название таймфрейма — неделя.
stf3 День — Название таймфрейма — день.
stf4 4 часа — Название таймфрейма — 4 часа.
stf5 1 час — Название таймфрейма — 1 час.
stf6 30 минут — Название таймфрейма — 30 минут.
stf7 15 минут — Название таймфрейма — 15 минут.
stf8 5 минут — Название таймфрейма — 5 минут.
stf9 1 минута — Название таймфрейма — 1 минута.
TradeTimeFrame Таймфрейм торговли — Номер таймфрейма для торговли (1 — M1, 2 — M5, 3 — M15, 4 — M30, 5 — H1, 6 — H4, 7 — D1, 8 — W1, 9 — MN).
ma0 Режимы скользящих средних — Текстовое описание режимов скользящих средних.
ma1 Типы скользящих средних — Описание типов скользящих средних (SMA, EMA, SMMA).
ma2 Дополнительные типы СС — Описание дополнительных типов скользящих средних (LWMA, LSMA).
0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA (FastMA_Mode) Тип быстрой скользящей средней — Тип быстрой скользящей средней (0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA, 4 — LSMA).
FastMA_Period Период быстрой СС — Период быстрой скользящей средней в барах.
p Типы цен — Текстовое описание типов применяемых цен.
p0 Цена закрытия — Описание цены закрытия.
p1 Цена открытия — Описание цены открытия.
p2 Максимальная цена — Описание максимальной цены.
p3 Минимальная цена — Описание минимальной цены.
p4 Медианная цена — Описание медианной цены.
p5 Типичная цена — Описание типичной цены.
p6 Взвешенная цена — Описание взвешенной цены.
0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4) (FastMA_AppliedPrice) Применяемая цена быстрой СС — Тип цены для расчёта быстрой скользящей средней (0 — закрытие, 1 — открытие, 2 — максимум, 3 — минимум, 4 — медиана, 5 — типичная, 6 — взвешенная).
0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA (SlowMA_Mode) Тип медленной скользящей средней — Тип медленной скользящей средней (0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA, 4 — LSMA).
SlowMA_Period Период медленной СС — Период медленной скользящей средней в барах.
0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4) (SlowMA_AppliedPrice) Применяемая цена медленной СС — Тип цены для расчёта медленной скользящей средней (0 — закрытие, 1 — открытие, 2 — максимум, 3 — минимум, 4 — медиана, 5 — типичная, 6 — взвешенная).
SignalCandle Сигнальная свеча — Смещение свечи для расчёта сигнального индикатора в барах.
mm Управление денежными средствами — Текстовое описание раздела управления денежными средствами.
Lots Размер лота — Фиксированный размер лота при отключённом управлении денежными средствами.
MaxLots Максимальный лот — Максимально допустимый размер лота.
Change to false to shutdown money management controls. (UseMoneyManagement) Управление денежными средствами — Включение/отключение автоматического управления денежными средствами.
BrokerIsIBFX Брокер IBFX — Переключатель, указывающий, является ли брокер IBFX (влияет на расчёт лотов).
m1 Мини/микро счёт — Настройка мини и микро счёта (текстовое описание).
fm Тип счёта — Настройка стандартного или мини/микро счёта (текстовое описание).
UseFreeMargin Использовать свободный маржинал — Использовать свободный маржинальный баланс вместо баланса счёта для расчёта лотов.
Change to whatever percent of equity you wish to risk. (TradeSizePercent) Процент риска — Процент собственного капитала, готового рисковать на одну позицию (при включённом управлении денежными средствами).
BrokerPermitsFractionalLots Дробные лоты разрешены — Разрешение брокера на дробные лоты.
st6 Контроль прибыли — Текстовое описание раздела контроля прибыли.
Maximum pips willing to lose per position. (StopLoss) Стоп-лосс (pip) — Максимальное количество pip'ов готовое потерять на позицию.
Maximum profit level achieved. (TakeProfit) Тейк-профит (pip) — Максимальный уровень прибыли в pip'ах для фиксации.
tsp0 Заголовок трейлинг-стопа — Заголовок раздела типов трейлинг-стопа.
tsp1 Тип 1 описание — Описание типа трейлинг-стопа 1 — немедленное перемещение.
tsp2 Тип 2 описание — Описание типа трейлинг-стопа 2 — ожидание.
tsp3 Тип 3 описание — Описание типа трейлинг-стопа 3 — три уровня.
UseTrailingStop Трейлинг-стоп включён — Включение/отключение функции трейлинг-стопа.
Type 1 moves stop immediately, Type 2 waits til value of TS is reached (TrailingStopType) Тип трейлинг-стопа — Тип трейлинг-стопа (1 — без задержки, 2 — ожидание достижения значения, 3 — три уровня).
ts2 Настройки типа 2 — Настройки для типа трейлинг-стопа 2.
Change to whatever number of pips you wish to trail your position with. (TrailingStop) Трейлинг-стоп (pip) — Количество pip'ов для трейлинг-стопа (тип 2).
ts3 Настройки типа 3 — Настройки для типа трейлинг-стопа 3.
Type 3 first level pip gain (FirstMove) Первое движение (тип 3) — Первый уровень прироста в pip'ах для трейлинг-стопа типа 3.
Move Stop to Breakeven (FirstStopLoss) Первый стоп-лосс (тип 3) — Установка стоп-лосса на уровне безубыточности после первого движения (тип 3).
Type 3 second level pip gain (SecondMove) Второе движение (тип 3) — Второй уровень прироста в pip'ах для трейлинг-стопа типа 3.
Move stop to lock is profit (SecondStopLoss) Второй стоп-лосс (тип 3) — Установка стоп-лосса для фиксации прибыли после второго движения (тип 3).
type 3 third level pip gain (ThirdMove) Третье движение (тип 3) — Третий уровень прироста в pip'ах для трейлинг-стопа типа 3.
Move stop and trail from there (TrailingStop3) Трейлинг-стоп 3 (pip) — Расстояние трейлинга в pip'ах после третьего уровня (тип 3).
Possible fix for not getting closed (Slippage) Проскальгивание — Допустимое проскальгивание в пунктах при выполнении ордеров.
sm0 Фильтр часов — Текстовое описание фильтра торговых часов.
sm1 Часовой пояс — Указание на часовой пояс GMT и летнее время.
sm2 Включение фильтра часов — Описание включения фильтра торговых часов.
UseTradingHours Фильтр торговых часов — Включение/отключение фильтра торговых часов (0 — выкл, 1 — вкл).
sm4 Азиатский рынок описание — Описание торговли на азиатском рынке.
TradeAsianMarket Азиатский рынок — Включение/отключение торговли на азиатском рынке (0 — выкл, 1 — вкл).
Start trades after time (AsianStart) Азиатский старт — Время начала торговли на азиатском рынке (в GMT-часах).
Stop trading after time (AsianStop) Азиатский стоп — Время окончания торговли на азиатском рынке (в GMT-часах).
sm5 Европейский рынок описание — Описание торговли на европейском рынке.
TradeEuropeanMarket Европейский рынок — Включение/отключение торговли на европейском рынке (0 — выкл, 1 — вкл).
Start trades after time (EurStart) Европейский старт — Время начала торговли на европейском рынке (в GMT-часах).
Stop trading after time (EurStop) Европейский стоп — Время окончания торговли на европейском рынке (в GMT-часах).
sm6 Нью-Йоркский рынок описание — Описание торговли на нью-йоркском рынке.
TradeNewYorkMarket Нью-Йоркский рынок — Включение/отключение торговли на нью-йоркском рынке (0 — выкл, 1 — вкл).
Start trades after time (NYStart) Нью-Йорк старт — Время начала торговли на нью-йоркском рынке (в GMT-часах).
Stop trading after time (NYStop) Нью-Йорк стоп — Время окончания торговли на нью-йоркском рынке (в GMT-часах).
Получить полный код

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

#include <stdlib.mqh>

extern string  Expert_Name    = "DMAC_EA";
extern int     MagicNumberBase = 200000;
extern string UserComment = "DMAC";

extern string  stf0 = "---TimeFrames---";
extern string  stf1 = "1. Month";
extern string  stf2 = "2. Week";
extern string  stf3 = "3. Day";
extern string  stf4 = "4. 4 Hour";
extern string  stf5 = "5. 1 Hour";
extern string  stf6 = "6. 30 minute";
extern string  stf7 = "7. 15 minute";
extern string  stf8 = "8. 5 minute";
extern string  stf9 = "9. 1 minute";
extern int     TradeTimeFrame  = 5;

extern string ma0 = "Moving Average Modes";
extern string ma1 = " 0=sma, 1=ema, 2=smma";
extern string ma2 = " 3=lwma, 4=LSMA";
extern int FastMA_Mode = 1;          //0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA
extern int FastMA_Period =   5;
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 FastMA_AppliedPrice = 0;  // 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)
extern int SlowMA_Mode = 1;           //0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA
extern int SlowMA_Period =   12;
extern int SlowMA_AppliedPrice = 0;  // 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)
extern int SignalCandle=1;

extern string  mm = "---Money Management---";
extern double  Lots=1.0;
extern double  MaxLots = 100;
extern bool    UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern bool    BrokerIsIBFX = false;
extern string  m1="Set mini and micro to false for standard account";
extern bool    AccountIsMini = false;
extern bool    AccountIsMicro = false;
extern string  fm="UseFreeMargin = false to use Account Balance";
extern bool    UseFreeMargin = false;
extern double  TradeSizePercent = 10;  // Change to whatever percent of equity you wish to risk.
extern bool    BrokerPermitsFractionalLots = true;

extern string  st6 = "--Profit Controls--";
extern double StopLoss = 250;       // Maximum pips willing to lose per position.
extern int TakeProfit = 0;          // Maximum profit level achieved.

extern string  tsp0 = "--Trailing Stop Types--";
extern string  tsp1 = " 1 = Trail immediately";
extern string  tsp2 = " 2 = Wait to trail";
extern string  tsp3 = " 3 = Uses 3 levels before trail";
extern bool    UseTrailingStop = true;
extern int     TrailingStopType = 3;    // Type 1 moves stop immediately, Type 2 waits til value of TS is reached

extern string  ts2 = "Settings for Type 2";
extern double  TrailingStop = 40;    // 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 = 15;       // Move Stop to Breakeven
extern double SecondMove = 30;      // Type 3 second level pip gain
extern double SecondStopLoss = 20;      // 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 int Slippage = 10;           // Possible fix for not getting closed    

extern string  sm0="--Trading Hours Filter--";
extern string  sm1=" Times are GMT when UseDST=false";
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 = 300;      // Stop trading after time
extern string  sm5="Trade Europe - Enter 0 for false, 1 for true";
extern int    TradeEuropeanMarket = 1;
extern int     EurStart = 900;       // Start trades after time
extern int     EurStop = 1100;      // Stop trading after time
extern string  sm6="Trade NY - Enter 0 for false, 1 for true";
extern int    TradeNewYorkMarket = 0;
extern int     NYStart = 1300;       // Start trades after time
extern int     NYStop = 1500;      // Stop trading after time

bool     YesStop;

int            MagicNumber=0;
string setup;
double lotMM;
int TradesInThisSymbol;
double   myPoint;

int allTF[9]={PERIOD_MN1,PERIOD_W1,PERIOD_D1,PERIOD_H4,PERIOD_H1,PERIOD_M30,PERIOD_M15,PERIOD_M5,PERIOD_M1};
int tf1;

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

int deinit()
  {
  }

double SetPoint(string mySymbol)
{
   double mPoint, myDigits;

   myDigits = MarketInfo (mySymbol, MODE_DIGITS);
   if (myDigits < 4)
      mPoint = 0.01;
   else
      mPoint = 0.0001;

   return(mPoint);
}

double LSMA(int TimeFrame, int LSMAPeriod, int LSMAPrice,int shift)
{
   double wt;

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

bool CheckExitCondition(int TradeType)
{
   bool YesClose;
   double fMA, myClose;

   YesClose = false;
   if (FastMA_Mode == 4)
   {
     fMA = LSMA(tf1,FastMA_Period,FastMA_AppliedPrice,SignalCandle);
   }
   else
   {
     fMA = iMA(NULL, tf1, FastMA_Period, 0, FastMA_Mode, FastMA_AppliedPrice, SignalCandle);
   }

   myClose =  iClose(Symbol(), tf1, SignalCandle);
   if (TradeType == OP_BUY && myClose < fMA ) YesClose = true;

   if (TradeType == OP_SELL && myClose > fMA) YesClose = true;

   return (YesClose);
}

bool CheckEntryCondition(int TradeType)
{
   bool YesTrade;
   double fMA, sMA, myClose;

   YesTrade = false;
   if (FastMA_Mode == 4)
   {
     fMA = LSMA(tf1,FastMA_Period,FastMA_AppliedPrice,SignalCandle);
   }
   else
   {
     fMA = iMA(NULL, tf1, FastMA_Period, 0, FastMA_Mode, FastMA_AppliedPrice, SignalCandle);
   }
   if (SlowMA_Mode == 4)
   {
     sMA = LSMA(tf1,SlowMA_Period,SlowMA_AppliedPrice,SignalCandle);
   }
   else
   {
     sMA = iMA(NULL, tf1, SlowMA_Period, 0, SlowMA_Mode, SlowMA_AppliedPrice, SignalCandle);
   }

   myClose =  iClose(Symbol(), tf1, SignalCandle);

     if (TradeType == OP_BUY && fMA > sMA && myClose > fMA)  YesTrade = true;

     if (TradeType == OP_SELL && fMA < sMA && myClose < fMA) YesTrade = true;

   return (YesTrade);
}

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

void OpenTrade(int signal, double myLots)
{  
  int res, ticket, err;
  double TPprice,STprice;

   RefreshRates();

   if (signal==OP_BUY) 
   {
      res=OrderSend(Symbol(), OP_BUY, myLots, Ask, Slippage, 0, 0, UserComment, MagicNumber, 0, Green);
      if (res > 0)
      {
         ticket = res;
         OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
         if (StopLoss != 0 || TakeProfit != 0)
	      {
            TPprice = 0.0;
            if (TakeProfit > 0) TPprice=TakeLong(OrderOpenPrice(), TakeProfit, myPoint);
            STprice = 0.0;
            if (StopLoss > 0)
            {
              STprice=StopLong(OrderOpenPrice(), StopLoss, myPoint);
		        STprice = ValidStopLoss(Symbol(), OP_BUY,Bid, STprice, myPoint);
		      }   

            if (Digits > 0) 
            {
              STprice = NormalizeDouble( STprice, Digits);
              TPprice = NormalizeDouble( TPprice, Digits); 
            }
		      ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
		   }

      }
   } 
   else if (signal==OP_SELL) 
   {
      res=OrderSend(Symbol(), OP_SELL, myLots, Bid, Slippage, 0, 0, UserComment, MagicNumber, 0, Red);
      if (res > 0)
      {
         ticket = res;
         OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
         if (StopLoss != 0 || TakeProfit != 0)
	      {
            TPprice = 0.0;
            if (TakeProfit > 0) TPprice=TakeShort(OrderOpenPrice(),TakeProfit, myPoint);
            STprice = 0.0;
            if (StopLoss > 0)
            {
              STprice=StopShort(OrderOpenPrice(), StopLoss, myPoint);
		        STprice = ValidStopLoss(Symbol(), OP_SELL,Ask, STprice, myPoint); 
		      }  

            if (Digits > 0) 
            {
              STprice = NormalizeDouble( STprice, Digits);
              TPprice = NormalizeDouble( TPprice, Digits); 
            }
		      ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
		   }
       }
   }

   if(res<0)
   {
     err = GetLastError();
     Print("OrderSend failed with error(" + err + ") " + ErrorDescription(err) + " Lots:" + DoubleToStr(myLots, 2) );
   }
   return;
}

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

   NumBuyTrades = 0;
   NumSellTrades = 0;
   for(cnt=OrdersTotal()-1;cnt>=0;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 HandleOpenPositions()
{
   int cnt;
   bool YesClose;
   double pt;

   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
   {
      OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)

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

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

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

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

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

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

Стоимость полного кода
1 456,50₽ ≈ $17.80