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

two_ma_cross_eatrade manager_v4.mq4

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

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Этот советник для MetaTrader 4 работает на языке MQL4 и предназначен для автоматического управления торговыми позициями на основе скрещивания двух скользящих средних. Советник может открывать позиции Buy или Sell при пересечении быстрой и медленной MA, а также поддерживает альтернативный режим SuperSignal с сигналами на основе LWMA на старших таймфреймах. Реализованы контроль рисков, стоп-лосс, тейк-профит, трейлинг-стоп, а также система уведомлений через звуковые оповещения и электронную почту.

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

НастройкаОписание
SuperSignal SuperSignal — Переключатель режима работы: при выключении используется стандартное пересечение MA, при включении — режим SuperSignal на основе LWMA
UseStepMa UseStepMa — Включает или отключает фильтр StepMA для подтверждения сигнала в режиме SuperSignal
StepMaShift StepMaShift — Сдвиг для расчёта значения StepMA-фильтра
Comment1 Comment1 — Текстовый разделитель для группы параметров стратегии
CloseAtProfit CloseAtProfit — Закрывает все позиции, когда прибыль на счёте достигает указанного значения
CloseAtLoss CloseAtLoss — Закрывает все позиции, когда убыток на счёте достигает указанного значения
EA_Activated EA_Activated — Включает или отключает работу советника
TimeFrame TimeFrame — Таймфрейм для расчёта скользящих средних
Order_Type Order_Type — Тип ордеров: только покупка, только продажа или оба направления
Maximum_Trades_Open Maximum_Trades_Open — Максимальное количество одновременно открытых позиций
Wait_Mins_For_Next_Trade Wait_Mins_For_Next_Trade — Минимальное время ожидания между сделками в минутах
Fast_MA_Period Fast_MA_Period — Период быстрой скользящей средней
Fast_MA_Method Fast_MA_Method — Метод расчёта быстрой скользящей средней
Fast_MA_Price_Type Fast_MA_Price_Type — Тип цены для расчёта быстрой скользящей средней
Slow_MA_Period Slow_MA_Period — Период медленной скользящей средней
Slow_MA_Method Slow_MA_Method — Метод расчёта медленной скользящей средней
Slow_MA_Price_Type Slow_MA_Price_Type — Тип цены для расчёта медленной скользящей средней
Max_Pips_Away_From_Cross Max_Pips_Away_From_Cross — Максимальное допустимое расстояние от текущей цены до точки пересечения MA в пунктах
Comment2 Comment2 — Текстовый разделитель для группы параметра магического номера
Magic_N Magic_N — Магический номер для идентификации ордеров советника
Comment3 Comment3 — Текстовый разделитель для группы параметров расчёта лотов
Risk_Management Risk_Management — Режим управления рисками: автоматический или ручной
Comment4 Comment4 — Текстовый разделитель для группы параметров автоматического риска
Auto_Risk_Percent Auto_Risk_Percent — Процент риска от equity на одну сделку при автоматическом управлении
Auto_Max_Risk_in_Total_Orders Auto_Max_Risk_in_Total_Orders — Максимальный суммарный риск в процентах на все открытые позиции
Comment5 Comment5 — Текстовый разделитель для группы параметров ручного лотирования
Manual_Lots Manual_Lots — Размер лота при ручном управлении рисками
Manual_Maximum_Lots Manual_Maximum_Lots — Максимально допустимый суммарный размер лотов при ручном управлении
Comment6 Comment6 — Текстовый разделитель для группы параметров проскальзывания
Slippage Slippage — Максимально допустимое проскальзывание цены в пунктах
Comment7 Comment7 — Текстовый разделитель для группы параметров стоп-лосса
StopLoss StopLoss — Стоп-лосс в пунктах
Comment8 Comment8 — Текстовый разделитель для группы параметров тейк-профита
TakeProfit TakeProfit — Тейк-профит в пунктах
Comment9 Comment9 — Текстовый разделитель для группы параметров трейлинг-стопа
TrailingStop TrailingStop — Трейлинг-стоп в пунктах
TrailingStep TrailingStep — Шаг сдвига трейлинг-стопа в пунктах
Comment10 Comment10 — Текстовый разделитель для группы параметров оповещений
Sound_Alert Sound_Alert — Включает или отключает звуковые оповещения о событиях
Email_Alert Email_Alert — Включает или отключает отправку email-уведомлений о событиях
Comment11 Comment11 — Текстовый разделитель для группы дополнительных параметров
EASounds EASounds — Включает или отключает воспроизведение звука при открытии и закрытии ордеров
Show_Profit_Comments Show_Profit_Comments — Включает или отключает отображение результатов сделок в комментариях на графике
Получить полный код

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

#property description "This EA triggers a Buy or Sell Order after two moving averages cross each other.\n"
#property description "- Fast MA crossing above the Slow MA triggers a Buy Order\n"
#property description "- Fast MA crossing below the Slow MA triggers a Sell Order\n"

enum e_cycles{ Min_5=1, Min_15=2, Min_30=3, Min_60=4, Min_240=5, Daily=6, Weekly=7, Monthly=8 };
enum order_type{ Both=1, Only_Buy=2, Only_Sell=3 };
enum e_risk { Automatic=1, Manual=2 };

enum e_method{ SMA        =  1,
               EMA        =  2,
               Wilder     =  3,
               LWMA       =  4,
               SineWMA    =  5,
               TriMA      =  6,
               LSMA       =  7,
               SMMA       =  8,
               HMA        =  9,
               ZeroLagEMA = 10,
               ITrend     = 11,
               Median     = 12,
               GeoMean    = 13,
               REMA       = 14,
               ILRS       = 15,
               IE_2       = 16,
               TriMAgen   = 17
             };

extern bool SuperSignal=true;
extern bool UseStepMa=true;
extern int StepMaShift=1;

extern string     Comment1                      = "- Strategy Parameters -";
extern int CloseAtProfit=+150;
extern int CloseAtLoss=-60;
double pl=0;
extern bool       EA_Activated                  = true;
input  e_cycles   TimeFrame                     = Min_5;
input  order_type Order_Type                    = Both;
extern int        Maximum_Trades_Open           = 2;
extern int        Wait_Mins_For_Next_Trade      = 30;
extern int        Fast_MA_Period                = 1;
extern e_method   Fast_MA_Method                = SMA;
extern ENUM_APPLIED_PRICE    Fast_MA_Price_Type = PRICE_CLOSE;
extern int        Slow_MA_Period                = 2;
extern e_method   Slow_MA_Method                = SMA;
extern ENUM_APPLIED_PRICE    Slow_MA_Price_Type = PRICE_CLOSE;
extern double     Max_Pips_Away_From_Cross      = 10;
extern string     Comment2                      = "- Order magic number. May be used as user defined identifier -";
extern int        Magic_N                       = 1236;
extern string     Comment3                      = "- AutoLots True will calculate Lots automatically -";
input  e_risk     Risk_Management               = Automatic;
extern string     Comment4                      = "- Automatic Risk, For ex: 2.5 means 2.5% -";
extern double     Auto_Risk_Percent             = 0.625;
extern double     Auto_Max_Risk_in_Total_Orders = 2;
extern string     Comment5                      = "- Manual Number of Lots (if not Automatic Risk) -";
extern double     Manual_Lots                   = 0.3;
extern double     Manual_Maximum_Lots           = 3.0;
extern string     Comment6                      = "- Maximum price slippage for buy or sell orders -";
extern double     Slippage                      = 3;
extern string     Comment7                      = "- Stop loss in Pips -";
extern double     StopLoss                      = 60;
extern string     Comment8                      = "- Take profit in Pips -";
extern double     TakeProfit                    = 300;
extern string     Comment9                      = "- Trailing Stop in Pips -";
extern double     TrailingStop                  = 50;
extern double     TrailingStep                  = 5;
extern string     Comment10                     = "- Should the EA use alerts -";
extern bool       Sound_Alert                   = true;
extern bool       Email_Alert                   = false;
extern string     Comment11                     = "- Optional EA actions -";
extern bool       EASounds                      = true;
extern bool       Show_Profit_Comments          = true;

double Emergency_SL = 2000;

string EA_Name = "Two Moving Average Cross EA";
string CommentOrder = EA_Name+" Order";

double Lots;

int Open_Long, Open_Short, Close_Long, Close_Short;
double Side, Open_Level, TP_Level, SL_Level, TSL_Level = 0;
double Profit;
string Calculation_Comments, Orders_Comments, Profit_Comments;
datetime LastClose, LastOpen;

double Equity_Risked=0;
double Order_SL;
double Orders_Lots;

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

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

void EA_Calculations(){

   Open_Long = 0;
   Open_Short = 0;
   Close_Long = 0;
   Close_Short = 0;

   int period     = Get_TimeFrame(TimeFrame);
   int multiplier = Get_TimeFrame(TimeFrame, true)/Period();
   int limit      = Slow_MA_Period*multiplier*2;

   int iFast_MA_Method = -1;
   int iSlow_MA_Method = -1;

   double MA1_0, MA2_0, MA1_1, MA2_1;

   if (Fast_MA_Method==1) iFast_MA_Method = ENUM_MA_METHOD(0);
   if (Fast_MA_Method==2) iFast_MA_Method = ENUM_MA_METHOD(1);
   if (Fast_MA_Method==8) iFast_MA_Method = ENUM_MA_METHOD(2);
   if (Fast_MA_Method==4) iFast_MA_Method = ENUM_MA_METHOD(3);
   if (Slow_MA_Method==1) iSlow_MA_Method = ENUM_MA_METHOD(0);
   if (Slow_MA_Method==2) iSlow_MA_Method = ENUM_MA_METHOD(1);
   if (Slow_MA_Method==8) iSlow_MA_Method = ENUM_MA_METHOD(2);
   if (Slow_MA_Method==4) iSlow_MA_Method = ENUM_MA_METHOD(3);

   if (iFast_MA_Method != -1){

      MA1_0 = iMA(NULL,period,Fast_MA_Period,0,iFast_MA_Method,ENUM_APPLIED_PRICE(Fast_MA_Price_Type),0);
      MA1_1 = iMA(NULL,period,Fast_MA_Period,0,iFast_MA_Method,ENUM_APPLIED_PRICE(Fast_MA_Price_Type),1);

   }else{

      MA1_0 = iCustom(NULL,period,"Two_MA_Cross_Indicator",Fast_MA_Period,Fast_MA_Method,Fast_MA_Price_Type,Slow_MA_Period,Slow_MA_Method,Slow_MA_Price_Type,0,0);
      MA1_1 = iCustom(NULL,period,"Two_MA_Cross_Indicator",Fast_MA_Period,Fast_MA_Method,Fast_MA_Price_Type,Slow_MA_Period,Slow_MA_Method,Slow_MA_Price_Type,0,1);

   }

   if (iSlow_MA_Method != -1){

      MA2_0 = iMA(NULL,period,Slow_MA_Period,0,iSlow_MA_Method,ENUM_APPLIED_PRICE(Slow_MA_Price_Type),0);
      MA2_1 = iMA(NULL,period,Slow_MA_Period,0,iSlow_MA_Method,ENUM_APPLIED_PRICE(Slow_MA_Price_Type),1);

   }else{

      MA2_0 = iCustom(NULL,period,"Two_MA_Cross_Indicator",Fast_MA_Period,Fast_MA_Method,Fast_MA_Price_Type,Slow_MA_Period,Slow_MA_Method,Slow_MA_Price_Type,1,0);
      MA2_1 = iCustom(NULL,period,"Two_MA_Cross_Indicator",Fast_MA_Period,Fast_MA_Method,Fast_MA_Price_Type,Slow_MA_Period,Slow_MA_Method,Slow_MA_Price_Type,1,1);

   }

   double PP=MarketInfo(OrderSymbol(), MODE_POINT);
   double Distance = MathAbs(MA2_0 - Close[0]);

   if (  (Risk_Management==1 && Auto_Max_Risk_in_Total_Orders-Equity_Risked > Auto_Risk_Percent)
      || (Risk_Management==2 && Manual_Maximum_Lots-Orders_Lots > Manual_Lots)
      )
      bool Risk_Allowed = true;
   else
      Risk_Allowed = false;

   if (Digits==3||Digits==5) Max_Pips_Away_From_Cross*=10;

   if (EA_Activated && Risk_Allowed && MA1_0 > MA2_0 && MA1_1 < MA2_1 && Distance <= Max_Pips_Away_From_Cross*PP && TimeCurrent() > (LastOpen+(Wait_Mins_For_Next_Trade*60))){
      Open_Long = 1;
      LastOpen = TimeCurrent();
   }

   if (EA_Activated && Risk_Allowed && MA1_0 < MA2_0 && MA1_1 > MA2_1 && Distance <= Max_Pips_Away_From_Cross*PP && TimeCurrent() > (LastOpen+(Wait_Mins_For_Next_Trade*60))){
      Open_Short = 1;
      LastOpen = TimeCurrent();
   }

   if (MA1_0 > MA2_0) string next_trade = "SELL"; else next_trade = "BUY";
   Calculation_Comments = "MA1: "+DoubleToStr(MA1_0,4)+" | MA2: "+DoubleToStr(MA2_0,4)+"\n";
   Calculation_Comments = "Max Pips: "+(Max_Pips_Away_From_Cross*PP)+" | Distance: "+(Distance)+"\n";
   Calculation_Comments+= "Waiting for MA cross to "+next_trade;

}
void SuperSignal(){

   Open_Long = 0;
   Open_Short = 0;
   Close_Long = 0;
   Close_Short = 0;

   if(Bid<iMA(NULL,PERIOD_H4,1000,0,MODE_LWMA,PRICE_CLOSE,0))
     if(iHigh(NULL,PERIOD_H1,1)<iMA(NULL,PERIOD_H1,20,0,MODE_LWMA,PRICE_CLOSE,0))
       if(!UseStepMa || StepMA(StepMaShift)==-1)
         {Open_Short=1;}

   if(Bid>iMA(NULL,PERIOD_H4,1000,0,MODE_LWMA,PRICE_CLOSE,0))
     if(iLow(NULL,PERIOD_H1,1)>iMA(NULL,PERIOD_H1,20,0,MODE_LWMA,PRICE_CLOSE,0))
       if(!UseStepMa || StepMA(StepMaShift)==1)
         {Open_Long=1;}

   if(Bid<iMA(NULL,PERIOD_H1,20,0,MODE_LWMA,PRICE_CLOSE,1))
     if(iHigh(NULL,PERIOD_H1,1)<iMA(NULL,PERIOD_H1,20,0,MODE_LWMA,PRICE_CLOSE,1))
       {ClosePos(OP_BUY);}

   if(Bid>iMA(NULL,PERIOD_H1,20,0,MODE_LWMA,PRICE_CLOSE,1))
     if(iLow(NULL,PERIOD_H1,1)>iMA(NULL,PERIOD_H1,20,0,MODE_LWMA,PRICE_CLOSE,1))
       {ClosePos(OP_SELL);}

}

int StepMA(int shift)
{
double val=iCustom(NULL,PERIOD_H1,"stepma_v9_nmc",0,shift);
double low=iLow(NULL,PERIOD_H1,shift);
double high=iHigh(NULL,PERIOD_H1,shift);
if(low>val)
return 1;
if(high<val)
return -1;
return 0;
}

void Set_Levels(){

   double PP=MarketInfo(OrderSymbol(), MODE_POINT);
   double BID=MarketInfo(OrderSymbol(), MODE_BID);
   double ASK=MarketInfo(OrderSymbol(), MODE_ASK);
   double TP = PP*TakeProfit;
   double SL = PP*StopLoss;
   double BUY_TSL  = BID - (TrailingStop*PP);
   double SELL_TSL = ASK + (TrailingStop*PP);

   if(Side == -1) return;

   if (StopLoss==0) StopLoss = Emergency_SL;

   if(TakeProfit > 0){

      if(Side == OP_BUY  ) TP_Level = Open_Level + TP;
      if(Side == OP_SELL ) TP_Level = Open_Level - TP;

   }

   if(StopLoss > 0){

      if(Side == OP_BUY  ) SL_Level = Open_Level - SL;
      if(Side == OP_SELL ) SL_Level = Open_Level + SL;

   }

   bool Order_Modified = false;
   if ((OrderTakeProfit()==0 && TakeProfit > 0) || (OrderStopLoss()==0 && StopLoss > 0)){
      if (OrderModify(OrderTicket(),0,SL_Level,TP_Level,0,clrBlue)){ Order_Modified = true; }
   }

   if(TrailingStop){

      if(Side == OP_BUY){
         if ((BID-OrderOpenPrice())>TrailingStop*PP){
            if (OrderStopLoss()<BID-(TrailingStop+TrailingStep-1)*PP && BUY_TSL>SL_Level) {
               if (OrderModify(OrderTicket(),OrderOpenPrice(),BUY_TSL,OrderTakeProfit(),0,clrMagenta)){ Order_Modified = true; }
            }
         }
      }

      if(Side == OP_SELL){
         if (OrderOpenPrice()-ASK>TrailingStop*PP) {
            if (OrderStopLoss()>ASK+(TrailingStop+TrailingStep-1)*PP && SELL_TSL<SL_Level) {
               if (OrderModify(OrderTicket(),OrderOpenPrice(),SELL_TSL,OrderTakeProfit(),0,clrMagenta)){ Order_Modified = true; }
            }
         }
      }

   }

   return;
}

double LotSize() {

    double minlot    = MarketInfo(Symbol(), MODE_MINLOT);
    double maxlot    = MarketInfo(Symbol(), MODE_MAXLOT);
    double tickVal   = MarketInfo(Symbol(), MODE_TICKVALUE);

    double Equity = AccountInfoDouble(ACCOUNT_EQUITY);
    double _Risk = Auto_Risk_Percent / 100;
    double Risk_per_Trade   = Equity * _Risk;
    double Pips_Risked = StopLoss  * tickVal;

    if(Risk_per_Trade > 0 && Pips_Risked > 0 && (Risk_per_Trade / Pips_Risked) > 0) {
        double lots = (Risk_per_Trade / Pips_Risked);
        if(lots < minlot) {
            lots = minlot;
        } else if(lots > maxlot) {
            lots = maxlot;
        }
        Lots = lots;
    }
    return(0);
}

void EA_Notes(){

   if (Digits==3||Digits==5){
      double sl = StopLoss/10;
      double tp = TakeProfit/10;
      double tsl = TrailingStop/10;
   }
   else{
      sl = StopLoss/10;
      tp = TakeProfit/10;
      tsl = TrailingStop/10;
   }
   string Currency = AccountCurrency();

   string Note = EA_Name+"\n";
   Note = Note + "Account Equity: "+AccountInfoDouble(ACCOUNT_EQUITY)+" "+Currency+"\n";
   Note = Note + "Risk per SL Pip: "+DoubleToStr(((AccountInfoDouble(ACCOUNT_EQUITY)*(Auto_Risk_Percent/100))/sl),2)+" "+Currency+"\n";
   Note = Note + "Total Risk per Trade: "+DoubleToStr((AccountInfoDouble(ACCOUNT_EQUITY)*(Auto_Risk_Percent/100)),2)+" "+Currency+"\n";
   Note = Note + "Lots: " + DoubleToStr(Lots,2);
   if(Risk_Management==1) Note = Note + " (Automatic "+Auto_Risk_Percent+"%)"; else Note = Note + " (Set Manually)";
   Note = Note + "\n";
   Note = Note + "SL:" + DoubleToStr(sl,0) + " pips | "; 
   Note = Note + "TP:" + DoubleToStr(tp,0) + " pips | ";
   Note = Note + "TSL:" + DoubleToStr(tsl,0) + " pips\n";   
   Note = Note + "=======================\n";  
   if (Show_Profit_Comments){
      Note = Note + "Trades Results:\n";
      Note = Note + Profit_Comments;
   }
   Note = Note + "-----------------------\nTotal Profit: " + DoubleToStr(Profit,2) + "\n";
   Note = Note + "=======================\n"; 
   Note = Note + Calculation_Comments+"\n";
   Note = Note + "=======================\n"; 
   Note = Note + Orders_Comments;

   Comment(Note);
}

int OpenPos(int direction){

   int    attempts = 0;
   int    order = 0;
   double price;
   string string_direction = "";

   for(attempts=0;attempts<3;attempts++){

      if (IsTradeContextBusy()){
         Sleep(1000);

      }else{

         RefreshRates();         

         if(direction == OP_BUY){
            price = Ask;
            string_direction = "Long";
         }else{
            price = Bid;
            string_direction = "Short";
         }        

         if(EASounds) PlaySound("alert.wav");

         order = OrderSend(Symbol(),direction,Lots,price,Slippage,0,0,CommentOrder,Magic_N,0,Red);

         if(order<=0) {

            Print("Error Occured : "+Errors(GetLastError()));

         }else{

            attempts = 3;
            Print("Order opened : "+Symbol()+" Price @ "+price+" SL @ "+StopLoss+" TP @"+TakeProfit+" order ="+order);
            Side = direction;
            Open_Level = OrderOpenPrice();
            TP_Level = 0;
            SL_Level = 0;
            TSL_Level = 0;
            Notifications("Open "+string_direction,price,StopLoss,TakeProfit,order);
            return(order);

         }
      }
   }
   return(-1);
}

int ClosePos(int direction){

   int    i        = 0;
   int    attempts = 0;
   int    order   = 0;
   double price;
   string string_direction = "";

   for(i=0; i<OrdersTotal(); i++) {

      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

         if (OrderType()==direction && OrderSymbol()==Symbol() && ((OrderMagicNumber () == Magic_N) || Magic_N==0)) {

            for(attempts=0;attempts<3;attempts++){

               if (IsTradeContextBusy()){

                  Sleep(1000);

               }els

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

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

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

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

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

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

Стоимость полного кода
2 410,20₽ ≈ $29.46