Author: Ron Thompson
Profit factor:
0.61

Okay, here's a breakdown of what this MetaTrader script does, explained in a way that doesn't require any programming knowledge.

In Simple Terms:

This script is designed to automatically trade on the Forex market based on a specific strategy. It's like a robot trader that follows a set of rules to decide when to buy or sell a currency pair.

Here's the breakdown of how it works:

  1. Settings You Control:

    • Lots: This determines the size of each trade the script makes. A larger "Lots" value means the script will trade a larger amount of currency, which can lead to bigger profits or bigger losses.
    • TakeProfit: This is the target profit, expressed in 'points', for each trade. When the trade reaches this profit level, the script will automatically close the trade and secure the profit.
    • StopLoss: This is the level of acceptable loss, also in 'points'. If a trade starts losing money and reaches this level, the script will automatically close the trade to prevent further losses. Setting this to zero means the script will never automatically close a losing trade.
    • Interval: This controls how often the script will add to an existing winning trade. The higher this number, the longer it will wait before adding to the trade.
    • myCCI: This setting determines the period (number of past data points) used for calculating a technical indicator called the Commodity Channel Index (CCI). CCI is a tool used to identify overbought or oversold conditions in the market.
  2. What the Script Monitors:

    • Price Fluctuations: The script continuously monitors the price of the currency pair.
    • CCI Indicator: The script calculates the CCI to help determine if the currency pair is potentially overbought (likely to go down) or oversold (likely to go up).
  3. Decision Making:

    • CCI Crossing: The main trigger for the script to take action is when the CCI line crosses above or below the zero line. Crossing above zero is considered a "buy" signal, while crossing below is a "sell" signal.
    • Closing Existing Trades: When the CCI crosses the zero line (giving a new buy or sell signal), the script first closes any existing open trades for that currency pair.
    • Opening New Trades: After closing any existing trades, the script opens a new trade in the direction indicated by the CCI crossing. If the CCI crossed above zero, it opens a "buy" trade; if it crossed below zero, it opens a "sell" trade. It uses the specified "Lots" size and sets the "TakeProfit" and "StopLoss" levels.
    • Adding to Winning Trades (Pyramiding): If there's already an open trade and enough time has passed ("Interval" setting), the script will open another trade in the same direction. This is called "pyramiding" and it aims to increase profits if the trend continues.
  4. Safety Checks:

    • Account Balance: The script checks if there's enough money in the trading account to place a trade of the specified "Lots" size. If not, it stops trading.
    • Sufficient Data: The script ensures there's enough historical price data available before it starts making decisions.

In summary, this script watches the price of a currency pair, calculates the CCI indicator, and opens/closes trades based on CCI crossing zero. It also uses TakeProfit and StopLoss levels to manage risk and can pyramid into winning trades based on the specified interval.

Price Data Components
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Commodity channel index
13 Views
0 Downloads
0 Favorites
zzz005
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//| 1MA Expert                               |
//+------------------------------------------------------------------+
#property copyright "Ron Thompson"
#property link      "http://www.lightpatch.com/forex"

// User Input
extern double Lots = 0.1;
extern int    TakeProfit=92;
extern int    StopLoss=0;
extern int    Interval=4;
extern int       myCCI=30;


// Global scope
double barmove0 = 0;
double barmove1 = 0;
int         itv = 0;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|

int init()
  {
   itv=Interval;
   return(0);
  }


//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
  {

   bool      found=false;
   bool     rising=false;
   bool    falling=false;
   bool      cross=false;

   double slA=0, slB=0, tpA=0, tpB=0;
   double p=Point();
   
   double cCI0;
   double cCI1;
   
   int      cnt=0;

   // Error checking
   if(AccountFreeMargin()<(1000*Lots))        {Print("-----NO MONEY"); return(0);}
   if(Bars<100)                               {Print("-----NO BARS "); return(0);}
   if(barmove0==Open[0] && barmove1==Open[1]) {                        return(0);}

   // bars moved, update current position
   barmove0=Open[0];
   barmove1=Open[1];

   // interval (bar) counter
   // used to pyramid orders during trend
   itv++;
   
   // since the bar just moved
   // calculate TP and SL for (B)id and (A)sk
   tpA=Ask+(p*TakeProfit);
   slA=Ask-(p*StopLoss);
   tpB=Bid-(p*TakeProfit);
   slB=Bid+(p*StopLoss);
   if (TakeProfit==0) {tpA=0; tpB=0;}           
   if (StopLoss==0)   {slA=0; slB=0;}           
   
   // get CCI based on OPEN
   cCI0=iCCI(Symbol(),0,myCCI,PRICE_OPEN,0);
   cCI1=iCCI(Symbol(),0,myCCI,PRICE_OPEN,1);

   // is it crossing zero up or down
   if (cCI1<0 && cCI0>0) { rising=true; cross=true; Print("Rising  Cross");}
   if (cCI1>0 && cCI0<0) {falling=true; cross=true; Print("Falling Cross");}
   
   // close then open orders based on cross
   // pyramid below based on itv
   if (cross)
     {
      // Close ALL the open orders 
      for(cnt=0;cnt<OrdersTotal();cnt++)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol()==Symbol())
           {
            if (OrderType()==0) {OrderClose(OrderTicket(),Lots,Bid,3,White);}
            if (OrderType()==1) {OrderClose(OrderTicket(),Lots,Ask,3,Red);}
            itv=0;
           }
        }
      // Open new order based on direction of cross
      if (rising)  OrderSend(Symbol(),OP_BUY,Lots,Ask,3,slA,tpA,"ZZZ100",11123,0,White);
      if (falling) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,slB,tpB,"ZZZ100",11321,0,Red);
      
      // clear the interval counter
      itv=0;
     }
   
   // Only pyramid if order already open
   found=false;
   for(cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol())
        {
         if (OrderType()==0)  //BUY
           {
            if (itv >= Interval)
              {
               OrderSend(Symbol(),OP_BUY,Lots,Ask,3,slA,tpA,"ZZZ100",11123,0,White);
               itv=0;
              }
           }
         if (OrderType()==1)  //SELL
           {
            if (itv >= Interval)
              {
               OrderSend(Symbol(),OP_SELL,Lots,Bid,3,slB,tpB,"ZZZ100",11321,0,Red);
               itv=0;
              }
           }
         found=true;
         break;
        }
     }
   return(0);
  }

Profitability Reports

USD/JPY Jul 2025 - Sep 2025
0.68
Total Trades 131
Won Trades 79
Lost trades 52
Win Rate 60.31 %
Expected payoff -1.80
Gross Profit 494.46
Gross Loss -730.62
Total Net Profit -236.16
-100%
-50%
0%
50%
100%
USD/CHF Jul 2025 - Sep 2025
0.69
Total Trades 267
Won Trades 154
Lost trades 113
Win Rate 57.68 %
Expected payoff -2.84
Gross Profit 1690.33
Gross Loss -2448.83
Total Net Profit -758.50
-100%
-50%
0%
50%
100%
USD/CAD Jul 2025 - Sep 2025
0.89
Total Trades 204
Won Trades 121
Lost trades 83
Win Rate 59.31 %
Expected payoff -0.48
Gross Profit 773.49
Gross Loss -870.49
Total Net Profit -97.00
-100%
-50%
0%
50%
100%
NZD/USD Jul 2025 - Sep 2025
0.84
Total Trades 293
Won Trades 163
Lost trades 130
Win Rate 55.63 %
Expected payoff -0.88
Gross Profit 1357.50
Gross Loss -1614.30
Total Net Profit -256.80
-100%
-50%
0%
50%
100%
GBP/USD Jul 2025 - Sep 2025
0.67
Total Trades 164
Won Trades 98
Lost trades 66
Win Rate 59.76 %
Expected payoff -2.69
Gross Profit 887.60
Gross Loss -1329.10
Total Net Profit -441.50
-100%
-50%
0%
50%
100%
GBP/CAD Jul 2025 - Sep 2025
0.44
Total Trades 188
Won Trades 103
Lost trades 85
Win Rate 54.79 %
Expected payoff -4.61
Gross Profit 679.38
Gross Loss -1545.82
Total Net Profit -866.44
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
0.47
Total Trades 170
Won Trades 96
Lost trades 74
Win Rate 56.47 %
Expected payoff -3.93
Gross Profit 582.91
Gross Loss -1250.46
Total Net Profit -667.55
-100%
-50%
0%
50%
100%
EUR/USD Jul 2025 - Sep 2025
0.00
Total Trades 22
Won Trades 12
Lost trades 10
Win Rate 54.55 %
Expected payoff -4794.25
Gross Profit 110.40
Gross Loss -105583.80
Total Net Profit -105473.40
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.80
Total Trades 225
Won Trades 132
Lost trades 93
Win Rate 58.67 %
Expected payoff -1.17
Gross Profit 1078.50
Gross Loss -1342.00
Total Net Profit -263.50
-100%
-50%
0%
50%
100%
USD/JPY Jan 2025 - Jul 2025
0.86
Total Trades 291
Won Trades 206
Lost trades 85
Win Rate 70.79 %
Expected payoff -0.72
Gross Profit 1276.27
Gross Loss -1486.57
Total Net Profit -210.30
-100%
-50%
0%
50%
100%

Comments