Satop,
attached this indicator to my chart, but it does not seem to work. I want to use it only to close out all open positions at a specific time. How do i do that?
Satop,
attached this indicator to my chart, but it does not seem to work. I want to use it only to close out all open positions at a specific time. How do i do that?
To change a code and to make the new adviser.
The original code has a lot of Russian language throughout. I used an online translator to create an English only code. You can replace the original with the following code to be more understandable.
//+------------------------------------------------------------------+
//| OpenTime.mq4 |
//| Yuriy Tokman |
//| yuriytokman@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman"
#property link "yuriytokman@gmail.com"
extern string _____1_____ = "Adjustments of closing of a position";
extern bool TimeClose = True; // True allows Time of closing of a position
extern string CloseTime = "22:59"; // Time of closing of a position
extern bool Trailing = False; // True allows Trailing Stop operation
extern double TrailingStop = 30; // The pip size of the trail
extern int TrailingStep = 3; // Pip movement for resetting of a trail
extern string _____2_____ = "Adjustments of opening of a position";
extern string TimeTrade = "10:00"; // Time of opening of a position
extern int Duration = 0; // Duration in seconds. Used to add seconds to time closing/opening
extern bool Sell = True; // True-Sell
extern bool Buy = False; // True-Buy
extern double Lots = 0.1; // The Lot size
extern int StopLoss = 500; // The size of stop in pips
extern int TakeProfit = 100; // The size of profit in pips
extern string _____3_____ = "Parameters of the adviser";
extern int MagicNumber = 89888; //Magic number used by advisor
int NumberAccount = 0; // Number of the trading account
bool UseSound = True; // True uses a sound signal, False doesn't
string NameFileSound = "expert.wav"; // The name of a sound file
bool ShowComment = True; // at the top of charts
bool MarketWatch = False; // False uses StopLoss and TakeProfit values, True the values = 0
extern int Slippage = 0; // number of pips from the price to allow a trade
extern int NumberOfTry = 5; // number of trading attempts
//------- Global variables of the adviser -------------------------------------+
bool gbDisabled = False; // True blocks operation of the adviser, False allows operation
bool gbNoInit = False; // True blocks initialization, False allows operation
color clOpenBuy = LightBlue; // Color of "marker line" of opening of purchase
color clOpenSell = LightCoral; // Color of "marker line" of opening of sale
//------- Connection of external modules --------------------------------------+
#include <stdlib.mqh> // Standard library of MT4
//+----------------------------------------------------------------------------+
//| |
//| THE PRE-ASSIGNED FUNCTIONS |
//| |
//+----------------------------------------------------------------------------+
//| Function of initialization |
//+----------------------------------------------------------------------------+
void init() {
gbNoInit=False;
if (!IsTradeAllowed()) {
Message("For normal work of the adviser it is necessary \n"+
"To allow to trade to the adviser");
gbNoInit=True; return;
}
if (!IsLibrariesAllowed()) {
Message("For normal work of the adviser it is necessary \n"+
"To resolve import external experts");
gbNoInit=True; return;
}
if (!IsTesting()) {
if (IsExpertEnabled()) Message("The adviser will be started by a following tic");
else Message("The button is wrung out \"To resolve start of advisers\"");
}
}
//+----------------------------------------------------------------------------+
//| Function of expert operation |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start() {
double sl=0, tp=0;
if (gbDisabled) {
Message("Critical error! The adviser is stopped!"); return;
}
if (gbNoInit) {
Message("The adviser was not possible to initialize!"); return;
}
if (!IsTesting()) {
if (NumberAccount>0 && NumberAccount!=AccountNumber()) {
Comment("Trade on the account: "+AccountNumber()+" IT IS FORBIDDEN!");
return;
} else Comment("");
if (ShowComment) {
string st="CurrentTime="+TimeToStr(TimeCurrent(), TIME_MINUTES)
+" TimeTrade="+TimeTrade
+IIFs(TimeClose," CloseTime="+CloseTime, "")
+" Trade="
+IIFs(Sell," Sell", "")
+IIFs(Buy," Buy", "")
+" Lots="+DoubleToStr(Lots, 1)
+IIFs(MarketWatch, " MarketWatch", "")
;
Comment(st);
} else Comment("");
}
//----------------------------------------------------------------------------------+
if(TimeClose)
{
if (TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+CloseTime)
&& TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+CloseTime)+Duration)
ClosePositions(NULL,-1,MagicNumber);
}
//----------------------------------------------------------------------------------+
if(Trailing)SimpleTrailing(NULL, -1,MagicNumber);
//----------------------------------------------------------------------------------+
if (TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTrade)
&& TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTrade)+Duration)
{
if (!ExistPositions("", OP_BUY, MagicNumber)&&Buy)
{
if (StopLoss >0) sl=Ask-StopLoss*Point; else sl=0;
if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0;
OpenPosition(NULL, OP_BUY, Lots, sl, tp, MagicNumber);
}
if (!ExistPositions("", OP_SELL, MagicNumber)&&Sell)
{
if (StopLoss >0) sl=Bid+StopLoss*Point; else sl=0;
if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0;
OpenPosition(NULL, OP_SELL, Lots, sl, tp, MagicNumber);
}
}
}
//+----------------------------------------------------------------------------+
//| |
//| THE USER FUNCTIONS |
//| |
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 06.03.2008 |
//| The description: Returns a flag of creation of a trade |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| sy - The name of the tool ("" - Any symbol, |
//| NULL - Current symbol) |
//| op - Operation (-1 - Any buy or sell trade) |
//| mn - MagicNumber (-1 - Any assigned number) |
//| ot - Time of opening ( 0 - Any time of opening) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 01.09.2005 |
//| The description : Returns the name of trading operation |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| op - The trading operation |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 01.09.2005 |
//| The description: Returns the name for chart period |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| TimeFrame - named period (0 - Current period) |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
if (TimeFrame==0) TimeFrame=Period();
switch (TimeFrame) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("UnknownPeriod");
}
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 01.02.2008 |
//| The description: Returns one of two values from a condition. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 01.09.2005 |
//| The description: conclusion of the message displayed on chart and Print |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| m - The text of the message |
//+----------------------------------------------------------------------------+
void Message(string m) {
Comment(m);
if (StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 28.11.2006 |
//| The description: modifying an open Order. |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| pp - The price of the order |
//| sl - Price level of stop |
//| tp - price level of profit |
//| ex - Date of the expiration |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl;
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice(), dg);
os=NormalizeDouble(OrderStopLoss(), dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
er=GetLastError();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Sleep(1000*10);
}
}
}
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 10.04.2008 |
//| The description: Opens a trade at the market pric |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| sy - The name of the tool (NULL Or " " - a current symbol) |
//| op - Operation |
//| ll - lot |
//| sl - stop loss level |
//| tp - take profit target |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
color clOpen;
datetime ot;
double pp, pa, pb;
int dg, err, it, ticket=0;
string lsComm=WindowExpertName()+" "+GetNameTF(Period());
if (sy=="" || sy=="0") sy=Symbol();
if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
Print("OpenPosition(): Stop of work of function");
break;
}
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
dg=MarketInfo(sy, MODE_DIGITS);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if (op==OP_BUY) pp=pa; else pp=pb;
pp=NormalizeDouble(pp, dg);
ot=TimeCurrent();
if (MarketWatch)
ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, lsComm, mn, 0, clOpen);
else
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
if (ticket>0) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if (pa==0 && pb==0) Message("Check up in the Review of the market presence of a symbol "+sy);
// Conclusion of the message on an error
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
// Blocking of work of the adviser
if (err==2 || err==64 || err==65 || err==133) {
gbDisabled=True; break;
}
// Length of pause
if (err==4 || err==131 || err==132) {
Sleep(1000*300); break;
}
if (err==128 || err==142 || err==143) {
Sleep(1000*66.666);
if (ExistPositions(sy, op, mn, ot)) {
if (UseSound) PlaySound(NameFileSound); break;
}
}
if (err==140 || err==148 || err==4110 || err==4111) break;
if (err==141) Sleep(1000*100);
if (err==145) Sleep(1000*17);
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
if (err!=135) Sleep(1000*7.7);
}
}
if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
}
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 19.02.2008 |
//| The description: Closing of positions at the market price |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| sy - The name of the tool ("" - Any symbol, |
//| NULL - Current symbol) |
//| op - Operation (-1 - Any position) |
//| mn - MagicNumber (-1 - any assigned number) |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="", int op=-1, int mn=-1) {//ClosePositions(NULL,-1,MagicNumber)
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 19.02.2008 |
//| The description: Closing of one selected position |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pa, pb, pp;
int err, it;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pb; clClose=Green;
} else {
pp=pa; clClose=Red;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
} else Print("Incorrect trading operation. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//| The author : Kim Igor of Century aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| The version : 11.09.2008 |
//| The description: Support of positions by a simple trail |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| sy - The name of the tool (" " - any symbol, |
//| NULL -Current symbol) |
//| op - operation ( -1 - Any position) |
//| mn - MagicNumber ( -1 - any assigned number) |
//+----------------------------------------------------------------------------+
void SimpleTrailing(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if ( pp-OrderOpenPrice()>TrailingStop*po) {
if (OrderStopLoss()<pp-(TrailingStop+TrailingStep-1)*po) {
ModifyOrder(-1, pp-TrailingStop*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if ( OrderOpenPrice()-pp>TrailingStop*po) {
if (OrderStopLoss()>pp+(TrailingStop+TrailingStep-1)*po || OrderStopLoss()==0) {
ModifyOrder(-1, pp+TrailingStop*po, -1);
}
}
}
}
}
}
}
}
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
OpenTime:
Author: IURII TOKMAN