Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
53.00 %
Total Trades
190
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-17.12
Gross Profit
3716.00
Gross Loss
-6968.00
Total Net Profit
-3252.00
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
40.00 %
Total Trades
259
Won Trades
59
Lost trades
200
Win Rate
0.23 %
Expected payoff
-32.47
Gross Profit
5649.00
Gross Loss
-14060.00
Total Net Profit
-8411.00
-100%
-50%
0%
50%
100%
NZD/USD
Oct 2024 - Jan 2025
50.00 %
Total Trades
136
Won Trades
36
Lost trades
100
Win Rate
0.26 %
Expected payoff
-19.49
Gross Profit
2653.00
Gross Loss
-5304.00
Total Net Profit
-2651.00
-100%
-50%
0%
50%
100%
Hercules v1.0
//+----------------------------------------------------------------------+
//| 10hrCross.mq4 |
//| David J. Lin |
//| |
//|Based on a 72-period crossover strategy by something_witty IBFX forum |
//| Vince ( forexportfolio@hotmail.com ) |
//| |
//| - Trigger = price exceeds Trigger pips above/below crossover |
//| of current price and 72-period SMA |
//| - Stoploss = low of last bar if long, high of last bar if short |
//| - Double order executed at trigger - you can takeprofit with one |
//| and let the other one ride with trailing stop. |
//| (Trailing stop is applied to both orders.) |
//| - Timeframe = recommended: H1 or longer, but this EA can be applied |
//| to any timeframe. |
//| - Pairs = Any, but with current parameters, |
//| EURUSD shows greatest profit in 2006 |
//| - Money Management = stoploss. WARNING: this EA does NOT take |
//| margin considerations into account, so beware of margin |
//| |
//|Coded by David J. Lin |
//| |
//|Evanston, IL, September 11, 2006 |
//| |
//|TakeLong, TakeShort, and TrailingAlls coded by Patrick (IBFX tutorial)|
//+----------------------------------------------------------------------+
#property copyright ""
#property link ""
extern double Lots=1.0; // lots to trade (fractional values ok)
extern int Trigger=38; // pips above crossover to trigger order
extern int Slippage=5; // pips slippage allowed
extern int TrailingStop=81; // pips to trail both orders
extern int TakeProfit1=270; // pips take profit order #1
extern int TakeProfit2=370; // pips take profit order #2
extern int MA1Period=1; // EMA(1) acts as trigger line to gauge immediate price action
extern int MA1Shift=0; // Shift
extern int MA1Method=MODE_EMA; // Mode
extern int MA1Price=PRICE_CLOSE; // Method
extern int MA2Period=72; // SMA(72) acts as base line
extern int MA2Shift=32; // Shift
extern int MA2Method=MODE_SMA; // Mode
extern int MA2Price=PRICE_OPEN; // Method
bool flag_check=true; // flag to gauge order status
int magic1=1234; // order #1's magic number
int magic2=4321; // order #2's magic number
datetime lasttime=0; // stores current bar's time to trigger MA calculation
datetime crosstime=0; // stores most recent crossover time
double crossprice; // stores price at crossover, calculate 4 point average
double fast1; // stores MA values up to 3 completed bars ago
double fast2; // fast = current price action, approximated by EMA(1)
double fast3; // slow = base line, SMA(10)
double slow1;
double slow2;
double slow3;
int init()
{
// hello world
return(0);
}
int deinit()
{
// goodbye world
return(0);
}
//===========================================================================================
//===========================================================================================
int start() // main cycle
{
OrderStatus(); // Check order status
if(flag_check)
CheckTrigger(); // Trigger order execution
else
MonitorOrders(); // Monitor open orders
}
//===========================================================================================
//===========================================================================================
void OrderStatus() // Check order status
{
int trade; // dummy variable to cycle through trades
int trades=OrdersTotal(); // total number of pending/open orders
flag_check=true; // first assume we have no open/pending orders
for(trade=0;trade<trades;trade++)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==magic1||OrderMagicNumber()==magic2))
flag_check=false; // deselect flag_check if there are open/pending orders for this pair
}
return(0);
}
//===========================================================================================
//===========================================================================================
void CheckTrigger() // Trigger order execution
{
double triggerprice; // price to trigger order execution
double StopLoss; // stop-loss price
bool flag; // flag to indicate whether to go long or go short
if(lasttime==Time[0]) // only need to calculate MA values at the start of each bar
{
//Calculate Indicators
// up to 3 completed bars ago:
fast1=iMA(NULL,0,MA1Period,MA1Shift,MA1Method,MA1Price,1);
fast2=iMA(NULL,0,MA1Period,MA1Shift,MA1Method,MA1Price,2);
fast3=iMA(NULL,0,MA1Period,MA1Shift,MA1Method,MA1Price,3);
slow1=iMA(NULL,0,MA2Period,MA2Shift,MA2Method,MA2Price,1);
slow2=iMA(NULL,0,MA2Period,MA2Shift,MA2Method,MA2Price,2);
slow3=iMA(NULL,0,MA2Period,MA2Shift,MA2Method,MA2Price,3);
//Check for MA cross
if(fast1>slow1 && fast2<slow2) // cross up 1 bar ago
{
flag=true;
crossprice=(fast1+fast2+slow1+slow2)/4.0;
crosstime=Time[1];
triggerprice=crossprice+(Trigger*Point);
}
else if(fast2>slow2 && fast3<slow3) // cross up 2 bars ago
{
flag=true;
crossprice=(fast2+fast3+slow2+slow3)/4.0;
crosstime=Time[2];
triggerprice=crossprice+(Trigger*Point);
}
if(fast1<slow1 && fast2>slow2) // cross down 1 bar ago
{
flag=false;
crossprice=(fast1+fast2+slow1+slow2)/4.0;
crosstime=Time[1];
triggerprice=crossprice-(Trigger*Point);
}
else if(fast2<slow2 && fast3>slow3) // cross down 2 bars ago
{
flag=false;
crossprice=(fast2+fast3+slow2+slow3)/4.0;
crosstime=Time[2];
triggerprice=crossprice-(Trigger*Point);
}
}
lasttime=Time[0];
//Display countdown timer (seconds left)
int countdown = (2*Period()*60)-(CurTime()-crosstime);
if (countdown>=0)
{
double triggerpips=((Ask+Bid)/2.0-crossprice)/Point;
Comment("Minutes in window of opportunity = ", countdown/60,". Cross-Price = ", crossprice, ". Pips from Trigger = ", triggerpips , ".");
}
//
//Enter Long
//
if(Ask>=triggerprice&&flag==true&&countdown>=0)
{
StopLoss = iLow(NULL,0,1);
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeLong(Ask,TakeProfit1),NULL,magic1,0,Blue);
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeLong(Ask,TakeProfit2),NULL,magic2,0,Blue);
}//Long
//
//Enter Short
//
if(Bid<=triggerprice&&flag==false&&countdown>=0)
{
StopLoss = iHigh(NULL,0,1);
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,StopLoss,TakeShort(Bid,TakeProfit1),NULL,magic1,0,Red);
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,StopLoss,TakeShort(Bid,TakeProfit2),NULL,magic2,0,Red);
}//Shrt
return(0);
}
//===========================================================================================
//===========================================================================================
void MonitorOrders() //Monitor open orders
{
//
// More sophisticated exit monitoring system may be needed here
//
TrailingAlls(TrailingStop); //Trailing Stop
return(0);
}
//===========================================================================================
//===========================================================================================
double TakeLong(double price,int take) // function to calculate takeprofit if long
{
if(take==0)
return(0.0); // if no take profit
return(price+(take*Point));
// plus, since the take profit is above us for long positions
}
//===========================================================================================
//===========================================================================================
double TakeShort(double price,int take) // function to calculate takeprofit if short
{
if(take==0)
return(0.0); // if no take profit
return(price-(take*Point));
// minus, since the take profit is below us for short positions
}
//===========================================================================================
//===========================================================================================
void TrailingAlls(int trail) // client-side trailing stop
{
if(trail==0)
return;
double stopcrnt;
double stopcal;
int trade;
int trades=OrdersTotal();
for(trade=0;trade<trades;trade++)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol())
continue;
//Long
if(OrderType()==OP_BUY&&(OrderMagicNumber()!=magic1||OrderMagicNumber()!=magic2))
{
stopcrnt=OrderStopLoss();
stopcal=Bid-(trail*Point);
if(stopcrnt==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);
}
else
{
if(stopcal>stopcrnt)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);
}
}
}//Long
//Short
if(OrderType()==OP_SELL&&(OrderMagicNumber()!=magic1||OrderMagicNumber()!=magic2))
{
stopcrnt=OrderStopLoss();
stopcal=Ask+(trail*Point);
if(stopcrnt==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);
}
else
{
if(stopcal<stopcrnt)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);
}
}
}//Short
} //for
}
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
---