SDQDQ
SDQDQ
//| Akram |
//| Copyright 2018, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
#define MODE_HISTOGRAM 2
// Input parameters
input int FastEMA = 12;
input int SlowEMA = 26;
input int SignalSMA = 9;
input double InitialBalance = 1000.0; // Change this value to your desired initial
account size in dollars
double CurrentBalance = AccountBalance();
double ProfitLoss = CurrentBalance - InitialBalance;
// Get current account equity and calculate maximum lot size for desired exposure
double account_equity = AccountInfoDouble(ACCOUNT_EQUITY);
double Exposure = AccountInfoDouble(ACCOUNT_MARGIN_FREE) / MarketInfo(Symbol(),
MODE_MARGINREQUIRED);
double max_lot_size = NormalizeDouble(account_equity * Exposure / 100 /
MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2);
//quity stop
double equity_stop_pct;
input double EquityStopPct = 10.0; // default value of 10%
double equity_stop_usd = AccountEquity() * equity_stop_pct / 100.0;
// MACD parameters
int macd_fast = FastEMA;
int macd_slow = SlowEMA;
int macd_signal = SignalSMA;
// Define ErrorDescription function
string ErrorDescription(int error)
{
string errorString;
switch(error)
{
case 0:
errorString = "NO_ERROR";
break;
case 1:
errorString = "ERR_NO_RESULT";
break;
case 2:
errorString = "ERR_COMMON_ERROR";
break;
case 3:
errorString = "ERR_INVALID_TRADE_PARAMETERS";
break;
case 4:
errorString = "ERR_SERVER_BUSY";
break;
case 5:
errorString = "ERR_OLD_VERSION";
break;
case 6:
errorString = "ERR_NO_CONNECTION";
break;
case 7:
errorString = "ERR_NOT_ENOUGH_RIGHTS";
break;
case 8:
errorString = "ERR_TOO_FREQUENT_REQUESTS";
break;
case 9:
errorString = "ERR_MALFUNCTIONAL_TRADE";
break;
case 64:
errorString = "ERR_ACCOUNT_DISABLED";
break;
case 65:
errorString = "ERR_INVALID_ACCOUNT";
break;
case 128:
errorString = "ERR_TRADE_TIMEOUT";
break;
case 129:
errorString = "ERR_INVALID_PRICE";
break;
case 130:
errorString = "ERR_INVALID_STOPS";
break;
case 131:
errorString = "ERR_INVALID_TRADE_VOLUME";
break;
case 132:
errorString = "ERR_MARKET_CLOSED";
break;
case 133:
errorString = "ERR_TRADE_DISABLED";
break;
case 134:
errorString = "ERR_NOT_ENOUGH_MONEY";
break;
case 135:
errorString = "ERR_PRICE_CHANGED";
break;
case 136:
errorString = "ERR_OFF_QUOTES";
break;
case 137:
errorString = "ERR_BROKER_BUSY";
break;
case 138:
errorString = "ERR_REQUOTE";
break;
case 139:
errorString = "ERR_ORDER_LOCKED";
break;
case 140:
errorString = "ERR_LONG_POSITIONS_ONLY_ALLOWED";
break;
case 141:
errorString = "ERR_TOO_MANY_REQUESTS";
break;
case 145:
errorString = "ERR_TRADE_MODIFY_DENIED";
break;
case 146:
errorString = "ERR_TRADE_CONTEXT_BUSY";
break;
case 147:
errorString = "ERR_TRADE_EXPIRATION_DENIED";
break;
case 148:
errorString = "ERR_TRADE_TOO_MANY_ORDERS";
break;
case 149:
errorString = "ERR_TRADE_HEDGE_PROHIBITED";
break;
case 150:
errorString = "ERR_TRADE_PROHIBITED_BY_FIFO";
break;
default:
errorString = "Unknown error code: " + IntegerToString(error);
break;
}
return errorString;
}
// Global variables
double H4_MACD_main[];
double H4_MACD_signal[];
double H4_MACD_histogram[];
double H4_MACD_main_prev;
double H4_MACD_signal_prev;
double H4_MACD_histogram_prev;
double H1_MACD_main[];
double H1_MACD_signal[];
double H1_MACD_histogram[];
double H1_MACD_main_prev;
double H1_MACD_signal_prev;
double H1_MACD_histogram_prev;
double M30_MACD_main[];
double M30_MACD_signal[];
double M30_MACD_histogram[];
double M30_MACD_main_prev;
double M30_MACD_signal_prev;
double M30_MACD_histogram_prev;
double M5_MACD_main[];
double M5_MACD_signal[];
double M5_MACD_histogram[];
double M5_MACD_main_prev;
double M5_MACD_signal_prev;
double M5_MACD_histogram_prev;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
double takeProfit = Exposure + takeProfitInPrice + currentPipStep;
double stop_loss = Exposure - stopLossInPrice - currentPipStep;
// Set take profit level
bool result = OrderModify(OrderTicket(), 0, takeProfit, OrderStopLoss(), 0,
CLR_NONE);
if(!result)
{
Print("Failed to modify order take profit: ",
ErrorDescription(GetLastError()));
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// Close any open orders on deinitialization
if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, Red))
{
Print("Order closed successfully");
}
else
{
Print("Error in closing order: ", GetLastError());
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
double takeProfit = Exposure + takeProfitInPrice + currentPipStep;
double stop_loss = Exposure - stopLossInPrice - currentPipStep;
current_lot_size *= LotSizeGrowthRate;
if(OrderSend(Symbol(), OP_BUY, lot_size, SymbolInfoDouble(Symbol(), SYMBOL_ASK),
3, SymbolInfoDouble(Symbol(), SYMBOL_ASK) - stop_loss, takeProfit, "Buy Order",
MagicNumber, 0, Green) > 0)
{
// Trade opened successfully
}
// Open buy trade with calculated lot size, take profit and stop loss
int ticket = OrderSend(Symbol(), OP_BUY, lot_size, SymbolInfoDouble(Symbol(),
SYMBOL_ASK), 3, SymbolInfoDouble(Symbol(), SYMBOL_ASK) - stop_loss, takeProfit,
"Buy Order", MagicNumber, 0, Green);
// Open buy trade with calculated lot size, take profit and stop
loss
bool result = OrderSend(Symbol(), OP_BUY, lot_size, Ask, 0,
stop_loss, takeProfit, "MyOrder", MagicNumber, 0, Green);
if(!result)
{
Print("Failed to place order: ", ErrorDescription(GetLastError()));
}
// Check for errors in opening trade
if(ticket < 0)
{
Print("Error in opening trade: ", GetLastError());
}
if(OrderSelect(OrdersTotal() - 1, SELECT_BY_POS, MODE_TRADES))
{
last_trade_open = OrderOpenPrice();
}