/*[[ 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----------------------------------------------------------
Комментарии к исходному коду форекс советника MiniPlatinum.mq4
В целях безопасности и борьбы со спамом в тексте комментариев запрещено размещать html-теги и ссылки. Благодарим за понимание.