Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
Profitability Reports
GBP/USD
Oct 2024 - Jan 2025
55.00 %
Total Trades
239
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-34.27
Gross Profit
9935.00
Gross Loss
-18126.00
Total Net Profit
-8191.00
-100%
-50%
0%
50%
100%
NZD/USD
Oct 2024 - Jan 2025
26.00 %
Total Trades
222
Won Trades
40
Lost trades
182
Win Rate
0.18 %
Expected payoff
-42.23
Gross Profit
3273.70
Gross Loss
-12648.00
Total Net Profit
-9374.30
-100%
-50%
0%
50%
100%
CandleStix 1.1
//*****************************************************************//
//Candlestix© By xxDavidxSxx@yahoo.com //
//*****************************************************************//
#property copyright " David Stanley Copyright © 2007"
#property link "xxDavidxSxx@Yahoo.com"
#include <stdlib.mqh>
#include <stderror.mqh>
extern bool UseHarami = true;
extern bool UseEngulfing = true;
extern int ProfitTarget = 80; // Change to whatever number of pips you wish to trail your position with.
extern double TrailingStop = 60;
extern double Lots = 0.1;
extern int MagicNumber=123400;
extern int Slippage = 5;
extern bool UseNoTradeDay=false;
extern int NoTradeDay = 5;
//---------------------------------------------------------------------//
bool UseTrailingStop = true;
extern int StopLoss = 60;
int TrailingStopType = 2; // Type 1 moves stop immediately, Type 2 waits til value of TS is reached
int SignalCandle=1; //set to 1 if you want to get the cangle close 0 for current
int err, ticket, MyTrades;
int OpenLong;
int OpenShort;
int EWOCCIColor;
//+---------------------------------------------------+
//|Money Management |
//+---------------------------------------------------+
extern bool UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern int MM_Type = 2;
//+---------------------------------------------------+
//|Money Management type 1 |
//+---------------------------------------------------+
extern string StrSep1 = "-----MoneyManagementType 1 -----";
extern double MMRisk=0.15; // Risk Factor
extern double LossMax=1000; // Maximum Loss by 1 Lot
//+---------------------------------------------------+
//|Money Management type 2 |
//+---------------------------------------------------+
extern string StrSep2 = "-----MoneyManagementType 2 -----";
extern bool AccountIsMini = true; // Change to true if trading mini account
extern double TradeSizePercent = 35; // Change to whatever percent of equity you wish to risk.
double MaxLots = 10;
//+--------------Is It Time To Trade?----------------------+
extern int GMT_Offset = 0;
extern string sm="--Trading Hours--";
extern bool UseTradingHours = false;
extern bool TradeAsianMarket = false;
extern int StartHour1 = 1; // Start trades after time
extern int StopHour1 = 10; // Stop trading after time
extern bool TradeEuropeanMarket = true;
extern int StartHour2 = 9; // Start trades after time
extern int StopHour2 = 14; // Stop trading after time
extern bool TradeNewYorkMarket = true;
extern int StartHour3 = 15; // Start trades after time
extern int StopHour3 = 23; // Stop trading after time
bool YesStop;
//+---------------------------------------------------------------+//
double BarClosePrev3=0,BarClosePrev4=0,BarClosePrev5=0,PrevDClose=0, PrevDHigh=0, PrevDLow=0, Pivot=0, BarClose=0,BarClosePrev=0,BarClosePrev2=0,
PrevBarHigh=0,PrevBarLow=0,Lotsi=0,BarOpen=0,PrevBarHigh2=0,PrevBarLow2=0,
h=0,m=0,s=0,ewo=0,ewos=0,ewop,ewosp;
double BarOpen2=0,PrevPHigh=0,PrevPLow=0,PrevPClose=0,PivotP=0,
Bar=0;
bool TradeAllowed=true;
datetime dayofyear;
datetime timehour;
int init()
{
MagicNumber = MagicNumber;
}
//+------------------------------------------------------------------+
//+ MAKE LABEL +
//+------------------------------------------------------------------+
int ObjectMakeLabel( string n, int xoff, int yoff, int WindowToUse ){
ObjectCreate( n, OBJ_LABEL, WindowToUse, 0, 0 );
ObjectSet( n, OBJPROP_CORNER, 2 );
ObjectSet( n, OBJPROP_XDISTANCE, xoff );
ObjectSet( n, OBJPROP_YDISTANCE, yoff );
ObjectSet( n, OBJPROP_BACK, true );
}
bool CheckTradingTimes()
{
bool StopTrading;
int offsetStartHour1, offsetStopHour1;
int offsetStartHour2, offsetStopHour2;
int offsetStartHour3, offsetStopHour3;
offsetStartHour1 = StartHour1 + GMT_Offset;
offsetStopHour1 = StopHour1 + GMT_Offset;
offsetStartHour2 = StartHour2 + GMT_Offset;
offsetStopHour2 = StopHour2 + GMT_Offset;
offsetStartHour3 = StartHour3 + GMT_Offset;
offsetStopHour3 = StopHour3 + GMT_Offset;
StopTrading = true;
//------------------------------- Check trading Asian Market-------------------------//
if (TradeAsianMarket)
{
if (offsetStartHour1 > 18)
{
//----------------------- Check broker that uses Asian open before 0:00--------------//
if (Hour() >= offsetStartHour1) StopTrading = false;
if (!StopTrading)
{
if (offsetStopHour1 < 24)
{
if ( Hour() <= offsetStopHour1) StopTrading = false;
}
if (offsetStopHour1 >=0)
{
if ( Hour() <= offsetStopHour1) StopTrading = false;
}
}
}
else
{
if (Hour() >= offsetStartHour1 && Hour() <= offsetStopHour1) StopTrading = false;
}
}
if (StopTrading)
{
//------------------------------ Check trading European Market------------------------//
if (TradeEuropeanMarket)
{
if (Hour() >= offsetStartHour2 && Hour() <= offsetStopHour2) StopTrading = false;
}
}
if (StopTrading)
{
// Check trading New York Market
if (TradeNewYorkMarket)
{
if (Hour() >= offsetStartHour3 && Hour() <= offsetStopHour3) StopTrading = false;
}
}
return(StopTrading);
}
int start()
{
if (OrdersTotal() > 0 && OrderMagicNumber() == MagicNumber)
EWOCCIColor=DarkSeaGreen;
{
if (OrdersTotal() < 1 && OrderMagicNumber() == MagicNumber)
EWOCCIColor=Maroon;
}
string comm,print;
print="CandleStix";
comm=print;
ObjectMakeLabel( "CandleStix", 25, 12, 0);
ObjectSetText( "CandleStix", "Version 1.1", 8, "Arial", EWOCCIColor );
ObjectCreate("CandleStix", OBJ_LABEL, 0, 0, 0);
ObjectSetText("CandleStix", comm, 60, "Times New Roman", EWOCCIColor);
//----------Lets Get Min. S/L Distance Allowed By Broker-------------------------//
int h=TimeHour(TimeCurrent());
int m=TimeMinute(TimeCurrent());
int s=TimeSeconds(TimeCurrent());
int day;
int S_StopLoss;
int L_StopLoss;
int err;
err=GetLastError();
double dblMinStopDistance = MarketInfo(Symbol(),MODE_STOPLEVEL)*MarketInfo(Symbol(), MODE_POINT);
Comment ("Min Stop Distance : ",dblMinStopDistance," ","CandleStix Copyright © 2007"," ","xxDavidxSxx@Yahoo.com"," ",h,":",m,":",s);
int NumTrades = 0;
int OpenLong,OpenShort;
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY ) NumTrades++;
if (OrderType() == OP_SELL )NumTrades++;
}
}
bool Trading = true;
if (UseNoTradeDay)
{
if( DayOfWeek() == NoTradeDay ){
//Comment("No Trade Friday "," ",h,":",m,":",s);
Trading=false;
}else{
//Comment ("Trading Day O-K"," ",h,":",m,":",s);
Trading=true;
}
}
//---------------------------Lets Determine Lot Size---------------------------//
L_StopLoss = iLow(Symbol(),PERIOD_D1,0);
S_StopLoss = iHigh(Symbol(),PERIOD_D1,0);
if (NumTrades == 0)
{
if (TradeAllowed)
{
if (MM_Type == 1)
Lotsi = MoneyManagement ( UseMoneyManagement, Lots, MMRisk, LossMax);
else
Lotsi = GetLots();
//-----------------------------Is It Time To Trade?----------------------------//
YesStop = false;
if (UseTradingHours) YesStop = CheckTradingTimes();
if (YesStop)
{
//Comment ("Trading has been stopped as requested - wrong time of day");
ObjectMakeLabel( "StopTrade", 25, 12, 0);
ObjectSetText( "StopTrade", "Trading has been stopped as requested - wrong time of day", 8, "Arial", MediumVioletRed );
}
else
{
//Comment ("Time To Trade!");
ObjectMakeLabel( "StopTrade", 25, 12, 0);
ObjectSetText( "StopTrade", "Trade Time O-K ! ", 8, "Arial", Turquoise );
}
//-------------------------------Bar Close---==----------------------------//
PrevPClose = iClose(Symbol(),PERIOD_H4,2);
PrevPHigh = iHigh(Symbol(),PERIOD_H4,2);
PrevPLow = iLow(Symbol(),PERIOD_H4,2);
PivotP = (PrevPHigh + PrevPLow + PrevPClose)/3;
PrevDClose = iClose(Symbol(),PERIOD_D1,2);
PrevDHigh = iHigh(Symbol(),PERIOD_D1,2);
PrevDLow = iLow(Symbol(),PERIOD_D1,2);
Pivot = (PrevDHigh + PrevDLow + PrevDClose)/3;
Bar = iClose(Symbol(),0,0);
BarClose = iClose(Symbol(),0,1);
BarClosePrev2= iClose(Symbol(),0,2);
BarClosePrev3= iClose(Symbol(),0,3);
BarClosePrev4= iClose(Symbol(),PERIOD_D1,3);
BarClosePrev5= iClose(Symbol(),PERIOD_D1,4);
BarOpen = iOpen(Symbol(),0,1);
BarOpen2 = iOpen(Symbol(),0,2);
PrevBarHigh = High[2];
PrevBarLow = Low[2];
PrevBarHigh2 = High[3];
PrevBarLow2 = Low[3];
//----------------------------------SIGNAL GENERATOR--------------------------//
if (YesStop == false)
if ( dayofyear!=DayOfYear())//compare the day of the year of the last order sent)
//if ( timehour != Hour())
if (UseHarami == true && BarClosePrev2 < BarOpen2 && BarOpen > BarClosePrev2 && BarClose > Pivot)
{
OrderSend(Symbol(), OP_BUY, Lotsi, Ask, Slippage, Ask - StopLoss * Point, Ask + ProfitTarget * Point,"EWOCCI Long",MagicNumber, 0);
dayofyear=DayOfYear();//record trade day right after ordersend
timehour=Hour();
}
if (UseEngulfing == true && BarClosePrev2 < PrevBarLow2 && BarClose > PrevBarHigh && BarClose > Pivot && BarClose > BarClosePrev4)
//if (BarClose < BarOpen2 && BarOpen > BarClose )
{
OrderSend(Symbol(), OP_BUY, Lotsi, Ask, Slippage, Ask - StopLoss * Point, Ask + ProfitTarget * Point,"EWOCCI Long",MagicNumber, 0);
dayofyear=DayOfYear();//record trade day right after ordersend
timehour=Hour();
}
//----Short--------------------//
if (YesStop == false)
if (dayofyear!=DayOfYear())//compare the day of the year of the last order sent)
//if ( timehour != Hour())
if(UseHarami == true && BarClosePrev2 > BarOpen2 && BarOpen < BarClosePrev2 && BarClose < Pivot)
{
OrderSend(Symbol(), OP_SELL, Lotsi, Bid, Slippage, Bid + StopLoss * Point, Bid - ProfitTarget * Point,"EWOCCI SELL",MagicNumber, 0);
dayofyear=DayOfYear();//record trade day right after ordersend
timehour=Hour();
}
if (UseEngulfing == true && BarClosePrev2 > PrevBarHigh2 && BarClose < PrevBarLow && BarClose < Pivot && BarClose < BarClosePrev4)
//if (BarClose > BarOpen2 && BarOpen < BarClose )
{
OrderSend(Symbol(), OP_SELL, Lotsi, Bid, Slippage, Bid + StopLoss * Point, Bid - ProfitTarget * Point,"EWOCCI SELL",MagicNumber, 0);
dayofyear=DayOfYear();//record trade day right after ordersend
timehour=Hour();
}
if ( timehour != Hour())
{
return(0);
}
}
}
//------------------------------TRAILING STOP FUNCTION-------------------------//
if (UseTrailingStop)
{
for (i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol() == Symbol() )
{
if ( OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber)
{
HandleTrailingStop(OP_BUY,OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
}
if ( OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
{
HandleTrailingStop(OP_SELL,OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
}
}
}
}
return(0);
}
// ---------------------------------- Money Management, by Robert Hill--------------------//
double MoneyManagement ( bool flag, double Lots, double risk, double maxloss)
{
Lotsi=Lots;
if ( flag ) Lotsi=NormalizeDouble(Lots*AccountFreeMargin()*risk/maxloss,1);
if (Lotsi<0.1) Lotsi=0.1;
return(Lotsi);
}
//-------------------------------------Lets Determine Lot Size---------------------------//
double GetLots()
{
double lot;
if(UseMoneyManagement)
{
lot = LotsOptimized();
}
else
{
lot = Lots;
if(AccountIsMini)
{
if (lot < 0.1) lot = 0.1;
}
else
{
if (lot >= 1.0) lot = MathFloor(lot); else lot = 1.0;
}
if (lot > MaxLots) lot = MaxLots;
}
return(lot);
}
//------------------ Calculate optimal lot size based on percent of Account---------------//
double LotsOptimized()
{
double lot=Lots;
//---- select lot size
lot=NormalizeDouble(MathFloor(AccountFreeMargin()*TradeSizePercent/10000)/10,1);
if(AccountIsMini)
{
lot = MathFloor(lot*10)/10;
}
return(lot);
}
//-------------- Modify Open Position Controls Try to modify position 3 times -----------//
bool ModifyOrder(int nOrderType, int ord_ticket,double op, double price,double tp, color mColor = CLR_NONE)
{
int cnt, err;
double myStop;
myStop = ValidStopLoss (nOrderType, price);
cnt=0;
if (OrderModify(ord_ticket,op,myStop,tp,0,mColor))
{
return(true);
}
else
{
err=GetLastError();
if (err > 1) Print(cnt," Error modifying order : (", ord_ticket , ") " + ErrorDescription(err), " err ",err);
if (err>0) cnt++;
Sleep (10000);
}
return(false);
}
//---------------------------------Adjust stop loss so that it is legal------------------//
double ValidStopLoss(int cmd, double sl)
{
if (sl == 0) return(0.0);
double mySL, myPrice;
double dblMinStopDistance = MarketInfo(Symbol(),MODE_STOPLEVEL)*MarketInfo(Symbol(), MODE_POINT);
mySL = sl;
// Check if SlopLoss needs to be modified
switch(cmd)
{
case OP_BUY:
myPrice = MarketInfo(Symbol(), MODE_BID);
if (myPrice - sl < dblMinStopDistance)
mySL = myPrice - dblMinStopDistance; // we are long
break;
case OP_SELL:
myPrice = MarketInfo(Symbol(), MODE_ASK);
if (sl - myPrice < dblMinStopDistance)
mySL = myPrice + dblMinStopDistance; // we are Short
}
return(NormalizeDouble(mySL,MarketInfo(Symbol(), MODE_DIGITS)));
}
//+------------------------------------------------------------------+
//| HandleTrailingStop |
//| Type 1 moves the stoploss without delay. |
//| Type 2 waits for price to move the amount of the trailStop |
//| before moving stop loss then moves like type 1 |
//+------------------------------------------------------------------+
int HandleTrailingStop(int type, int ticket, double op, double os, double tp)
{
double pt, TS=0, myAsk, myBid;
double bos,bop,opa,osa;
switch(type)
{
case OP_BUY:
{
myBid = MarketInfo(Symbol(),MODE_BID);
switch(TrailingStopType)
{
case 1: pt = Point*StopLoss;
if(myBid-os > pt)
ModifyOrder(type, ticket,op,myBid-pt,tp, Aqua);
break;
case 2: pt = Point*TrailingStop;
if(myBid-op > pt && os < myBid - pt)
ModifyOrder(type, ticket,op,myBid-pt,tp, Aqua);
break;
}
return(0);
break;
}
case OP_SELL:
{
myAsk = MarketInfo(Symbol(),MODE_ASK);
switch(TrailingStopType)
{
case 1: pt = Point*StopLoss;
if(os - myAsk > pt)
ModifyOrder(type, ticket,op,myAsk+pt,tp, Aqua);
break;
case 2: pt = Point*TrailingStop;
if(op - myAsk > pt && os > myAsk+pt)
ModifyOrder(type, ticket,op,myAsk+pt,tp, Aqua);
break;
}
}
return(0);
}
}
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
---