Orders Execution
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
121.00 %
Total Trades
275
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
0.40
Gross Profit
625.28
Gross Loss
-515.98
Total Net Profit
109.30
-100%
-50%
0%
50%
100%
GBP/CAD
Oct 2024 - Jan 2025
67.00 %
Total Trades
887
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-0.74
Gross Profit
1343.60
Gross Loss
-1998.03
Total Net Profit
-654.43
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
116.00 %
Total Trades
728
Won Trades
557
Lost trades
171
Win Rate
0.77 %
Expected payoff
0.31
Gross Profit
1651.89
Gross Loss
-1427.42
Total Net Profit
224.47
-100%
-50%
0%
50%
100%
Williama_EA[2]
//+------------------------------------------------------------------+
//| Williama PriceTrapper.mq4 |
//| Based on the great strategie of Williama |
//| Coded by Naufrage, All rights granted to you :) |
//| |
//+------------------------------------------------------------------+
#property copyright "Coded by Raphy, All rights granted to you :)"
#property link ""
#include <stdlib.mqh>
#include <stderror.mqh>
//---- input parameters
extern int pips=15; // number of pips between each level
extern double lots=0.01;
extern int NbLevels=3; // Number of levels of the pending orders (for each target, buy and sell)
extern int ProfitTarget=0; //Minimum profit target, in pips. Whatever happen, at least this profit is made (unless we run out of free margin...).
int Magic=17663;
double myPoint;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
myPoint = SetPoint(Symbol());
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int ticket, err, cpt, profit, total, BuyGoalProfit, SellGoalProfit;
double BuyGoal=0, SellGoal=0, spread=(Ask-Bid)/myPoint;
//----
// total=OrdersTotal();
total = CalculateCurrentOrders(Symbol(), Magic);
if(total<1) //we can set up a new "price catcher"
{
if(AccountFreeMargin()<(10000*lots))
{
Print("Not enough free margin to begin");
return(0);
}
SellGoal=Ask-(NbLevels+1)*pips*myPoint;
BuyGoal=Ask+(NbLevels+1)*pips*myPoint;
for(cpt=1;cpt<=NbLevels;cpt++)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,Ask+cpt*pips*myPoint,2,SellGoal,BuyGoal,"InitialSetup",Magic,0,Green);
if(ticket==0)
{
err = GetLastError();
Print("Error opening BUYSTOP order : (" + err + ") " + ErrorDescription(err));
return(0);
}
ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,Bid-cpt*pips*myPoint,2,BuyGoal+spread*myPoint,SellGoal-spread*myPoint,"InitialSetup",Magic,0,Green);
if(ticket==0)
{
err = GetLastError();
Print("Error opening SELLSTOP order : (" + err + ") " + ErrorDescription(err));
return(0);
}
}
} // initial setup done
else
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
cpt=0;
while(OrderType()!=OP_BUY && OrderType()!=OP_BUYSTOP)
{
OrderSelect(cpt, SELECT_BY_POS, MODE_TRADES);
cpt++;
}
BuyGoal=OrderTakeProfit();
SellGoal=OrderStopLoss();
// check if pending orders must be canceled
if(Ask>=BuyGoal || (Ask<=SellGoal))
{
for(cpt=0;cpt<total;cpt++)
{
OrderSelect(cpt,SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) OrderDelete(OrderTicket());
}
return(0);
}
else if((Ask+pips*myPoint)<=BuyGoal && (Ask-pips*myPoint)>=SellGoal)
// now we check if profit will be made no matter which goal is reached, and add pending orders if necessary
{
//first, check profit if the BuyGoal is reached
profit=0;
for(cpt=0;cpt<total;cpt++)
{
OrderSelect(cpt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) profit+=(BuyGoal-OrderOpenPrice())/myPoint;
if(OrderType()==OP_SELL) profit-=((BuyGoal+spread*myPoint)-OrderOpenPrice())/myPoint;
if(OrderType()==OP_BUYSTOP && OrderOpenPrice()>Ask) profit+=(BuyGoal-OrderOpenPrice())/myPoint;
}
}
cpt=1;
BuyGoalProfit=profit;
while(profit<ProfitTarget)
{
if((Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*myPoint)<(BuyGoal-cpt*pips*myPoint))
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,BuyGoal-cpt*pips*myPoint,2,SellGoal,BuyGoal,"",Magic,0,Green);
if(ticket==0)
{
err = GetLastError();
Print("Error opening BUYSTOP order : (" + err + ") " + ErrorDescription(err));
return(0);
}
profit+=cpt*pips;
}
cpt++;
if(cpt>NbLevels) cpt=1;
}
// then, check profit if SellGoal is reached
profit=0;
for(cpt=0;cpt<total;cpt++)
{
OrderSelect(cpt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) profit-=(OrderOpenPrice()-SellGoal)/myPoint;
if(OrderType()==OP_SELL) profit+=(OrderOpenPrice()-(SellGoal-spread*myPoint))/myPoint;
if(OrderType()==OP_SELLSTOP && OrderOpenPrice()<Bid) profit+=(OrderOpenPrice()-(SellGoal-spread*myPoint))/myPoint;
}
}
cpt=1;
SellGoalProfit=profit;
while(profit<ProfitTarget)
{
if((Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)*myPoint)>(SellGoal+cpt*pips*myPoint))
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,(SellGoal-spread*myPoint)+cpt*pips*myPoint,2,BuyGoal+spread*myPoint,SellGoal-spread*myPoint,"",Magic,0,Green);
if(ticket==0)
{
err = GetLastError();
Print("Error opening SELLSTOP order : (" + err + ") " + ErrorDescription(err));
return(0);
}
profit+=cpt*pips;
}
cpt++;
if(cpt>NbLevels) cpt=1;
}
}
}
string sComment = "";
string sep = "----------------------------------------\n";
string nl = "\n";
sComment = "Williama EA v.0.1" + nl;
sComment = sComment + "Lots=" + DoubleToStr(lots,2) + nl;
sComment = sComment + "Buy Goal= " + DoubleToStr(BuyGoal,4) + nl;
sComment = sComment + "Buy Goal Profit (in pips)=" + BuyGoalProfit + nl + nl;
sComment = sComment + "Sell Goal= " + DoubleToStr(SellGoal,4) + nl;
sComment = sComment + "Sell Goal Profit (in pips)=" + SellGoalProfit + nl + nl;
sComment = sComment + "Pips of each level=" + pips + nl;
sComment = sComment + "Number of levels for each goal: " + NbLevels + nl;
sComment = sComment + "Spread= " + DoubleToStr(spread,1) + nl;
sComment = sComment + sep;
Comment(sComment);
//----
return(0);
}
double SetPoint(string mySymbol)
{
double mPoint, myDigits;
myDigits = MarketInfo (mySymbol, MODE_DIGITS);
if (myDigits < 4)
mPoint = 0.01;
else
mPoint = 0.0001;
return(mPoint);
}
int CalculateCurrentOrders(string mySymbol, int MagicNumber)
{
int buys = 0, sells = 0, num = 0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!= mySymbol) continue;
if (OrderMagicNumber()!= MagicNumber) continue;
if(OrderType() == OP_BUY) buys++;
if(OrderType() == OP_SELL) sells++;
if(OrderType() == OP_BUYSTOP) buys++;
if(OrderType() == OP_SELLSTOP) sells++;
}
num = buys + sells;
return(num);
}
//+------------------------------------------------------------------+
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
---