4hVegasMetaTrader4hChart_v1
Download scriptOverview of the 4Hour Vegas Model Logic
The 4Hour Vegas Model is a sophisticated technical analysis tool designed for MetaTrader. It automates the identification of specific trade entries and exits by monitoring price trends, moving averages, and momentum shifts. Rather than just showing simple lines on a chart, this script interprets market "behavior" to provide visual labels (tags), real-time alerts, and performance tracking.
Core Mechanics
1. Trend and Directional Awareness The system utilizes two primary Moving Averages (MAs) to gauge the market's pulse:
- Long-term Baseline: Provides the broader context of the trend.
- Short-term Momentum: Tracks immediate price movements.
Additionally, the script maintains a "Weekly Direction" memory. By checking stored data for the current week, it helps the system understand if the prevailing sentiment is bullish (UP) or bearish (DOWN), which influences how it interprets trade signals.
2. The "Primed" Entry System The logic does not simply enter a trade the moment two lines cross. It uses a two-step "priming" process:
- Step 1 (Priming): The script detects a specific crossover between the short and long moving averages. This "primes" a potential signal, telling the system to look for a follow-through move.
- Step 2 (Execution): Once primed, the system waits for the short-term momentum line to confirm the direction by turning. If the conditions are met, it triggers an entry.
3. Dynamic Lot Sizing The script differentiates between "Full Trades" and partial entries based on how strongly the signal was primed. Depending on the market's readiness at the moment of crossover, it determines whether to execute a 100% position or a 50% reduced position.
4. Multi-Stage Exit Strategy One of the most complex parts of this logic is its triple-layered exit system. Instead of having a single "take profit" point, the script manages three distinct types of exits:
- Slope Change: An immediate exit trigger occurs if the short-term momentum line changes direction (e.g., a sell trade might close if the momentum begins to curve upward).
- Fibonacci Level Exits: The system monitors specific "Fibonacci" thresholds relative to the long-term baseline. These act as tiered safety nets or profit targets:
- Exit 1: A conservative target reached relatively quickly.
- Exit 2: A moderate target further along the trend.
- Exit 3: The final target, which fully closes out the trade and resets the system for the next opportunity.
User Experience Features
- Visual Labeling: The script places text tags directly on the chart (e.g., "BUY," "SELL," "EXIT") so you can see exactly where trades were triggered and at what price.
- Real-time Alerts: It provides audible and visual notifications immediately when an entry or exit occurs.
- Performance Tracking: The script calculates the Profit and Loss (P&L) for each trade in real-time, displaying a running tally of your gains or losses on the chart screen.
- Logging: It can keep a text log of all trades, including the percentage of the position closed and the price at execution.
//+------------------------------------------------------------------+
//| 4Hour Vegas Model - 4 Hour Chart MA lines |
//| Spiggy |
//| |
//| Versiom History: |
//| 02.08.2005 V0.2b - Corrected Exit Calculation to use Fibs |
//| calculated from current SMA, not entry price|
//| 09.08.2005 V0.3 - Corrected Exit P&L Calculation, updated |
//| alerts to show P&L before exit |
//+------------------------------------------------------------------+
#property copyright "Spiggy"
#property link "ian.sparkes@gmail.com"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Aqua
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Green
//---- input parameters
extern bool Alerts=true;
extern bool PrintTags=True;
extern bool LogTrades=False;
extern int MA1=55;
extern int MA2=8;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,1);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,2);
SetIndexBuffer(3,ExtMapBuffer4);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
double SMA55;
double SMA55Prev;
double SMA8;
double SMA8Prev;
string ValueIndex;
string Direction;
bool BuyPrimed;
bool SellPrimed;
bool Bought1;
bool Bought2;
bool Bought3;
bool Sold1;
bool Sold2;
bool Sold3;
double BoughtAt;
double SoldAt;
int TagCount;
string TagName;
int i;
int j;
double RangeLimit;
bool InTrade=False;
int PandL=0;
bool FullTrade;
int LastTagOffsetAbove;
int CumulativeTagOffsetAbove;
int LastTagOffsetBelow;
int CumulativeTagOffsetBelow;
int LotsRemaining;
double SMA8Interpolated;
// Count all bars every time (bad for performance, but good for testing)
if (PrintTags)
{
limit=Bars;
}
else
{
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
}
// Clean up for redraw
ObjectsDeleteAll(0);
TagCount=0;
LastTagOffsetAbove = limit - 10;
LastTagOffsetBelow = limit - 10;
//---- main loop
for(i=limit-1; i>=0; i--)
{
//---- ma_shift set to 0 because SetIndexShift called abowe
SMA55=iMA(NULL,0,MA1,0,MODE_SMA,PRICE_MEDIAN,i);
SMA8 =iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,i);
SMA55Prev=iMA(NULL,0,MA1,1,MODE_SMA,PRICE_MEDIAN,i);
SMA8Prev =iMA(NULL,0,MA2,1,MODE_SMA,PRICE_CLOSE,i);
ExtMapBuffer1[i] = SMA8;
ExtMapBuffer2[i] = SMA55;
ExtMapBuffer3[i] = 0;
ExtMapBuffer4[i] = 0;
Direction = "----";
ValueIndex = TimeToStr(Time[i]-(TimeDayOfWeek(Time[i])*86400),TIME_DATE);
if ( GlobalVariableGet(Symbol() + "-ThisWeekDirection-" + ValueIndex) > 0.0 )
{
Direction = "UP ";
}
if ( GlobalVariableGet(Symbol() + "-ThisWeekDirection-" + ValueIndex) < 0.0 )
{
Direction = "DOWN";
}
if (!InTrade)
{
// ------------- TRADE ENTRY --------------
// Check the MA8/55 Crossovers
if ( Direction == "DOWN" )
{
// Check the SMA8 SM55 Crossover and prime the Sell signal
if (( SMA8 > SMA55 ) && (SMA8Prev < SMA55Prev))
{
SellPrimed = True;
BuyPrimed = False;
}
// Trigger the sell signal
if ( SMA8 < SMA8Prev )
{
if (SellPrimed)
{
// We are opening a primed trade, do full lots
FullTrade = True;
}
else
{
// Otherwise do half lots
FullTrade = False;
}
// Find the height of the tag - this should not cover any bars
RangeLimit = High[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (High[j] > RangeLimit)
{
RangeLimit = High[j];
}
}
SellPrimed = False;
Sold1 = True;
Sold2 = True;
Sold3 = True;
// We have to calculate the value at which we would have triggered the signal
// This is done by finding equality of SMA8Prev and SMA8
SMA8Interpolated = SMA8Prev*8 - (Close[i+0]+Close[i+1]+Close[i+2]+Close[i+3]+Close[i+4]+Close[i+5]+Close[i+6]);
SoldAt = SMA8Interpolated;
InTrade = True;
ExtMapBuffer3[i] = SoldAt;
// Put the tag on the chart
if (PrintTags)
{
if ( (LastTagOffsetAbove - i) < 10 )
{
CumulativeTagOffsetAbove = CumulativeTagOffsetAbove + 15;
}
else
{
CumulativeTagOffsetAbove = 0;
}
LastTagOffsetAbove = i;
TagName = "Entry" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+(70-CumulativeTagOffsetAbove)*Point);
ObjectSetText(TagName, "SELL " + TagCount + " (" + DoubleToStr(SoldAt,4) + ")", 8, "Arial", White);
}
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": SELL 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]));
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": SELL 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]));
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Sell! Quote ("+Bid+":"+Ask+")");
}
}
}
}
if ( Direction == "UP " )
{
// Check the SMA8 SM55 Crossover and prime the Buy signal
if (( SMA8 < SMA55 ) && (SMA8Prev > SMA55Prev))
{
BuyPrimed = True;
SellPrimed = False;
}
// Trigger the Buy signal or unprime the trigger
if ( SMA8 > SMA8Prev )
{
if (BuyPrimed)
{
// We are opening a primed trade, do full lots
FullTrade = True;
}
else
{
// Otherwise do half lots
FullTrade = False;
}
// Find the height of the tag - this should not cover any bars
RangeLimit = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
BuyPrimed = False;
Bought1 = True;
Bought2 = True;
Bought3 = True;
// We have to calculate the value at which we would have triggered the signal
// This is done by finding equality of SMA8Prev and SMA8
SMA8Interpolated = SMA8Prev*8 - (Close[i+0]+Close[i+1]+Close[i+2]+Close[i+3]+Close[i+4]+Close[i+5]+Close[i+6]);
BoughtAt = SMA8Interpolated;
InTrade = True;
ExtMapBuffer4[i] = BoughtAt;
if (PrintTags)
{
if ( (LastTagOffsetBelow - i) < 10 )
{
CumulativeTagOffsetBelow = CumulativeTagOffsetBelow + 15;
}
else
{
CumulativeTagOffsetBelow = 0;
}
LastTagOffsetBelow = i;
TagName = "Entry" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit - (70 - CumulativeTagOffsetBelow)*Point);
ObjectSetText(TagName, "BUY " + TagCount + " (" + DoubleToStr(BoughtAt,4) + ")", 8, "Arial", White);
}
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": BUY 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]));
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": BUY 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]));
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Buy! Quote ("+Bid+":"+Ask+")");
}
}
}
}
}
else
{
// ------------- TRADE EXIT --------------
if (Sold1 || Sold2 || Sold3)
{
// Trade Exit on SMA slope change
if ( SMA8 > SMA8Prev)
{
// Find how many lots there are open
LotsRemaining = 0;
if (Sold1)
{
LotsRemaining++;
}
if (Sold2)
{
LotsRemaining++;
}
if (Sold3)
{
LotsRemaining++;
}
// Find the height of the tag - this should not cover any bars
RangeLimit = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
if (PrintTags)
{
// Put the tag on the chart
ExtMapBuffer4[i] = Close[i];
if ( (LastTagOffsetBelow - i) < 10 )
{
CumulativeTagOffsetBelow = CumulativeTagOffsetBelow + 15;
}
else
{
CumulativeTagOffsetBelow = 0;
}
LastTagOffsetBelow = i;
TagName = "Exit" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-(70-CumulativeTagOffsetBelow)*Point );
ObjectSetText(TagName, "EXIT " + TagCount + " (" + LotsRemaining + " Lots for " + DoubleToStr((SoldAt-Close[i])/Point,0) + ")", 8, "Arial", White);
}
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": EXIT 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": EXIT 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Shorts! PandL ("+DoubleToStr((SoldAt-Close[i])/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((SoldAt-Close[i])/Point)*LotsRemaining;
}
else
{
PandL = PandL + ((((SoldAt-Close[i])/Point)*LotsRemaining)/2);
}
Sold1 = False;
Sold2 = False;
Sold3 = False;
InTrade = False;
TagCount++;
}
// Exit on Fib 1
if (Sold1)
{
if( Low[i] < (SMA55 - 144*Point))
{
// Find the height of the tag - this should not cover any bars
RangeLimit = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
ExtMapBuffer4[i] = Close[i];
if (PrintTags)
{
if ( (LastTagOffsetBelow - i) < 10 )
{
CumulativeTagOffsetBelow = CumulativeTagOffsetBelow + 15;
}
else
{
CumulativeTagOffsetBelow = 0;
}
LastTagOffsetBelow = i;
TagName = "ExitFib1" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-(70-CumulativeTagOffsetBelow)*Point);
ObjectSetText(TagName, "EXIT1 " + TagCount + " (Fib1 " + DoubleToStr((SoldAt-Close[i])/Point,0) + ")", 8, "Arial", White);
}
Sold1 = False;
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB1 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB1 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Short Fib1! PandL ("+DoubleToStr((SoldAt-Close[i])/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((SoldAt-Close[i])/Point);
}
else
{
PandL = PandL + ((SoldAt-Close[i])/Point)/2;
}
}
}
// Exit on Fib 2
if (Sold2)
{
if ( Low[i] < (SMA55 - 233*Point))
{
// Find the height of the tag - this should not cover any bars
RangeLimit = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
ExtMapBuffer4[i] = Close[i];
if (PrintTags)
{
if ( (LastTagOffsetBelow - i) < 10 )
{
CumulativeTagOffsetBelow = CumulativeTagOffsetBelow + 15;
}
else
{
CumulativeTagOffsetBelow = 0;
}
LastTagOffsetBelow = i;
TagName = "ExitFib2" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-(70-CumulativeTagOffsetBelow)*Point);
ObjectSetText(TagName, "EXIT2 " + TagCount + " (Fib2 " + DoubleToStr((SoldAt-Close[i])/Point,0) + ")", 8, "Arial", White);
}
Sold2 = False;
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB2 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB2 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Short Fib2! PandL ("+DoubleToStr((SoldAt-Close[i])/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((SoldAt-Close[i])/Point);
}
else
{
PandL = PandL + ((SoldAt-Close[i])/Point)/2;
}
}
}
// Exit on Fib 3
if (Sold3)
{
if ( Low[i] < (SMA55 - 377*Point))
{
// Find the height of the tag - this should not cover any bars
RangeLimit = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
ExtMapBuffer4[i] = Close[i];
if (PrintTags)
{
if ( (LastTagOffsetBelow - i) < 10 )
{
CumulativeTagOffsetBelow = CumulativeTagOffsetBelow + 15;
}
else
{
CumulativeTagOffsetBelow = 0;
}
LastTagOffsetBelow = i;
TagName = "ExitFib3" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-(70-CumulativeTagOffsetBelow)*Point);
ObjectSetText(TagName, "EXIT3 " + TagCount + " (Fib3 " + DoubleToStr((SoldAt-Close[i])/Point,0) + ")", 8, "Arial", White);
}
// We are now out of the trade
Sold3 = False;
InTrade=False;
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Short Fib3! PandL ("+DoubleToStr((SoldAt-Close[i])/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((SoldAt-Close[i])/Point);
}
else
{
PandL = PandL + ((SoldAt-Close[i])/Point)/2;
}
}
}
}
if (Bought1 || Bought2 || Bought3)
{
// Trade Exit on SMA slope change
if ( SMA8 < SMA8Prev)
{
// Find how many lots there are open
LotsRemaining = 0;
if (Bought1)
{
LotsRemaining++;
}
if (Bought2)
{
LotsRemaining++;
}
if (Bought3)
{
LotsRemaining++;
}
// Find the height of the tag - this should not cover any bars
RangeLimit = High[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (High[j] > RangeLimit)
{
RangeLimit = High[j];
}
}
// Put the tag on the chart
ExtMapBuffer3[i] = Close[i];
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Longs! PandL ("+DoubleToStr((Close[i]-BoughtAt)/Point,0)+")");
}
}
if (PrintTags)
{
if ( (LastTagOffsetAbove - i) < 10 )
{
CumulativeTagOffsetAbove = CumulativeTagOffsetAbove + 15;
}
else
{
CumulativeTagOffsetAbove = 0;
}
LastTagOffsetAbove = i;
TagName = "Exit" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+(70-CumulativeTagOffsetAbove)*Point );
ObjectSetText(TagName, "EXIT " + TagCount + " (" + LotsRemaining + " Lots for " + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")", 8, "Arial", White);
}
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": EXIT 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": EXIT 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
}
if ( FullTrade )
{
PandL = PandL + ((Close[i]-BoughtAt)/Point)*LotsRemaining;
}
else
{
PandL = PandL + (((Close[i]-BoughtAt)/Point)*LotsRemaining)/2;
}
Bought1 = False;
Bought2 = False;
Bought3 = False;
InTrade = False;
TagCount++;
}
// Exit on Fib 1
if (Bought1)
{
if ( High[i] > (SMA55 + 144*Point))
{
// Find the height of the tag - this should not cover any bars
RangeLimit = High[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (High[j] > RangeLimit)
{
RangeLimit = High[j];
}
}
ExtMapBuffer3[i] = Close[i];
if (PrintTags)
{
if ( (LastTagOffsetAbove - i) < 10 )
{
CumulativeTagOffsetAbove = CumulativeTagOffsetAbove + 15;
}
else
{
CumulativeTagOffsetAbove = 0;
}
LastTagOffsetAbove = i;
TagName = "ExitFib1" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+(70-CumulativeTagOffsetAbove)*Point );
ObjectSetText(TagName, "EXIT1 " + TagCount + " (Fib1 " + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")", 8, "Arial", White);
}
Bought1 = False;
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Long Fib1! PandL ("+DoubleToStr((Close[i]-BoughtAt)/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((BoughtAt-Close[i])/Point);
}
else
{
PandL = PandL + ((BoughtAt-Close[i])/Point)/2;
}
}
}
// Exit on Fib 2
if (Bought2)
{
if ( High[i] > (SMA55 + 233*Point))
{
// Find the height of the tag - this should not cover any bars
RangeLimit = High[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (High[j] > RangeLimit)
{
RangeLimit = High[j];
}
}
ExtMapBuffer3[i] = Close[i];
if (PrintTags)
{
if ( (LastTagOffsetAbove - i) < 10 )
{
CumulativeTagOffsetAbove = CumulativeTagOffsetAbove + 15;
}
else
{
CumulativeTagOffsetAbove = 0;
}
LastTagOffsetAbove = i;
TagName = "ExitFib2" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+(70-CumulativeTagOffsetAbove)*Point );
ObjectSetText(TagName, "EXIT2 " + TagCount + " (Fib2 " + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")", 8, "Arial", White);
}
Bought2 = False;
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Long Fib2! PandL ("+DoubleToStr((Close[i]-BoughtAt)/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((BoughtAt-Close[i])/Point);
}
else
{
PandL = PandL + ((BoughtAt-Close[i])/Point)/2;
}
}
}
// Exit on Fib 3
if (Bought3)
{
if ( High[i] > (SMA55 + 377*Point))
{
// Find the height of the tag - this should not cover any bars
RangeLimit = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
ExtMapBuffer3[i] = Close[i];
if (PrintTags)
{
if ( (LastTagOffsetAbove - i) < 10 )
{
CumulativeTagOffsetAbove = CumulativeTagOffsetAbove + 15;
}
else
{
CumulativeTagOffsetAbove = 0;
}
LastTagOffsetAbove = i;
TagName = "ExitFib3" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+(70-CumulativeTagOffsetAbove)*Point );
ObjectSetText(TagName, "EXIT3 " + TagCount + " (Fib3 " + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")", 8, "Arial", White);
}
// We are now out of the trade
Bought3 = False;
InTrade=False;
if ( LogTrades )
{
if ( FullTrade )
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 100% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
else
{
Print("Trade " + TagCount + " : " + Symbol() + ": FIB3 50% " + DoubleToStr(Close[i],4) + " at " + TimeToStr(Time[i]) + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")");
}
}
if (Alerts)
{
if ( i == 0 )
{
Alert("["+TimeToStr(CurTime())+"] " + Symbol() + ": Exit Long Fib3! PandL ("+DoubleToStr((Close[i]-BoughtAt)/Point,0)+")");
}
}
if ( FullTrade )
{
PandL = PandL + ((BoughtAt-Close[i])/Point);
}
else
{
PandL = PandL + ((BoughtAt-Close[i])/Point)/2;
}
}
}
}
}
}
Comment("Direction for W/B " + ValueIndex + ": " + Direction + ":(" + GlobalVariableGet(Symbol() + "-ThisWeekDirection-" + ValueIndex) + ")\nP&L: " + PandL);
return(0);
}
//+------------------------------------------------------------------+
Comments