Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
TrendStuffer-expert-ULTIMATE-StochasticFiltered
#property copyright "Copyright c 2007, TrendStuffer.com"
#property link "http://www.trendstuffer.com/"
#include <stdlib.mqh>
extern string introone = "**TrendStuffer.com StochasticFiltered EA**";
extern string introtwo = "**Built for GBP/USD M15 chart**";
extern string texta = "-=[Expert's Settings Area]=-";
extern int TrendStufferMagic = 20070523;
extern string EAComment = "TrendStuffer StochFilt EA GBPUSD H1";
extern int MaxSlippage = 2;
extern int OrderTriesNumber = 5;
extern int StochBuy = 80;
extern int StochSell = 65;
extern string textb = "-=[How much to trade with?]=-";
extern bool FixedLot = true;
extern double Lots = 0.1;
extern double MaximumRisk = 5;
extern string textc = "-=[Position's settings?]=-";
extern double TakeProfit = 200;
extern double StopLoss = 90;
extern int CurrentBarTrailingStart = 30;
extern int CurrentBarTrailingStop = 80;
extern int ClosedBarTrailingStop = 60;
extern int ClosedBarTrailingStart = 50;
extern string textd = "-=[Use the 3-Positions method?]=-";
extern bool UseThreeP = false;
extern int ThreePMagic = 320070601;
extern double Lot1 = 0.5;
extern double Lot2 = 0.3;
extern double Lot3 = 0.2;
extern int TakeProfit1 = 20;
extern int TakeProfit2 = 50;
extern int TakeProfit3 = 80;
extern int InitialSL1 = 50;
extern int InitialSL2 = 70;
extern int InitialSL3 = 100;
int var_260 = 1;
int var_264 = 1;
int var_268 = 14;
double var_272 = 2.824;
bool var_280;
bool var_284;
bool var_288;
bool var_292;
int var_296;
int Attempt;
int var_304;
double var_308;
double var_316;
double var_324;
double var_332;
//+------------------------------------------------------------------+
double LotsRisk(int risk)
{
double lots = Lots;
if (!FixedLot)
lots = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 1000.0 / risk,1);
else
lots = Lots;
if (lots < 0.01) lots = 0.01;
return(lots);
}
//+------------------------------------------------------------------+
int CalculateCurrentOrders()
{
if (UseThreeP == false)
{
int buy_cnt = 0;
int sell_cnt = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == TrendStufferMagic))
{
if (OrderType() == OP_BUY) buy_cnt++;
if (OrderType() == OP_SELL) sell_cnt++;
}
}
if (buy_cnt > 0) return(buy_cnt); else return(-sell_cnt);
}
if (UseThreeP == true)
{
buy_cnt = 0;
sell_cnt = 0;
for (i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == ThreePMagic))
{
if (OrderType() == OP_BUY) buy_cnt++;
if (OrderType() == OP_SELL) sell_cnt++;
}
}
if (buy_cnt > 0) return(buy_cnt); else return(-sell_cnt);
}
}
//+------------------------------------------------------------------+
void CheckForSignals()
{
double var_CheckForSignals_0;
double oprice;
int ordtype;
int i;
if (var_304 != Time[0])
{
var_304 = Time[0];
var_308 = iCustom(NULL,0,"TrendStuffer-base",0,40,var_268,var_272,0,var_260);
var_316 = iCustom(NULL,0,"TrendStuffer-base",0,40,var_268,var_272,0,var_260 + 1);
var_308 = NormalizeDouble(var_308,Digits);
var_316 = NormalizeDouble(var_316,Digits);
var_324 = iCustom(NULL,0,"TrendStuffer-base",1,ClosedBarTrailingStop,var_268,var_272,0,var_264);
var_332 = iCustom(NULL,0,"TrendStuffer-base",1,ClosedBarTrailingStop,var_268,var_272,0,var_264 + 1);
var_324 = NormalizeDouble(var_324,Digits);
var_332 = NormalizeDouble(var_332,Digits);
}
var_284 = false;
var_280 = false;
if ((NormalizeDouble(Close[var_260],Digits) - NormalizeDouble(var_308,Digits) >= Point) && (NormalizeDouble(var_316,Digits) - NormalizeDouble(Close[var_260 + 1],Digits) >= 0) && (iStochastic(NULL,0,14,5,5,MODE_SMA,0,MODE_MAIN,1) < StochBuy)) var_280 = true;
if ((NormalizeDouble(var_308,Digits) - NormalizeDouble(Close[var_260],Digits) >= Point) && (NormalizeDouble(Close[var_260 + 1],Digits) - NormalizeDouble(var_316,Digits) >= 0) && (iStochastic(NULL,0,14,5,5,MODE_SMA,0,MODE_MAIN,1) > StochSell)) var_284 = true;
var_292 = var_280;
var_288 = var_284;
if (var_292 || var_288) return;
if (CalculateCurrentOrders() == 0) return;
for (i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == TrendStufferMagic))
{
oprice = OrderOpenPrice();
ordtype = OrderType();
}
}
var_292 = false;
var_288 = false;
var_CheckForSignals_0 = NormalizeDouble(oprice + ClosedBarTrailingStart * Point,Digits);
if ((ordtype == OP_BUY) && (Close[var_264] >= var_CheckForSignals_0) && (Close[var_264] < var_324) && (Close[var_264 + 1] >= var_332)) var_288 = true;
var_CheckForSignals_0 = NormalizeDouble(oprice - ClosedBarTrailingStart * Point,Digits);
if ((ordtype == OP_SELL) && (Close[var_264] <= var_CheckForSignals_0) && (Close[var_264] > var_324) && (Close[var_264 + 1] <= var_332)) var_292 = true;
}
//+------------------------------------------------------------------+
void CheckForOpen()
{
int ticket;
int ticket1;
int ticket2;
int ticket3;
string comment;
if (UseThreeP == false)
{
if (var_284 && (var_296 != -1))
{
ticket = 0;
Attempt = 0;
while ((ticket <= 0) && (Attempt < OrderTriesNumber))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket = OrderSend(Symbol(),OP_SELL,LotsRisk(StopLoss),Bid,MaxSlippage,Bid + StopLoss * Point,(Bid - TakeProfit * Point),EAComment,TrendStufferMagic,0,Red);
if (ticket < 0)
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
}
Attempt++;
}
var_296 = -1;
return;
}
if (var_280 && (var_296 != 1))
{
ticket = 0;
Attempt = 0;
while ((ticket <= 0) && (Attempt < OrderTriesNumber))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,LotsRisk(StopLoss),Ask,MaxSlippage,Ask - StopLoss * Point,Ask + TakeProfit * Point,EAComment,TrendStufferMagic,0,Blue);
Attempt++;
}
var_296 = 1;
return;
}
}
if (UseThreeP == true)
{
comment = "TrendStuffer ThreeP " + Period() + " " + Symbol();
if (var_284 && (var_296 != -1))
{
ticket1 = OrderSend(Symbol(),OP_SELL,Lot1,Bid,MaxSlippage,Bid + InitialSL1 * Point,Bid - TakeProfit1 * Point,comment,ThreePMagic,0,Red);
ticket2 = OrderSend(Symbol(),OP_SELL,Lot2,Bid,MaxSlippage,Bid + InitialSL2 * Point,Bid - TakeProfit2 * Point,comment,ThreePMagic,0,Red);
ticket3 = OrderSend(Symbol(),OP_SELL,Lot3,Bid,MaxSlippage,Bid + InitialSL3 * Point,Bid - TakeProfit3 * Point,comment,ThreePMagic,0,Red);
var_296 = -1;
}
else
{
if (var_280 && (var_296 != 1))
{
ticket1 = OrderSend(Symbol(),OP_BUY,Lot1,Ask,MaxSlippage,Ask - InitialSL1 * Point,Ask + TakeProfit1 * Point,comment,ThreePMagic,0,Blue);
ticket2 = OrderSend(Symbol(),OP_BUY,Lot2,Ask,MaxSlippage,Ask - InitialSL2 * Point,Ask + TakeProfit2 * Point,comment,ThreePMagic,0,Blue);
ticket3 = OrderSend(Symbol(),OP_BUY,Lot3,Ask,MaxSlippage,Ask - InitialSL3 * Point,Ask + TakeProfit3 * Point,comment,ThreePMagic,0,Blue);
var_296 = 1;
}
}
}
}
//+------------------------------------------------------------------+
void CheckForClose()
{
int result;
int i;
if (UseThreeP == false)
{
for (i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if ((OrderMagicNumber() != TrendStufferMagic) || (OrderSymbol() != Symbol())) continue;
if (OrderType() == OP_BUY)
{
if (var_288)
{
result = 0;
Attempt = 0;
while (!result && (Attempt < OrderTriesNumber))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
result = OrderClose(OrderTicket(),OrderLots(),Bid,MaxSlippage,Gold);
Sleep(3000);
if (!result) Print("Error closing order : ",ErrorDescription(GetLastError()));
Attempt++;
}
}
break;
}
if (OrderType() == OP_SELL)
{
if (var_292)
{
result = 0;
Attempt = 0;
while (!result && (Attempt < OrderTriesNumber))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
result = OrderClose(OrderTicket(),OrderLots(),Ask,MaxSlippage,Gold);
Sleep(3000);
if (!result) Print("Error closing order : ",ErrorDescription(GetLastError()));
Attempt++;
}
}
break;
}
}
}
if (UseThreeP == true)
{
for (i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if ((OrderMagicNumber() != ThreePMagic) || (OrderSymbol() != Symbol())) continue;
if (OrderType() == OP_BUY)
{
if ((Bid > OrderOpenPrice() + TakeProfit1 * Point) && (Bid < OrderOpenPrice() + TakeProfit2 * Point) && (OrderStopLoss() != OrderOpenPrice() + 1 * Point))
{
result = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + 1 * Point,OrderTakeProfit(),0,Gold);
}
if ((Bid > OrderOpenPrice() + TakeProfit2 * Point) && (Bid < OrderOpenPrice() + TakeProfit3 * Point) && (OrderStopLoss() != OrderOpenPrice() + TakeProfit1 * Point))
{
result = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + TakeProfit1 * Point,OrderTakeProfit(),0,Gold);
}
if (var_288)
{
result = OrderClose(OrderTicket(),OrderLots(),Bid,0,Gold);
}
}
if (OrderType() == OP_SELL)
{
if ((Ask < OrderOpenPrice() - TakeProfit1 * Point) && (Ask > OrderOpenPrice() - TakeProfit2 * Point) && (OrderStopLoss() != OrderOpenPrice() - 1 * Point))
{
result = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - 1 * Point,OrderTakeProfit(),0,Gold);
}
if ((Ask < OrderOpenPrice() - TakeProfit2 * Point) && (Ask > OrderOpenPrice() - TakeProfit3 * Point) && (OrderStopLoss() != OrderOpenPrice() - TakeProfit1 * Point))
{
result = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - TakeProfit1 * Point,OrderTakeProfit(),0,Gold);
}
if (var_292)
{
result = OrderClose(OrderTicket(),OrderLots(),Ask,0,Gold);
}
}
}
}
}
//+------------------------------------------------------------------+
void start()
{
int var_start_0 = 2007;
int var_start_4 = 8;
int var_start_8 = 27;
string var_start_12 = var_start_0 + "." + var_start_4 + "." + var_start_8;
int var_start_20 = StrToTime(var_start_12);
/*
if (TimeCurrent() >= var_start_20)
{
Alert("This version has expired! Please order a new copy from www.TrendStuffer.com!");
return;
}
*/
if ((Bars < 100) || (IsTradeAllowed() == false)) return;
CheckForSignals();
if (CalculateCurrentOrders() == 0) CheckForOpen(); else CheckForClose();
TrailStop();
}
//+------------------------------------------------------------------+
void TrailStop()
{
bool result;
double sl;
int i;
if (CurrentBarTrailingStop > 2)
{
for (i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS) != false)
{
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != TrendStufferMagic)) continue;
if (OrderType() == OP_BUY)
{
if (Bid < OrderOpenPrice() + CurrentBarTrailingStart * Point) continue;
sl = Bid - CurrentBarTrailingStop * Point;
if (sl > OrderStopLoss())
{
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Gold);
if (!result) Print("Error Modifying BUY order : ",ErrorDescription(GetLastError()));
}
}
if (OrderType() == OP_SELL)
{
if (Ask > OrderOpenPrice() - CurrentBarTrailingStart * Point) continue;
sl = Ask + CurrentBarTrailingStop * Point;
if (sl < OrderStopLoss())
{
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Gold);
if (!result) Print("Error Modifying SELL order : ",ErrorDescription(GetLastError()));
}
}
}
}
}
}
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
---