//+------------------------------------------------------------------+ //| SwingExp01Sm.mq4 | //| Ïåðåâîä íà ÌÒ4 Êèì Èãîðü Â. aka KimIV | //| http://www.kimiv.ru | //+------------------------------------------------------------------+ /*[[ Name := SwingExp01Sm Author := Vovan Link := Home.Ltd.ru Lots := 1.0 Stop Loss := 50 Take Profit := 150 Trailing Stop := 30 ]]*/ #define MAGIC 20050819 //---- Âíåøíèå ïàðàìåòðû --------------------------------------------- extern int per=21, ttime=1800, zap=12; extern double Lots=1.0; extern int StopLoss=20, TakeProfit=65, TrailingStop=30; //---- Ãëîáàëüíûå ïåðåìåííûå ----------------------------------------- bool first=true; double mlot, MaxH, MinL, MidLine; int b, s, ob, os, pb, ps, i, j=0; int ssig, bloks, blokb, bsig, Hod, porog, m; int cnt, canal, GL, Prof, PHod, Pprof, Sprof, dst; // ìèíèìàëüíîå çíà÷åíèå ÒÑ=30 //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ void init() { ObjectCreate("MaxHi" , OBJ_HLINE, 0, 0,0); ObjectCreate("MinLow" , OBJ_HLINE, 0, 0,0); ObjectCreate("MidLine", OBJ_HLINE, 0, 0,0); ObjectCreate("Arrow" , OBJ_ARROW, 0, 0,0); Comment(""); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { ObjectDelete("MaxHi"); ObjectDelete("MinLow"); ObjectDelete("MidLine"); ObjectDelete("Arrow"); Comment(""); } //+------------------------------------------------------------------+ //| Óñòàíîâêà çíà÷êîâ | //+------------------------------------------------------------------+ void SetArrow(datetime t, double p, int k, color c) { ObjectSet("Arrow", OBJPROP_TIME1 , t); ObjectSet("Arrow", OBJPROP_PRICE1 , p); ObjectSet("Arrow", OBJPROP_ARROWCODE, k); ObjectSet("Arrow", OBJPROP_COLOR , c); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { j++; if (Hour()==0) j=0; if (Minute()==5 && Seconds()>=55 && i<2) { i++; if (i==2) m=1; } //----- Ïîäñ÷¸ò îòêðûòûõ ïîçèöèé ----------------------------------- b=0; s=0; ob=0; os=0; pb=0; ps=0; for (cnt=0; cnt<OrdersTotal(); cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) {pb++; b++;} if (OrderType()==OP_SELL) {pb++; s++;} if (OrderType()==OP_BUYSTOP) {ps++; ob++;} if (OrderType()==OP_SELLSTOP) {ps++; os++;} } } } Pprof=0; Sprof=0; bloks=0; blokb=0; //----- MiniMax Setting -------------------------------------------- Hod =(Open[3]-Close[3]+Open[2]-Close[2]+Open[1]-Close[1]+Open[0]-Close[0])/Point; PHod=(Open[6]-Close[6]+Open[5]-Close[5]+Open[4]-Close[4])/Point; // ÏÎÐÎà - ÎÃÐÎÌÍÛÉ - ñäåëàíî if (AccountBalance()<15000) {mlot=0.1; dst=0; porog=15;} if (AccountBalance()>=15000) {mlot=1.0; dst=200; porog=100;} MaxH=High[per]; MinL=Low[per]; for (cnt=per; cnt>=1; cnt--) { if (MaxH<High[cnt]) MaxH=High[cnt]; if (MinL>Low[cnt]) MinL=Low[cnt]; } MidLine=NormalizeDouble((MaxH+MinL)/2, Digits); ObjectSet("MaxHi" , OBJPROP_PRICE1, MaxH); ObjectSet("MaxHi" , OBJPROP_COLOR , Blue); ObjectSet("MinLow" , OBJPROP_PRICE1, MinL); ObjectSet("MinLow" , OBJPROP_COLOR , Red); ObjectSet("MidLine", OBJPROP_PRICE1, MidLine); ObjectSet("MidLine", OBJPROP_COLOR , Green); canal=(MaxH-MinL)/Point; //----- Çàêðûòèå î÷åíü ïðîôèòíûõ ïîçèöèé --------------------------- //----- Îáìàíåì ÒðåéëèíãÑòîï --------------------------------------- if (b+s>0) { // if (CurTime()-LastTradeTime<11 then exit; for (cnt=0; cnt<OrdersTotal(); cnt++) { // ÍÅ Ó×Ò¨Í ÈÍÑÒÐÓÌÅÍÒ - ýòîãî ýêñïåðòà ñòàâèòü â 2-õ ýêçåìëÿðàõ íåëüçÿ - îí ìîíîâàëþòåí, // ò.ê. äëÿ íåãî íóæåí âåñü áàëàíñ - ìîæíî ïîñëå ïðîâåðêè ýòîãî ýêñïà ïîäóìàòü îá ýêñïåðòå ìåíåäæåðå // è âûáèðàòü êóäà íàïðàâëÿü ñðåäñòâà, íî äëÿ ýòîãî íóæíî ïðîäóìàòü ïðîöåäóðó çàìåðà óïóùåííîãî ïðîôèòà íà âñåõ îòêðûòûõ // ÷àðòàõ. // È åù¸. Òû íå çíàåøü, êàê ìîæíî ëîñÿ óñòàíîâëåíîãî â íàñòðîéêàõ ïîñëå ïåðåõîäà íà áîëüøîé ëîò èçìåíèòü? // Íà ìàëîì äëÿ ïîäú¸ìà äåïî ìîæíî ïîðèñêîâàòü è ïîñòàâèòü 300, à ïîòîì õîòåëîñü áû âåðíóòüñÿ íà 50.Ïîñìîòðè êàê ñäåëàíî. if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if (cnt==0) Pprof=MathRound(OrderProfit()); Sprof=MathRound(OrderProfit()); if (OrderLots()==0.1) porog=15; if (OrderLots()==1.0) porog=100; if (OrderType()==OP_SELL && OrderSymbol()==Symbol()) { if (OrderProfit()>=porog) { // ÎÏßÒÜ ÀÑÊÈ Ñ ÁÈÄÀÌÈ ÏÅÐŨÐÍÓÒÛ. - óñòðàíåíî * OrderClose(OrderTicket(), OrderLots(), Ask, 5, Gold); return; } } if (OrderType()==OP_BUY && OrderSymbol()==Symbol()) { if (OrderProfit()>=porog) { OrderClose(OrderTicket(), OrderLots(), Bid, 5, Gold); return; } } } } } if ((DayOfWeek()==6 && Hour()>=22 && Minute()>50) || m==1) { bloks=1; blokb=1; m=0; i=0; for (cnt=0; i<OrdersTotal(); cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()) OrderDelete(OrderTicket()); if (OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()) OrderDelete(OrderTicket()); } } } // ÏÎ ÌÎÅÌÓ TotalProfit - ÎÁÙÈÉ ÒÅÊÓÙÈÉ ÏÐÎÔÈÒ ÏÎ Â Ñ Å Ì ÂÀËÞÒÀÌ. //×òîáû èìåòü ïðåäñòàâëåíèå î åãî ñîñòîÿíèè íà äàííûé ìîìåíò. //Ïî åãî èçìåíåíèþ ìîæíî ñóäèòü î íàïðàâëåííîñòè âñåõ ñäåëîê - ëîñü ðàñò¸ò èëè ïðîôèò - ýòî äëÿ îòëàäêè - ïîòîì âûáðîñèì Prof=MathRound(AccountProfit()); if (Prof<0) { if (GL>Prof) GL=Prof; } //----- Signals Setting -------------------------------------------- ssig=0; bsig=0; if (PHod<0 && Hod>0 && Close[0]<Open[0] && MaxH-High[0]<=15*Point && canal>=50) { blokb=1; ssig=1; SetArrow(Time[0], High[0]+10*Point, 242, GreenYellow); } if (PHod+Hod>0 && Close[0]<Open[0] && Close[0]>MidLine && canal>=50) { blokb=1; ssig=1; SetArrow(Time[0], High[0]+10*Point, 242, GreenYellow); } if (PHod>0 && Hod<0 && Close[0]>Open[0] && Low[0]-MinL<=15*Point && canal>=50) { bloks=1; bsig=1; SetArrow(Time[0], Low[0]-10*Point, 241, Violet); } if (PHod+Hod<0 && Close[0]>Open[0] && Close[0]<MidLine && canal>=50) { bloks=1; bsig=1; SetArrow(Time[0], Low[0]-10*Point, 241, Violet); } if (Hour()==0 && Minute()<=5) {bloks=1; blokb=1;} Comment("Data: ",Year(),".",Month(),".",Day()," Time: ",Hour(),":",Minute(), " Imp1=", PHod, " Imp2=", Hod, " StopProf=", porog, " Del=",i, "\nProfit=", Prof, " PProf=", Pprof, " SProf=", Sprof, " Pozz=", pb+ps, " SLoss=", (StopLoss-dst), " Canal=", canal, " HH=", m); //----- Open Positions --------------------------------------------- if (Pprof<0 || Sprof<0) { ssig=0; bsig=0; ttime=3600; } else ttime=120; // ÑÓÒÜ ÝÒÎÃÎ ÍÅ ÏÎÍßË - ñóòü òàêîâà: ïîñêîëüêó ÷èñëî âûñòàâëÿåìûõ îðäåðîâ îãðàíè÷èâàåòñÿ òîëüêî áàëàíñîì, // òî ìû èìååì ñåðèþ. Ïðîôèò ïî ïåðâîìó àêòèâèðîâàííîìó îðäåðó ãîâîðèò ãîâîðèò -ãäå ìû: íà ïîäú¸ìå èëè ñïóñêå. // Ïðîôèò ïî ïîñëåäíåìó àêòèâèðîâàííîìó îðäåðó ãîâîðèò íàì ÷òî ñåðèþ ìîæíî ïðîäîëæèòü, åñëè îí ïîëîæèòåëåí, // à åãî îòðèöàòåëüíîå çíà÷åíèå ãîâîðèò, ÷òî ïðèáûëüíàÿ ñåðèÿ êîí÷èëàñü è ìû ïðåêðàùàåì âûñòàâëÿòü îðäåðà. // Îáû÷íî çà âðåìÿ çàïðåòà âñå îðäåðà îòðàáàòûâàþò èëè óäàëÿþòñÿ. Âîçìîæíî ýòî âðåìåííî, íî èçìåíèâ ttime // ìû çàäåðæèâàåì îòðàáîòêó âûñòàâëåíèÿ îðäåðîâ. Åñëè ïîÿâèòñÿ îïÿòü ïîëîæèòåëüíîå çíà÷åíèå ïðîôèòîâ â ñåðèè, // ìû îïÿòü ðàçðåøèì ñòàâèòü èõ ÷àùå. Ýòî ÿ òàê äóìàþ, íî íå ôàêò ïîêà ïðîâåðÿþ. Ìîæåò ýòî äóáëèîëâàíèå, íî ÌÒ3 åñòü ÌÒ3. if ((bloks==0 || blokb==0) && AccountFreeMargin()>=0.5*AccountBalance() && Pprof>=0 && Sprof>=0 && pb+ps<10) { // çäåñü êîñÿê è èíîãäà íå õâàòàåò äåíåã ïðè àêòèâàöèè îðäåðîâ. Êàê ýòî ó÷åñòü ïðè ðàáîòå ïîêà íå çíàþ // if CurTime-LastTradeTime<ttime then exit; if (ssig==1) { SetArrow(Time[0], High[0]+5*Point, 159, GreenYellow); OrderSend(Symbol(),OP_SELLSTOP,mlot,Bid-zap*Point,3,Bid-zap*Point+(StopLoss-dst)*Point,Bid-zap*Point-TakeProfit*Point,"SwingExp01Sm",MAGIC,0,GreenYellow); return; } if (bsig==1) { SetArrow(Time[0], Low[0]-5*Point, 159, Violet); OrderSend(Symbol(),OP_BUYSTOP,mlot,Ask+zap*Point,5,Ask+zap*Point-(StopLoss-dst)*Point,Ask+zap*Point+TakeProfit*Point,"SwingExp01Sm",MAGIC,0,Violet); return; } } if (TrailingStop>0 && b+s>0) { for (cnt=0; cnt<OrdersTotal(); cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderProfit()>0 && OrderType()==OP_BUY) { if (Bid-OrderOpenPrice()>Point*TrailingStop) { if (OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Red); return; } } } if (OrderSymbol()==Symbol() && OrderProfit()>0 && OrderType()==OP_SELL) { if (OrderOpenPrice()-Ask>Point*TrailingStop) { if (OrderStopLoss()>Ask+Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return; } } } } } } } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains open prices 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 open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features: