SwingExp01Sm





//+------------------------------------------------------------------+
//|                                                 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:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for SwingExp01Sm


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: