Author: Ron Thompson
Profit factor:
0.58

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

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%
USD/CHF Jan 2025 - Jul 2025
0.72
Total Trades 421
Won Trades 238
Lost trades 183
Win Rate 56.53 %
Expected payoff -2.24
Gross Profit 2479.42
Gross Loss -3423.86
Total Net Profit -944.44
-100%
-50%
0%
50%
100%
USD/CAD Jan 2025 - Jul 2025
0.64
Total Trades 435
Won Trades 263
Lost trades 172
Win Rate 60.46 %
Expected payoff -2.20
Gross Profit 1701.69
Gross Loss -2660.29
Total Net Profit -958.60
-100%
-50%
0%
50%
100%
NZD/USD Jan 2025 - Jul 2025
0.74
Total Trades 459
Won Trades 253
Lost trades 206
Win Rate 55.12 %
Expected payoff -1.76
Gross Profit 2255.20
Gross Loss -3062.80
Total Net Profit -807.60
-100%
-50%
0%
50%
100%
GBP/USD Jan 2025 - Jul 2025
0.59
Total Trades 363
Won Trades 210
Lost trades 153
Win Rate 57.85 %
Expected payoff -3.66
Gross Profit 1914.00
Gross Loss -3241.10
Total Net Profit -1327.10
-100%
-50%
0%
50%
100%
GBP/CAD Jan 2025 - Jul 2025
0.51
Total Trades 354
Won Trades 203
Lost trades 151
Win Rate 57.34 %
Expected payoff -3.69
Gross Profit 1344.80
Gross Loss -2652.45
Total Net Profit -1307.65
-100%
-50%
0%
50%
100%

Comments