Currencyprofits_01.1
Download scriptTrendScalper_TR Logic Overview
This automated trading script is designed to manage trade entries, exits, and risk parameters based on moving average crossovers combined with price action extremes. Below is a non-technical breakdown of how the logic operates.
1. Money and Risk Management
The script begins by determining the position size (number of lots) for each trade. It offers three distinct modes of operation:
- Fixed Lot Mode: Uses a pre-defined constant lot size regardless of account balance.
- Fractional Mode: Calculates the lot size based on a percentage of the account balance. This is intended for smaller "mini" accounts.
- Full Lot Mode: Calculates lot sizes for standard accounts, ensuring the volume scales relative to the total account balance while maintaining specific limits (e.g., capping the maximum number of lots).
2. Active Trade Monitoring and Automated Exits
The script constantly scans all currently open positions on the chart. If a position is already open, it monitors the price to see if it should be closed early based on "breakout" conditions:
- For Buy Positions: If the current market price rises above the highest point reached in the last 6 bars (excluding the current one), the script will automatically close the trade.
- For Sell Positions: If the current market price drops below the lowest point reached in the last 6 bars (excluding the current one), the script will automatically close the trade.
This serves as a dynamic exit strategy to secure profits or cut losses when the price reaches a local peak or trough.
3. Entry Strategy
The script only looks to open new trades if there are no existing positions currently active. It uses two primary indicators to confirm an entry: Exponential Moving Averages (EMA) and Simple Moving Averages (SMA), combined with Price Extremes.
Buy Signal Logic:
To open a "Buy" order, the script looks for two conditions to be met simultaneously:
- Trend Confirmation: The short-term EMA (6 periods) must be higher than the longer-term SMA (12 periods).
- Price Location: The current market price must be at or below the lowest price point of the last 6 bars.
Sell Signal Logic:
To open a "Sell" order, the script looks for two conditions to be met simultaneously:
- Trend Confirmation: The short-term EMA (6 periods) must be lower than the longer-term SMA (12 periods).
- Price Location: The current market price must be at or above the highest price point of the last 6 bars.
Summary of Behavior
The script acts as a "mean reversion" or "pullback" scalper. It waits for a confirmed trend (via moving averages) and then attempts to enter the market when the price pulls back to a recent extreme low (for buys) or rises to a recent extreme high (for sells). Once a trade is entered, it stays open until the price breaks out past the previous local highs or lows.
//+------------------------------------------------------------------+
//| TrendScalper_TR.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Testing"
#property link "http://www.metaquotes.net/"
//---- input parameters
extern double LotsIfNoMM=0.1;
extern int StopLoss=50;
extern int Slip=5;
extern int MM_Mode=0;
extern int MM_Risk=40;
//----
double Opentrades,orders,first,mode,Ilo,sym,b,tmp,GridCellPoint,OpenOrderStopLoss;
double b4signal,Signal,Triggerline,b4Triggerline,Nowsignal,NowTriggerline,sl,LastOpByExpert,LastBarChecked;
int cnt,cnt2,OpenPosition,notouchbar,PendingOrderTicket,OpenOrderTicket;
bool test;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//return(0);
//if ( ! IsTesting() ) Comment(" Trailingstop ", b, "\n"," Tick no. ", iVolume(NULL,0,0),"\n"," Lots ",Ilo);
/**********************************Money and Risk Management***************************************
Changing the value of mm will give you several money management options
mm = 0 : Single 1 lot orders.
mm = -1 : Fractional lots/ balance X the risk factor.(use for Mini accts)
mm = 1 : Full lots/ balance X the risk factor up to 100 lot orders.(use for Regular accounts)
***************************************************************************************************
RISK FACTOR:
risk can be anything from 1 up.
Factor of 5 adds a lot for every $20,000.00 added to the balance.
Factor of 10 adds a lot with every $10.000.00 added to the balance.
The higher the risk, the easier it is to blow your margin..
**************************************************************************************************/
if (MM_Mode < 0)
{
Ilo=MathCeil(AccountBalance()*MM_Risk/10000)/10;
if (Ilo > 100)
{
Ilo=100;
}
}
else
{
Ilo=LotsIfNoMM;
}
if (MM_Mode > 0)
{
Ilo=MathCeil(AccountBalance()*MM_Risk/10000)/10;
if (Ilo > 1)
{
Ilo=MathCeil(Ilo);
}
if (Ilo < 1)
{
Ilo=1;
}
if (Ilo > 100)
{
Ilo=100;
}
}
Opentrades=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect (cnt, SELECT_BY_POS)==false) continue;
if(OrderSymbol()==Symbol())
{
Opentrades=Opentrades+1;
}
}
if (Opentrades!=0)
{
if (OrderType()==OP_BUY)
{
if (Bid>=iHigh(Symbol(),0,Highest(Symbol(),0,MODE_HIGH,6,1)))
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Red);
Opentrades--;
}
}
else if (OrderType()==OP_SELL)
{
if (Bid<=iLow(Symbol(),0,Lowest(Symbol(),0,MODE_LOW,6,1)))
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
Opentrades--;
}
}
}
if (Opentrades==0)
{
if (iMA(Symbol(),0,6,0,MODE_EMA,PRICE_CLOSE,1)>iMA(Symbol(),0,12,0,MODE_SMA,PRICE_CLOSE,1) && Bid<=iLow(Symbol(),0,Lowest(Symbol(),0,MODE_LOW,6,1)))
{
OrderSend(Symbol(),OP_BUY,Ilo,Ask,Slip,Ask-StopLoss*Point,0,"CP",0,0,Blue);
}
if (iMA(Symbol(),0,6,0,MODE_EMA,PRICE_CLOSE,1)<iMA(Symbol(),0,12,0,MODE_SMA,PRICE_CLOSE,1) && Bid>=iHigh(Symbol(),0,Highest(Symbol(),0,MODE_HIGH,6,1)))
{
OrderSend(Symbol(),OP_SELL,Ilo,Bid,Slip,Bid+StopLoss*Point,0,"CP",0,0,Blue);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Profitability Reports
Expected payoff
Average expected payoff across the available backtests for each symbol.
Comments