//
// "00-Arbitrage.mq4" -- draw arbitrage line
//
//    Ver. 1.00  2008/9/26(Fri)
// 
#property  copyright "00"
#property  link      "http://www.mql4.com/"

//---- indicator settings
#property  indicator_separate_window

#property  indicator_buffers  1

#property  indicator_color1  Lime

#property  indicator_width1  1

//---- indicator parameters
extern string sym0 = "EURJPY";
extern double pos0 = -1.0;
extern string sym1 = "EURUSD";
extern double pos1 = 1.0;
extern string sym2 = "USDJPY";
extern double pos2 = 1.0;

//---- indicator buffers
double Buffer0[];

//----------------------------------------------------------------------
void init()
{
    SetIndexStyle(0, DRAW_LINE);
    
    SetIndexBuffer(0, Buffer0);
    
    string sName = (sym0 + "/" + sym1);
    if (sym2 != "") {
	sName = sName + "/" + sym2;
    }
    
    IndicatorShortName(sName);
    
    SetIndexLabel(0, "100%");
    
    SetLevelValue(0, 100);
}

//----------------------------------------------------------------------
void start()
{
    int counted_bars = IndicatorCounted();
    
    if (counted_bars > 0) {
	counted_bars--;
    }
    
    int limit = Bars - counted_bars;
    
    int nPair = 3;
    string sym[3];
    double pos[3];
    
    sym[0] = sym0;
    sym[1] = sym1;
    sym[2] = sym2;
    
    pos[0] = pos0;
    pos[1] = pos1;
    pos[2] = pos2;
    
    for (int i = 0; i < limit; i++) {
	datetime t = iTime(sym[0], 0, i);
	double m = 100.0;
	for (int iPair = 0; iPair < nPair; iPair++) {
	    int iShift = iBarShift(sym[iPair], 0, t);
	    if (iShift < 0) {
		m = 100.0;
		break;
	    }
	    double vClose = iClose(sym[iPair], 0, iShift);
	    if (pos[iPair] > 0) {
		m = pos[iPair] * m * vClose;
	    } else {
		m = -pos[iPair] * m / vClose;
	    }
	}
	Buffer0[i] = m;
    }
}
