Falling_Cat

Author: Scam Laboratory 2013
Price Data Components
Series array that contains open prices of each bar
Orders Execution
It automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyChecks for the total of open ordersIt Closes Orders by itself
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
Falling_Cat
#property copyright "Scam Laboratory 2013" 
#property link      "http://www.forex4you.org/?affid=bdbda7b"
//=============== Ìåíþ ===============================================
extern string  Name="Falling Cat";
extern string  MoneyManagement="MoneyManagement";
extern double  StartLot = 0.01;                     // Ñòàðò èãðóøêè êîøêè
extern int     TakeProfit = 2000;                   // ôèêñèðîâàííûé ïðîôèò
extern int     StopLoss = 2000;                     // ôèêñèðîâàííûé ïðîôèò
extern string  Enter="OpenPosition";
extern int     Period_MA_Main = 12;                 // Ïåðèîä ÌÀ
extern int     Ma_method_Main = 1;                  // MODE_SMA=0  MODE_EMA=1  MODE_SMMA=2  MODE_LWMA=3
extern int     Applied_price_Main = 5;              // PRICE_CLOSE=0 PRICE_OPEN=1 PRICE_HIGH=2 PRICE_LOW=3 PRICE_MEDIAN=4 PRICE_TYPICAL=5 PRICE_WEIGHTED=6
extern int     Period_MA_Signal = 3;                // Ïåðèîä ÌÀ
extern int     Ma_method_Signal = 1;                // MODE_SMA=0  MODE_EMA=1  MODE_SMMA=2  MODE_LWMA=3
extern int     Applied_price_Signal = 5;            // PRICE_CLOSE=0 PRICE_OPEN=1 PRICE_HIGH=2 PRICE_LOW=3 PRICE_MEDIAN=4 PRICE_TYPICAL=5 PRICE_WEIGHTED=6
extern string  Exit="ExitPosition";
extern int     ProfitClose = 20000;                 // Çàêðûâàåì ïðîôèò â åäèíèöàõ ñ÷åòà
extern int     MinTP = 10;                          // ìèíèìàëüíûé òåéê ïðîôèò 
extern int     MinSL = 10;                          // ìèíèìàëüíûé ñòîï ëîññ
extern string  Server="ServerSetting";
extern int     MaxSpread = 20;                      // Âûøå ýòîãî ñïðåäà íå îòêðûâàåìñÿ
extern int     Slippage = 0;                        // Äîïóñòèìîå ïðîñêàëüçîâàíèå öåíû
extern int     Pause = 500;                         // ïàóçà ìåæäó çàïðîñàìè íà ñåðâåð
extern string  Magic="MagicNumber";
extern int     mn = 16384;                          // Ìàãè÷åñêèé íîìåð
//============== Ïåðåìåííûå ==========================================
string   GetNameOP="FallingCat"; // êîìåíò â îòêðûòîì îðäåðå
int      spread;                 // òåêóùèé ñïðåä
int      Ticket;                 // òèêåò îðäåðà ïðè îòêðûòèè
int      FullSell;               // FullSignals
int      FullBuy;
double   MA_main;                // ÌÀ îñíàâíàÿ
double   MA_signal;              // ÌÀ ñèãíàëüíàÿ
double   HeikenAshi;             // HeikenAshi
int      Profit;                 // Ïðèáûëü
int      NoLoss;                 // Áåçóáûòîê
double   Lot;                    // Ðàáî÷èé ëîò
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   if (!IsTesting())
   {
      if (IsExpertEnabled())
      {
         Comment("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
      }
      else 
      {
         Comment("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
      }
   }
      
   return (0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {//0
//-Start-

// ======== ïîëó÷åíèå äàííûõ ñ èíäèêàòîðîâ è òåêóùåé öåíû ============
{//1
   MA_main = iMA(NULL,0,Period_MA_Main,0,Ma_method_Main,Applied_price_Main,1); // ÌÀ îñíàâíàÿ
   MA_signal = iMA(NULL,0,Period_MA_Signal,0,Period_MA_Signal,Applied_price_Signal,1); // ÌÀ ñèãíàëüíàÿ
   HeikenAshi = iOpen(NULL,0,0); // îòêðûòèå ñâå÷è
   spread =  MarketInfo(Symbol(),MODE_SPREAD); // ñïðåä
}//1
// ================= Îáðàáîòêà ñèãíàëîâ ==============================
{//2
   if ((MA_signal < MA_main) && (HeikenAshi < MA_signal)) FullSell = 1; else FullSell = 0; // FullSignals
   if ((MA_signal > MA_main) && (HeikenAshi > MA_signal)) FullBuy = 1; else FullBuy = 0; // FullSignals
   
   if (AccountEquity() > AccountBalance()) Profit = 1; else Profit = 0; // Ïðèáûëü
   if (AccountBalance() == AccountEquity()) NoLoss = 1; else NoLoss = 0; // Áåçóáûòîê
   
   if (NumberOfPositions() == 0) Lot = StartLot; else Lot = (GetLotLastPos()*2);
}//2
// ================= Êîììåíòàðèè =====================================
{//3

}//3
// ================= Îòêðûòèå ñäåëêè =================================
{//4
      // ïîëíûé ñèãíàë, îðäåðà íåò, òîðãîâëÿ ðàçðåøåíà è ïîñëåäíÿÿ çàêðûòàÿ ïîçèöèè íå òàêàÿ æå 
   if ((FullSell == 1) && (Profit == 0) && (GetTypeLastOpenPos() !=1))
      {
         Ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,GetNameOP,mn,0,OrangeRed);
         Sleep (Pause);
         OrderModify(Ticket,OrderOpenPrice(),(PriceOpenLastPos()+StopLoss*Point),(PriceOpenLastPos()-TakeProfit*Point),0,CLR_NONE);
      }
   if ((FullBuy == 1) && (Profit == 0) && (GetTypeLastOpenPos() !=0))
      {
         Ticket = OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,GetNameOP,mn,0,Blue);
         Sleep (Pause);
         OrderModify(Ticket,OrderOpenPrice(),(PriceOpenLastPos()-StopLoss*Point),(PriceOpenLastPos()+TakeProfit*Point),0,CLR_NONE);
      }
}//4
// ================= Ìîäèôèêàöèÿ îðäåðà ==============================
{//5

}//5
// ================= Çàêðûòèå ñäåëêè =================================
{//6

if ((FullSell == 1) && (Profit == 1) && (GetTypeLastOpenPos() !=1))
   {
      ClossAllProfitBuy ();
      ClossAllLossSell();
   } 
if ((FullBuy == 1) && (Profit == 1) && (GetTypeLastOpenPos() !=0))
   {
      ClossAllProfitSell ();
      ClossAllLossBuy();   
   }

if (GetProfitOpenPosInCurrency() >= ProfitClose)
   {
      ClossAllProfitSell ();
      ClossAllProfitBuy ();
      ClossAllLossSell();
      ClossAllLossBuy();   
   }

}//6
   
//-End-
   return(0);
  }//0
// ================= Ôóíêöèè =========================================
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî ïîçèöèé.                                 |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}
//End
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò òèï ïîñëåäíåé îòêðûòîé ïîçèöèè èëè -1               |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="") {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
//End

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ñóììàðíûé ïðîôèò îòêðûòûõ ïîçèöèé â âàëþòå äåïîçèòà |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency(string sy="", int op=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
//End
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ðàçìåð ëîòà ïîñëåäíåé îòêðûòîé ïîçèöèè èëè -1       |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
double GetLotLastPos(string sy="", int op=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
//End
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò öåíó îòêðûòèÿ ïîñëåäíåé îòêðûòîé ïîçèöèé.           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1) {
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
//End
//+------------------------------------------------------------------+
//|                 Çàêðûòü ïðèáûëüíûå îðäåðà                        |
//+------------------------------------------------------------------+
// ====================== Çàêðûòü BUY â ïðîôèòå ===============================
double ClossAllProfitBuy ()

{
   int Profit1=MinTP;
   int col1=Lime;
   int ask1, bid1, open1;
   double point1;
   for (int i1=OrdersTotal()-1; i1>=0; i1--)
   {
      if (!OrderSelect(i1,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn))
      {
         point1=MarketInfo(Symbol(),MODE_POINT);
         if (point1==0) break;
         bid1=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point1);
         open1=MathRound(OrderOpenPrice()/point1);
         if (bid1-open1<Profit1) continue;
         OrderClose(OrderTicket(),OrderLots(),bid1*point1,Slippage,col1);
      }
   }
}
// End

// ====================== Çàêðûòü SELL â ïðîôèòå ===============================
double ClossAllProfitSell ()

{
   int Profit2=MinTP;
   int col2=Lime;
   int ask2, bid2, open2;
   double point2;
   for (int i2=OrdersTotal()-1; i2>=0; i2--)
   {
      if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn))
      {
         point2=MarketInfo(Symbol(),MODE_POINT);
         if (point2==0) break;
         ask2=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point2);
         open2=MathRound(OrderOpenPrice()/point2);
         if (open2-ask2<Profit2) continue;
         OrderClose (OrderTicket(),OrderLots(),ask2*point2,Slippage,col2) ;
      }
   }
}
// End


//+------------------------------------------------------------------+
//|                 Çàêðûòü óáûòî÷íûå îðäåðà                         |
//+------------------------------------------------------------------+

// ====================== Çàêðûòü BUY â óáûòêå ===============================

double ClossAllLossBuy()
{
   int Stop4=MinSL;
   int ask4, bid4, open4;
   double point4;
   for (int i4=OrdersTotal()-1; i4>=0; i4--)
   {
      if (!OrderSelect(i4,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn))
      {
         point4=MarketInfo(Symbol(),MODE_POINT);
         if (point4==0) break;
         bid4=MathRound(MarketInfo(Symbol(),MODE_BID)/point4);
         open4=MathRound(OrderOpenPrice()/point4);
         if (open4-bid4<Stop4) continue;
         OrderClose(OrderTicket(),OrderLots(),bid4*point4,Slippage,Red);
      }
   }
}
// End

// ====================== Çàêðûòü SELL â óáûòêå ===============================

double ClossAllLossSell()
{
   int Stop5=MinSL;
   int ask5, bid5, open5;
   double point5;
   for (int i5=OrdersTotal()-1; i5>=0; i5--)
   {
      if (!OrderSelect(i5,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn))
      {
         point5=MarketInfo(Symbol(),MODE_POINT);
         if (point5==0) break;
         ask5=MathRound(MarketInfo(Symbol(),MODE_ASK)/point5);
         open5=MathRound(OrderOpenPrice()/point5);
         if (ask5-open5<Stop5) continue;
         OrderClose (OrderTicket(),OrderLots(),ask5*point5,Slippage,Red);
      }
   }
}
// End

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---