extern double Lots = 5; extern int TakeProfit = 100; extern int StopLoss = 100; extern bool TrendTrade = True; int glbOrderType; int gblClose = 0; int gblW = 0; int sunset = 1; int glbOrderTicket; double glbOrderProfit; double glbOrderOpen; double glbOrderStop; int glbline1=0; int glbline2=0; int glbclose1=0; int glbclose2=0; datetime cnextRun1,cnextRun2; double up1,up2,up3,dwn1,dwn2,dwn3; int a,b,c,d; int deviation = 30; int trailing = 30; int maxorders = 2; int i,q,b2,pips,pips1,pips2; int bars = 147; int gblx1 = 0; int gblx2 = 0; int risk=5000; int zzd=1; datetime cnextRun; double rec1,rec2,tribuy,trisell,rec1b,rec2b,tribuyb,trisellb,baskety,basketx; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- if(ObjectFind("BASKET") != -1) ObjectDelete("BASKET"); ObjectCreate ("BASKET", OBJ_LABEL, 0, 0, 0); ObjectSetText ("BASKET","1",100, "Webdings", Yellow); ObjectSet ("BASKET", OBJPROP_CORNER,0); ObjectSet ("BASKET", OBJPROP_XDISTANCE,310); ObjectSet ("BASKET", OBJPROP_YDISTANCE,70); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int start() { if(TakeProfit>0)TakeProfit(); if(StopLoss>0)StopLoss(); double ask = MarketInfo(Symbol(),MODE_ASK); double bid = MarketInfo(Symbol(),MODE_BID); double point = MarketInfo(Symbol(),MODE_POINT); basketx = ObjectGet("BASKET", OBJPROP_XDISTANCE); baskety = ObjectGet("BASKET", OBJPROP_YDISTANCE); if( cnextRun2 < TimeCurrent() || ObjectFind("CREATE_TRENDLINES") == -1 || ( rec1>(basketx+20)&&rec1<(basketx+113)&&rec1b>(baskety+28)&&rec1b<(baskety+118) ) || ( rec2>(basketx+20)&&rec2<(basketx+113)&&rec2b>(baskety+28)&&rec2b<(baskety+118) ) || ( tribuy>(basketx+20)&&tribuy<(basketx+113)&&tribuyb>(baskety+28)&&tribuyb<(baskety+118) ) || ( trisell>(basketx+20)&&trisell<(basketx+113)&&trisellb>(baskety+28)&&trisellb<(baskety+118) )){ cnextRun2 = TimeCurrent() + ((Period()*60)*70); if(ObjectFind("CREATE_TRENDLINES") != -1) ObjectDelete("CREATE_TRENDLINES"); ObjectCreate ("CREATE_TRENDLINES", OBJ_LABEL, 0, 0, 0); ObjectSetText ("CREATE_TRENDLINES","g",40, "Webdings", Blue); ObjectSet ("CREATE_TRENDLINES", OBJPROP_CORNER,0); ObjectSet ("CREATE_TRENDLINES", OBJPROP_XDISTANCE,300); ObjectSet ("CREATE_TRENDLINES", OBJPROP_YDISTANCE,0); if(ObjectFind("CLOSE_ORDER") != -1) ObjectDelete("CLOSE_ORDER"); ObjectCreate ("CLOSE_ORDER", OBJ_LABEL, 0, 0, 0); ObjectSetText ("CLOSE_ORDER","g",40, "Webdings", Red); ObjectSet ("CLOSE_ORDER", OBJPROP_CORNER,0); ObjectSet ("CLOSE_ORDER", OBJPROP_XDISTANCE,370); ObjectSet ("CLOSE_ORDER", OBJPROP_YDISTANCE,0); if(ObjectFind("BUY_TRIANGLE") != -1) ObjectDelete("BUY_TRIANGLE"); ObjectCreate ("BUY_TRIANGLE", OBJ_LABEL, 0, 0, 0); ObjectSetText ("BUY_TRIANGLE","5",40, "Webdings", Orange); ObjectSet ("BUY_TRIANGLE", OBJPROP_CORNER,0); ObjectSet ("BUY_TRIANGLE", OBJPROP_XDISTANCE,430); ObjectSet ("BUY_TRIANGLE", OBJPROP_YDISTANCE,0); if(ObjectFind("SELL_TRIANGLE") != -1) ObjectDelete("SELL_TRIANGLE"); ObjectCreate ("SELL_TRIANGLE", OBJ_LABEL, 0, 0, 0); ObjectSetText ("SELL_TRIANGLE","6",40, "Webdings", Orange); ObjectSet ("SELL_TRIANGLE", OBJPROP_CORNER,0); ObjectSet ("SELL_TRIANGLE", OBJPROP_XDISTANCE,490); ObjectSet ("SELL_TRIANGLE", OBJPROP_YDISTANCE,0); } rec1 = ObjectGet("CREATE_TRENDLINES", OBJPROP_XDISTANCE); rec2 = ObjectGet("CLOSE_ORDER", OBJPROP_XDISTANCE); tribuy = ObjectGet("BUY_TRIANGLE", OBJPROP_XDISTANCE); trisell = ObjectGet("SELL_TRIANGLE", OBJPROP_XDISTANCE); rec1b = ObjectGet("CREATE_TRENDLINES", OBJPROP_YDISTANCE); rec2b = ObjectGet("CLOSE_ORDER", OBJPROP_YDISTANCE); tribuyb = ObjectGet("BUY_TRIANGLE", OBJPROP_YDISTANCE); trisellb = ObjectGet("SELL_TRIANGLE", OBJPROP_YDISTANCE); if( cnextRun < TimeCurrent() && rec1>(basketx+20)&&rec1<(basketx+113)&&rec1b>(baskety+28)&&rec1b<(baskety+118) ){ cnextRun = TimeCurrent() + 90; SetTrendLines(Symbol(),Period(),7); } double bM = NormalizeDouble(ObjectGetValueByShift("topline",0),Digits); double sM = NormalizeDouble(ObjectGetValueByShift("botline",0),Digits); if( OrderFind(11)==false && OrderFind(21)==false && ( iClose(Symbol(),Period(),0) < bM-(2*point) && iClose(Symbol(),Period(),0) > sM+(2*point) && q==0) ){ q=1; } if(OrderFind(331) == false && ( trisell>(basketx+20)&&trisell<(basketx+113)&&trisellb>(baskety+28)&&trisellb<(baskety+118) ) ){ OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell",331, 0, Blue); } if(OrderFind(441) == false && ( tribuy>(basketx+20)&&tribuy<(basketx+113)&&tribuyb>(baskety+28)&&tribuyb<(baskety+118) ) ){ OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy",441, 0, Blue); } //Close Buy if(OrderFind(331) == true && ( rec2>(basketx+20)&&rec2<(basketx+113)&&rec2b>(baskety+28)&&rec2b<(baskety+118) ) ){ OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); } //Close Sell if(OrderFind(441) == true && ( rec2>(basketx+20)&&rec2<(basketx+113)&&rec2b>(baskety+28)&&rec2b<(baskety+118) ) ){ OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); } //---- bool result; double stop_loss; int cmd,total,error; //---- total=OrdersTotal(); //Close Buy if(OrderFind(21) == true && ( rec2>(basketx+20)&&rec2<(basketx+113)&&rec2b>(baskety+28)&&rec2b<(baskety+118) ) ){ OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); } //Close Sell if(OrderFind(11) == true && ( rec2>(basketx+20)&&rec2<(basketx+113)&&rec2b>(baskety+28)&&rec2b<(baskety+118) ) ){ OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); } if(OrderFind(11) == false && q==1 && bM>sM && bid < sM ){ if(TrendTrade==true)OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell",11, 0, Blue); PlaySound("alert.wav"); q=0;glbclose2=0; } if(OrderFind(21) == false && q==1 && bM>sM && ask > bM ){ if(TrendTrade==true)OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy",21, 0, Blue); PlaySound("alert.wav"); q=0;glbclose1=0; } Display_Info(); //---- return(0); } //+------------------------------------------------------------------+ bool OrderFind(int Magic) { glbOrderType = -1; glbOrderTicket = -1; glbOrderProfit = -1; glbOrderOpen = -1; glbOrderStop = -1; int total = OrdersTotal(); bool res = false; for(int cnt = 0 ; cnt < total ; cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) { glbOrderProfit = OrderTakeProfit(); glbOrderOpen = OrderOpenPrice(); glbOrderStop = OrderStopLoss(); glbOrderType = OrderType(); glbOrderTicket = OrderTicket(); res = true; } } return(res); } double SetTrendLines(string curr,int p,int depth) { double ask = MarketInfo(curr,MODE_ASK); double bid = MarketInfo(curr,MODE_BID); double point = MarketInfo(curr,MODE_POINT); bid = bid+(50*point); ask = ask-(50*point); SetObject("topline", iTime(curr,p,20), bid, iTime(curr,p,0),bid,Yellow); setTopLine(curr,p,20,bid,0,bid); SetObject("botline", iTime(curr,p,20), ask, iTime(curr,p,0),ask,Yellow); setBottomLine(curr,p,20,ask,0,ask); return(0); } void setTopLine(string curr,int p,int period1,double val1,int period2,double val2){ double total=0,high=0; int ls=0; glbline1=0; for(int y=period2;y<period1;y++) { ls=0; high = NormalizeDouble(ObjectGetValueByShift("topline",y),Digits); if(iHigh(curr,p,y) > high && ( iHigh(curr,p,y)-high ) > total ) { total = iHigh(curr,p,y) - high; } } if(total>0){ if(ObjectFind("topline") != -1)ObjectDelete("topline"); SetObject("topline", iTime(curr,p,period1), val1+total, iTime(curr,p,period2),val2+total,White); glbline1=1; } return(0); } void setBottomLine(string curr,int p,int period1,double val1,int period2,double val2){ double low=0,total=0; int ls=0; glbline2=0; for(int y=period2;y<period1;y++) { low = NormalizeDouble(ObjectGetValueByShift("botline",y),Digits); if(iLow(curr,p,y) < low && ( low - iLow(curr,p,y) ) > total ) { total = low - iLow(curr,p,y); } } if(total>0){ if(ObjectFind("botline") != -1)ObjectDelete("botline"); SetObject("botline", iTime(curr,p,period1), val1-total, iTime(curr,p,period2),val2-total,White); glbline2=1; } return(0); } void SetObject(string name,datetime T1,double P1,datetime T2,double P2,color clr) { if(!ObjectCreate(name, OBJ_TREND, 0, T1, P1, T2, P2)) { Print("error: can't create Object! code #",GetLastError()); } //ObjectSet(name, OBJPROP_RAY, false); ObjectSet(name, OBJPROP_COLOR, clr); //ObjectSet(name, OBJPROP_STYLE, STYLE_DOT); ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(name,OBJPROP_WIDTH,1); } void Display_Info() { Comment("Patterns ver 1.0\n", "Copyright © 2008, capeseo.com \n", "DONATIONS: \nIf you find this useful please donate\nsomething to my moneybooker \n(louis@capeseo.com) \n", "Account Balance: $",AccountBalance(),"\n", "Symbol: ", Symbol(),"\n", "Price: ",NormalizeDouble(Bid,4),"\n", "Spread: ",MarketInfo(Symbol(),MODE_SPREAD),"\n", "Date: ",Month(),"-",Day(),"-",Year()," Server Time: ",Hour(),":",Minute(),":",Seconds(),"\n", "Minimum Lot Size: ",MarketInfo(Symbol(),MODE_MINLOT)); return(0); } void StopLoss(){ bool result; double stop_loss,op,sl,tp,point,bid,ask; int cmd,total,error; int w = 0; //---- total=OrdersTotal(); point=MarketInfo(Symbol(),MODE_POINT); bid=MarketInfo(Symbol(),MODE_BID); ask=MarketInfo(Symbol(),MODE_ASK); //---- for(int j=0; j<total; j++){ if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){ //---- print selected order cmd=OrderType(); op=OrderOpenPrice(); sl=OrderStopLoss(); tp=OrderTakeProfit(); //---- buy or sell orders are considered if(cmd==OP_BUY){ if(sl==0){ Print("::",op-(StopLoss*point)); if(OrderModify(OrderTicket(), 0, op-(StopLoss*point), tp, 0, Yellow) == false)Print("Err (", GetLastError(), ") ModifyBuy"); } } if(cmd==OP_SELL){ if(sl==0){ if(OrderModify(OrderTicket(), 0, op+(StopLoss*point), tp, 0, Yellow) == false)Print("Err (", GetLastError(), ") ModifySell"); } } } } //---- return(0); } void TakeProfit(){ bool result; double stop_loss,op,sl,tp,point,bid,ask; int cmd,total,error; int w = 0; //---- total=OrdersTotal(); point=MarketInfo(Symbol(),MODE_POINT); bid=MarketInfo(Symbol(),MODE_BID); ask=MarketInfo(Symbol(),MODE_ASK); //---- for(int j=0; j<total; j++){ if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){ //---- print selected order cmd=OrderType(); op=OrderOpenPrice(); sl=OrderStopLoss(); tp=OrderTakeProfit(); //---- buy or sell orders are considered if(cmd==OP_BUY){ if(tp==0){ if(OrderModify(OrderTicket(), 0, sl, op+(TakeProfit*point), 0, Yellow) == false)Print("Err (", GetLastError(), ") ModifyBuy"); } } if(cmd==OP_SELL){ if(tp==0){ if(OrderModify(OrderTicket(), 0, sl, op-(TakeProfit*point), 0, Yellow) == false)Print("Err (", GetLastError(), ") ModifySell"); } } } } //---- return(0); }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
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:
Custom Indicators Used:
Order Management characteristics:
It automatically opens orders when conditions are reached
It Closes Orders by itself
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts