Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
4hVegasMetaTrader4hChart
//+------------------------------------------------------------------+
//| 4Hour Vegas Model - 4 Hour Chart MA lines |
//| Spiggy |
//| |
//+------------------------------------------------------------------+
#property copyright "Spiggy"
#property link ""
#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=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;
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;
// Count all bars every time (bad for performance, but good for testing)
limit=Bars;
// Clean up for redraw
ObjectsDeleteAll(0);
TagCount=0;
//---- 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" )
{
// Remove any pending prime for a Buy
BuyPrimed = False;
// Check the SMA8 SM55 Crossover and prime the Sell signal
if (( SMA8 > SMA55 ) && (SMA8Prev < SMA55Prev))
{
SellPrimed = True;
}
// 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];
}
}
ExtMapBuffer3[i] = RangeLimit + 25*Point;
SellPrimed = False;
Sold1 = True;
Sold2 = True;
Sold3 = True;
SoldAt = Close[i];
InTrade = True;
// Put the tag on the chart
if (PrintTags)
{
TagName = "Entry" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+70*Point);
ObjectSetText(TagName, "SELL " + TagCount + " (" + DoubleToStr(Close[i],4) + ")", 8, "Arial", White);
}
}
}
if ( Direction == "UP " )
{
// Remove any pending prime for a SELL
SellPrimed = False;
// Check the SMA8 SM55 Crossover and prime the Buy signal
if (( SMA8 < SMA55 ) && (SMA8Prev > SMA55Prev))
{
BuyPrimed = True;
}
// Trigger the Buy signal or unprime the trigger
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 = Low[i];
for ( j = i - 7 ; j < i + 7 ; j++)
{
if (Low[j] < RangeLimit)
{
RangeLimit = Low[j];
}
}
ExtMapBuffer4[i] = RangeLimit - 25*Point;
BuyPrimed = False;
Bought1 = True;
Bought2 = True;
Bought3 = True;
BoughtAt = Close[i];
InTrade = True;
if (PrintTags)
{
// Put the tag on the chart
TagName = "Entry" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit - 70*Point);
ObjectSetText(TagName, "BUY " + TagCount + " (" + DoubleToStr(Close[i],4) + ")", 8, "Arial", White);
}
}
}
}
else
{
// ------------- TRADE EXIT --------------
if (Sold1 || Sold2 || Sold3)
{
// Trade Exit on SMA slope change
if ( SMA8 > SMA8Prev)
{
// 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] = RangeLimit - 25*Point;
TagName = "Exit" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-70*Point);
ObjectSetText(TagName, "EXIT " + TagCount + " (" + DoubleToStr((SoldAt-Close[i])/Point,0) + ")", 8, "Arial", White);
}
if ( FullTrade )
{
PandL = PandL + ((SoldAt-Close[i])/Point)*3;
}
else
{
PandL = PandL + ((((SoldAt-Close[i])/Point)*3)/2);
}
Sold1 = False;
Sold2 = False;
Sold3 = False;
InTrade = False;
TagCount++;
}
// Exit on Fib 1
if (Sold1)
{
if( Low[i] < (SoldAt - 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] = RangeLimit - 25*Point;
if (PrintTags)
{
TagName = "ExitFib1" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-70*Point);
ObjectSetText(TagName, "EXIT1 " + TagCount + " (Fib1 144)", 8, "Arial", White);
}
Sold1 = False;
if ( FullTrade )
{
PandL = PandL + 144;
}
else
{
PandL = PandL + (144)/2;
}
}
}
// Exit on Fib 2
if (Sold1)
{
if ( Low[i] < (SoldAt - 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] = RangeLimit - 25*Point;
if (PrintTags)
{
TagName = "ExitFib2" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-70*Point);
ObjectSetText(TagName, "EXIT2 " + TagCount + " (Fib2 233)", 8, "Arial", White);
}
Sold2 = False;
if ( FullTrade )
{
PandL = PandL + 233;
}
else
{
PandL = PandL + (233)/2;
}
}
}
// Exit on Fib 3
if (Sold1)
{
if ( Low[i] < (SoldAt - 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] = RangeLimit - 25*Point;
if (PrintTags)
{
TagName = "ExitFib3" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit-70*Point);
ObjectSetText(TagName, "EXIT3 " + TagCount + " (Fib3 377)", 8, "Arial", White);
}
// We are now out of the trade
Sold3 = False;
InTrade=False;
if ( FullTrade )
{
PandL = PandL + 377;
}
else
{
PandL = PandL + (377)/2;
}
}
}
}
if (Bought1 || Bought2 || Bought3)
{
// Trade Exit on SMA slope change
if ( SMA8 < SMA8Prev)
{
// 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] = RangeLimit + 25*Point;
if (PrintTags)
{
TagName = "Exit" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+70*Point);
ObjectSetText(TagName, "EXIT " + TagCount + " (" + DoubleToStr((Close[i]-BoughtAt)/Point,0) + ")", 8, "Arial", White);
}
if ( FullTrade )
{
PandL = PandL + ((Close[i]-BoughtAt)/Point)*3;
}
else
{
PandL = PandL + (((Close[i]-BoughtAt)/Point)*3)/2;
}
Bought1 = False;
Bought2 = False;
Bought3 = False;
InTrade = False;
TagCount++;
}
// Exit on Fib 1
if (Bought1)
{
if ( High[i] > (BoughtAt + 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] = RangeLimit + 25*Point;
if (PrintTags)
{
TagName = "ExitFib1" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+70*Point);
ObjectSetText(TagName, "EXIT1 " + TagCount + " (Fib1 144)", 8, "Arial", White);
}
Bought1 = False;
if ( FullTrade )
{
PandL = PandL + 144;
}
else
{
PandL = PandL + (144)/2;
}
}
}
// Exit on Fib 2
if (Bought2)
{
if ( High[i] > (BoughtAt + 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] = RangeLimit + 25*Point;
if (PrintTags)
{
TagName = "ExitFib2" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+70*Point);
ObjectSetText(TagName, "EXIT2 " + TagCount + " (Fib2 233)", 8, "Arial", White);
}
Bought2 = False;
if ( FullTrade )
{
PandL = PandL + 233;
}
else
{
PandL = PandL + (233)/2;
}
}
}
// Exit on Fib 3
if (Bought3)
{
if ( High[i] > (BoughtAt + 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] = RangeLimit + 25*Point;
if (PrintTags)
{
TagName = "ExitFib3" + TagCount;
ObjectCreate(TagName, OBJ_TEXT, 0, Time[i], RangeLimit+70*Point);
ObjectSetText(TagName, "EXIT3 " + TagCount + " (Fib3 377)", 8, "Arial", White);
}
// We are now out of the trade
Bought3 = False;
InTrade=False;
if ( FullTrade )
{
PandL = PandL + 377;
}
else
{
PandL = PandL + (377)/2;
}
}
}
}
}
}
Comment(Symbol() + "-ThisWeekDirection-" + ValueIndex + "\n" + Direction + ":(" + GlobalVariableGet(Symbol() + "-ThisWeekDirection-" + ValueIndex) + ")\nP&L: " + PandL);
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
---