Author: Ron Thompson
Profit factor:
0.57

This script is designed to automatically trade on the Metatrader platform, aiming to profit from price fluctuations of currency pairs. Here?s how it works:

  1. Initialization: When the script starts, it first determines which currency pair it's operating on (like EURUSD, GBPJPY, etc.). Based on the currency pair, it sets specific parameters such as:

    • TakeProfit: This is the target profit, in points, that the script aims to achieve for each trade.
    • Pym: This number controls how often additional trades are placed to "pyramid" (explained later).
    • myCCI: This is a number used by the CCI indicator (explained later).
    • cmt: This is a text string that's displayed as a comment on the chart for informational purposes.
  2. Core Logic: The script operates in a loop, constantly monitoring the market. At its heart is the Commodity Channel Index (CCI), which is a technical indicator used to identify overbought or oversold conditions in the market. The script checks if the CCI line crosses above or below the zero line. This cross indicates a potential change in the price direction.

  3. Trading Decisions:

    • Cross Detection: The script checks if the CCI line has crossed the zero line either upwards or downwards.
    • Closing Open Trades: When a CCI cross occurs, the script will first close any existing open trades for that currency pair. This ensures that any previous positions are cleared before a new one is opened based on the new signal.
    • Opening New Trades: After closing existing trades, the script opens a new trade in the direction indicated by the CCI cross.
      • If the CCI crosses above zero, it opens a "buy" order (betting that the price will go up).
      • If the CCI crosses below zero, it opens a "sell" order (betting that the price will go down).
    • Take Profit: The script sets a "take profit" level when opening a trade, based on the pre-defined TakeProfit value for that currency pair. This automatically closes the trade when the price reaches the target profit level.
  4. Pyramiding: The script also implements a "pyramiding" strategy. This means that if a trade is already open and the price continues to move in the same direction, the script will place additional trades.

    • The Pym parameter determines how often these additional trades are placed. The script only adds a new trade if a certain number of price movements (bars) have passed since the last trade. This number of bars is controlled by the Pym parameter. This aims to capitalize on a strong trend.
    • The TakeProfit is also set on pyramided order
  5. Safety Checks: Before executing any trades, the script performs some basic checks:

    • Sufficient Funds: It verifies that the trading account has enough available margin (funds) to place the trade.
    • Sufficient Data: It ensures that there is enough historical price data available to calculate the CCI.
    • CCI Definition: Verifies the currency pair has a set CCI indicator

In essence, this script is a relatively simple automated trading system that uses the CCI indicator to generate buy and sell signals, closes and opens new trades based on this and pyramids in the direction of trades

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
18 Views
0 Downloads
0 Favorites
zzz008
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+----------------------+
//| CCI SAR/Cross Expert |
//+----------------------+
#property copyright "Ron Thompson"
#property link      "http://www.lightpatch.com/forex"

// User Input
extern double Lots = 0.1;


// Global scope
// Profit factors
int    TakeProfit=0;
int    Pym=0;
int    myCCI=0;

// Display factors
string    cmt;

// Event factors
double barmove0 = 0;
double barmove1 = 0;
int         itv = 0;


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

int init()
  {
 
   if(Symbol()=="AUDUSD"){TakeProfit=163; Pym=1; myCCI=163; cmt="tp163 itv=1 cci=163";}
   if(Symbol()=="EURAUD"){TakeProfit=350; Pym=1; myCCI=89 ; cmt="tp350 itv=1 cci=89 ";}
   if(Symbol()=="EURCHF"){TakeProfit=65 ; Pym=2; myCCI=120; cmt="tp65  itv=2 cci=120";}
   if(Symbol()=="EURGBP"){TakeProfit=106; Pym=2; myCCI=172; cmt="tp106 itv=2 cci=172";}
   if(Symbol()=="EURJPY"){TakeProfit=121; Pym=2; myCCI=165; cmt="tp121 itv=2 cci=165";}
   if(Symbol()=="EURUSD"){TakeProfit=194; Pym=1; myCCI=180; cmt="tp194 itv=1 cci=180";}
   if(Symbol()=="GBPCHF"){TakeProfit=200; Pym=2; myCCI=83 ; cmt="tp200 itv=2 cci=83 ";}
   if(Symbol()=="GBPJPY"){TakeProfit=132; Pym=2; myCCI=20 ; cmt="tp132 itv=2 cci=20 ";}
   if(Symbol()=="GBPUSD"){TakeProfit=145; Pym=4; myCCI=161; cmt="tp145 itv=4 cci=161";}
   if(Symbol()=="USDCAD"){TakeProfit=130; Pym=1; myCCI=112; cmt="tp130 itv=1 cci=112";}
   if(Symbol()=="USDCHF"){TakeProfit=140; Pym=1; myCCI=205; cmt="tp140 itv=1 cci=205";}
   if(Symbol()=="USDJPY"){TakeProfit=220; Pym=1; myCCI=205; cmt="tp220 itv=1 cci=205";}
 
   itv=Pym;
    
   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 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(myCCI==0)                               {Print("-----NO CCI  "); 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);
   tpB=Bid-(p*TakeProfit);
   if (TakeProfit<=0) {tpA=0; tpB=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");}
   
   Comment(cmt," iCCI=",cCI0," rise=",rising," fall=",falling);
   
   // 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;
            Sleep(5000);
           }
         Sleep(5000);
        }
      // Open new order based on direction of cross
      if (rising)  OrderSend(Symbol(),OP_BUY, Lots,Ask,3,0,tpA,"ZZZ100",11123,0,White);
      if (falling) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,tpB,"ZZZ100",11321,0,Red);
      
      // clear the interval counter
      itv=0;
      return(0);
     }
   
   // Only pyramid if order already open
   for(cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol())
        {
         if (OrderType()==0)  //BUY
           {
            if (itv >= Pym)
              {
               OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,tpA,"ZZZ100",11123,0,White);
               itv=0;
              }
           }
         if (OrderType()==1)  //SELL
           {
            if (itv >= Pym)
              {
               OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,tpB,"ZZZ100",11321,0,Red);
               itv=0;
              }
           }
        }
     }

   return(0);
  }

Profitability Reports

USD/JPY Jul 2025 - Sep 2025
1.72
Total Trades 1685
Won Trades 1323
Lost trades 362
Win Rate 78.52 %
Expected payoff 4.64
Gross Profit 18678.98
Gross Loss -10853.85
Total Net Profit 7825.13
-100%
-50%
0%
50%
100%
USD/CHF Jul 2025 - Sep 2025
1.52
Total Trades 2235
Won Trades 1575
Lost trades 660
Win Rate 70.47 %
Expected payoff 3.79
Gross Profit 24701.87
Gross Loss -16242.26
Total Net Profit 8459.61
-100%
-50%
0%
50%
100%
USD/CAD Jul 2025 - Sep 2025
1.39
Total Trades 2348
Won Trades 1712
Lost trades 636
Win Rate 72.91 %
Expected payoff 1.83
Gross Profit 15421.61
Gross Loss -11117.78
Total Net Profit 4303.83
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.77
Total Trades 2170
Won Trades 1417
Lost trades 753
Win Rate 65.30 %
Expected payoff -2.72
Gross Profit 20307.90
Gross Loss -26214.90
Total Net Profit -5907.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.68
Total Trades 304
Won Trades 151
Lost trades 153
Win Rate 49.67 %
Expected payoff -2.90
Gross Profit 1873.10
Gross Loss -2755.20
Total Net Profit -882.10
-100%
-50%
0%
50%
100%
GBP/USD Jul 2025 - Sep 2025
0.61
Total Trades 566
Won Trades 412
Lost trades 154
Win Rate 72.79 %
Expected payoff -6.50
Gross Profit 5719.80
Gross Loss -9398.10
Total Net Profit -3678.30
-100%
-50%
0%
50%
100%
USD/CAD Oct 2024 - Jan 2025
0.41
Total Trades 785
Won Trades 597
Lost trades 188
Win Rate 76.05 %
Expected payoff -10.10
Gross Profit 5404.82
Gross Loss -13332.58
Total Net Profit -7927.76
-100%
-50%
0%
50%
100%
AUD/USD Oct 2024 - Jan 2025
0.29
Total Trades 506
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -15.96
Gross Profit 3259.20
Gross Loss -11334.40
Total Net Profit -8075.20
-100%
-50%
0%
50%
100%
EUR/USD Jul 2025 - Sep 2025
0.03
Total Trades 222
Won Trades 174
Lost trades 48
Win Rate 78.38 %
Expected payoff -468.93
Gross Profit 3036.60
Gross Loss -107138.90
Total Net Profit -104102.30
-100%
-50%
0%
50%
100%
GBP/CAD 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/AUD Jul 2025 - Sep 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/CAD Jul 2025 - Sep 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%
NZD/USD Jul 2025 - Sep 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%

Comments