Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
SimpleDailyRangeBreakExpert_v1.21_usdjpy
//+------------------------------------------------------------------+
//| SimpleDailyRangeBreakExpert_v1.2.mq4 |
//| Copyright © 2006, Forex-TSD.com |
//| Written by IgorAD,igorad2003@yahoo.co.uk |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link "http://www.forex-tsd.com/"
#include <stdlib.mqh>
#include <Tracert.mqh>
//---- input parameters
extern string Expert_Name = "---- SimpleDailyRangeBreakExpert_v1.2 ----";
extern int Magic=1007;
extern int Slippage=6;
extern bool Trace = false; // Trace Switch
extern string Main_Parameters = " Trade Volume & Trade Method";
extern double Lots = 0.1;
extern bool TrailingStop = false; // Trailing Stop Switch
extern bool InitialStop = true; // Initial Stop Switch
extern int TimeZone = 1;
extern string Data = " Input Data ";
extern double BuyPercent = 70; // Percent from Daily Range for BUY
extern double SellPercent = 110; // Percent from Daily Range for SELL
extern double StopPercent = 110; // Percent from Daily Range for StopLoss
extern int TradePeriod = 5; // Max days in trade
extern string Trade = " Trade Days of Week";
extern bool Monday = true; // Day of the Week for Trade
extern bool Tuesday = true;
extern bool Wednesday = true;
extern bool Thursday = true;
extern bool Friday = true;
extern string MM_Parameters = " MoneyManagement by L.Williams ";
extern bool MM=false; // ÌÌ Switch
extern double MMRisk=0.15; // Risk Factor
extern double LossMax=1000; // Maximum Loss by 1 Lot
int i,cnt=0, ticket, mode=0, digit=0, wenum=0,OrderOpenDay;
double high=0,low=0, close=0, open=0, range=0, spread=0, Profit=0;
double smin=0, smax=0, BuyStop=0, SellStop=0, Lotsi=0, rates_h1[][6];
bool BuyInTrade=false, SellInTrade=false;
datetime StartTime, prevwe=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
// ---- Money Management
double MoneyManagement ( bool flag, double Lots, double risk, double maxloss)
{
double Lotsi=Lots;
if ( flag ) Lotsi=NormalizeDouble(Lots*AccountFreeMargin()*risk/maxloss,1);
if (Lotsi<0.1) Lotsi=0.1;
return(Lotsi);
}
// Closing of Pending Orders
void PendOrdDel()
{
int total=OrdersTotal();
for (int cnt=total-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
int mode=OrderType();
bool result = false;
switch(mode)
{
case OP_BUYSTOP : {result = OrderDelete( OrderTicket() ); Print(" PendBUY"); }
case OP_SELLSTOP : {result = OrderDelete( OrderTicket() ); Print(" PendSELL"); }
if(!result)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
//Print(" cnt=",cnt, " total=",total," MODE = ",mode," Ticket=",OrderTicket() );
}
}
}
return;
}
//
void CloseOrdbyTime()
{
int total=OrdersTotal();
for (cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
mode=OrderType();
if ( mode <= OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
datetime OpenTime=StrToTime(TimeToStr(OrderOpenTime(),TIME_DATE));
datetime CurnTime=StrToTime(TimeToStr(CurTime(),TIME_DATE));
int weekday=TimeDayOfWeek(OrderOpenTime());
if (weekday <=5 && DayOfWeek()==1 && CurnTime > prevwe && CurnTime > OpenTime) {wenum =wenum + 1; prevwe = CurnTime;}
//if (OrderOpenDay <= 5 && DayOfWeek()>0)
int CalcBars=TradePeriod+2*wenum;
//else CalcBars=TradePeriod;
if ((CurTime()-OpenTime)>=PERIOD_D1*CalcBars*60 || OrderProfit()>0)
{
if (mode==OP_BUY )
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
if (mode==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
}
}
}
}
// ----
void TrailStops()
{
int total=OrdersTotal();
for (cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
mode=OrderType();
if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
if ( mode==OP_BUY && smin > OrderStopLoss() )
{
Profit=0;
OrderModify(OrderTicket(),OrderOpenPrice(),smin,Profit,0,LightGreen);
return(0);
}
if ( mode==OP_SELL && smax < OrderStopLoss())
{
Profit=0;
OrderModify(OrderTicket(),OrderOpenPrice(),smax,Profit,0,Yellow);
return(0);
}
}
}
}
void SellOrdOpen()
{
double SellPrice=open - range*SellPercent/100.0 - spread;
if (InitialStop) SellStop=SellPrice + StopPercent*range/100.0; else SellStop=0;
Profit=0;
ticket = OrderSend(Symbol(),OP_SELLSTOP,Lotsi,
NormalizeDouble(SellPrice,digit),
Slippage,
NormalizeDouble(SellStop,digit),
Profit,"SELL",Magic,0,Red);
OrderOpenDay = DayOfWeek();
SellInTrade=false;
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
void BuyOrdOpen()
{
double BuyPrice =open + range*BuyPercent/100.0 + spread;
if (InitialStop) BuyStop = BuyPrice - StopPercent*range/100.0; else BuyStop=0;
Profit=0;
ticket = OrderSend(Symbol(),OP_BUYSTOP ,Lotsi,
NormalizeDouble(BuyPrice ,digit),
Slippage,
NormalizeDouble(BuyStop ,digit),
Profit,"BUY",Magic,0,Blue);
OrderOpenDay = DayOfWeek();
BuyInTrade=false;
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
void ExtraOrdDel()
{
int total = OrdersTotal();
for (cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
mode=OrderType();
if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
if (mode==OP_BUY && !BuyInTrade ) BuyInTrade =true;
if (mode==OP_SELL && !SellInTrade) SellInTrade=true;
if (mode == OP_SELLSTOP && BuyInTrade )
{ OrderDelete(OrderTicket()); SellInTrade=false; Print(" ExtraSell"); }
if (mode == OP_BUYSTOP && SellInTrade )
{ OrderDelete(OrderTicket()); BuyInTrade=false; Print(" ExtraBuy"); }
}
}
}
// ---- Scan Trades
int ScanTrades()
{
int total = OrdersTotal();
int numords = 0;
for(cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType()>=OP_BUY && OrderMagicNumber() == Magic)
numords++;
}
return(numords);
}
datetime OrderOpenDate()
{
int total = OrdersTotal();
datetime date;
for(cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType()>=OP_BUY && OrderMagicNumber() == Magic)
date = StrToTime(TimeToStr(OrderOpenTime(),TIME_DATE));
}
return(date);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Bars < 1) {Print("Not enough bars for this strategy"); return(0);}
if ( Trace ) SetTrace();
string TimeTrade = "00:00";
StartTime = StrToTime(TimeTrade) + TimeZone*3600;
if(Hour() >= TimeZone && Hour() <= TimeZone+1)
{
if ( OrderOpenDate() < StrToTime(TimeToStr( StartTime,TIME_DATE)))
{ PendOrdDel(); if( TradePeriod > 0 )CloseOrdbyTime(); }
if(ScanTrades()<1)
{
spread= MarketInfo(Symbol(),MODE_SPREAD)*Point;
digit = MarketInfo(Symbol(),MODE_DIGITS);
Lotsi = MoneyManagement ( MM, Lots, MMRisk, LossMax);
if (TrailingStop) InitialStop=true;
ArrayCopyRates(rates_h1, Symbol(), PERIOD_H1);
open = rates_h1[0][1];
high=0; low=10000000;
for (i=24;i>=1;i--)
{
high = MathMax( high, rates_h1[i][3]);
low = MathMin( low , rates_h1[i][2]);
}
Print(" high=",high,"low=",low);
range =(high-low);
smin = Bid - StopPercent*range/100.0;
smax = Ask + StopPercent*range/100.0;
if ( Monday ) if(DayOfWeek()==1){BuyOrdOpen(); SellOrdOpen();}
if ( Tuesday ) if(DayOfWeek()==2){BuyOrdOpen(); SellOrdOpen();}
if ( Wednesday ) if(DayOfWeek()==3){BuyOrdOpen(); SellOrdOpen();}
if ( Thursday ) if(DayOfWeek()==4){BuyOrdOpen(); SellOrdOpen();}
if ( Friday ) if(DayOfWeek()==5){BuyOrdOpen(); SellOrdOpen();}
}
}
ExtraOrdDel();
if (TrailingStop) TrailStops();
return(0);
}//int start
//+------------------------------------------------------------------+
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
---