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

SmartAssTrade-V2

smartasstrade-v2.mq4

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

ea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих тегов2 to 1 strategy with signals.pineTradingView · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих теговbago ea_5391011682577321359.mq4MQL4 / MetaTrader 4 · 2 общих теговfresh algo v24 tradingview indicator_5918156155804195406.pineTradingView · 2 общих теговea_rsi_stocho_ma.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

SmartAssTrade-V2 — это советник (Expert Advisor) для MetaTrader 4, написанный на языке MQL4 и предназначенный для автоматической торговли на валютном рынке. Работает исключительно на таймфрейме M30, что указано в свойствах и исходном коде продукта. Советник разработан Roy Philips Jacobs и опубликован в 2014 году.

Советник анализирует ценовые данные с нескольких таймфреймов, используя осцилляторы и индикаторы трендов для формирования сигналов на покупку и продажу. Поддерживается автоматический расчёт уровней Take Profit и Stop Loss, а также опциональное использование трейлинг-стопа для управления открытыми позициями.

Предусмотрена автоматическая корректировка объёма лотов на основе баланса счёта или ручная настройка. Советник предоставляет настройки для торговли по пятницам, ограничения максимального количества открытых ордеров, а также гибкие параметры фиксации прибыли и убытков как в автоматическом, так и в ручном режиме.

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

НастройкаОписание
SmartAssTradeV2 SmartAssTradeV2 — Текстовый параметр для проверки авторских прав (сopyright-проверка).
SmartAssTradeV2TF SmartAssTradeV2 таймфрейм — Текстовый параметр-информация о рабочем таймфрейме советника.
SmartAssTradeV2Period Период SmartAssTradeV2 — Период (таймфрейм), на котором работает советник. По умолчанию PERIOD_M30.
If True, EA still trading at Friday (FridayTrade) Торговля по пятницам — Если True, советник продолжает торговать в пятницу.
OptimizationLots Оптимизация лотов — Текстовый параметр-информация для группы настроек оптимизации лотов.
If True, Lots wil calculation by EA, default Lots size = 0.01" (LotsOptimization) Оптимизация лотов — Если True, размер лота рассчитывается советником автоматически на основе баланса счёта.
If LotsOptimization=False, Lots adjusted by user (Lots) Размер лота — Размер лота при отключённой оптимизации (LotsOptimization=False). Значение регулируется пользователем.
Maximum Allowed for Open Order (Maximum Pairs to Trade = 12 pairs) (MaxOpenOrder) Максимум открытых ордеров — Максимальное количество одновременно открытых ордеров.
AutomaticSystemTP Автоматическая система TP — Текстовый параметр-информация для группы настроек автоматического Take Profit.
TP will calculation by EA and Automatic TP by EA (AutomaticTakeProfit) Автоматический Take Profit — Если True, уровень Take Profit рассчитывается советником автоматически.
True or False -> If Set True, 100% TP by EA not use minimum TP. (NoMinimumTakeProfit) Без минимального Take Profit — Если True, советник не использует минимальное значение Take Profit.
TP by EA on minimum TP values (MinimumSystemTP) Минимальная система TP — Текстовый параметр-информация для настроек минимального Take Profit.
Minimum TP by EA on the AutomaticTakeProfit=True function, default value 27 (MinimumTP) Минимальный Take Profit — Минимальное значение Take Profit при включённом AutomaticTakeProfit и выключенном NoMinimumTakeProfit.
TP by Terminal MT4 (same as manual trading) (ManualSystemTP) Ручная система TP — Текстовый параметр-информация для группы ручных настроек Take Profit.
TP by System, values can adjust by user, default value 35 (TakeProfit) Take Profit — Значение Take Profit при выключенном AutomaticTakeProfit. Регулируется пользователем.
AutomaticSystemSL Автоматическая система SL — Текстовый параметр-информация для группы настроек автоматического Stop Loss.
SL will calculation by EA (AutomaticStopLoss) Автоматический Stop Loss — Если True, уровень Stop Loss рассчитывается советником автоматически.
SL values can adjusted by user (ManualSystemSL) Ручная система SL — Текстовый параметр-информация для группы ручных настроек Stop Loss.
SL adjusted by user, default value 62 (StopLoss) Stop Loss — Значение Stop Loss при выключенном AutomaticStopLoss. Регулируется пользователем.
Use Trailing Stop, True (Yes) or False (Not) (UseTrailingStop) Использовать трейлинг-стоп — Если True, используется трейлинг-стоп для управления открытыми позициями.
If Use Trailing Stop True, input Trailing Stop Value, default value 30 (TrailingStop) Трейлинг-стоп — Значение трейлинг-стопа при включённом UseTrailingStop.
Input Trailing Stop Step Value (default 1.0) (TrailingStopStep) Шаг трейлинг-стопа — Шаг трейлинг-стопа при включённом UseTrailingStop.
Получить полный код

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

#property version   "2.00"

#property description "The SmartAssTrade-V2 Forex Expert Advisor is SmartAssTrade EA Version 2 in Code Base MQL4"
#property description "SmartAssTrade-V2 EA Only working on M30 Timeframes or PERIOD_M30"
#property description "If you trade use SmartAssTrade-V2 EA on others Timeframes, may you will always loss."

#property description "In any case the author is not liable for any damage or loss whatsoever."
#property description "Sometimes high profits can be disrupted by a row of losses."
#property description "In the Forex online trading, it is impossible to always profit."

#property description "-------Use this Expert Advisor at your own risk.-------"

#include <stderror.mqh>
#include <stdlib.mqh>

input string     SmartAssTradeV2 = "Copyright ? 2014 3RJ ~ Roy Philips-Jacobs";
input string   SmartAssTradeV2TF = "SmartAssTrade-V2 EA's Only Use on M30 Timeframes";
input int  SmartAssTradeV2Period = PERIOD_M30;
extern bool          FridayTrade = True; // If True, EA still trading at Friday
input string    OptimizationLots = "Set LotsOptimization=True";
extern bool     LotsOptimization = True; // If True, Lots wil calculation by EA, default Lots size = 0.01"
extern double               Lots = 0.01; // If LotsOptimization=False, Lots adjusted by user
extern int          MaxOpenOrder = 12; // Maximum Allowed for Open Order (Maximum Pairs to Trade = 12 pairs)

input string   AutomaticSystemTP = "Set AutomaticTakeProfit=True or False";
extern bool  AutomaticTakeProfit = True; // TP will calculation by EA and Automatic TP by EA
extern bool  NoMinimumTakeProfit = False; // True or False -> If Set True, 100% TP by EA not use minimum TP.
input string     MinimumSystemTP = "If Set NoMinimumTakeProfit=False"; // TP by EA on minimum TP values
extern double          MinimumTP = 27; // Minimum TP by EA on the AutomaticTakeProfit=True function, default value 27
input string      ManualSystemTP = "If Set AutomaticTakeProfit=False"; // TP by Terminal MT4 (same as manual trading)
extern double         TakeProfit = 35; // TP by System, values can adjust by user, default value 35
input string   AutomaticSystemSL = "Set AutomaticStopLoss=True";
extern bool    AutomaticStopLoss = True; // SL will calculation by EA
input string      ManualSystemSL = "If Set AutomaticStopLoss=False"; // SL values can adjusted by user
extern double           StopLoss = 62; // SL adjusted by user, default value 62
extern bool      UseTrailingStop = False; // Use Trailing Stop, True (Yes) or False (Not)
extern double       TrailingStop = 30.0; // If Use Trailing Stop True, input Trailing Stop Value, default value 30
extern double   TrailingStopStep = 1.0; // Input Trailing Stop Step Value (default 1.0)

double digit,lot,pp;
double AcEq,sl,tp,minlot;
double tsstv,tstpv,trstart;
double slA,slB,tpA,tpB,tpAB;
double lastAsk,lastBid,dev,Mnt;
double difB,difS,pBo,pSo,pdifB,pdifS;

bool nomintp;
bool NoOrder,TrlStp;
bool lotopt,opttp,autsl;
bool mdHC,mdLC,mdUp,mdDn;
bool SignalBuy,SignalSell;

double ask; // Current Bid price
double bid; // Current Ask price
datetime time; // Time of the last prices update
double last; // Price of the last deal (Last)
ulong volume; // Volume for the current Last price

int trx;
int OpOrd;
int copied;
int satmagic=3699; // magic number
int totfr,codB,codS;
int hb,hs,ob,os,s,ip,ox;
int totalord,totalpft,totalhst;

string comB;
string comS;
string CopyR;
string symbol;

void EventSetTimer();

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

void LotOpt() //-- function: calculation Optimization Lots
   {

      if(lotopt)
        {

          AcEq=AccountEquity();
          minlot=MarketInfo(symbol,MODE_MINLOT);
          if(AcEq<=1000.00) {lot=NormalizeDouble(MarketInfo(symbol,MODE_MINLOT),2);}
          else {lot=NormalizeDouble((MathFloor(AcEq/100)*0.001)/OpOrd,2);}

          if(lot<minlot) {lot=NormalizeDouble(MarketInfo(symbol,MODE_MINLOT),2);}

        }

      else lot=Lots;

      return;

   } //-end LotOpt()

void OptSL() //-- function: calculation Stop Loss 
   {   

      if(!autsl) {sl=StopLoss*pp;}

      else {sl=62*pp;}

      return;

   } //-end OptSL()

void CalcTP() //-- function: for calculation Automatic Take Profit.
   { 

      RefreshRates();

      double dvab=Ask-Bid;

      if(opttp && nomintp)
        {      

          tp=(35*pp)-dvab;

          if(dvab<=5*pp) {tpAB=tp-(7*pp);}
          else {tpAB=tp-(11*pp);}

        }
      if(opttp && !nomintp) 
        {

          tp=(35*pp)-dvab;     
          tpAB=pp*MinimumTP;

        }

      if(!opttp) {tp=TakeProfit*pp;}

      RefreshRates();
      pBo=High[0]-Close[0];
      pSo=Close[0]-Low[0];

      pdifB=pp*difB;
      pdifS=pp*difS;
      mdHC=(pBo>pdifB);
      mdLC=(pSo>pdifS);
      mdUp=(Close[0]<(lastBid-pdifB));
      mdDn=(Close[0]>(lastAsk+pdifS));

      return;

   } //-end CalcTP()

void CkOpen() //-- function: CheckOpenTrade.
   {

      totalord=OrdersTotal();
      ob=0; 
      os=0;

      for (s=0; s<totalord; s++)
          {
             if (OrderSelect(s,SELECT_BY_POS,MODE_TRADES)==True)
                {
                   if (OrderSymbol()==symbol && OrderMagicNumber()==satmagic)
                      {

                        if (OrderType()==OP_BUY) {ob++; hb++;}
                        if (OrderType()==OP_SELL) {os++; hs++;}

                      }
                }
          }

     return;

   } //-end CkOpen()

void CkClose() //-- function: CheckOrderClose.
   {

      CkOpen();
      datetime octm;
      totalhst=OrdersHistoryTotal();

      for (s=0; s<totalhst; s++)   
          {

            if(OrderSelect(s,SELECT_BY_POS,MODE_HISTORY)==True)
              {
                if(OrderSymbol()==symbol && OrderMagicNumber()==satmagic)
                  {

                    if(OrderType()==OP_BUY)
                      {
                        RefreshRates();
                        octm=OrderCloseTime();
                        if(hb>0 && ob==0 && octm>0)
                          {
                            Print("-----CLOSED BUY ORDER ",symbol," - Instant Close By System..OK!");
                            PlaySound("ping.wav");
                            hb=0;
                            ox=1;
                            totfr=1;
                            trx=0;
                            break;
                          }                             
                      }

                    if(OrderType()==OP_SELL)
                      {
                        RefreshRates();
                        octm=OrderCloseTime();
                        if(hs>0 && os==0 && octm>0)
                          {
                            Print("-----CLOSED SELL ORDER ",symbol," - Instant Close By System..OK!");
                            PlaySound("ping.wav");
                            hs=0;
                            ox=1;
                            totfr=1;
                            trx=0;
                            break;
                          }                                
                      }

                  }
              }

          }

     return;

   } //-end CkClose()

void SmartAss() //-- function: Check trend and calculation order every 30 minutes (TF M30)
   {

     ResetLastError();
     RefreshRates();

     SignalBuy=false;
     SignalSell=false;
     bool Upward;
     bool Dnward;
     int upm,dnm;
     int osb,oss,x;

     codB=0;
     codS=0;
     int TFX[]={1,5,15,30,60};

     for(x=0;x<5;x++)
       {
          if (iOsMA(symbol,TFX[x],12,26,9,0,0)>iOsMA(symbol,TFX[x],12,26,9,0,1))
             {osb++;}
          if (iOsMA(symbol,TFX[x],12,26,9,0,0)<iOsMA(symbol,TFX[x],12,26,9,0,1))
             {oss++;}

          if(iMA(symbol,TFX[x],20,0,0,0,0)>iMA(symbol,TFX[x],20,0,0,1,0))
             {upm++;}
          if(iMA(symbol,TFX[x],20,0,0,0,0)<iMA(symbol,TFX[x],20,0,0,1,0)) 
             {dnm++;}                       
       }

     if (osb>=4 && upm>=4) {Upward=true; codB=1;}
     if (oss>=4 && dnm>=4) {Dnward=true; codS=1;}

     if (osb==5 && upm==5) {Upward=true; codB=2;}
     if (oss==5 && dnm==5) {Dnward=true; codS=2;}

     RefreshRates();
     double wpr0=100-MathAbs(iWPR(symbol,30,26,0));
     double wpr1=100-MathAbs(iWPR(symbol,30,26,1));
     double rsi0=iRSI(symbol,30,14,0,0);
     double rsi1=iRSI(symbol,30,14,0,1);
     bool wprmb=((wpr0<90.0)&&(wpr0>wpr1))&&((rsi0<77.0)&&(rsi0>rsi1));
     bool wprms=((wpr0>10.0)&&(wpr0<wpr1))&&((rsi0>23.0)&&(rsi0<rsi1));

     CkOpen();
     Mnt=(double)Minute();

     if((ob+os==0)&&(ox+totfr==0)&&(NoOrder==false)&&(MathMod(Mnt,30.0)>2.0))
       {

         if((Upward==true)&&(codB!=0)&&(wprmb)) {SignalBuy=true;}

         if((Dnward==true)&&(codS!=0)&&(wprms)) {SignalSell=true;}

        }

     if(SignalBuy) {OrdBuy();} // New Order BUY

     if(SignalSell) {OrdSell();} // New Order SELL

     return;

   } //--end SmartAss()

void OrdBuy() //-- function: Open order if price was up
   {

      CkOpen();
      LotOpt();
      OptSL();
      CalcTP();
      comB=StringConcatenate(WindowExpertName()," #BUY#ins",(string)codB); // buy orders comments

      if(ob+os==0)
         {

           if((AccountFreeMarginCheck(symbol,OP_BUY,lot)<=0) || (GetLastError()==134))
             {Print("-----OPEN NEW BUY ORDER ",symbol," - NOT ENOUGH MONEY..!"); ResetLastError(); return;}

           else  
             {  

               ResetLastError();
               int error;
               bool result;
               RefreshRates();
               ask=MarketInfo(symbol,MODE_ASK);
               lastBid=ask;
               slA=NormalizeDouble(ask-sl,digit);
               tpA=NormalizeDouble(ask+tp,digit);

               result=OrderSend(symbol,OP_BUY,lot,ask,dev,slA,tpA,comB,satmagic,0,clrGreen);

               if(result!=TRUE) {error=GetLastError();}
               if(error>0||result!=true)
                 {

                   ResetLastError();
                   Sleep(2000);
                   RefreshRates(); 
                   ask=MarketInfo(symbol,MODE_ASK);
                   lastBid=ask;
                   slA=NormalizeDouble(ask-sl,digit);
                   tpA=NormalizeDouble(ask+tp,digit);
                   result=OrderSend(symbol,OP_BUY,lot,ask,dev,slA,tpA,comB,satmagic,0,clrGreen);
                   error=GetLastError();
                   if(error>0)
                     {
                       Print("Failed to Open New BUY ORDER ",symbol,"! Error code = ",
                       GetLastError(), ", ",ErrorDescription(error));
                       ResetLastError();
                       return;
                     }                            
                 }

               if(error==0 && result==true)
                 {    
                   Print("-----SmartAssTrade-V2 EA ~ has Opened New BUY ORDER ",symbol,", Buy Instruction: ",codB," - OK!");
                   PlaySound("gun.wav");
                   hb=1;
                   trx=0;
                   ox++;
                   totfr++;
                 }
             }
         }

      return;

   } //-end OrdBuy() 

void OrdSell() //-- function: Open order if price was down
   {

      CkOpen();
      LotOpt();
      OptSL();
      CalcTP();
      comS=StringConcatenate(WindowExpertName()," #SELL#ins",(string)codS); // sell orders comments

      if(os+ob==0)
        {

          if ((AccountFreeMarginCheck(symbol,OP_SELL,lot)<=0) || (GetLastError()==134))
             {Print("-----OPEN NEW SELL ORDER ",symbol," - NOT ENOUGH MONEY..!"); ResetLastError(); return;}
          else
             {

               ResetLastError();
               int error;
               bool result;
               RefreshRates();
               bid=MarketInfo(symbol,MODE_BID);
               lastAsk=bid;             
               slB=NormalizeDouble(b

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

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

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

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

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

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

Стоимость полного кода
1 473,90₽ ≈ $18.02