//+------------------------------------------------------------------+ //| ch_2006.mq4 | //| Copyright © 2006, Ðàìèëü Ñàôèóëëîâè÷ Èðãèçîâ | //| popcorn@aaanet.ru | //+------------------------------------------------------------------+ //| Automated Trading Championship 2006 | //| Ïîäêëþ÷àåòñÿ ê ãðàôèêó USDCHF 1 ìèí | //+------------------------------------------------------------------+ #define m 20050611 extern int takeprofit = 165; extern int stoploss = 165; extern double lots = 0.1; extern double risk = 0.25; extern int mm = 1; extern int pu1 = 1; extern int pu2 = 71; extern int pu3 = 326; extern int puu = 410; extern int sl = 22; extern int sl_min = 2; extern double p = 0.22; extern int dd = 7; extern int ddma = 9; extern double kr = 0.5; //----------------------------------------------------------------------------- int kol_buy() { int kol_ob=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_BUY) kol_ob++; } return(kol_ob); } //----------------------------------------------------------------------------- int kol_sell() { int kol_os=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_SELL) kol_os++; } return(kol_os); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- datetime lastt=0; int slip=10; int i,kol_sek,tic,total,gle,kk; double mah1_1,mah2_1,mah3_1,mal1_1,mal2_1,mal3_1,mah1_2,mah2_2,mah3_2,mal1_2,mal2_2,mal3_2,ma1,ma2; double lotsi,slp,slp_min; int start() { if(Bars<100 || IsTradeAllowed()==false || Year()!=2006 || AccountFreeMargin()<AccountBalance()*kr) return; if (mm!=0) lotsi=MathCeil(AccountFreeMargin()*risk/100)/10; else lotsi=lots; if (lotsi>=5) lotsi=5-0.1; mah1_1=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_HIGH,1); mal1_1=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_LOW,1); mah2_1=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_HIGH,1); mal2_1=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_LOW,1); mal3_1=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_LOW,1); mal3_2=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_LOW,2); mah3_1=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_HIGH,1); mah3_2=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_HIGH,2); mah1_2=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_HIGH,2); mal1_2=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_LOW,2); mah2_2=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_HIGH,2); mal2_2=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_LOW,2); ma1=iMA(NULL,0,puu,1,MODE_SMA,PRICE_MEDIAN,1); ma2=iMA(NULL,0,puu,1,MODE_SMA,PRICE_MEDIAN,2); slp=sl*Point; slp_min=sl_min*Point; bool sob=false,sos=false; sob=CurTime()>lastt+60*61 && mah1_2<mah2_2 && mah1_1>=mah2_1 && ma1>ma2 && mah2_1>mah2_2 && mah3_1>mah3_2 && (mah2_1-mah2_2)>(mah3_1-mah3_2) && (mah3_1-mal3_1)<(mah2_1-mal2_1) && // ma1<mah3_1 && mah3_1<mah2_1 && mah2_1<mah1_1 && mah1_1>mah3_1 && mah1_1<=mah3_1+dd*Point && mah2_1>mah3_1 && High[1]<=ma1+ddma*Point && kol_buy()<2 && kol_buy()+kol_sell()<3; sos=CurTime()>lastt+60*61 && mal1_2>mal2_2 && mal1_1<=mal2_1 && ma1<ma2 && mal2_1<mal2_2 && mal3_1<mal3_2 && (mal2_2-mal2_1)>(mal3_2-mal3_1) && (mah3_1-mal3_1)<(mah2_1-mal2_1) && // ma1>mal3_1 && mal3_1>mal2_1 && mal2_1>mal1_1 && mal1_1<mal3_1 && mal1_1>=mal3_1-dd*Point && mal2_1<mal3_1 && Low[1]>=ma1-ddma*Point && kol_sell()<1 && kol_buy()+kol_sell()<3; tic=-1;kk=0; if (sob) { while(tic==-1 && kk<3) { tic=OrderSend(Symbol(),OP_BUY,lotsi,Ask,slip,Ask-stoploss*Point,Ask+takeprofit*Point," ",m,0,Yellow); if (tic==-1) { gle=GetLastError(); kk++; Print("Îøèáêà ¹",gle," ïðè buy ",kk); Sleep(6000); RefreshRates(); } } lastt=CurTime(); return; } tic=-1;kk=0; if (sos) { while(tic==-1 && kk<3) { tic=OrderSend(Symbol(),OP_SELL,lotsi,Bid,slip,Bid+stoploss*Point,Bid-takeprofit*Point," ",m,0,Red); if (tic==-1) { gle=GetLastError(); kk++; Print("Îøèáêà ¹",gle," ïðè sell ",kk); Sleep(6000); RefreshRates(); } } lastt=CurTime(); return; } total=OrdersTotal(); for(i=0;i<total;i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(OrderStopLoss()<OrderOpenPrice() && High[1]>OrderOpenPrice()+slp) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+slp_min,OrderTakeProfit(),0,White); return; } if(OrderStopLoss()>OrderOpenPrice() && OrderStopLoss()+1*Point<High[1]-(slp-slp_min)-(High[1]-slp-OrderOpenPrice())*p) { OrderModify(OrderTicket(),OrderOpenPrice(),High[1]-(slp-slp_min)-(High[1]-slp-OrderOpenPrice())*p, OrderTakeProfit(),0,Yellow); return; } } if(OrderType()==OP_SELL) { if((OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0) && Low[1]<OrderOpenPrice()-slp) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-slp_min,OrderTakeProfit(),0,White); return; } if(OrderStopLoss()<OrderOpenPrice() && OrderStopLoss()-1*Point>Low[1]+(slp-slp_min)+(OrderOpenPrice()-Low[1]-slp)*p) { OrderModify(OrderTicket(),OrderOpenPrice(),Low[1]+(slp-slp_min)+(OrderOpenPrice()-Low[1]-slp)*p, OrderTakeProfit(),0,Red); return; } } } } }
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features: