//+------------------------------------------------------------------+ //| 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-теги и ссылки. Благодарим за понимание.