/*[[ Name := Pipsoed Author := Copyright © 2005, HomeSoft Corp. Link := spiky@sinet.spb.ru Lots := 0.1 Stop Loss := 1000 Take Profit := 1000 Trailing Stop := 0 ]]*/ extern int mgod=2005; extern bool auto=true; extern double lots=0.1; extern int del=9, tpl=120, stl=30, depth=12, deviation=5, backstep=3, nstl=1, eaID=993872; int cnt, j, s,b, os,ob, mods, top, oldf, LTT, dblok; string reg, fname; double MaxH,MinL, bsum,ssum, mlot, summa, MidL, kr, blot, slot, ks, kb, ps, pb, DSum, zz, zz0; int start() { Preset(); RangeCalculation(); OrderManagement(); DataDisplay(); ModifyOrder(); ModifyOrder2(); CloseOrder(); DeleteOrder(); PlaceOrder(); return; } //----------------------------------------Âû÷èñëåíèå äàííûõ äëÿ ðàáîòû ýêñïåðà------------------------------------- void Preset() { //if (start==0 ) return; if (Year()<mgod ) return; if (lots>=1 && AccountBalance()>=10000 ) kr=NormalizeDouble((AccountBalance()/10000),0); if (lots==1 && AccountBalance()<10000 ) kr=1; if (lots<1 && AccountBalance()>=1000 ) kr=NormalizeDouble((AccountBalance()/1000),0); if (lots<1 && AccountBalance()<1000 ) kr=1; if (kr>1000 ) kr=1000; mlot=kr*lots; if (mlot>1 ) mlot=NormalizeDouble((kr*lots),0); j++; if (Minute()==0 ) j=0; if (Symbol()=="EURUSD" ) fname="FEUR"; if (Symbol()=="GBPUSD" ) fname="FGBP"; if (Symbol()=="USDCHF" ) fname="FCHF"; if (Symbol()=="USDJPY" ) fname="FJPY"; if (Symbol()=="USDCAD" ) fname="FCAD"; if (Hour()>=0 && Minute()>=0 && j==5 && s+b==0 ) { oldf=FileOpen(fname,FILE_CSV|FILE_WRITE,"!"); FileSeek(oldf,0,SEEK_END); FileWrite(oldf,Month(),Day(),DSum); FileClose(oldf); DSum=0; } if (auto) reg="Àâòî"; if (!auto) reg="Õýíäë"; } void RangeCalculation() { if (((High[0]-Low[0])/Point)>=10 && Hour()==23 && Minute()>=55 ) { MaxH = High[0]; MinL = Low[0]; } else { MaxH = High[1]; MinL = Low[1]; } MidL = NormalizeDouble(((MaxH+MinL)/2),Digits); zz=iCustom(Symbol(),0,"ZigZag",depth,deviation,backstep,0,3); zz0=iCustom(Symbol(),0,"ZigZag",depth,deviation,backstep,0,0); if (zz!=0 && zz>High[0] && Hour()==23 && Minute()>=55 ) top=1; if (zz!=0 && zz<Low[0] && Hour()==23 && Minute()>=55 ) top=-1; if (zz0>0 ) top=0; } //----------------------------------------Ïîäñ÷¸ò àêòèâíûõ è ïàññèâíûõ îðäåðîâ---------------------------------------- void OrderManagement() { s=0; b=0; os=0; ob=0; summa=0; slot=0;blot=0; ssum=0;bsum=0; for (int cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==eaID && OrderSymbol()==Symbol()) { if ( OrderType()==OP_SELL || OrderType()==OP_BUY) summa=summa+OrderProfit(); if ( OrderType()==OP_SELL ) { ssum=ssum+OrderProfit(); slot=slot+OrderLots(); s++; } if ( OrderType()==OP_BUY ) { bsum=bsum+OrderProfit(); blot=blot+OrderLots(); b++; } if ( OrderType()==OP_SELLSTOP ) os++; if ( OrderType()==OP_BUYSTOP ) ob++; } } if (s+b==0) { ps=0; pb=0; ks=0; kb=0; mods=0; } } //---------------------------------------------------Êîììåíòàðèè------------------------------------------------------ void DataDisplay() { Comment("Data: ",Year(),".",Month(),".",Day()," Time ",Hour(),":",Minute()," JInd=",j," APoz=",s+b," Ords=",os+ob," Ks=",ks, " Kb=",kb," Ps=",ps," Pb=",pb," SumProf=",MathRound(DSum)," Ðåæèì: ",reg); Print("Data: ",Year(),".",Month(),".",Day()," Time ",Hour(),":",Minute()," JInd=",j," Ords=",os+ob," APoz=",s+b," Ks=",ks, " Kb=",kb," Mlot=",mlot," ZZ0=",MathRound(zz0)," ZZ3=",MathRound(zz)," SumProf=",MathRound(DSum)," Profit=",MathRound(summa)); if (CurTime()-LTT<15 ) return; } //------------------------------Ïðîöåäóðà ïåðåâîäà ïðîôèòíîé ïîçèöèè â áåçúóáûòîê------------------------------------- void ModifyOrder() { if (summa>=100*mlot && mods==0 ) { for (int cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==eaID && OrderSymbol()==Symbol()) { if ( OrderType()==OP_SELL && s>0 && (OrderOpenPrice()-Close[0])/Point>=10 ) { OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice()-nstl*Point,OrderTakeProfit(),Gold); mods=1; return; } if ( OrderType()==OP_BUY && b>0 && (Close[0]-OrderOpenPrice())/Point>=10 ) { OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice()+nstl*Point,OrderTakeProfit(),Gold); mods=1; return; } } } } } //--------------------------------Ïðîöåäóðà ìîäèôèêàöèè ñòîïà ïðîôèòíîé ïîçèöèè-------------------------------------- void ModifyOrder2() { ks=NormalizeDouble((((MinL-Close[0])/Point)/stl),0); kb=NormalizeDouble((((Close[0]-MaxH)/Point)/stl),0); if (ks<0) ks=0; if (kb<0) kb=0; if (summa>0 && (ks>=1 || kb>=1) && (ks>ps || kb>pb)) { for (int cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==eaID && OrderSymbol()==Symbol()) { if ( OrderType()==OP_SELL && s>0 && Close[0]-OrderOpenPrice()>=6) { OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice()-ks*stl*Point+stl*Point, OrderTakeProfit(),Gold); ps=ks; return; } if ( OrderType()==OP_BUY && b>0 && OrderOpenPrice()-Close[0]>=6) { OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice()+kb*stl*Point-stl*Point, OrderTakeProfit(),Gold); pb=kb; return; } } } } } //-------------------------------------------Çàêðûòèå àêòèâíûõ ïîçèöèé ---------------------------------------------- void CloseOrder() { if (Hour()==23 && Minute()>=50 && s+b>0 ) { for (int cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==eaID && OrderSymbol()==Symbol()) { if (OrderType()==OP_SELL) { DSum=DSum+OrderProfit(); OrderClose(OrderTicket(),OrderLots(),Ask,5,Red); return; } if (OrderType()==OP_BUY) { DSum=DSum+OrderProfit(); OrderClose(OrderTicket(),OrderLots(),Bid,5,Red); return; } } } } } //-----------------------------------------Óäàëåíèå íåèñïîëüçîâàííûõ îäåðîâ------------------------------------------- void DeleteOrder() { if (Hour()==23 && Minute()<50) dblok=0; if (Hour()==23 && Minute()>=50 && dblok==0) { if (os+ob==1) dblok=1; for (int cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==eaID && OrderSymbol()==Symbol()) { OrderDelete(OrderTicket()); return; } } } } //------------------------------------------Âûñòàâëåíèå êàíàëüíûõ îðäåðîâ--------------------------------------------- void PlaceOrder() { if ((Hour()==23 && Minute()>=55) || s+b+os+ob<2 ) { if (auto==0 ) Comment("ÓÑÒÀÍÎÂÈÒÅ ÄÂÀ ÎÐÄÅÐÀ ÇÀ ÏÐÅÄÅËÀÌÈ ÊÀÍÀËÀ ( ÐÅÆÈÌÅ ÀÂÒÎ ÝÒÎÃÎ ÄÅËÀÒÜ ÍÅ ÍÀÄÎ), À ÎÑÒÀËÜÍÎÅ ÑÄÅËÀÞ ß"); if (auto==1 && MaxH!=0 && MinL!=0 ) { if (os==0 && s==0 && ((Close[0]-MinL)/Point)>=5 && (top==1 || top==0)) { OrderSend(Symbol(),OP_SELLSTOP,mlot, MinL-del*Point,5,MinL-del*Point+stl*Point,MinL-del*Point-tpl*Point, NULL,eaID,0,Gold); return; } if (os==0 && s==0 && ((Close[0]-MinL)/Point)<=0 && (top==1 || top==0)) { OrderSend(Symbol(),OP_SELLSTOP,mlot, Bid-del*Point,5,Bid-del*Point+stl*Point,Bid-del*Point-tpl*Point, NULL,eaID,0,Gold); return; } if (ob==0 && b==0 && ((MaxH-Close[0])/Point)>=5 && (top==-1 || top==0)) { OrderSend(Symbol(),OP_BUYSTOP,mlot, MaxH+del*Point,5,MaxH+del*Point-stl*Point,MaxH+del*Point+tpl*Point, NULL,eaID,0,Gold); return; } if (ob==0 && b==0 && ((MaxH-Close[0])/Point)<=0 && (top==-1 || top==0)) { OrderSend(Symbol(),OP_BUYSTOP,mlot, Ask+del*Point,5,Ask+del*Point-stl*Point,Ask+del*Point+tpl*Point, NULL,eaID,0,Gold); return; } } } } //-------------------------------------------------------END----------------------------------------------------------
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
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
ZigZag
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself
Other Features:
Uses files from the file system
It writes information to file