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
Indicators Used
Parabolic Stop and Reverse systemMovement directional indexStochastic oscillatorMACD HistogramMoving average indicator
0 Views
0 Downloads
0 Favorites

Profitability Reports

GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 15
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -4.20
Gross Profit 0.00
Gross Loss -63.00
Total Net Profit -63.00
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
81.00 %
Total Trades 10
Won Trades 3
Lost trades 7
Win Rate 0.30 %
Expected payoff -0.89
Gross Profit 37.30
Gross Loss -46.20
Total Net Profit -8.90
-100%
-50%
0%
50%
100%
Bruno v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                Bruno's.mq4 |
//+------------------------------------------------------------------+
//  as defined by BrunoFX??
//
/*
BrunoFX Expert:
 
Intervals :            30 minutes 
Indicators  : - Moving Average  Exponential – Période: 8 (red line)
              - Moving Average  Exponential – Période: 21 (blue line)
              - Moving Average  Simple – Période: 4  (OliveDrab line)
              - ADX ( Average Directionnal Mouvement Index) – Période: 13 – ADX color: green, +DI color: blue, -DI color: red
              - Stochastic Oscillator - période %K: 21 - période %D: 3 – Slowing: 3 – Price field: Low/High – Méthode: exponential – Color: green
              - MACD – Fast EMA: 13 –Slow EMA: 34 - MACD SMA: 8 - blue line
              - Parabolic SAR – Step: 0.055 – Maximum: 0.2100 – Color: Deepink

Rules of entry:
1st condition:       - Crossing of 2 moving average (with the fall or the rise)
2ème condition:      - Reading ADX (green line) > 20 and going up and +DI > -DI when crossing of moving average to the rise or +DI < -DI when crossing moving average with the fall.
3ème condition:      - When crossing of moving average to the rise: Stochastic %K (green line) >%D (dotted red line) and value of  %D < 80.
                     - When crossing of moving average to the fall: Stochastic %K (ligne verte) <%D (dotted red line) and Value %D value > 20.
4ème condition:      - For a crossing of moving average to the rise: value MACD (bar histogram blue) > 0 et > line of signal MACD (dotted red line).
                     - For a crossing of moving average to the fall: value MACD (bar histogram blue) < 0 et < line of signal MACD (dotted red line).
5ème condition       - Parabolic SAR must point in the same direction as the crossing of the moving average

Rules of exit:
Crossing of the moving average 4 (OliveDrab line) on moving average  8 (red line)  : close the position
-  Stops LOSS to 30 pip  and  trailing stop to 20 points

*/
//+------------------------------------------------------------------+

 extern double TakeProfit = 50;
 extern double Lots = 0.1;
 extern double InitialStop = 30;
 extern double TrailingStop = 20;
 
 datetime BarTime;
bool Signal1L;
bool Signal2L;
bool Signal3L;
bool Signal4L;
bool Signal5L;
bool Signal1S;
bool Signal2S;
bool Signal3S;
bool Signal4S;
bool Signal5S;

//#####################################################################
int init()
{
//----
 Signal1L = false;
 Signal2L = false;
 Signal3L = false;
 Signal4L = false;
 Signal5L = false;
  
 Signal1S = false;
 Signal2S = false;
 Signal3S = false;
 Signal4S = false;
 Signal5S = false;
 
 
//----
   return(0);
  }
//#####################################################################

int start()
  {
   int cnt,total,ticket,MinDist,tmp;
   double Spread;
//############################################################################
  if(Bars<100){
     Print("bars less than 100");
     return(0);  
  }
//exit if not new bar
 if(BarTime == Time[0]) {return(0);}
//new bar, update bartime
 BarTime = Time[0];
//#########################################################################################
//~~~~~~~~~~~~~~~~Miscellaneous setup stuff~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 MinDist=MarketInfo(Symbol(),MODE_STOPLEVEL);
 Spread=(Ask-Bid);
//#########################################################################################
// use an indicator for data values
double SARP1= iSAR(NULL,0,0.055,0.21,1);
double SARP2 =iSAR(NULL,0,0.055,0.21,2);
double DMIPP1 = iADX(NULL,0,13,PRICE_CLOSE,MODE_PLUSDI,1);
double DMIPP2 = iADX(NULL,0,13,PRICE_CLOSE,MODE_PLUSDI,2);
double DMIMP1 = iADX(NULL,0,13,PRICE_CLOSE,MODE_MINUSDI,1);
double DMIMP2 = iADX(NULL,0,13,PRICE_CLOSE,MODE_MINUSDI,2);
double StochMP1 = iStochastic(NULL,0,21,3,3,MODE_EMA,0,MODE_MAIN,1);
double StochMP2 = iStochastic(NULL,0,21,3,3,MODE_EMA,0,MODE_MAIN,2);
double StochSP1 = iStochastic(NULL,0,21,3,3,MODE_EMA,0,MODE_SIGNAL,1);
double StochSP2 = iStochastic(NULL,0,21,3,3,MODE_EMA,0,MODE_SIGNAL,2);
double MACDHP1 = iMACD(NULL,0,13,34,8,PRICE_CLOSE,MODE_MAIN,1);
double MACDHP2 = iMACD(NULL,0,13,34,8,PRICE_CLOSE,MODE_MAIN,2);
double MACDSP1 = iMACD(NULL,0,13,34,8,PRICE_CLOSE,MODE_SIGNAL,1);
double MACDSP2 = iMACD(NULL,0,13,34,8,PRICE_CLOSE,MODE_SIGNAL,2);
double MA1P1 = iMA(NULL,0,4,0,PRICE_CLOSE,MODE_SMA,1);
double MA1P2 = iMA(NULL,0,4,0,PRICE_CLOSE,MODE_SMA,1);
double MA2P1 = iMA(NULL,0,8,0,PRICE_CLOSE,MODE_EMA,1);
double MA2P2 = iMA(NULL,0,8,0,PRICE_CLOSE,MODE_EMA,1);
double MA3P1 = iMA(NULL,0,21,0,PRICE_CLOSE,MODE_EMA,1);
double MA3P2 = iMA(NULL,0,21,0,PRICE_CLOSE,MODE_EMA,1);

//########################################################################################

//Condition 2:
if (DMIPP1 > DMIMP1 && DMIPP1 > 20) Signal2L = true;
   else Signal2L = false;
//Condition 3:
if (MA2P1 >MA3P1 && StochMP1 > StochSP1 && StochMP1 < 80) Signal3L = true;
   else Signal3L = false;   
//Condition 4:
if (MACDHP1 > 0 && MACDHP1 > MACDSP1) Signal4L = true;
   else Signal4L = false;
//Condition 5:
if (MA2P1 > MA3P1 && SARP1 > SARP2) Signal5L = true;
   else Signal5L = false;



//########################################################################################
//##################     ORDER CLOSURE  ###################################################
// If Orders are in force then check for closure against Technicals LONG & SHORT
//CLOSE LONG Entries
  total=OrdersTotal();
  if(total>0)
   { 
   for(cnt=0;cnt<total;cnt++)
   {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
     {
     if(Close[1] < SARP1)
      {                                 
       OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close LONG position
     }}

//CLOSE SHORT ENTRIES: 
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); 
    if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) // check for symbol
     {
     if(Close[1] > Close[10])
      {   
       OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close SHORT position
     }}
    }  // for loop return
    }   // close 1st if 
//##############################################################################
//##################     ORDER TRAILING STOP Adjustment  #######################
//TRAILING STOP: LONG
if(0==1)  //This is used to turn the trailing stop on & off
 {
  total=OrdersTotal();
  if(total>0)
   { 
   for(cnt=0;cnt<total;cnt++)
    {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if(OrderType()==OP_BUY && OrderSymbol()==Symbol()
     &&
     Bid-OrderOpenPrice()> (Point*TrailingStop)
     &&
     OrderStopLoss()<Bid-(Point*TrailingStop)
     )
     {OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,White);
           return(0);}
 }}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TRAILING STOP: SHORT
  total=OrdersTotal();
  if(total>0)
   { 
   for(cnt=0;cnt<total;cnt++)
    {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if(OrderType()==OP_SELL && OrderSymbol()==Symbol()
     &&
     OrderOpenPrice()-Ask > (Point*TrailingStop)
     &&
     OrderStopLoss() > Ask+(Point*TrailingStop) 
     )
     {OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(Point*TrailingStop),OrderTakeProfit(),0,Yellow);
          return(0);}
 }}
}  // end bracket for on/off switch
//##########################################################################################
//~~~~~~~~~~~ END OF ORDER Closure routines & Stoploss changes  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//##########################################################################################
//~~~~~~~~~~~~START of NEW ORDERS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//#########################  NEW POSITIONS ?  ######################################
//Possibly add in timer to stop multiple entries within Period
// Check Margin available
// ONLY ONE ORDER per SYMBOL
// Loop around orders to check symbol doesn't appear more than once
// Check for elapsed time from last entry to stop multiple entries on same bar
if (0==1) // switch to turn ON/OFF history check
{  
 total=HistoryTotal();
 if(total>0)
  { 
   for(cnt=0;cnt<total;cnt++)
    {
     OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);            //Needs to be next day not as below
     if(OrderSymbol()==Symbol()&& CurTime()- OrderCloseTime() < (Period() * 60 )
        )
        {
        return(0);
 }}}}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 total=OrdersTotal();
  if(total>0)
   { 
    for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderSymbol()==Symbol()) return(0);
   }
   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if(AccountFreeMargin()<(1000*Lots))
   {Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//#########################################################################################
//ENTRY RULES: LONG 
 if(Signal2L == true &&
    Signal3L == true &&
    Signal4L == true &&
    Signal5L == true 
      )
  {
   ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-(InitialStop*Point),0,"MaxMin Long",16384,0,Orange); //Bid-(Point*(MinDist+2))
   if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   } 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//ENTRY RULES: SHORT                                     //################################
 if(Close[1] < Close[20]&& 0==1)
  {
   ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+(InitialStop*Point),0,"MaxMin Short",16384,0,Red);
   if(ticket>0)
    {
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
      }
      else Print("Error opening SELL order : ",GetLastError()); 
      return(0); 
   }

//####################################################################################
//############               End of PROGRAM                  #########################   
   return(0);
}

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