I am trying to code lines in an EA.
These I do not have a problem with:
DailyOpen
RangeHigh
RangeLow
These are more complicated because of conditions required to move them and iteration:
TargetHigh
TargetLow
I would like the Target Lines to move to a user defined target increment above the new RangeHigh and below the new RangeLow after a trade closes.
Here is an elementary stab at a solution which of course does not work. Areas marked in red are where I believe the problems start.
I was hoping someone could provide some direction, advanced code structure, etc., to make this work.
I will be out of town until next wednesday.
Any help would be greatly appreciated!
These I do not have a problem with:
DailyOpen
RangeHigh
RangeLow
These are more complicated because of conditions required to move them and iteration:
TargetHigh
TargetLow
I would like the Target Lines to move to a user defined target increment above the new RangeHigh and below the new RangeLow after a trade closes.
Here is an elementary stab at a solution which of course does not work. Areas marked in red are where I believe the problems start.
Inserted Code
extern int CountTradesStart = 00; extern double InitialTradeTarget = 0.0056; extern double TradeTargetIncrement = 0.0006;
Inserted Code
int deinit() {
ObjectDelete("MidRange");
ObjectDelete("UpperRange");
ObjectDelete("LowerRange");
ObjectDelete("UpperTarget");
ObjectDelete("LowerTarget");
return(0);
} Inserted Code
int ClosedTrade = 0;
for(int j = 0; j <= OrdersHistoryTotal(); j++)
{
OrderSelect(j, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() == TimeCurrent()) ClosedTrade++;
} Inserted Code
//---- Auto Daily Range, Count Trades Taken in 24 Hr Day (for Target Increment), Trend & Lines
double TargetHigh;
double TargetLow;
double OpenLine = iOpen(NULL, EATF5, 0);
double RangeHigh = iHigh(NULL, EATF5, 0);
double RangeLow = iLow(NULL, EATF5, 0);
double DailyRange = iHigh(NULL, EATF5, 0) - iLow(NULL, EATF5, 0);
double TrendRange = DailyRange/2;
if(cummulativeTradeCount(CountTradesStart) == 0)
{
if(DailyRange < InitialTradeTarget)
{
TradeTarget = InitialTradeTarget;
TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
if(DailyRange > InitialTradeTarget)
{
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeHigh > TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
}
if(ClosedTrade > 0 && cummulativeTradeCount(CountTradesStart) > 0 && cummulativeTradeCount(CountTradesStart) < 2)
{
TradeTarget = DailyRange + TradeTargetIncrement;
[color=red] if(RangeHigh[/color] < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
}
if(ClosedTrade < 1 && cummulativeTradeCount(CountTradesStart) > 0 && cummulativeTradeCount(CountTradesStart) < 2)
{
if(DailyRange < TradeTarget)
{
[color=red]if(RangeHigh[/color] < TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
}
if(DailyRange > TradeTarget)
{
if(RangeHigh < TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
}
}
if(ClosedTrade > 0 && cummulativeTradeCount(CountTradesStart) > 1 && cummulativeTradeCount(CountTradesStart) < 3)
{
TradeTarget = DailyRange + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
}
if(ClosedTrade < 1 && cummulativeTradeCount(CountTradesStart) > 1 && cummulativeTradeCount(CountTradesStart) < 3)
{
if(DailyRange < TradeTarget)
{
if(RangeHigh > TargetHigh) TargetHigh = TargetHigh;
if(RangeHigh < TargetHigh) TargetHigh = TargetHigh;
if(RangeLow < TargetLow) TargetLow = TargetLow;
if(RangeLow > TargetLow) TargetLow = TargetLow;
}
if(DailyRange > TradeTarget)
{
if(RangeHigh > TargetHigh) TargetHigh = TargetHigh;
if(RangeHigh < TargetHigh) TargetHigh = TargetHigh;
if(RangeLow < TargetLow) TargetLow = TargetLow;
if(RangeLow > TargetLow) TargetLow = TargetLow;
}
}
if(ClosedTrade > 0 && cummulativeTradeCount(CountTradesStart) > 2 && cummulativeTradeCount(CountTradesStart) < 4)
{
TradeTarget = DailyRange + TradeTargetIncrement;
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
if(ClosedTrade < 1 && cummulativeTradeCount(CountTradesStart) > 2 && cummulativeTradeCount(CountTradesStart) < 4)
{
if(DailyRange < TradeTarget)
{
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
if(DailyRange < TradeTarget)
{
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
}
if(ClosedTrade > 0 && cummulativeTradeCount(CountTradesStart) > 3 && cummulativeTradeCount(CountTradesStart) < 5)
{
TradeTarget = DailyRange + TradeTargetIncrement;
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
if(ClosedTrade < 1 && cummulativeTradeCount(CountTradesStart) > 3 && cummulativeTradeCount(CountTradesStart) < 5)
{
if(DailyRange < TradeTarget)
{
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
if(DailyRange < TradeTarget)
{
if(RangeHigh > TargetHigh) TargetHigh = RangeHigh + TradeTargetIncrement;
if(RangeHigh < TargetHigh) TargetHigh = iOpen(NULL, EATF5, 0) + InitialTradeTarget/2;
if(RangeLow < TargetLow) TargetLow = RangeLow - TradeTargetIncrement;
if(RangeLow > TargetLow) TargetLow = iOpen(NULL, EATF5, 0) - InitialTradeTarget/2;
}
}
string TREND = "Price <-> HLTradeTargets";
if(RangeHigh > TargetHigh && Bid > (iHigh(NULL, EATF5, 0) - TrendRange) && Bid < iHigh(NULL, EATF5, 0)) TREND = "Long";
if(RangeLow < TargetLow && Ask < (iLow(NULL, EATF5, 0) + TrendRange) && Ask > iLow(NULL, EATF5, 0)) TREND = "Short";
//---- Draw Target & High, Low Lines
if(DrawTargetLines)
{
ObjectDelete("UpperTarget");
ObjectCreate("UpperTarget", OBJ_HLINE, 0, 0, TargetHigh);
ObjectSet("UpperTarget", OBJPROP_COLOR, Orange);
ObjectSet("UpperTarget", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectDelete("LowerTarget");
ObjectCreate("LowerTarget", OBJ_HLINE, 0, 0, TargetLow);
ObjectSet("LowerTarget", OBJPROP_COLOR, Orange);
ObjectSet("LowerTarget", OBJPROP_STYLE, STYLE_DASHDOT);
}
if(DrawHLLines)
{
ObjectDelete("MidRange");
ObjectCreate("MidRange", OBJ_HLINE, 0, 0, OpenLine);
ObjectSet("MidRange", OBJPROP_COLOR, White);
ObjectSet("MidRange", OBJPROP_STYLE, STYLE_DOT);
ObjectDelete("UpperRange");
ObjectCreate("UpperRange", OBJ_HLINE, 0, 0, RangeHigh);
ObjectSet("UpperRange", OBJPROP_COLOR, Orange);
ObjectSet("UpperRange", OBJPROP_STYLE, STYLE_SOLID);
ObjectDelete("LowerRange");
ObjectCreate("LowerRange", OBJ_HLINE, 0, 0, RangeLow);
ObjectSet("LowerRange", OBJPROP_COLOR, Orange);
ObjectSet("LowerRange", OBJPROP_STYLE, STYLE_SOLID);
} Inserted Code
int cummulativeTradeCount(int startHour)
{
int totalHistory = OrdersHistoryTotal(); //get number of history orders in orders' pool
int TradeCount = 0; //set initial count = 0
datetime thistime = TimeCurrent(); //now use TimeCurrent() instead of Time[0], to avoid logic flaw when run on 24 Hr cycle
datetime startTime = StrToTime(TimeToStr(thistime,TIME_DATE)+" "+startHour+":00"); //construct startTime based on startHour and current day, month, year
if(thistime<startTime) startTime = startTime-24*60*60; //check if current time is behind startTime, subtract startTime by 24 hours
for(int k = totalHistory -1; k >= 0; k--)
{
OrderSelect(k, SELECT_BY_POS, MODE_HISTORY); //check if order's close time behind starttime, exit loop
if(OrderCloseTime() < startTime) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber) TradeCount++;
}
return(TradeCount); //
} I was hoping someone could provide some direction, advanced code structure, etc., to make this work.
I will be out of town until next wednesday.
Any help would be greatly appreciated!