1 //+------------------------------------------------------------------+
\r
5 //+------------------------------------------------------------------+
\r
6 #property copyright "Ch1qho"
\r
7 #property link "ch1qho@yahoo.com"
\r
11 //--------TradingTime--------
\r
12 extern string Time_Info = "Base on Server Time";
\r
13 extern int OpenHour = 22;
\r
14 extern int CloseHour = 5;
\r
16 extern bool MM = true;
\r
17 extern int Risk = 50;
\r
18 extern double Lots = 0.1;
\r
19 extern int LotsDigit = 2;
\r
20 extern int Slippage = 3;
\r
21 extern int StopLoss = 60;
\r
22 //------------------------------------
\r
23 extern string Atr_Info ="Read my manual before apply spesific filter";
\r
24 extern bool TradeLowRangeDay=true;
\r
25 extern bool TradeOutSideBand=true;
\r
26 extern double MaxDayAtr =250;
\r
27 //-------------------------------------
\r
28 extern string EquityInfo ="It is better to set amount target when running on multiple pair";
\r
29 extern double EquityTarget=0;
\r
30 extern bool SecureMyEquityTarget=false;
\r
31 //----------------------------------------------------------------------------
\r
32 extern int MaxTradePerBar = 1;
\r
33 extern int MaxTradePerPosition = 4;
\r
35 extern string EAName ="Volatily Scalp";
\r
36 extern string Typical ="Sideway, counter trend system";
\r
37 extern string Creator ="Ch1qho";
\r
38 extern string Distribution="Donation";
\r
39 extern string Version ="VS_EURCHF D_01";
\r
40 extern string email_YM = "ch1qho@yahoo.com";
\r
42 //----------------------------------------------------------------------------
\r
43 int TradePerBar = 0;
\r
45 //----------------------------------------------------------------------------
\r
50 bool allowtrading=true;
\r
54 bool allowsell=true;
\r
55 double SignalFilter=0;
\r
57 double mypoint=0.01;
\r
59 //+------------------------------------------------------------------+
\r
60 //| expert initialization function |
\r
61 //+------------------------------------------------------------------+
\r
66 spread=MarketInfo(Symbol(),MODE_SPREAD)/10;
\r
67 }else if(Digits==5){
\r
69 spread=MarketInfo(Symbol(),MODE_SPREAD)/10;
\r
72 spread=MarketInfo(Symbol(),MODE_SPREAD);
\r
78 if(GetLastError()>1)Sleep(1000);// May this delay help to run on multiple pair
\r
80 if(SecureMyEquityTarget&&EquityTarget>0&&AccountEquity()>=EquityTarget){
\r
81 ForceCloseAll(Magic,OP_BUY);
\r
82 ForceCloseAll(Magic,OP_SELL);
\r
87 double speed1=iCustom(Symbol(),0,"CK_Speed",20,50,2,0);
\r
88 double speed2=iCustom(Symbol(),0,"CK_Speed",20,25,2,1);
\r
89 double speed3=iCustom(Symbol(),0,"CK_Speed",5,50,0,1);
\r
90 double speed4=iCustom(Symbol(),0,"CK_Speed",5,50,1,1);
\r
91 double kcup=iCustom(Symbol(),0,"Keltner Channels",20,2,0,0);//1st upper
\r
92 double kcdo=iCustom(Symbol(),0,"Keltner Channels",20,2,2,0);//1st lower
\r
93 double kcup2=iCustom(Symbol(),0,"Keltner Channels",20,2,3,0);//2nd upper
\r
94 double kcdo2=iCustom(Symbol(),0,"Keltner Channels",20,2,4,0);//2nd lower
\r
95 double up1=iBands(Symbol(),0,20,2,0,PRICE_MEDIAN,MODE_UPPER,1);
\r
96 double do1=iBands(Symbol(),0,20,2,0,PRICE_MEDIAN,MODE_LOWER,1);
\r
97 double wpr1=iWPR(Symbol(),1,20,0);
\r
98 double ma=iMA(Symbol(),0,20,0,0,PRICE_MEDIAN,0);
\r
100 double sp1=spread*2;
\r
101 double atrfilter=iATR(Symbol(),0,20,1)/mypoint;
\r
103 SignalFilter=MathMax(atrfilter,spread*2);//this is for averaging level
\r
104 if(BarCount != Bars){
\r
108 if(TotalOrder(Magic,OP_BUY)==MaxTradePerPosition)allowbuy=false;
\r
109 if(TotalOrder(Magic,OP_SELL)==MaxTradePerPosition)allowsell=false;
\r
110 if(speed2==1&&speed1==1){
\r
113 //ForceCloseAll(Magic,OP_BUY);
\r
114 //ForceCloseAll(Magic,OP_SELL);
\r
117 No matter price accross ma or not, but wpr of 1 Minute show overbought/oversold
\r
120 if(TotalProfit(Magic,OP_BUY)>=SignalFilter){
\r
121 ForceCloseAll(Magic,OP_BUY);//profit Accumulation first, if rich we close all same position
\r
122 if(Close[0]<ma)allowbuy=false;
\r
124 // CloseProfitOrder(Magic,OP_BUY,atrfilter,1,30000000);//otherwise, an open position has profit as much current atrfilter, close it.
\r
127 if(TotalProfit(Magic,OP_SELL)>=SignalFilter){
\r
128 ForceCloseAll(Magic,OP_SELL);//profit Accumulation first, if rich we close all same position
\r
129 if(Close[0]>ma)allowsell=false;
\r
131 // CloseProfitOrder(Magic,OP_SELL,atrfilter,1,30000000);//otherwise, an open position has profit as much current atrfilter, close it.
\r
135 only if price accross ma
\r
140 ForceCloseAll(Magic,OP_BUY);
\r
141 // if(TotalProfit(Magic,OP_BUY)>=1)ForceCloseAll(Magic,OP_BUY);//profit Accumulation first, if rich we close all same position
\r
142 //CloseProfitOrder(Magic,OP_BUY,1,1,30000000);//otherwise, an open position has profit as much 1 pips, close it.
\r
146 ForceCloseAll(Magic,OP_SELL);
\r
147 // if(TotalProfit(Magic,OP_SELL)>=1)ForceCloseAll(Magic,OP_SELL);
\r
148 // CloseProfitOrder(Magic,OP_SELL,1,1,30000000);
\r
151 if(Close[0]>kcup&&speed4==2){
\r
152 ForceCloseAll(Magic,OP_BUY);
\r
153 ForceCloseAll(Magic-1,OP_BUY);
\r
155 //CloseProfitOrder(Magic,OP_BUY,-5,1,30000000);//we shoud make profit just after price accross ma
\r
156 if(Close[0]<kcdo&&speed4==2){
\r
157 ForceCloseAll(Magic,OP_SELL);
\r
158 ForceCloseAll(Magic-1,OP_SELL);
\r
160 if(Close[0]>kcup2){
\r
161 ForceCloseAll(Magic,OP_BUY);
\r
162 ForceCloseAll(Magic-1,OP_BUY);
\r
164 //CloseProfitOrder(Magic,OP_BUY,-5,1,30000000);//we shoud make profit just after price accross ma
\r
165 if(Close[0]<kcdo2){
\r
166 ForceCloseAll(Magic,OP_SELL);
\r
167 ForceCloseAll(Magic-1,OP_SELL);
\r
169 //CloseProfitOrder(Magic,OP_SELL,-5,1,30000000);//we shoud make profit just after price accross ma
\r
171 // choose your exit strategi after trading time has been passed
\r
172 if(Tradetime()==0){
\r
175 if(TotalProfit(Magic,OP_BUY)>=1)ForceCloseAll(Magic,OP_BUY);
\r
176 if(TotalProfit(Magic,OP_SELL)>=1)ForceCloseAll(Magic,OP_SELL);
\r
180 int BUY_OpenPosition = 0;
\r
181 int SELL_OpenPosition = 0;
\r
182 int TOTAL_OpenPosition = 0;
\r
185 double Last_BUY_OpenPrice =0;
\r
186 double Last_SELL_OpenPrice =0;
\r
187 for (cnt = 0; cnt < OrdersTotal(); cnt++)
\r
189 OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
\r
190 if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderCloseTime()==0)
\r
192 TOTAL_OpenPosition++;
\r
193 if (OrderType() == OP_BUY)
\r
195 BUY_OpenPosition++;
\r
196 Last_BUY_OpenPrice = OrderOpenPrice();
\r
198 if (OrderType() == OP_SELL)
\r
200 SELL_OpenPosition++;
\r
201 Last_SELL_OpenPrice = OrderOpenPrice();
\r
208 //////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
\r
209 if (Tradetime()==1){
\r
210 if(AccountFreeMarginCheck(Symbol(),OP_BUY,GetLots())<=0 || GetLastError()==134) {
\r
211 Print("Not Enough Money ");
\r
215 //////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
\r
216 if ((allowsell&&SELL_OpenPosition < MaxTradePerPosition) && (TradePerBar < MaxTradePerBar) && ((Ask - Last_SELL_OpenPrice >= SignalFilter * mypoint) || SELL_OpenPosition < 1 ) && GetSignal(OP_SELL)==1){
\r
217 Ticket = OrderSend(Symbol(),OP_SELL,GetLots(),Bid,Slippage,Bid + StopLoss * mypoint,0,"Volatily Scalp"+Symbol(),Magic,0,Red);
\r
224 //////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
\r
225 if ((allowbuy&&BUY_OpenPosition < MaxTradePerPosition) && (TradePerBar < MaxTradePerBar) && ((Last_BUY_OpenPrice - Bid >= SignalFilter * mypoint ) || BUY_OpenPosition < 1 ) && GetSignal(OP_BUY)==1){
\r
226 Ticket = OrderSend(Symbol(),OP_BUY,GetLots(),Ask,Slippage,Ask - StopLoss * mypoint, 0,"Volatily Scalp"+Symbol(),Magic,0,Blue);
\r
234 /////////////////////locking funtion
\r
239 //-----------------------------------------------------------------------------
\r
240 int GetSignal(int OP)
\r
242 int sideway =GetSignal3();
\r
243 if(sideway==0)return(0);
\r
245 double up=iBands(Symbol(),0,20,2,0,PRICE_MEDIAN,MODE_UPPER,0);
\r
246 double do=iBands(Symbol(),0,20,2,0,PRICE_MEDIAN,MODE_LOWER,0);
\r
248 //Historical template, firs time i use fix envelopes
\r
250 double evup=iEnvelopes(Symbol(),0,20,0,0,PRICE_MEDIAN,0.2,MODE_UPPER,0);
\r
251 double evdo=iEnvelopes(Symbol(),0,20,0,0,PRICE_MEDIAN,0.2,MODE_LOWER,0);
\r
253 double wpr=iWPR(Symbol(),0,20,0);
\r
254 double wpr1=iWPR(Symbol(),1,20,0);
\r
255 double ma=iMA(Symbol(),0,20,0,0,PRICE_MEDIAN,0);
\r
257 double kcup=iCustom(Symbol(),0,"Keltner Channels",20,2,3,0);
\r
258 double kcdo=iCustom(Symbol(),0,"Keltner Channels",20,2,4,0);
\r
261 //if(wpr1<-80&&Bid<do&&do>evdo)return(1);
\r
262 if (wpr1<-80&&Bid<=ma-(SignalFilter)*mypoint&&(Bid>do||Bid>kcdo)) return(1);//as long price not penetrate both bband and channel, go ahead
\r
264 else if (OP==OP_SELL){
\r
265 //if(wpr1>-20&&Bid>up&&up<evup)return(1);
\r
266 if (wpr1>-20&&Bid>=ma+(SignalFilter)*mypoint&&(Bid<up||Bid<kcup)) return(1);//as long price not penetrate both bband and channel, go ahead
\r
270 //---------------------------------------------------------------------------------
\r
272 //-----------------------------------------------------------------------------
\r
277 double bbup=iBands(Symbol(),1440,20,2,0,PRICE_MEDIAN,MODE_UPPER,1);
\r
278 double bbdo=iBands(Symbol(),1440,20,2,0,PRICE_MEDIAN,MODE_LOWER,1);
\r
279 double dailyatr=iATR(Symbol(),1440,5,0)/mypoint;
\r
281 double speed1=iCustom(Symbol(),0,"CK_Speed",20,50,0,0);
\r
282 double speed2=iCustom(Symbol(),0,"CK_Speed",20,50,0,1);
\r
283 double speed5=iCustom(Symbol(),0,"CK_Speed",5,50,0,0);
\r
284 double speed6=iCustom(Symbol(),0,"CK_Speed",20,50,2,1);
\r
285 double speed3=iCustom(Symbol(),0,"CK_Speed",5,50,0,0);
\r
286 double speed4=iCustom(Symbol(),0,"CK_Speed",5,50,0,1);
\r
288 double range=(iHigh(Symbol(),1440,1)-iLow(Symbol(),1440,1))/mypoint;
\r
290 if(SignalFilter>=StopLoss) return(0);
\r
292 if(dailyatr>=MaxDayAtr)return(0);
\r
294 if(!TradeOutSideBand) if(iClose(Symbol(),1440,1)>bbup||iClose(Symbol(),1440,1)<bbdo)return(0);
\r
296 if(!TradeLowRangeDay)if(range<(dailyatr/2))return(0);
\r
298 if(speed1==0&&speed2==0&&speed3==0&&speed4==0)return(1);
\r
301 //---------------------------------------------------------------------------------
\r
303 //-----------------------------------------------------------------------------
\r
305 //-----------------------------------------------------------------------------
\r
306 void ForceCloseAll(int magic, int cmd)
\r
308 for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
\r
310 OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
\r
311 if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic && OrderCloseTime()==0)
\r
313 if(OrderType()==cmd) {
\r
314 OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue);
\r
320 //-----------------------------------------------------------------------------
\r
324 if(OpenHour>CloseHour){
\r
325 if (Hour() <= CloseHour || Hour() >= OpenHour)TradingTime=1;
\r
327 if(OpenHour<CloseHour){
\r
328 if(Hour()>=OpenHour&&Hour()<=CloseHour)TradingTime=1;
\r
330 if(OpenHour==CloseHour){
\r
331 if(Hour()==OpenHour)TradingTime=1;
\r
333 if (DayOfWeek() == 5 && Hour() >8)TradingTime=0;//No friday trade
\r
334 if (DayOfWeek()==1&&Hour()<2)TradingTime=0;//No trade for first 2 hours on Monday
\r
335 if(DayOfYear()<7)TradingTime=0;//No Trade First week of Year
\r
336 if(Month()==12&&Day()>20)TradingTime=0;//No trade after 20 December
\r
337 return(TradingTime);
\r
339 //-----------------------------------------------------------------------------
\r
343 double lots,MD,RM,FMM,MinLots,LotSize; int lotsdigit;
\r
344 LotSize = MarketInfo(Symbol(), MODE_LOTSIZE);
\r
345 MD = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2);
\r
346 RM = NormalizeDouble(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 4);
\r
350 if (MD==0.01) lotsdigit=2;
\r
352 LotsDigit=lotsdigit;
\r
354 if (MM==true) lots = NormalizeDouble((AccountFreeMargin()*Risk/LotSize)/MaxTradePerPosition,LotsDigit);
\r
356 MinLots=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2);
\r
357 double MaxLots =NormalizeDouble(MarketInfo(Symbol(),MODE_MAXLOT),2);
\r
358 //if (LotsDigit == 2) MinLots = 0.01;
\r
359 if (lots < MinLots) lots = MinLots;
\r
360 if (lots > MaxLots) lots = MaxLots;
\r
363 //-----------------------------------------------------------------------------
\r
365 //-----------------------------------------------------------------------------
\r
367 //-----------------------------------------------------------------------------
\r
369 int magic= magicn umber
\r
370 int cmd= OP_BUY or OP_SELL
\r
371 int target= Target for profit in pip
\r
372 double diff=Minimum Minute in Market
\r
373 double diff=Maximum Minute in Market
\r
376 bool CloseProfitOrder(int magic, int cmd, int target, double diff, double diff2){
\r
379 for(int i=OrdersTotal()-1;i>=0;i--){
\r
381 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
\r
382 if(OrderType()==cmd&&OrderMagicNumber()==magic&&OrderSymbol()==Symbol()){
\r
383 if(OrderType()==OP_BUY){
\r
384 profit=(OrderClosePrice()-OrderOpenPrice())/mypoint;
\r
386 if(OrderType()==OP_SELL){
\r
387 profit=(OrderOpenPrice()-OrderClosePrice())/mypoint;
\r
389 if(profit>=target&& (TimeCurrent()-OrderOpenTime())>=diff*60&&(TimeCurrent()-OrderOpenTime())<=diff2*60){
\r
390 result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(OrderClosePrice(),Digits),3,CLR_NONE);
\r
399 ////////////////////////////////////////////////////////////////////////////////////////////////
\r
401 return value= TotalProfit int pips
\r
403 int TotalProfit(int magic,int cmd){
\r
406 for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
\r
408 OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
\r
409 if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
\r
411 if(cmd==OP_BUY&&cmd==OrderType()){
\r
412 result=result+((OrderClosePrice()-OrderOpenPrice())/mypoint);
\r
414 if(cmd==OP_SELL&&cmd==OrderType()){
\r
415 result=result+((OrderOpenPrice()-OrderClosePrice())/mypoint);
\r
422 int TotalOrder(int magic,int cmd){
\r
425 for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
\r
427 OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
\r
428 if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
\r
430 if(cmd==OrderType()){
\r