//+------------------------------------------------------------------+ //| wip.mq4 | //| Copyright © 2007, fxid10t@yahoo.com | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, fxid10t@yahoo.com" #property link "http://www.metaquotes.net" //internal variables double sto15s,sto60s,sto240s,sto1440s,sto10080s,sto43200s; double sto15m,sto60m,sto240m,sto1440m,sto10080m,sto43200m; double rng,sum.rng,avg.rng; string DR; int ticket,cnt,total; double profit; int MagicNumber=9876543210; extern double lots=0.01; extern double min.profit=0.05; datetime TimePrev; string Ordercomment=""; color Color; //--**-- int init() {return(0);} int deinit() {return(0);} int start() { Pivot.Plot(); //stoch signal sto15s = iStochastic(Symbol(),15,5,3,3,MODE_SMA,0,MODE_SIGNAL,0); sto60s = iStochastic(Symbol(),60,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); sto240s = iStochastic(Symbol(),240,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); sto1440s = iStochastic(Symbol(),1440,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); /* sto10080s = iStochastic(Symbol(),10080,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); sto43200s = iStochastic(Symbol(),43200,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); */ //stoch main sto15m = iStochastic(Symbol(),15,5,3,3,MODE_SMA,0,MODE_MAIN,0); sto60m = iStochastic(Symbol(),60,5,3,3,MODE_SMA,0,MODE_MAIN,1); sto240m = iStochastic(Symbol(),240,5,3,3,MODE_SMA,0,MODE_MAIN,1); sto1440m = iStochastic(Symbol(),1440,5,3,3,MODE_SMA,0,MODE_MAIN,1); /* sto10080m = iStochastic(Symbol(),10080,5,3,3,MODE_SMA,0,MODE_MAIN,1); sto43200m = iStochastic(Symbol(),43200,5,3,3,MODE_SMA,0,MODE_MAIN,1); */ // total=OrdersTotal(); if(total>0) { for(cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { profit=0; if(OrderType()==OP_BUY) { profit=OrderProfit(); if(OrderComment()=="Oversold Daily" && sto240s>=80.0000 && profit > min.profit && sto15m > 80.0000) { OrderClose(OrderTicket(),OrderLots(),Bid,MarketInfo(Symbol(),MODE_SPREAD),Olive); return; } if(OrderComment()=="Oversold 4hr" && sto60m>=80.0000 && profit > min.profit) { OrderClose(OrderTicket(),OrderLots(),Bid,MarketInfo(Symbol(),MODE_SPREAD),Olive); return; } if(OrderComment()=="Oversold uptrend" && sto15s > 80.0000 && profit > min.profit) { OrderClose(OrderTicket(),OrderLots(),Bid,MarketInfo(Symbol(),MODE_SPREAD),Olive); return; } if(profit <= (-3.00/0.01)*lots) { OrderClose(OrderTicket(),OrderLots(),Bid,MarketInfo(Symbol(),MODE_SPREAD),Olive); return; } if(sto15m >= 75.000 && profit > min.profit && OrderComment()=="") { OrderClose(OrderTicket(),OrderLots(),Bid,MarketInfo(Symbol(),MODE_SPREAD),MintCream); return; } } } if(OrderType()==OP_SELL) { profit=OrderProfit(); if(OrderComment()=="Overbought Daily" && sto240s<=20.0000 && profit > min.profit && sto15m < 20.0000) { OrderClose(OrderTicket(),OrderLots(),Ask,MarketInfo(Symbol(),MODE_SPREAD),Violet); return; } if(OrderComment()=="Overbought 4hr" && sto60m<=20.0000 && profit > min.profit) { OrderClose(OrderTicket(),OrderLots(),Ask,MarketInfo(Symbol(),MODE_SPREAD),Violet); return; } if(OrderComment()=="Overbought downtrend" && sto15s < 20.0000 && profit > min.profit) { OrderClose(OrderTicket(),OrderLots(),Ask,MarketInfo(Symbol(),MODE_SPREAD),Violet); return; } if(profit <= (-3.00/0.01)*lots) { OrderClose(OrderTicket(),OrderLots(),Ask,MarketInfo(Symbol(),MODE_SPREAD),Violet); return; } if(sto15m <= 25.000 && profit > min.profit && OrderComment()=="") { OrderClose(OrderTicket(),OrderLots(),Ask,MarketInfo(Symbol(),MODE_SPREAD),MintCream); return; } } } } comments(); Ordercomment=""; Daily.Range(); if( Time[0] == TimePrev ) { return(0); } //---- Yes we have a new bar ... set TimePrev & continue TimePrev = Time[0] ; if(sto15m==0 || sto15s==0 || sto60m==0 || sto60s==0 || sto240m==0 || sto240s==0 || sto1440m==0 || sto1440s==0) {return(0);} if(sto1440s > 90.0000 && sto15m >80.0000) { Ordercomment="Overbought Daily"; Color=Red; Sell(); } if(sto1440s < 10.0000 && sto15m < 20.0000) { Ordercomment="Oversold Daily"; Color=Blue; Buy(); } /* if(sto240s > 90.0000 && sto60m > 80 && sto15m > 80.0000) { Ordercomment="Overbought 4hr"; Color=Crimson; Sell(); } sells to early if(sto240s < 10.0000 && sto60m < 20 && sto15m < 20.0000) { Ordercomment="Oversold 4hr"; Color=MediumBlue; Buy(); } buys to early*/ if( sto1440m > 20.0000 &&/* sto240s > 20.0000 && (sto1440m < sto1440s) &&*/ (sto240m < 75.0000) && sto60s > 80.0000 && sto15s > 80.0000) { Ordercomment="Overbought downtrend"; Color=OrangeRed; Sell(); } if( sto1440m < 80.0000 &&/* sto240s < 80.0000 && (sto1440m > sto1440s) &&*/ (sto240m > 25.0000) && sto60s < 20.0000 && sto15s < 20.0000) { Ordercomment="Oversold uptrend"; Color=RoyalBlue; Buy(); } /* if( sto15m > 80.0000 && sto60m > 80.0000) { Ordercomment=""; Color=DeepPink; Sell(); } if( sto15m < 20.0000 && sto60m < 20.0000) { Ordercomment=""; Color=Lime; Buy(); } */ // origional scripting if( ((sto1440s < 80 && (sto1440m > sto1440s)) || sto1440m < 10) && ( ((sto240s < 80 && (sto240m > sto240s)) || sto240m < 10) && sto60s<20 && sto15s<20) ) { // buy... Ordercomment=""; Color=Lime; Buy(); } if( ((sto1440s > 20 && (sto1440m < sto1440s)) || sto1440m > 90) && ( ((sto240s > 20 && (sto240m < sto240s)) || sto240m > 90) && sto60s>80 && sto15s>80) ) { // sell... Ordercomment=""; Color=DeepPink; Sell(); } return(0);} //+------------------------------------------------------------------+ void Buy() { ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,//Ask MarketInfo(Symbol(),MODE_SPREAD),//slippage 0,//no stoploss defined 0,//no tp defined Ordercomment,//comment MagicNumber, 0,//time expire, Color); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {Print(ticket);} else Print("Error Opening BuyStop Order: ",GetLastError()); return(0); } } void Sell() { ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,//Bid MarketInfo(Symbol(),MODE_SPREAD),//slippage 0,//no stoploss set when stop order is executed 0,//no tp defined Ordercomment, MagicNumber, 0,//time expire, Color); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {Print(ticket);} else Print("Error Opening SellStop Order: ",GetLastError()); return(0); } } void comments() { if(MarketInfo(Symbol(),MODE_SWAPLONG)>0) string swap="longs,"; else swap="shorts."; if(MarketInfo(Symbol(),MODE_SWAPLONG)<0 && MarketInfo(Symbol(),MODE_SWAPSHORT)<0) swap="your broker, :("; Comment("Last Tick: ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),"\n", "Swap favors ",swap, " Swap Long ",MarketInfo(Symbol(),MODE_SWAPLONG), ", Swap Short ",MarketInfo(Symbol(),MODE_SWAPSHORT),"\n", /*"Average Daily Range: ",NormalizeDouble(avg.rng,Digits),"\n",*/ "Current Spread: ",Ask-Bid,", Profit: ",profit,"\n", "sto15s: ",sto15s," sto15m: ",sto15m,"\n", "sto60s: ",sto60s," sto60m: ",sto60m,"\n", "sto240s: ",sto240s," sto240m: ",sto240m,"\n", "sto1440s: ",sto1440s," sto1440m: ",sto1440m,"\n", "AccountProfit() ",AccountProfit(),"\n", "AccountBalance() ",AccountBalance(),"\n", "AccountEquity() ",AccountEquity()); } double Daily.Range() { if(DR==TimeToStr(TimeCurrent(),TIME_DATE)) {return(NormalizeDouble(avg.rng,Digits));} //Print(DR," ",NormalizeDouble(avg.rng,Digits)); rng=0;sum.rng=0;avg.rng=0; for(int i=0;i<iBars(Symbol(),1440);i++) { rng=(iHigh(Symbol(),PERIOD_D1,i)-iLow(Symbol(),PERIOD_D1,i)); sum.rng+=rng;} double db=iBars(Symbol(),1440); avg.rng=sum.rng/db; DR=TimeToStr(TimeCurrent(),TIME_DATE); return(NormalizeDouble(avg.rng,Digits));} void Pivot.Plot() { string t1,t2,PPn,s1n,s2n,r1n,r2n,LOPS1n,LOPS2n,HOPS1n,HOPS2n; double PP,s1,s2,r1,r2,LOPS1,LOPS2,HOPS1,HOPS2,H,L,C; PPn="PP "+TimeToStr(CurTime(),TIME_DATE); s1n="S1 "+TimeToStr(CurTime(),TIME_DATE); s2n="S2 "+TimeToStr(CurTime(),TIME_DATE); r1n="R1 "+TimeToStr(CurTime(),TIME_DATE); r2n="R2 "+TimeToStr(CurTime(),TIME_DATE); LOPS1n="LOPS1 "+TimeToStr(CurTime(),TIME_DATE); LOPS2n="LOPS2 "+TimeToStr(CurTime(),TIME_DATE); HOPS1n="HOPS1 "+TimeToStr(CurTime(),TIME_DATE); HOPS2n="HOPS2 "+TimeToStr(CurTime(),TIME_DATE); H=iHigh(Symbol(),PERIOD_D1,1); L=iLow(Symbol(),PERIOD_D1,1); C=iClose(Symbol(),PERIOD_D1,1); LOPS1=iLow(Symbol(),PERIOD_D1,1); LOPS2=iLow(Symbol(),PERIOD_D1,2); HOPS1=iHigh(Symbol(),PERIOD_D1,1); HOPS2=iHigh(Symbol(),PERIOD_D1,2); t1=TimeToStr(CurTime(),TIME_DATE)+" 00:00:00"; t2=TimeToStr(CurTime(),TIME_DATE)+" 23:59:59"; PP=NormalizeDouble((H+L+C)/3,Digits); s1=NormalizeDouble((PP*2)-H,Digits); r1=NormalizeDouble((PP*2)-L,Digits); s2=NormalizeDouble(PP-(r1-s1),Digits); r2=NormalizeDouble(PP+(r1-s1),Digits); ObjectCreate(PPn,OBJ_TREND,0,StrToTime(t1),PP,StrToTime(t2),PP); ObjectSet(PPn,10,false); ObjectSet(PPn,6,Gray); ObjectSet(PPn,7,STYLE_DOT); ObjectSet(PPn,9,true); ObjectCreate(s1n,OBJ_TREND,0,StrToTime(t1),s1,StrToTime(t2),s1); ObjectSet(s1n,10,false); ObjectSet(s1n,6,LightCoral); ObjectSet(s1n,7,STYLE_DOT); ObjectSet(s1n,9,true); ObjectCreate(s2n,OBJ_TREND,0,StrToTime(t1),s2,StrToTime(t2),s2); ObjectSet(s2n,10,false); ObjectSet(s2n,6,Tomato); ObjectSet(s2n,7,STYLE_DOT); ObjectSet(s2n,9,true); ObjectCreate(r1n,OBJ_TREND,0,StrToTime(t1),r1,StrToTime(t2),r1); ObjectSet(r1n,10,false); ObjectSet(r1n,6,LightGreen); ObjectSet(r1n,7,STYLE_DOT); ObjectSet(r1n,9,true); ObjectCreate(r2n,OBJ_TREND,0,StrToTime(t1),r2,StrToTime(t2),r2); ObjectSet(r2n,10,false); ObjectSet(r2n,6,SpringGreen); ObjectSet(r2n,7,STYLE_DOT); ObjectSet(r2n,9,true); ObjectCreate(LOPS1n,OBJ_TREND,0,StrToTime(t1),LOPS1,StrToTime(t2),LOPS1); ObjectSet(LOPS1n,10,false); ObjectSet(LOPS1n,6,LightGreen); ObjectSet(LOPS1n,7,STYLE_DASH); ObjectSet(LOPS1n,9,true); ObjectCreate(LOPS2n,OBJ_TREND,0,StrToTime(t1),LOPS2,StrToTime(t2),LOPS2); ObjectSet(LOPS2n,10,false); ObjectSet(LOPS2n,6,SpringGreen); ObjectSet(LOPS2n,7,STYLE_DASH); ObjectSet(LOPS2n,9,true); ObjectCreate(HOPS1n,OBJ_TREND,0,StrToTime(t1),HOPS1,StrToTime(t2),HOPS1); ObjectSet(HOPS1n,10,false); ObjectSet(HOPS1n,6,LightCoral); ObjectSet(HOPS1n,7,STYLE_DASH); ObjectSet(HOPS1n,9,true); ObjectCreate(HOPS2n,OBJ_TREND,0,StrToTime(t1),HOPS2,StrToTime(t2),HOPS2); ObjectSet(HOPS2n,10,false); ObjectSet(HOPS2n,6,Tomato); ObjectSet(HOPS2n,7,STYLE_DASH); ObjectSet(HOPS2n,9,true); if(Period()>=1440) {ObjectDelete(PPn); ObjectDelete(s1n); ObjectDelete(s2n); ObjectDelete(r1n); ObjectDelete(r2n); ObjectDelete(LOPS1n);ObjectDelete(LOPS2n);ObjectDelete(HOPS1n); ObjectDelete(HOPS2n); }}
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Stochastic oscillator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
Other Features: