Code: Select all
//-------------------------------------------------------------------------------------
// NoProgra Builder - Create EAs without any programming
// Copyright © 2012, NoProgra (http://www.noprogra.com)
// Get support at http://www.noprogra.com
//+--------------------------------------------------------------------------------------
// EXPERT ADVISOR GENERATED USING NOPROGRA BUILDER FOR EDUCATIONAL PURPOSES.
// This EA does not constitute financial advice.
//
//
// UNDER NO CIRCUMSTANCES WILL NOPROGRA BE LIABLE TO YOU, OR ANY OTHER PERSON OR ENTITY,
// FOR ANY LOSS OF USE, REVENUE OR PROFIT, LOST OR DAMAGED DATA, OR OTHER COMMERCIAL OR
// ECONOMIC LOSS OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, STATUTORY, PUNITIVE,
// EXEMPLARY OR CONSEQUENTIAL DAMAGES WHATSOEVER RELATED TO YOUR USE OF THIS EXPERT
// ADVISOR OR NOPROGRA BUILDER
//
// USE THIS EXPERT ADVISOR AT YOUR OWN RISK.
//
//+--------------------------------------------------------------------------------------
#property copyright "Copyright © 2011, Generated with NoProgra Builder"
#property link "http://www.noprogra.com"
//************Variables
//Empty4 Variables
extern double Lotsize1 = 0.01;
extern double takeprofit1 = 0;
extern double stoploss1 = 0;
extern double trailing1 = 0;
extern double MAperiod = 2;
extern double BWLevel = 0;
extern double BWEXIT = 0;
//Main Variables
extern int Start_Time = 0; // Time to allow trading to start ( hours of 24 hr clock ) 0 for both disables
extern int End_Time = 24; // Time to stop trading ( hours of 24 hr clock ) 0 for both disables
extern bool TradeBars = true; // You can trade bars or ticks. If TradeBars=true, the ea trade bars.
extern bool UseFiveDigits = true; // You can use 5 or 4 digit brokers. If UseFiveDigits = true, your broker uses 5 digits
int FiveDMultiplier = 1; // Manages the 5 digit fix
extern bool isECN = false; // If true, orders are opened and later TP/SL is added
extern int Positions = 99; // Max open positions
extern bool AllowHedge=true; // Set AllowHedge=true to hedge
extern int Slippage = 3; // Minimum slippage to trade
extern int MagicNumber = 5432101; //EA's magic number
string goLong="SUPERENKO101"; //Comment for long order
string goShort="SUPERENKO101"; //Comment for short order
int PreviousBars = 0; // Used for bar counting
//************Include Empty4 files
#include <stdlib.mqh>
#include <stderror.mqh>
#include <WinUser32.mqh>
////////////////////////////////////////////////////////////////////////////////////////
string StringSubstrOld(string x,int a,int b=-1)
{
if(a<0) a=0; // Stop odd behaviour
if(b<=0) b=-1; // new MQL4 EOL flag
return StringSubstr(x,a,b);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//************Init EA
int init()
{
Print("NoProgra: Starting EA ");
Print("NoProgra: Broker Information : Symbol=",Symbol(),". MIN LOT=",MarketInfo(Symbol(), MODE_MINLOT),". MAX LOT=",MarketInfo(Symbol(), MODE_MAXLOT),". LOT SIZE IN BASE CURRENCY=",MarketInfo(Symbol(), MODE_LOTSIZE));
Print("NoProgra: Min Stops= ",MarketInfo(Symbol(), MODE_STOPLEVEL), " pips.");
goLong="SUPERENKO101 "+MagicNumber;
goShort="SUPERENKO101 "+MagicNumber;
if (UseFiveDigits)
{
FiveDMultiplier = 10;
}
Slippage = Slippage*FiveDMultiplier;
if( (Digits==5 || Digits==3) && (!UseFiveDigits) )
{
Print("NoProgra:",Symbol()," Your setup is 4 digits but you seem to use a 5 digits broker. Please change UseFiveDigits to true");
MessageBox("NoProgra: Your setup is 4 digits but you seem to use a 5 digits broker. Please change UseFiveDigits to true","5 Digits management");
}
if( (Digits==4 || Digits==2) && (UseFiveDigits) )
{
Print("NoProgra:",Symbol()," Your setup is 5 digits but you seem to use a 4 digits broker. Please change UseFiveDigits to false");
MessageBox("NoProgra: Your setup is 5 digits but you seem to use a 4 digits broker. Please change UseFiveDigits to false","5 Digits management");
}
if (AllowHedge) {
Print("NoProgra:",Symbol()," You ALLOW hedging.");
} else {
Print("NoProgra:",Symbol()," You DO NOT ALLOW hedging.");
}
if(OrdersTotal()>0) {
Print("NoProgra:",Symbol()," Warning! There are existing positions. You may want to close them before running this EA.");
MessageBox("NoProgra: Warning! There are existing positions. You may want to close them before running this EA.","NoProgra Warning: There are existing positions");
}
if (Hour()>=Start_Time || Hour()<End_Time) //Preferd Trading Hours
if(Bars<80) {
Print("NoProgra:",Symbol()," There are less than 80 historical bars.");
MessageBox("NoProgra: There are less than 80 historical bars.","NoProgra Warning");
}
if(IsTradeAllowed()==false) {
Print("NoProgra: Trading is not allowed! Make sure the checkbox Allow Live Trading is checked.");
MessageBox("Trading is not allowed! Make sure the checkbox Allow Live Trading is checked.","NoProgra Warning");
}
RefreshRates();
return(0);
}
//************Stop EA
int deinit()
{
Print("NoProgra:",Symbol()," Stopping EA.");
return(0);
}
//************EA Execution
int start()
{
if(IsStopped())
{
Print("NoProgra:",Symbol()," EA is stopping!");
return(0);
}
if ((PreviousBars==Bars) && TradeBars) {
return(0);
}
//************Trading conditions
//************GO LONG
if ( iClose(Symbol(), 0, 1) > iMA(Symbol(), 0, 3, 0, MODE_SMA, PRICE_CLOSE, 1) &&
iCustom(Symbol(), 0, "BandsBandwidth",5,0,2.0, 0, 1) > BWLevel )
{ Print("Trading condition [iClose(Symbol(), 0, 1) > iMA(Symbol(), 0, 3, 0, MO...] is valid.Trying to open long position...");
Buy(Symbol(), Lotsize1, takeprofit1, stoploss1, trailing1); }
//************EXIT LONG
if (iCustom(Symbol(), 0, "BandsBandwidth",5,0,2.0, 0, 1) < BWEXIT)
CloseLong(Symbol());
//************GO SHORT
if ( iClose(Symbol(), 0, 1) < iMA(Symbol(), 0, 3, 0, MODE_SMA, PRICE_CLOSE, 1) &&
iCustom(Symbol(), 0, "BandsBandwidth",5,0,2.0, 0, 1) > BWLevel)
{ Print("Trading condition [iClose(Symbol(), 0, 1) > iMA(Symbol(), 0, 3, 0, MO...] is valid.Trying to open long position...");
Sell(Symbol(), Lotsize1, takeprofit1, stoploss1, trailing1); }
//************EXIT SHORT
if ( iCustom(Symbol(), 0, "BandsBandwidth",5,0,2.0, 0, 1) < BWEXIT)
CloseShort(Symbol());
//************LONG TRAILING STOPS
CheckTrailingStop(Symbol(), OP_BUY, MagicNumber, trailing1);
//************SHORT TRAILING STOPS
CheckTrailingStop(Symbol(), OP_SELL, MagicNumber, trailing1);
PreviousBars=Bars;
return(0);
}
//+------------------------------------------------------------------+
//************EA Functions
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int Buy(string symbol, double lotsize, double takeprofit, double stoploss, double trailings) {
if (!AllowHedge) CloseAllPositions(symbol,OP_SELL,MagicNumber);
if (!isECN) {
if (ExecuteOrder(OP_BUY, symbol, lotsize, stoploss, takeprofit, goLong, MagicNumber, Green)>0) {
}
} else {
if (ExecuteECNOrder(OP_BUY, symbol, lotsize, stoploss, takeprofit, goLong, MagicNumber, Green)>0) {
}
}
return(0);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int Sell(string symbol, double lotsize, double takeprofit, double stoploss, double trailings) {
if (!AllowHedge) CloseAllPositions(symbol,OP_BUY,MagicNumber);
if (!isECN) {
if (ExecuteOrder(OP_SELL, symbol, lotsize,stoploss, takeprofit, goShort, MagicNumber, Red)>0) {
}
} else {
if (ExecuteECNOrder(OP_SELL, symbol, lotsize, stoploss, takeprofit, goShort, MagicNumber, Red)>0) {
}
}
return(0);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int CloseLong(string symbol) {
CloseAllPositions(symbol,OP_BUY,MagicNumber);
CloseAllPositions(symbol,OP_BUY,MagicNumber);
return(0);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int CloseShort(string symbol) {
CloseAllPositions(symbol,OP_SELL,MagicNumber);
CloseAllPositions(symbol,OP_SELL,MagicNumber);
return(0);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
bool EnoughMoney(string symbol, double lotsize) {
if( ( AccountFreeMarginCheck( symbol, OP_BUY, lotsize ) < 15 ) ||
( AccountFreeMarginCheck( symbol, OP_SELL, lotsize ) < 15 ) || ( GetLastError() == 134 ) ) {
Print("NoProgra: No money to trade. Free Margin=", AccountFreeMargin());
Alert("NoProgra: NoProgra: No money to trade. Free Margin=", AccountFreeMargin());
return(false);
} else {
return(true);
}
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int ExecuteECNOrder(int ordertype, string symbol, double lotsize, double stoploss, double takeprofit, string commentOrder, int magic, color ordercolor)
{
int errorcode_ts=0;
Print("NoProgra:",Symbol()," ECN order: 1 Sending order without stops");
int my_ticket = ExecuteOrder(ordertype, symbol, lotsize, 0, 0, commentOrder, magic, ordercolor);
if ( my_ticket > 0 && (stoploss != 0 || takeprofit != 0) )
{
Print("NoProgra:",Symbol()," ECN order: Adding stops");
if (OrderSelect(my_ticket, SELECT_BY_TICKET)) {
RefreshRates();
double points_,digits_, price_;
bool golong;
digits_ = MarketInfo(symbol, MODE_DIGITS);
points_ = MarketInfo(symbol, MODE_POINT);
stoploss=stoploss*FiveDMultiplier;
takeprofit=takeprofit*FiveDMultiplier;
switch (ordertype) {
case OP_BUY:
golong=true;
break;
case OP_SELL:
golong=false;
break;
default:
Print("NoProgra:",Symbol()," ERROR - Wrong order type. Cannot add stops to ECN order - ", ordertype);
return(-1);
break;
}
if (golong) {
price_ = NormalizeDouble(MarketInfo(symbol,MODE_ASK),digits_);
if (stoploss > 0) {
stoploss = NormalizeDouble(price_-stoploss*points_, digits_);
}
if (takeprofit>0) {
takeprofit = NormalizeDouble(price_+takeprofit*points_, digits_);
}
} else {
price_ = NormalizeDouble(MarketInfo(symbol,MODE_BID),digits_);
if (stoploss > 0) {
stoploss = NormalizeDouble(price_+stoploss*points_, digits_);
}
if (takeprofit>0) {
takeprofit = NormalizeDouble(price_-takeprofit*points_, digits_);
}
}
if (OrderModify(my_ticket,OrderOpenPrice(),stoploss,takeprofit,0,ordercolor))
{
Print("NoProgra:",Symbol()," ECN order - Stops added. SL=",stoploss," TP=",takeprofit);
} else {
errorcode_ts=GetLastError();
Print("NoProgra:",Symbol()," ECN order failed. Order executed but stops were not added. Error:",errorcode_ts," ",ErrorDescription(errorcode_ts));
}
} else {//closes if order select
errorcode_ts=GetLastError();
Print("NoProgra:",Symbol()," ECN order failed. Order executed but couldn't select order to add stops. Error:",errorcode_ts," ",ErrorDescription(errorcode_ts));
}
}
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int ExecuteOrder(int ordertype_, string symbol_, double lotsize_, double stoploss_, double takeprofit_, string comment_, int magic_, color ordercolor_)
{ int digits_;
double points_;
double price_;
int ticket_;
bool golong_;
int errorcode_;
stoploss_=stoploss_*FiveDMultiplier;
takeprofit_=takeprofit_*FiveDMultiplier;
switch (ordertype_) {
case OP_BUY:
golong_=true;
break;
case OP_SELL:
golong_=false;
break;
default:
Print("NoProgra:",Symbol()," ERROR : Wrong order type ", ordertype_);
return(-1);
break;
}
if (CalculateOpenPositions(symbol_,ordertype_,magic_)>=Positions) {
Print("NoProgra:",Symbol()," Max number of ",Positions," open positions reached. Cannot execute new ",OrderTypetoString(ordertype_)," order for Symbol ",symbol_);
return(0);
}
if (!EnoughMoney(symbol_, lotsize_)) {
return(-1); }
digits_ = MarketInfo(symbol_, MODE_DIGITS);
points_ = MarketInfo(symbol_, MODE_POINT);
RefreshRates();
if (golong_) {
price_ = NormalizeDouble(MarketInfo(symbol_,MODE_ASK),digits_);
if (stoploss_ > 0) {
stoploss_ = NormalizeDouble(price_-stoploss_*points_, digits_);
}
if (takeprofit_ > 0) {
takeprofit_= NormalizeDouble(price_+takeprofit_*points_, digits_);
}
Print("NoProgra:",Symbol()," Preparing BUY order for ",symbol_);
} else {
price_ = NormalizeDouble(MarketInfo(symbol_,MODE_BID),digits_);
if (stoploss_ > 0) {
stoploss_ = NormalizeDouble(price_+stoploss_*points_, digits_);
}
if (takeprofit_>0) {
takeprofit_= NormalizeDouble(price_-takeprofit_*points_, digits_);
}
Print("NoProgra:",Symbol()," Preparing SELL order for ",symbol_);
}
if (!isTradingPossible()) {
Print("NoProgra:",Symbol()," Trading may not be possible. Trying to execute order anyway...");
}
ticket_=OrderSend(symbol_,ordertype_,lotsize_,price_,Slippage,stoploss_,takeprofit_,comment_,magic_,0,ordercolor_);
if(ticket_>=0)
{
Sleep(2000);
if(OrderSelect(ticket_,SELECT_BY_TICKET))
{
Print("NoProgra:",Symbol()," Order ", OrderTypetoString(ordertype_)," for Symbol=", symbol_, " was executed Successfully. Ticket=",ticket_);
return(ticket_);
} else {
Print("NoProgra:",Symbol()," Order ", OrderTypetoString(ordertype_)," for Symbol=", symbol_, " was executed Successfully but cannot get ticket. Trying again...");
Sleep(2000);
if(OrderSelect(ticket_,SELECT_BY_TICKET))
{
Print("NoProgra:",Symbol()," Got ticket for Order ", OrderTypetoString(ordertype_)," for Symbol=", symbol_, " Ticket=",ticket_);
return(ticket_);
} else {
Print("NoProgra:",Symbol()," Order ", OrderTypetoString(ordertype_)," for Symbol=", symbol_, " was executed Successfully but cannot get ticket. WILL NOT TRY AGAIN");
return(0);
}
}
} else {
errorcode_ = GetLastError();
Print("NoProgra:",Symbol()," ERROR - Couldn't execute order ", OrderTypetoString(ordertype_)," for Symbol=", symbol_," due to error ",errorcode_, " ",ErrorDescription(errorcode_));
Alert("NoProgra:",Symbol()," ERROR - Couldn't execute order ", OrderTypetoString(ordertype_)," for Symbol=", symbol_," due to error ",errorcode_, " ",ErrorDescription(errorcode_));
}
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int CalculateOpenPositions(string symbol,int ordertype,int magicn)
{
int sells=0;
int buys=0;
int sellstop=0;
int buystop=0;
bool magiccond=true;
if(ordertype==OP_BUY || ordertype==OP_SELL || ordertype==OP_SELLSTOP || ordertype==OP_BUYSTOP) {
} else {
Print("NoProgra:",Symbol()," Failed to calculate number of open positions. Order type is wrong.");
Alert("NoProgra:",Symbol()," Failed to calculate number of open positions. Order type is wrong.");
return(-1);
}
int orderstotal = OrdersTotal();
for(int i=0;i<orderstotal;i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (magicn==0) {
magiccond=true;
} else {
if (OrderMagicNumber() == magicn) {
magiccond=true;
} else {
magiccond=false;
}
}
if ((OrderSymbol()==symbol) && (magiccond))
{
if(OrderType()==OP_SELL) sells++;
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELLSTOP) sellstop++;
if(OrderType()==OP_BUYSTOP) buystop++;
}
}
if(ordertype==OP_SELL) return(sells);
if(ordertype==OP_BUY) return(buys);
if(ordertype==OP_SELLSTOP) return(sellstop);
if(ordertype==OP_BUYSTOP) return(buystop);
return(-1);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
string OrderTypetoString(int ordertypecode)
{
if (ordertypecode == OP_BUY)
return("OP_BUY");
if (ordertypecode == OP_SELL)
return("OP_SELL");
if (ordertypecode == OP_BUYSTOP)
return("OP_BUYSTOP");
if (ordertypecode == OP_SELLSTOP)
return("OP_SELLSTOP");
if (ordertypecode == OP_BUYLIMIT)
return("OP_BUYLIMIT");
if (ordertypecode == OP_SELLLIMIT)
return("OP_SELLLIMIT");
return("Unknow order type");
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int CloseAllPositions(string symbolclose, int ordertypeclose, int magicclose)
{
int cnt;
int err;
int retrynumberclose=0;
double priceclose;
bool magiccond=true;
//verify type is ok
if(ordertypeclose==OP_BUY || ordertypeclose==OP_SELL) {
//ok
} else {
Print("NoProgra:",Symbol()," Closing all positions failed. Order type is wrong.");
Alert("NoProgra:",Symbol()," Closing all positions failed. Order type is wrong.");
return(-1);
}
int orderstotal=OrdersTotal();
bool loopcl=true;
while (loopcl) {
loopcl=false;
orderstotal=OrdersTotal();
for(cnt=0;cnt<orderstotal;cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) //executes if gets valid order
{
if (magicclose==0) {
magiccond=true;
} else {
if (OrderMagicNumber() == magicclose) {
magiccond=true;
} else {
magiccond=false;
}
}
if((OrderType()==ordertypeclose) && (OrderSymbol()==symbolclose) && (magiccond))
{
RefreshRates();
if(ordertypeclose==OP_BUY) priceclose=MarketInfo(symbolclose,MODE_BID);
else priceclose=MarketInfo(symbolclose,MODE_ASK);
if (!isTradingPossible()) {
Print("NoProgra: Trading may not be possible. Trying to close position anyway...");
}
if (OrderClose(OrderTicket(),OrderLots(),priceclose,Slippage,Violet)) // close position
{
Print("NoProgra:",Symbol()," Position closed successfully. Trade info: Symbol:",symbolclose,". Lots:",OrderLots(),". Ticket number:",OrderTicket(),". Closed at price:",OrderClosePrice(),". Position was opened at price:",OrderOpenPrice()," Profit:",OrderProfit());
loopcl=true;
retrynumberclose=1;
break;
}else {
err=GetLastError();
Print("NoProgra:",Symbol()," Closing Order failed. Trade info: Symbol:",symbolclose,". Lots:",OrderLots(),". Ticket number:",OrderTicket(),". Error:",err," ",ErrorDescription(err));
Alert("NoProgra:",Symbol()," Closing Order failed. Trade info: Symbol:",symbolclose,". Lots:",OrderLots(),". Ticket number:",OrderTicket(),". Error:",err," ",ErrorDescription(err));
Sleep(2000);
loopcl=true;
retrynumberclose++;
break;
}
}
}
}
if (retrynumberclose>20) {
Print("NoProgra:",Symbol()," Stopping Closing all positions. Too many errors when closing positions. Symbol:",symbolclose);
Print("NoProgra:",Symbol()," URGENT: User interaction is required.");
Alert("NoProgra:",Symbol()," Stopping Closing all positions. Too many errors when closing positions. Symbol:",symbolclose);
Alert("NoProgra:",Symbol()," URGENT: User interaction is required.");
return(-1);
}
}
return(0);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
bool isTradingPossible()
{
//Check if trading is possible
bool tmpresponse=true;
if(!IsConnected())
{
Print("NoProgra: URGENT ACTION REQUIRED : There is no connection to the server!");
Alert("URGENT ACTION REQUIRED : There is no connection to the server!");
tmpresponse=false;
}
if(IsStopped())
{
Print("NoProgra:",Symbol()," ERROR: EA was commanded to stop its operation!");
Alert("ERROR : EA was commanded to stop its operation!");
tmpresponse=false;
}
if (!IsTradeAllowed()) {
Print("NoProgra:",Symbol()," ERROR : Trading is not allowed!");
Alert("ERROR : Trading is not allowed!");
tmpresponse=false;
}
return(tmpresponse);
}
//************Copyright © 2012, NoProgra (http://www.noprogra.com)
int CheckTrailingStop(string symbol_ts, int ordertypeclose_ts,int magicnumber_ts, double tralingstop_ts)
{
if (tralingstop_ts<=0)
{ return(0);
}
if(ordertypeclose_ts==OP_BUY || ordertypeclose_ts==OP_SELL) {
} else {
Print("NoProgra:",Symbol()," Check Trailing Stop failed. Order type is wrong.");
return(-1);
}
double TrailingStop = tralingstop_ts;
double oldStop=0;
int errorcode_ts = 0;
bool magiccond_ts;
int orderstotal=OrdersTotal();
for(int i=0;i<orderstotal;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) {
Print("NoProgra:",Symbol()," Warning: Could not select order to ckeck change on trailing stop. Continuing...");
continue;
}
if (magicnumber_ts==0) {
magiccond_ts=true;
} else {
if (OrderMagicNumber() == magicnumber_ts) {
magiccond_ts=true;
} else {
magiccond_ts=false;
}
}
if(OrderSymbol()==symbol_ts && magiccond_ts)
{
RefreshRates();
if(ordertypeclose_ts==OP_SELL)
{
if(TrailingStop>0)
{
RefreshRates();
if((OrderOpenPrice()-MarketInfo(symbol_ts, MODE_ASK))>(MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier))
{
if((OrderStopLoss()>(MarketInfo(symbol_ts, MODE_ASK)+MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier)) || (OrderStopLoss()==0))
{
oldStop=OrderStopLoss();
if (OrderModify(OrderTicket(),OrderOpenPrice(),MarketInfo(symbol_ts, MODE_ASK)+MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier,OrderTakeProfit(),0,Red))
{
Print("NoProgra:",Symbol()," SL changed using trailing stop. Old SL=",oldStop," New SL=",MarketInfo(symbol_ts, MODE_ASK)+MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier);
}else {
errorcode_ts=GetLastError();
Print("NoProgra:",Symbol()," Warning: Could not change SL value with trailing stop. Error:",errorcode_ts," ",ErrorDescription(errorcode_ts));
}
}
}
}
}
if(ordertypeclose_ts==OP_BUY)
{
if(TrailingStop>0)
{
RefreshRates();
if(MarketInfo(symbol_ts, MODE_BID)-OrderOpenPrice()>MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier)
{
if(OrderStopLoss()<MarketInfo(symbol_ts, MODE_BID)-MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier)
{
oldStop=OrderStopLoss();
if (OrderModify(OrderTicket(),OrderOpenPrice(),MarketInfo(symbol_ts, MODE_BID)-MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier,OrderTakeProfit(),0,Green))
{
Print("NoProgra:",Symbol()," SL changed using trailing stop. Old SL=",oldStop," New SL=",MarketInfo(symbol_ts, MODE_BID)-MarketInfo(symbol_ts, MODE_POINT)*TrailingStop*FiveDMultiplier);
}else {
errorcode_ts=GetLastError();
Print("NoProgra:",Symbol()," Warning: Could not change SL value with trailing stop. Error:",errorcode_ts," ",ErrorDescription(errorcode_ts));
}
}
}
}
}
}
}
return(1);
}
]