TRUE Forex

Просмотр кода форекс советника Profit Trend.mq4

//+------------------------------------------------------------------+
//|                                                 Profit Trend.mq4 |
//|                                           Copyright © 2013, AZM. |
//|                                                 azmgod@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, AZM."
#property link      "azmgod@gmail.com"

int dec,count;double digit;
extern double lot =0.1;         //объём каждого ордера
extern double profit1 = 1.64;    //профит первого ордера по сетке
extern double profit2 = 2.618;  //профит второго ордера по сетке
extern double tr  = 1.182;      //расстояние по фибо, раньше которого тралл не включается
extern double loss = 0.2;       //стоп лосс по сетке

//как вариант можно подбирать разные профиты для покупок и продаж
//extern double profit1b = 1.5;
//extern double profit2b = 2.618;
//extern double profit1s = 1.5;
//extern double profit2s = 2.618;
extern int orders_    = 1;      //если один, то пока оба ордера не закроются, новые не открываются.
                                //при двух может сразу три открытых ордера, и тд...
extern int adx = 12;            //настройка индикатора ADX                                
extern int ExtDepth   = 5;     //настройка зигзага, минимальное расстояние между экстремумами
extern int SF = 24;             //натсройка индикатора QQE
extern int RSI_Period = 13;     //настройка индикатора QQE
extern int atrtr = 3;           //настройка индикатора ATR для тралла
extern int super_cci = 20;      //настройка индикатора Supertrend
extern int     MA1        = 6;     //настройка индикатора MA Candles
extern int   MA2        = 42;    //настройка индикатора MA Candles


//+------------------------------------------------------------------+

int Wilders_Period;
int StartBar;

double TrLevelSlow[9999999];
double AtrRsi[9999999];
double MaAtrRsi[9999999];
double Rsi[9999999];
double RsiMa[9999999];


 int      MA1_MODE        = 3;
 int      MA2_MODE        = 3;
 int      MA1_PRICE        = 0;
 int      MA2_PRICE        = 0;
 int      MA1_SHIFT     = 0;
 int      MA2_SHIFT     = 0;
 
 int magic = 99;
 
  int ExtDeviatiion     = 0; 
  int ExtBackstep       = 3; 

 //">>> Candle/Wick Display Settings >>>>>>>>>>>>>>>>>"         
 int        BarWidth            = 1,
                    CandleWidth        = 3;
                    
double TrendUp[9];
double TrendDown[9];
int st = 0;                    

double std;
double stu;
double ao1;
double ao2;
double adxp;
double adxm;
double qqemain;
double qqesig;
double cand,dntralllevel,uptralllevel;
double stdb;
double stub;
double ao1b;
double ao2b;
double adxpb;
double adxmb;
double qqemainb;
double qqesigb;
double candb;
static int scount;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {Comment("http://strategy4you.ru/");
Print("AZM for http://strategy4you.ru/");
Print("azmgod@gmail.com");  

ArrayResize(TrLevelSlow, Bars);ArrayResize(AtrRsi, Bars);ArrayResize(MaAtrRsi, Bars);ArrayResize(Rsi, Bars);ArrayResize(RsiMa, Bars);
//----
       Wilders_Period = RSI_Period * 2 - 1;
    if (Wilders_Period < SF)
        StartBar = SF;
    else
        StartBar = Wilders_Period;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {if(!b())return;qqe();
//----



 std=Supertrend2(1);
 stu=Supertrend2(1);
 ao1=iCustom(Symbol(),NULL,"Awesome",0,1);
 ao2=iCustom(Symbol(),NULL,"Awesome",0,2);
 adxp=iADX(Symbol(),NULL,adx,PRICE_CLOSE,MODE_PLUSDI,1);
 adxm=iADX(Symbol(),NULL,adx,PRICE_CLOSE,MODE_MINUSDI,1);
 qqemain=RsiMa[1];//iCustom(Symbol(),NULL,"QQE",10,0,1);
 qqesig=TrLevelSlow[1];//iCustom(Symbol(),NULL,"QQE",10,1,1);
 cand=MA_Candles();
 stdb=Supertrend2(2);//iCustom(Symbol(),NULL,"SuperTrend2",1,2);
 stub=Supertrend2(2);//iCustom(Symbol(),NULL,"SuperTrend2",0,2);
 ao1b=iCustom(Symbol(),NULL,"Awesome",0,2);
 ao2b=iCustom(Symbol(),NULL,"Awesome",0,3);
 adxpb=iADX(Symbol(),NULL,14,PRICE_CLOSE,MODE_PLUSDI,2);
 adxmb=iADX(Symbol(),NULL,14,PRICE_CLOSE,MODE_MINUSDI,2);
 qqemainb=RsiMa[2];//iCustom(Symbol(),NULL,"QQE",10,0,2);
 qqesigb=TrLevelSlow[2];//iCustom(Symbol(),NULL,"QQE",10,1,2);
 candb=MA_Candles(2); 
 opor();
 clsell();
 trsell();
 clbuy();
 trbuy(); 
//----


   return(0);
  }
//+------------------------------------------------------------------+
void opor(){string orty;int i;double dotup,dotdn,sl,tp1,tp2;
if(std>0&&ao1<ao2&&adxp<adxm&&qqemain<qqesig&&cand==0&&check(1)<orders_&&(!(stdb>0&&ao1b<ao2b&&adxpb<adxmb&&qqemainb<qqesigb&&candb==0&&check(1)<orders_)))orty="sell";

if(std==0&&ao1>ao2&&adxp>adxm&&qqemain>qqesig&&cand==1&&check(0)<orders_&&(!(stdb==0&&ao1b>ao2b&&adxpb>adxmb&&qqemainb>qqesigb&&candb==1&&check(0)<orders_)))orty="buy";

if(orty=="sell"){
 for(i=1;i<Bars;i++)
 {dotup=iCustom(Symbol(),NULL,"ZigZag",ExtDepth,ExtDeviatiion,ExtBackstep,1,i);
  if(dotup!=0)break;}
sl=Bid+((dotup-Bid)*loss);
tp1=Bid-((dotup-Bid)*profit1);dntralllevel=Bid-((dotup-Bid)*tr);
tp2=Bid-((dotup-Bid)*profit2);
OrderSend(Symbol(),1,lot,Bid,30,NormalizeDouble(sl,Digits),tp1,"sell",magic);
OrderSend(Symbol(),1,lot,Bid,30,NormalizeDouble(sl,Digits),tp2,"sell",magic);
}
if(orty=="buy"){
 for(i=1;i<Bars;i++)
 {dotdn=iCustom(Symbol(),NULL,"ZigZag",ExtDepth,ExtDeviatiion,ExtBackstep,2,i);
  if(dotdn!=0)break;}
sl=Bid-((Bid-dotdn)*loss);
tp1=Bid+((Bid-dotdn)*profit1);uptralllevel=Bid+((Bid-dotdn)*tr);
tp2=Bid+((Bid-dotdn)*profit2);
OrderSend(Symbol(),0,lot,Ask,30,NormalizeDouble(sl,Digits),tp1,"buy",magic);
OrderSend(Symbol(),0,lot,Ask,30,NormalizeDouble(sl,Digits),tp2,"buy",magic);
}
}
//+------------------------------------------------------------------+
void clsell(){int i;if(Supertrend2(1)==1)return;
for(i=0;i<=OrdersTotal();i++)
{  if (OrderSelect(i,SELECT_BY_POS)==true)      
 { if(magic!=OrderMagicNumber())continue;if(Symbol()!=OrderSymbol())continue;if(OrderType()!=1)continue;
   OrderClose(OrderTicket(),OrderLots(),Ask,0,0);
}}
}
//+------------------------------------------------------------------+
void trsell(){int i;if(Bid>dntralllevel)return;
for(i=0;i<=OrdersTotal();i++)
{  if (OrderSelect(i,SELECT_BY_POS)==true)      
 { if(magic!=OrderMagicNumber())continue;if(Symbol()!=OrderSymbol())continue;if(OrderType()!=1)continue;
   if(OrderStopLoss()>High[1] + iATR(NULL, 0, atrtr, 0))OrderModify(OrderTicket(),OrderOpenPrice(),High[1] + iATR(NULL, 0, atrtr, 0),OrderTakeProfit(),0,0);
}}
}
//+------------------------------------------------------------------+
void clbuy(){int i;if(Supertrend2(1)==0)return;
for(i=0;i<=OrdersTotal();i++)
{  if (OrderSelect(i,SELECT_BY_POS)==true)      
 { if(magic!=OrderMagicNumber())continue;if(Symbol()!=OrderSymbol())continue;if(OrderType()!=0)continue;
   OrderClose(OrderTicket(),OrderLots(),Bid,0,0);
}}
}
//+------------------------------------------------------------------+
void trbuy(){   int i;if(Bid<uptralllevel)return;
for(i=0;i<=OrdersTotal();i++)
{  if (OrderSelect(i,SELECT_BY_POS)==true)      
 { if(magic!=OrderMagicNumber())continue;if(Symbol()!=OrderSymbol())continue;if(OrderType()!=1)continue;
   if(OrderStopLoss()<Low[1] - iATR(NULL, 0, atrtr, 0))OrderModify(OrderTicket(),OrderOpenPrice(),Low[1] - iATR(NULL, 0, atrtr, 0),OrderTakeProfit(),0,0);
}}
}
//+------------------------------------------------------------------+
int check(int ort){int i,count;
for(i=0;i<=OrdersTotal();i++)
{  if (OrderSelect(i,SELECT_BY_POS)==true)      
 { if(magic!=OrderMagicNumber())continue;if(Symbol()!=OrderSymbol())continue;if(OrderType()!=ort)continue;
   count++;
}}
return(count);
}
//+------------------------------------------------------------------+
int MA_Candles(int i=1){
        double    Ma1    = MA_1(i);
        double    Ma2    = MA_2(i);
      

    
        if(Ma1 > Ma2)    return (1);
       else    if(Ma1 < Ma2) return (0);
}
//+------------------------------------------------------------------+
   double MA_1 (int i = 1){return(iMA(NULL,0,MA1,MA1_SHIFT,MA1_MODE, MA1_PRICE,i));}
   double MA_2 (int i = 1){return(iMA(NULL,0,MA2,MA2_SHIFT,MA2_MODE, MA2_PRICE,i));}
//+------------------------------------------------------------------+ 
double Supertrend2(int i){
 double  cciTrendNow;
     cciTrendNow = iCCI(NULL, 0, super_cci, PRICE_TYPICAL, i);
   
  
 if(cciTrendNow>=st)return(0);
 else if(cciTrendNow<=st)return(1);


 
}
//+------------------------------------------------------------------+ 
void qqe(){

int counted, i;
    double rsi0, rsi1, dar, tr, dv;
    
    if(Bars <= StartBar)
        return (0);

   if(scount<1){counted=0;scount++;}else counted = Bars-1;
    
    
    //Print(counted);
        
    for (i = counted; i >= 0; i--)
        Rsi[i] = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, i);

    for (i = counted; i >= 0; i--)
    {
        RsiMa[i] = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
        AtrRsi[i] = MathAbs(RsiMa[i + 1] - RsiMa[i]);
    }

    for (i = counted; i >= 0; i--)
        MaAtrRsi[i] = iMAOnArray(AtrRsi, 0, Wilders_Period, 0, MODE_EMA, i);

    i = counted + 1;
    tr = TrLevelSlow[i];
    rsi1 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
    while (i > 0)
    {
        i--;
        rsi0 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
        dar = iMAOnArray(MaAtrRsi, 0, Wilders_Period, 0, MODE_EMA, i) * 4.236;

        dv = tr;
        if (rsi0 < tr)
        {
            tr = rsi0 + dar;
            if (rsi1 < dv)
                if (tr > dv)
                    tr = dv;
        }
        else if (rsi0 > tr)
        {
            tr = rsi0 - dar;
            if (rsi1 > dv)
                if (tr < dv)
                    tr = dv;
        }
        TrLevelSlow[i] = tr;
        rsi1 = rsi0;
    }
   // Print(Rsi[1]);
    return(0);

}
//+------------------------------------------------------------------+  
bool b(){
//+------------------------------------------------------------------+
   static datetime New_Time=0;                  // Время текущего бара
  bool New_Bar=false;                               // Нового бара нет
   if(New_Time!=iTime(Symbol(),NULL,0))                        // Сравниваем время
     {
      New_Time=iTime(Symbol(),NULL,0);                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
     return(New_Bar);
   }
//+------------------------------------------------------------------+

Комментарии к исходному коду форекс советника Profit Trend.mq4
В целях безопасности и борьбы со спамом в тексте комментариев запрещено размещать html-теги и ссылки. Благодарим за понимание.

  • X
  • 0% загружено
« советник Proboy_zIG_demo.mq4
советник ProfitHunter.mq4 »