Price Data Components
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
NeutralHedge osc_v3[1].1
//+------------------------------------------------------------------+
//| NeutralHedge osc_v3.1.mq4 |
//| © 2008.07.02 SwingMan |
//| |
//+------------------------------------------------------------------+
#property copyright "© 2008.07.02 SwingMan"
#property link ""
// source code:
//+------------------------------------------------------------------+
//| OverLay Chart.mq4 Ver.1.10 |
//| Copyright© 2006-2007 S.B.T. |
//| http://sufx.core.t3-ism.net/ |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
//| This script is free to use/distribute/modify and re-distribute. |
//| (Limited to noncommercial use.) |
//+------------------------------------------------------------------+
// changes:
//+------------------------------------------------------------------+
// - fewhills / 2008.07.02
// I have modified the indicator with 2 extra parameters: starting time and TF period.
// The time parameter is the usual MT4 method: yyyy.mm.dd hh:mm
// The TF period is default at 1 Hr TF = 60
//+------------------------------------------------------------------+
// - SwingMan / 2008.07.02
// v1 - draw histogram of ratios
// v2 - write trading results
// v3 - calculation of threshold with StdDev
// - take automatic more as40 bars
// v3.1 - mrkam will have moreBars (500...)
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 MediumSeaGreen
#property indicator_color2 Tomato
#property indicator_level1 0
#property indicator_levelcolor Gray
#property indicator_levelstyle STYLE_SOLID
//---- inputs --------------------------------------------------------
extern string SubSymbol = "EURUSD";
extern int moreBars = 0;
extern string StartingTimeCorr = "2008.07.01 00:00";
extern int TFperiod = 60;
extern double threshold = 0;
extern double Factor_Threshold = 1.5;
extern string EntryTime = "";
extern string _____Order____ = "BUY=0, SELL=1";
extern int Order_Main = -1;
extern color threshold_color = Magenta;
extern bool Mirroring = true;
//--------------------------------------------------------------------
//---- constants
string sWinName1 = "NeutralHedge osc_v3.1", sWinName;
string sObject = "NH31_";
int fontSize_Text = 8;
int iLabelCorner = 1;
int xx1 = 80;
int xx2 = 2;
int xx3 = 60;
int xx4 = 30;
int yy0 = 3, yy;
int yStep = 10;
//Indicator Buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//-- variables
double dPoint;
int iWindow;
int firstBar;
int _BarsCount, _LastBar;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
dPoint = MarketInfo(Symbol(), MODE_POINT);
sWinName = sWinName1 + " (" + Symbol() + "-" + SubSymbol + ")";
IndicatorShortName(sWinName);
sObject = sObject + moreBars + "_";
SetIndexBuffer( 0, ExtMapBuffer1 );
SetIndexBuffer( 1, ExtMapBuffer2 );
SetIndexStyle( 0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexStyle( 1, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexEmptyValue( 0, 0.0 );
SetIndexEmptyValue( 1, 0.0 );
SetIndexLabel( 0, "BUY -" +Symbol() );
SetIndexLabel( 1, "SELL-" +Symbol() );
IndicatorDigits(Digits);
DeleteOwnObjects();
iWindow = WindowFind(sWinName);
Draw_ThresholdLines();
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
DeleteOwnObjects();
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double _CurRangeHigh, _CurRangeLow, _CurRangeCenter, _CurClose;
double _SubRangeHigh, _SubRangeLow, _SubRangeCenter;
double _SubPoint, _SubDigit;
double _SubOpen, _SubHigh, _SubLow, _SubClose;
double _PipsRatio;
double _GridPips, _GridPrice;
int _i;
firstBar = iBarShift(NULL,TFperiod,StrToTime(StartingTimeCorr),true);
if (firstBar <0 )
{
Alert("StartingTimeCorr seems to be wrong."); return (0);
}
//-- Initialize Buffers
RefreshRates();
ArrayInitialize( ExtMapBuffer1, 0.0 );
ArrayInitialize( ExtMapBuffer2, 0.0 );
/*//-- Calculate Visible Bars
_BarsCount = WindowBarsPerChart() + 1;
int _FirstBar = firstBar; // WindowFirstVisibleBar();
_LastBar = _FirstBar - _BarsCount + 1;
if ( _LastBar < 0 ) {
_LastBar = 0;
_BarsCount = _FirstBar + 1;
}*/
//-- Calculate Visible Bars // // v3.1 - mrkam will have 500 bars...
_BarsCount = WindowBarsPerChart() + moreBars +1;
int _FirstBar = firstBar; // WindowFirstVisibleBar();
int _LastBar = _FirstBar - _BarsCount + moreBars +1 ;
if ( _LastBar < 0 ) {
_LastBar = 0;
_BarsCount = _FirstBar + moreBars +1 ;
}
//-- Calculate Chart Ratio
_CurRangeHigh = High[Highest(Symbol(), 0, MODE_HIGH, _BarsCount, _LastBar)];
_CurRangeLow = Low[Lowest(Symbol(), 0, MODE_LOW, _BarsCount, _LastBar)];
_CurRangeCenter = ( _CurRangeHigh + _CurRangeLow ) * 0.5;
if ( Mirroring ) {
_SubRangeHigh = iLow( SubSymbol, 0, Lowest( SubSymbol, 0, MODE_LOW, _BarsCount, _LastBar ) );
_SubRangeLow = iHigh( SubSymbol, 0, Highest( SubSymbol, 0, MODE_HIGH, _BarsCount, _LastBar ) );
} else {
_SubRangeHigh = iHigh( SubSymbol, 0, Highest( SubSymbol, 0, MODE_HIGH, _BarsCount, _LastBar ) );
_SubRangeLow = iLow( SubSymbol, 0, Lowest( SubSymbol, 0, MODE_LOW, _BarsCount, _LastBar ) );
}
_SubRangeCenter = ( _SubRangeHigh + _SubRangeLow ) * 0.5;
_SubPoint = MarketInfo( SubSymbol, MODE_POINT );
_SubDigit = MarketInfo( SubSymbol, MODE_DIGITS );
_PipsRatio = ( _CurRangeHigh - _CurRangeLow ) / ( _SubRangeHigh - _SubRangeLow );
//-- Draw ratio
for ( _i = _LastBar; _i < _LastBar + _BarsCount; _i ++ ) {
_SubClose = iClose( SubSymbol, 0, _i ) - _SubRangeCenter;
double Close_Sub = _CurRangeCenter + _SubClose * _PipsRatio;
double Close_Main = iClose(Symbol(), 0, _i);
double range = (Close_Main - Close_Sub) / dPoint;
range = NormalizeDouble(range,0);
if (range > 0)
ExtMapBuffer2[_i] = range;
else
ExtMapBuffer1[_i] = range;
}
if (threshold == 0) {
Get_ThresholdValue();
Draw_ThresholdLines();
}
//-- write win/loss
Write_WinLossTrading();
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// Get Threshold Value
//+------------------------------------------------------------------+
void Get_ThresholdValue()
{
double RangeCloses[200];
ArraySetAsSeries(RangeCloses,true);
//int Period_Statistic = firstBar;
int Period_Statistic = _BarsCount; // = _FirstBar + 1;
int i = -1;
for ( int _i = _LastBar; _i < _LastBar + _BarsCount; _i ++ )
{
i++;
if (ExtMapBuffer1[i] > 0 && ExtMapBuffer1[i] != EMPTY_VALUE)
RangeCloses[i] = ExtMapBuffer1[i];
else
if (ExtMapBuffer2[i] > 0 && ExtMapBuffer2[i] != EMPTY_VALUE)
RangeCloses[i] = ExtMapBuffer2[i];
}
//-- take only the minim differences
double MedRanges = iMAOnArray(RangeCloses,0,Period_Statistic,1,MODE_SMA,0);
double DevRanges = iStdDevOnArray(RangeCloses,0,Period_Statistic,1,MODE_SMA,0);
threshold = MedRanges + Factor_Threshold * DevRanges;
}
//+------------------------------------------------------------------+
// Draw Threshold Lines
//+------------------------------------------------------------------+
void Write_WinLossTrading()
{
double WinLoss;
string text1, text2, sOrder, sEmpty;
//EntryTime = "2008.07.02 20:00";
if (EntryTime == "") return;
yy = yy0;
int entryBar = iBarShift(Symbol(),TFperiod,StrToTime(EntryTime),true);
double Entry_Main = iClose(Symbol(), 0, entryBar);
double Entry_Sub = iClose(SubSymbol, 0, entryBar);
double Price_Main = iClose(Symbol(), 0, 0);
double Price_Sub = iClose(SubSymbol, 0, 0);
WinLoss = 0;
if (Order_Main == OP_BUY) {
WinLoss = (Price_Main - Entry_Main) + (Entry_Sub - Price_Sub);
sOrder = Symbol() + "-BUY:";
} else
if (Order_Main == OP_SELL) {
WinLoss = -(Price_Main - Entry_Main) - (Entry_Sub - Price_Sub);
sOrder = Symbol() + "-SELL:";
} else {
Entry_Main = 0;
Entry_Sub = 0;
sOrder = "Order_Main:";
sEmpty = "EMPTY";
}
WinLoss = WinLoss / dPoint;
//......................................................
text1 = "Entry time:";
text2 = EntryTime;
Write_Label(text1, text2, xx1+10, xx2, yy); yy = yy + yStep;
//......................................................
text1 = sOrder;
if (sOrder == "Order_Main:") {
text2 = sEmpty;
int xx5 = xx4;
} else {
text2 = DoubleToStr(Entry_Main,Digits) + " / " + DoubleToStr(Entry_Sub,Digits);
xx5 = xx2;
}
Write_Label(text1, text2, xx1, xx5, yy); yy = yy + yStep;
//......................................................
text1 = "Current price:";
text2 = DoubleToStr(Price_Main,Digits) + " / " + DoubleToStr(Price_Sub,Digits);
Write_Label(text1, text2, xx1, xx2, yy); yy = yy + yStep;
//......................................................
text1 = "WinLoss:";
text2 = DoubleToStr(WinLoss,0);
Write_Label(text1, text2, xx1, xx3, yy); yy = yy + yStep;
}
void Write_Label(string text1, string text2, int xx1, int xx2, int yy)
{
color dColor = Orange;
string name1 = sObject + "1" + yy;
string name2 = sObject + "2" + yy;
SetLabelObject(name1, text1, dColor, xx1, yy);
SetLabelObject(name2, text2, dColor, xx2, yy);
return;
}
void SetLabelObject(string sName, string sText, color dColor, int xx, int yy)
{
ObjectCreate(sName, OBJ_LABEL, iWindow, 0, 0);
ObjectSetText(sName,sText,fontSize_Text, "Arial Bold", dColor);
ObjectSet(sName, OBJPROP_CORNER, iLabelCorner);
ObjectSet(sName, OBJPROP_XDISTANCE, xx);
ObjectSet(sName, OBJPROP_YDISTANCE, yy);
return;
}
void DeleteOwnObjects()
{
int i=0;
while (i <= ObjectsTotal()) {
if (StringFind(ObjectName(i), sObject) >= 0) ObjectDelete(ObjectName(i));
else
i++;
}
return;
}
//+------------------------------------------------------------------+
// Draw Threshold Lines
//+------------------------------------------------------------------+
void Draw_ThresholdLines()
{
iWindow = WindowFind(sWinName);
Draw_Line("threshLineUp"+sObject, threshold, threshold_color);
Draw_Line("threshLineDn"+sObject, -threshold, threshold_color);
return;
}
void Draw_Line(string sName, double value, color iColor)
{
ObjectCreate(sName, OBJ_HLINE, iWindow, 0, value);
ObjectSet(sName, OBJPROP_COLOR, iColor);
ObjectSet(sName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(sName, OBJPROP_TIME1, 0);
ObjectSet(sName, OBJPROP_PRICE1, value);
return;
}
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
---