Franks_4hour_limit_orders

Price Data Components
Series array that contains open time of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Indicators Used
MACD HistogramMoving Average of OscillatorForce index
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
63.00 %
Total Trades 174
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -19.25
Gross Profit 5680.00
Gross Loss -9030.00
Total Net Profit -3350.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 207
Won Trades 0
Lost trades 207
Win Rate 0.00 %
Expected payoff -37.13
Gross Profit 0.00
Gross Loss -7686.00
Total Net Profit -7686.00
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 206
Won Trades 0
Lost trades 206
Win Rate 0.00 %
Expected payoff -37.24
Gross Profit 0.00
Gross Loss -7672.00
Total Net Profit -7672.00
-100%
-50%
0%
50%
100%
Franks_4hour_limit_orders
//+--------------------------------------------------------------------------------------------------+
//|   Name   := TDSGlobal-4hr                                                                        |
//|	Author := Copyright © 2005 Bob O'Brien / Barcode, Modified by Frank Chamanara for a 4hr. chart |
//|	Link   :=                                                                                      |
//|	Notes  := Based on Alexander Elder's Triple Screen system, Weekly System.                      |
//+--------------------------------------------------------------------------------------------------+
extern int Lots=1;
extern int TakeProfit=150;
extern int Stoploss=35;
extern int TrailingStop=30;
extern int Slippage=5;         // Slippage
//+------------------------------------------------------------------+
//|   Internal Variables                                             |
//+------------------------------------------------------------------+
int BuyEntryOrderTicket=0,SellEntryOrderTicket=0,cnt=0,total=0,h,m,risk=20,mm=1;
double MacdCurrent=0, MacdPrevious=0, MacdPrevious2=0, Direction=0, OsMAPrevious=0, OsMAPrevious2=0, OsMADirection=0;
double O1,H1,L1,H2,L2,newbar=0;
double PriceOpen=0,lotMM;
double ForcePos=0, ForceNeg=0, Force=0,NewPrice=0;
bool First=True;
bool hasatrade=false;
datetime prevtime=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   h=TimeHour(CurTime());
   m=TimeMinute(CurTime());
   //
   H1=iHigh(NULL,1440,1);
   L1=iLow(NULL,1440,1);
   H2=iHigh(NULL,1440,2);
   L2=iLow(NULL,1440,2);
   //
   MacdPrevious =iMACD(NULL,240,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   MacdPrevious2=iMACD(NULL,240,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
   //
   OsMAPrevious =iOsMA(NULL,240,12,26,9,PRICE_CLOSE,1);
   OsMAPrevious2=iOsMA(NULL,240,12,26,9,PRICE_CLOSE,2);
   //
   Force=iForce(NULL,240,24,MODE_EMA,PRICE_CLOSE,1);
   ForcePos=iForce(NULL,240,24,MODE_EMA,PRICE_CLOSE,1) > 0;
   ForceNeg=iForce(NULL,240,24,MODE_EMA,PRICE_CLOSE,1) < 0;
/*	     Comment("TSD_1hr for MT4 ver beta 0.2 - DO NOT USE WITH REAL MONEY YET",
        "\n",
        "MT4 time (hr:mm):  ",h,":",m,
        "\n",
        "\n","MacdPrevious = ",MacdPrevious,"    OsMAPrevious = ",OsMAPrevious,
        "\n","MacdPrevious2 = ",MacdPrevious2,"    OsMAPrevious2 = ",OsMAPrevious2,
        "\n",
        "\n","Direction = ",Direction,"    OsMADirection = ",OsMADirection,
        "\n",
        "\n","Daily Force = ",Force,
        "\n","Is Daily Force Bullish = ",ForcePos,
        "\n","Is Daily Force Bearish = ",ForceNeg,
        "\n",
        "\n","Total Orders = ",total,
        "\n",
        "\n","Daily High[1] = ",H1,
        "\n","Daily High[2] = ",H2,
        "\n","Daily Low[1] = ",L1,
        "\n","Daily Low[2] = ",L2,
        "\n",
        "\n","Current Ask Price + 16 pips = ",Ask+(16*Point),
        "\n","Current Bid Price - 16 pips = ",Bid-(16*Point));
*/
// initial data checks
   if(Bars<50)
     {
      Print("bars less than 50");
      return(0);
     }
   if(prevtime==Time[0]) return(0);      // Always start at the new bar
   prevtime=Time[0];
   // =================================================================================
   // PYRAMIDING - LINEAR
   // Money Management risk exposure compounding
   // =================================================================================
   if (mm!=0)
     {
      lotMM=(MathCeil(AccountBalance() * risk/12000)/10);
      if (lotMM < 0.1) lotMM=Lots;
      if (lotMM > 1.0) lotMM=MathCeil(lotMM);
     }
   else lotMM=Lots;
   //  Pending Order Management
   total=OrdersTotal();
   hasatrade=false;
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())  // we have open orders
         hasatrade=true;
      if(OrderSymbol()==Symbol() && OrderType()==OP_BUYLIMIT)
        {
         if(OsMADirection==-1)
           {
            OrderDelete(OrderTicket());
            return(0);
           } // close for if(Direction == -1)
        } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP)
      if(OrderSymbol()==Symbol() && OrderType()==OP_SELLLIMIT)
        {
         if(OsMADirection==1)
           {
            OrderDelete(OrderTicket());
            return(0);
           } //close for if(Direction == 1)
        } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP)
      if(OrderSymbol()==Symbol() && OrderType()==OP_BUYLIMIT)
        {
         if(Low[1] > Low[2])
           {
            if(Low[1] < (Bid - 16 * Point))
              {
               OrderModify(OrderTicket(),Low[1] - 1 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan);
               return(0);
              } // close for if(Low[1] < (Bid - 16 * Point))
            else
              {
               OrderModify(OrderTicket(),Bid - 16 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan);
               return(0);
              } //close for else statement
           } //close for if(Low[1] > Low[2])
        } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP
      if(OrderSymbol()==Symbol() && OrderType()==OP_SELLLIMIT)
        {
         if(High[1] < High[2])
           {
            if(High[1] > (Ask + 16 * Point))
              {
               OrderModify(OrderTicket(),High[1] + 1 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan);
               return(0);
              } //close for if(High[1] > (Ask + 16 * Point))
            else
              {
               OrderModify(OrderTicket(),Ask + 16 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan);
               return(0);
              } //close for else statement
           } //close for if(High[1] < High[2])
        } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP)
     } // close for for(cnt=0;cnt<total;cnt++)
   if(AccountFreeMargin()<(1000*lotMM))
     {
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0);
     }
   if (MacdPrevious > MacdPrevious2) Direction=1;
   if (MacdPrevious < MacdPrevious2) Direction=-1;
   if (MacdPrevious==MacdPrevious2) Direction=0;
   if (OsMAPrevious > OsMAPrevious2) OsMADirection=1;
   if (OsMAPrevious < OsMAPrevious2) OsMADirection=-1;
   if (OsMAPrevious==OsMAPrevious2) OsMADirection=0;
   //  Process the next bar details for any possible buy/sell order
   if (!hasatrade)   // no open orders
     {
      if(OsMADirection==1 && ForceNeg)
        {
         PriceOpen=High[1] + 1 * Point;      // Buy 1 point above high of previous candle
         if(PriceOpen > (Bid - 16 * Point))  // Check if buy price is a least 16 points > Ask
           {
            BuyEntryOrderTicket=OrderSend(Symbol(),OP_SELLLIMIT,lotMM,PriceOpen,Slippage,PriceOpen + Stoploss * Point,PriceOpen - TakeProfit * Point,"Sell Entry Order placed at "+CurTime(),0,0,Green);
           } // close for if(PriceOpen > (Ask + 16 * Point))
         else
           {
            NewPrice=Bid + 16 * Point;
            BuyEntryOrderTicket=OrderSend(Symbol(),OP_SELLLIMIT,lotMM,NewPrice,Slippage,PriceOpen + Stoploss * Point,NewPrice - TakeProfit * Point,"Sell Entry Order placed at "+CurTime(),0,0,Green);
            return(0);
           } // close for else statement
        } // close for if(Direction == 1 && ForceNeg)
      if(OsMADirection==-1 && ForcePos)
        {
         PriceOpen=Low[1] - 1 * Point;
         if(PriceOpen < (Ask + 16 * Point)) // Check if buy price is a least 16 points < Bid
           {
            SellEntryOrderTicket=OrderSend(Symbol(),OP_BUYLIMIT,lotMM,PriceOpen,Slippage,PriceOpen - Stoploss * Point,PriceOpen + TakeProfit * Point,"Buy Entry Order placed at "+CurTime(),0,0,Green);
            return(0);
            return(0);
           } // close for if(PriceOpen < (Bid - 16 * Point))
         else
           {
            NewPrice=Ask +  16 * Point;
            SellEntryOrderTicket=OrderSend(Symbol(),OP_BUYLIMIT,lotMM,NewPrice,Slippage,PriceOpen - Stoploss * Point,NewPrice + TakeProfit * Point,"Buy Entry Order placed at "+CurTime(),0,0,Green);
            return(0);
           } // close for else statement
        } // close for if(Direction == -1 && ForcePos)
     } // end of hasatrade 
   //  Stop Loss Management
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
        {
         if(Ask-OrderOpenPrice() > (TrailingStop * Point))
           {
            if(OrderStopLoss() < (Ask - TrailingStop * Point))
              {
               OrderModify(OrderTicket(),OrderOpenPrice(),Ask - TrailingStop * Point,Ask + TakeProfit * Point,0,Cyan);
               return(0);
              } // close for if(OrderStopLoss() < (Ask - TrailingStop * Point))
           } // close for if(Ask-OrderOpenPrice() > (TrailingStop * Point))
        } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
      if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
        {
         if(OrderOpenPrice() - Bid > (TrailingStop * Point))
           {
            if(OrderStopLoss() > (Bid + TrailingStop * Point))
              {
               OrderModify(OrderTicket(),OrderOpenPrice(),Bid + TrailingStop * Point,Bid - TakeProfit * Point,0,Cyan);
               return(0);
              } // close for if(OrderStopLoss() > (Bid + TrailingStop * Point))
           } // close for if(OrderOpenPrice() - Bid > (TrailingStop * Point))
        } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
     }  // close for for(cnt=0;cnt<total;cnt++)
      //return(0);
  } // close for int start
//+------------------------------------------------------------------+

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