Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
11.00 %
Total Trades
3742
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-2.67
Gross Profit
1176.00
Gross Loss
-11159.10
Total Net Profit
-9983.10
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
30.00 %
Total Trades
5956
Won Trades
1229
Lost trades
4727
Win Rate
0.21 %
Expected payoff
-1.67
Gross Profit
4301.50
Gross Loss
-14265.40
Total Net Profit
-9963.90
-100%
-50%
0%
50%
100%
NZD/USD
Oct 2024 - Jan 2025
0.00 %
Total Trades
2884
Won Trades
13
Lost trades
2871
Win Rate
0.00 %
Expected payoff
-3.46
Gross Profit
45.50
Gross Loss
-10029.70
Total Net Profit
-9984.20
-100%
-50%
0%
50%
100%
EA_Starter_Template
#include <stdlib.mqh>
#include <stderror.mqh>
extern int volume=250;
extern int StopLoss = 35;
extern int ProfitTarget = 35;
extern double TrailingStop = 20; // Change to whatever number of pips you wish to trail your position with.
extern bool UseTrailingStop = true;
extern int TrailingStopType = 1; // Type 1 moves stop immediately, Type 2 waits til value of TS is reached
extern double Lots=0.1;
extern int Slippage = 5;
extern int SignalCandle=1; //set to 1 if you want to get the cangle close 0 for current
//+---------------------------------------------------+
//|Money Management |
//+---------------------------------------------------+
extern bool UseMoneyManagement = false; // Change to false to shutdown money management controls.
extern int MM_Type = 1;
//+---------------------------------------------------+
//|Money Management type 1 |
//+---------------------------------------------------+
extern string StrSep1 = "-----MoneyManagementType 1 -----";
extern double MMRisk=0.15; // Risk Factor
extern double LossMax=1000; // Maximum Loss by 1 Lot
//+---------------------------------------------------+
//|Money Management type 2 |
//+---------------------------------------------------+
extern string StrSep2 = "-----MoneyManagementType 2 -----";
extern bool AccountIsMini = true; // Change to true if trading mini account
extern double TradeSizePercent = 15; // Change to whatever percent of equity you wish to risk.
double MaxLots = 10;
//+---------------------------------------------------+
int MagicNumber; // Magic number of the trades. must be unique to identify
double Lotsi=0,mav=0;
bool TradeAllowed=true;
int init()
{
MagicNumber = 3000 + func_Symbol2Val(Symbol())*100 + func_TimeFrame_Const2Val(Period());
}
int start()
{
int err;
err=GetLastError();
//------------------Signal indicators go in here------------------------------//
double v=iVolume(Symbol(),Period(),0)/2;
//-------------------------------------------------------------------------//
double dblMinStopDistance = MarketInfo(Symbol(),MODE_STOPLEVEL)*MarketInfo(Symbol(), MODE_POINT);
Comment ("Min Stop Distance : ",dblMinStopDistance," ","Volume :",v);
int NumTrades = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY ) NumTrades++;
if (OrderType() == OP_SELL )NumTrades++;
}
}
if (NumTrades == 0)
{
if (TradeAllowed)
{
if (MM_Type == 1)
Lotsi = MoneyManagement ( UseMoneyManagement, Lots, MMRisk, LossMax);
else
Lotsi = GetLots();
//----------------------------------SIGNAL GENERATOR-------------------------------------//
//----Long
if (v > volume)// (mav > MAvolume..insert signal here..)
{
OrderSend(Symbol(), OP_BUY, Lotsi, Ask, Slippage, Ask - StopLoss * Point, Ask + ProfitTarget * Point, 0);
}
if (err>0)
Print("error(",err,"): ",ErrorDescription(err));
else
//----Short
if (v > volume)// (mav > MAvolume..insert signal here..)
{
OrderSend(Symbol(), OP_SELL, Lotsi, Bid, Slippage, Bid + StopLoss * Point, Bid - ProfitTarget * Point, 0);
}
if (err>0)
Print("error(",err,"): ",ErrorDescription(err));
else
{
return(0);
}
}
}
//------------------------------------------------TRAILING STOP FUNCTION-------------------------//
if (UseTrailingStop)
{
for (i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol() == Symbol() )
{
if ( OrderType() == OP_BUY )
{
HandleTrailingStop(OP_BUY,OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
}
if ( OrderType() == OP_SELL)
{
HandleTrailingStop(OP_SELL,OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
}
}
}
}
return(0);
}
// --------------------------------------- Money Management, by Robert Hill--------------------//
double MoneyManagement ( bool flag, double Lots, double risk, double maxloss)
{
Lotsi=Lots;
if ( flag ) Lotsi=NormalizeDouble(Lots*AccountFreeMargin()*risk/maxloss,1);
if (Lotsi<0.1) Lotsi=0.1;
return(Lotsi);
}
//--------------------------------- Get number of lots for this trade --------------------//
double GetLots()
{
double lot;
if(UseMoneyManagement)
{
lot = LotsOptimized();
}
else
{
lot = Lots;
if(AccountIsMini)
{
if (lot < 0.1) lot = 0.1;
}
else
{
if (lot >= 1.0) lot = MathFloor(lot); else lot = 1.0;
}
if (lot > MaxLots) lot = MaxLots;
}
return(lot);
}
//------------------ Calculate optimal lot size based on percent of Account---------------------//
double LotsOptimized()
{
double lot=Lots;
//---- select lot size
lot=NormalizeDouble(MathFloor(AccountFreeMargin()*TradeSizePercent/10000)/10,1);
if(AccountIsMini)
{
lot = MathFloor(lot*10)/10;
}
return(lot);
}
//+------------------------------------------------------------------+
//| Modify Open Position Controls |
//| Try to modify position 3 times |
//+------------------------------------------------------------------+
bool ModifyOrder(int nOrderType, int ord_ticket,double op, double price,double tp, color mColor = CLR_NONE)
{
int cnt, err;
double myStop;
myStop = ValidStopLoss (nOrderType, price);
cnt=0;
if (OrderModify(ord_ticket,op,myStop,tp,0,mColor))
{
return(true);
}
else
{
err=GetLastError();
if (err > 1) Print(cnt," Error modifying order : (", ord_ticket , ") " + ErrorDescription(err), " err ",err);
if (err>0) cnt++;
Sleep (10000);
}
return(false);
}
//---------------------------------Adjust stop loss so that it is legal------------------------//
double ValidStopLoss(int cmd, double sl)
{
double v=iVolume(Symbol(),Period(),0);
if (sl == 0) return(0.0);
double mySL, myPrice;
double dblMinStopDistance = MarketInfo(Symbol(),MODE_STOPLEVEL)*MarketInfo(Symbol(), MODE_POINT);
mySL = sl;
// Check if SlopLoss needs to be modified
switch(cmd)
{
case OP_BUY:
myPrice = MarketInfo(Symbol(), MODE_BID);
if (myPrice - sl < dblMinStopDistance)
mySL = myPrice - dblMinStopDistance; // we are long
break;
case OP_SELL:
myPrice = MarketInfo(Symbol(), MODE_ASK);
if (sl - myPrice < dblMinStopDistance)
mySL = myPrice + dblMinStopDistance; // we are Short
}
return(NormalizeDouble(mySL,MarketInfo(Symbol(), MODE_DIGITS)));
}
//+------------------------------------------------------------------+
//| HandleTrailingStop |
//| Type 1 moves the stoploss without delay. |
//| Type 2 waits for price to move the amount of the trailStop |
//| before moving stop loss then moves like type 1 |
//| Type 3 uses up to 3 levels for trailing stop |
//| Level 1 Move stop to 1st level |
//| Level 2 Move stop to 2nd level |
//| Level 3 Trail like type 1 by fixed amount other than 1 | |
//+------------------------------------------------------------------+
int HandleTrailingStop(int type, int ticket, double op, double os, double tp)
{
double pt, TS=0, myAsk, myBid;
double bos,bop,opa,osa;
switch(type)
{
case OP_BUY:
{
myBid = MarketInfo(Symbol(),MODE_BID);
switch(TrailingStopType)
{
case 1: pt = Point*StopLoss;
if(myBid-os > pt)
ModifyOrder(type, ticket,op,myBid-pt,tp, Aqua);
break;
case 2: pt = Point*TrailingStop;
if(myBid-op > pt && os < myBid - pt)
ModifyOrder(type, ticket,op,myBid-pt,tp, Aqua);
break;
}
return(0);
break;
}
case OP_SELL:
{
myAsk = MarketInfo(Symbol(),MODE_ASK);
switch(TrailingStopType)
{
case 1: pt = Point*StopLoss;
if(os - myAsk > pt)
ModifyOrder(type, ticket,op,myAsk+pt,tp, Aqua);
break;
case 2: pt = Point*TrailingStop;
if(op - myAsk > pt && os > myAsk+pt)
ModifyOrder(type, ticket,op,myAsk+pt,tp, Aqua);
break;
}
}
return(0);
}
}
//+------------------------------------------------------------------+
//| Time frame interval appropriation function |
//+------------------------------------------------------------------+
int func_TimeFrame_Const2Val(int Constant ) {
switch(Constant) {
case 1: // M1
return(1);
case 5: // M5
return(2);
case 15:
return(3);
case 30:
return(4);
case 60:
return(5);
case 240:
return(6);
case 1440:
return(7);
case 10080:
return(8);
case 43200:
return(9);
}
}
int func_Symbol2Val(string symbol) {
string mySymbol = StringSubstr(symbol,0,6);
if(mySymbol=="AUDCAD") return(1);
if(mySymbol=="AUDJPY") return(2);
if(mySymbol=="AUDNZD") return(3);
if(mySymbol=="AUDUSD") return(4);
if(mySymbol=="CHFJPY") return(5);
if(mySymbol=="EURAUD") return(6);
if(mySymbol=="EURCAD") return(7);
if(mySymbol=="EURCHF") return(8);
if(mySymbol=="EURGBP") return(9);
if(mySymbol=="EURJPY") return(10);
if(mySymbol=="EURUSD") return(11);
if(mySymbol=="GBPCHF") return(12);
if(mySymbol=="GBPJPY") return(13);
if(mySymbol=="GBPUSD") return(14);
if(mySymbol=="NZDUSD") return(15);
if(mySymbol=="USDCAD") return(16);
if(mySymbol=="USDCHF") return(17);
if(mySymbol=="USDJPY") return(18);
Comment("unexpected Symbol");
return(19);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---