Author: Copyright � 2005, Yuri Makarov
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
trad-MY
//+------------------------------------------------------------------+
//|                                                TradeChannel2.mq4 |
//|                                   Copyright © 2005, Yuri Makarov |
//|                                       http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov"
#property link      "http://mak.tradersmind.com"

extern double Lots  = 0.1;
extern int Slippage = 5;
extern int TimeOut  = 10000;
extern int Traling  = 0;
extern int Magic    = 0;

double SetLevel(double Level, double NewLevel, string ObjName = "", int Style = 0)
{
   switch (Style)
   {
   case 1:  // Buy Order line
      ObjectSet(ObjName,OBJPROP_COLOR,Red);
      ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet(ObjName,OBJPROP_WIDTH,1);
      break;
   case 2:  // Sell Order line
      ObjectSet(ObjName,OBJPROP_COLOR,Blue);
      ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSet(ObjName,OBJPROP_WIDTH,1);
      break;
   case 3:  // Buy Stop line
      ObjectSet(ObjName,OBJPROP_COLOR,Red);
      ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
      ObjectSet(ObjName,OBJPROP_WIDTH,1);
      break;
   case 4:  // Sell Stop line
      ObjectSet(ObjName,OBJPROP_COLOR,Blue);
      ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
      ObjectSet(ObjName,OBJPROP_WIDTH,1);
      break;
   case 5:  // Buy Take line
      ObjectSet(ObjName,OBJPROP_COLOR,Red);
      ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
      ObjectSet(ObjName,OBJPROP_WIDTH,1);
      break;
   case 6:  // Sell Take line
      ObjectSet(ObjName,OBJPROP_COLOR,Blue);
      ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
      ObjectSet(ObjName,OBJPROP_WIDTH,1);
      break;
   }
   
   if (MathAbs(NewLevel - Close[0]) < MathAbs(Level - Close[0])) return (NewLevel);
   else return (Level);
}

int start()
{

   int    NumObj = ObjectsTotal();
   double Spread = Ask - Bid;
   
   double pBuy  = 0;
   double pSell = 0;
   double pBuyStop = 0;
   double pBuyTake = 0;
   double pSellStop = 0;
   double pSellTake = 0;

   for (int i = 0; i < NumObj; i++)
   {
      string ObjName = ObjectName(i);
      string ObjDesc = ObjectDescription(ObjName);
      double Price = 0;

      switch (ObjectType(ObjName))
      {
      case OBJ_HLINE:
         Price = ObjectGet(ObjName,OBJPROP_PRICE1); 
         break;
      case OBJ_TREND:
         Price = ObjectGetValueByShift(ObjName,0); 
         break;
      }

      if (Price > 0)
      {
         if (ObjDesc == "Sell")  
         {
            pBuy      = SetLevel(pBuy,  Price, ObjName, 1); 
            pSellTake = SetLevel(pSellTake,  Price); 
         } else
         if (ObjDesc == "Buy") 
         {
            pSell    = SetLevel(pSell, Price, ObjName, 2); 
            pBuyTake = SetLevel(pBuyTake, Price); 
         } else
         if (ObjDesc == "Stop") 
         {
            if (Price < Close[0]) 
            {
               pBuyStop = SetLevel(pBuyStop, Price, ObjName, 3);
               pSellTake = SetLevel(pSellTake,  Price); 
            } else 
            {
               pSellStop = SetLevel(pSellStop, Price, ObjName, 4); 
               pBuyTake = SetLevel(pBuyTake, Price); 
            }
         } else
         if (ObjDesc == "Take") 
         {
            if (Price > Close[0]) 
            {
               pBuyTake = SetLevel(pBuyTake, Price, ObjName, 5);
               pSellStop = SetLevel(pSellStop,  Price); 
            } else 
            {
               pSellTake = SetLevel(pSellTake, Price, ObjName, 6);
               pBuyStop = SetLevel(pBuyStop, Price); 
            }
         }
      }
   }
   
   int NumOrders = OrdersTotal();
   int NumPos = 0;

   for (i = 0; i < NumOrders; i++)
   {
      if (!OrderSelect(i, SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (Magic > 0 && Magic != OrderMagicNumber()) continue;
      
      NumPos++;

      double tp = OrderTakeProfit();
      double sl = OrderStopLoss();
      double ts = 0;

      if (OrderType() == OP_BUY)
      {
         if (Bid > pSell && pSell > 0)
         {
            OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Red);
            Sleep(TimeOut);
            return(0);
         }

         ts = pBuyStop;
         if (Traling > 10) ts = MathMax(pBuyStop, Bid - Traling*Point);
         
         if (MathAbs(tp - pBuyTake) > Spread || MathAbs(sl - ts) > Spread) 
         {
            OrderModify(OrderTicket(), Ask, ts, pBuyTake, 0);
            Sleep(TimeOut);
            return(0);
         }
      }

      if (OrderType() == OP_SELL)
      {
         if (Ask < pBuy)
         {
            OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
            Sleep(TimeOut);
            return(0);
         }

         ts = pSellStop;
         if (Traling > 10)
         if (pSellStop > 0) ts = MathMin(pSellStop, Ask + Traling*Point);
         else               ts = Ask + Traling*Point;
         
         if (MathAbs(tp - pSellTake) > Spread || MathAbs(sl - ts) > Spread) 
         {
            OrderModify(OrderTicket(), Bid, ts, pSellTake, 0);
            Sleep(TimeOut);
            return(0);
         }
      }
   }
   
   if (NumPos > 0) return(0);
   if (pSell > 0 && (pSell - pBuy) < Spread*2) return(0);
      
   if (Bid > pSell && pSell > pBuyStop)
   {
      OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, pSellStop, pSellTake,
         "Magic: "+Magic+" ", Magic);
      Sleep(TimeOut);
      return(0);
   }

   if (Ask < pBuy && (pBuy < pSellStop || pSellStop == 0))
   {
      OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, pBuyStop, pBuyTake,
         "Magic: "+Magic+" ", Magic);
      Sleep(TimeOut);
      return(0);
   }
}

int init()   {}
int deinit() {}

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 ---