The above plots have been produced from within metatrader (using R) with the following MQL4 code:
Inserted Code
[color=#717ab3]/**[/color] [color=#717ab3]* this is meant to be run as an EA (not an indicator!).[/color] [color=#717ab3]*[/color] [color=#717ab3]* It needs R and the mt4R.dll (version 1.3) to work,[/color] [color=#717ab3]* please do a google search for mt4R.dll and download[/color] [color=#717ab3]* and install R and mt4R.dll (everything is GPL).[/color] [color=#717ab3]*/[/color] [color=#3f5fbf]#include <mt4R.mqh>[/color] [color=#3f5fbf]#define RPATH[/color] [color=#7f9fbf]"C:/Programme/R/R-2.11.1/bin/Rterm.exe --no-save"[/color] [color=#3f5fbf]#define RDEBUG 1[/color] [color=#2f9956]// debug level (0: none, 1: warnings, 2:all)[/color] string symb[color=#000000][] = {[/color][color=#0000ff]"AUDUSD"[/color][color=#000000],[/color] [color=#0000ff]"EURUSD"[/color][color=#000000],[/color] [color=#0000ff]"GBPUSD"[/color][color=#000000],[/color] [color=#0000ff]"NZDUSD"[/color][color=#000000],[/color] [color=#0000ff]"USDCAD"[/color][color=#000000],[/color] [color=#0000ff]"USDCHF"[/color][color=#000000],[/color] [color=#0000ff]"USDJPY"[/color][color=#000000]};[/color] [color=#7f0055][b]extern[/b][/color] [color=#7f0055][b]int[/b][/color] back [color=#000000]=[/color] [color=#000000]500[/color][color=#000000];[/color] [color=#2f9956]// how many bars back[/color] [color=#7f0055][b]extern[/b][/color] [color=#7f0055][b]int[/b][/color] plot_alpha [color=#000000]=[/color] [color=#000000]50[/color][color=#000000];[/color] [color=#2f9956]// transparency of plotted points [0..255], 0=transparent[/color] [color=#7f0055][b]int[/b][/color] last_bar_time[color=#000000];[/color] [color=#2f9956]// needed for detecting a new bar[/color] [color=#7f0055][b]int[/b][/color] last_back_line_time[color=#000000];[/color] [color=#2f9956]// optional vertical line moved by user to override the back value[/color] [color=#2f9956]// start and initialize the R engine[/color] [color=#7f0055][b]int[/b][/color] [color=#000000]init[/color][color=#000000](){[/color] [color=#7f0055][b]if[/b][/color] [color=#000000]([/color][color=#000000]UninitializeReason[/color][color=#000000]() !=[/color] REASON_CHARTCHANGE[color=#000000]){[/color] [color=#000000]StartR[/color][color=#000000]([/color]RPATH[color=#000000],[/color] RDEBUG[color=#000000]);[/color] [color=#000000]Rx[/color][color=#000000]([/color][color=#0000ff]"options(device='windows')"[/color][color=#000000]);[/color] [color=#000000]}[/color] last_bar_time [color=#000000]=[/color] [color=#000000]0[/color][color=#000000];[/color] [color=#000000]}[/color] [color=#2f9956]// stop the R engine[/color] [color=#7f0055][b]int[/b][/color] [color=#000000]deinit[/color][color=#000000](){[/color] [color=#7f0055][b]if[/b][/color] [color=#000000]([/color][color=#000000]UninitializeReason[/color][color=#000000]() !=[/color] REASON_CHARTCHANGE[color=#000000]){[/color] [color=#000000]StopR[/color][color=#000000]();[/color] [color=#000000]}[/color] [color=#000000]}[/color] [color=#2f9956]// a new tick has arrived[/color] [color=#7f0055][b]int[/b][/color] [color=#000000]start[/color][color=#000000](){[/color] [color=#7f0055][b]int[/b][/color] nrow[color=#000000],[/color] ncol[color=#000000];[/color] [color=#7f0055][b]int[/b][/color] i[color=#000000],[/color] j[color=#000000],[/color] ishift[color=#000000];[/color] [color=#7f0055][b]int[/b][/color] back_line_time[color=#000000];[/color] [color=#7f0055][b]double[/b][/color] matrix[color=#000000][];[/color] [color=#2f9956]// this actually represents the flattened data of a 2d array[/color] [color=#2f9956]// optional: the user might have drawn a vertical line named "back"[/color] [color=#2f9956]// this will override the value of back, otherwise this code does nothing[/color] back_line_time [color=#000000]=[/color] [color=#000000]ObjectGet[/color][color=#000000]([/color][color=#0000ff]"back"[/color][color=#000000],[/color] OBJPROP_TIME1[color=#000000]);[/color] [color=#7f0055][b]if[/b][/color] [color=#000000]([/color]back_line_time [color=#000000]!=[/color] [color=#000000]0[/color][color=#000000]){[/color] [color=#7f0055][b]if[/b][/color] [color=#000000]([/color]back_line_time [color=#000000]!=[/color] last_back_line_time[color=#000000]){[/color] last_back_line_time [color=#000000]=[/color] back_line_time[color=#000000];[/color] last_bar_time [color=#000000]=[/color] [color=#000000]0[/color][color=#000000];[/color] [color=#2f9956]// force a new bar when the user moved the line[/color] [color=#000000]}[/color] back [color=#000000]=[/color] [color=#000000]iBarShift[/color][color=#000000]([/color]NULL[color=#000000],[/color] [color=#000000]0[/color][color=#000000],[/color] back_line_time[color=#000000]);[/color] [color=#000000]}[/color] [color=#2f9956]// not a new bar? --> exit[/color] [color=#7f0055][b]if[/b][/color] [color=#000000]([/color]last_bar_time [color=#000000]==[/color] Time[color=#000000][[/color][color=#000000]0[/color][color=#000000]])[/color] [color=#7f0055][b]return[/b][/color][color=#000000]([/color][color=#000000]0[/color][color=#000000]);[/color] last_bar_time [color=#000000]=[/color] Time[color=#000000][[/color][color=#000000]0[/color][color=#000000]];[/color] [color=#2f9956]// we have reached this point because there was either a new[/color] [color=#2f9956]// bar or the user moved the back line and we make a new plot now[/color] [color=#2f9956]// create the matrix of past prices,[/color] [color=#2f9956]// each row is a bar, each column is a currency pair. [/color] ncol [color=#000000]=[/color] [color=#000000]ArraySize[/color][color=#000000]([/color]symb[color=#000000]);[/color] nrow [color=#000000]=[/color] back[color=#000000];[/color] [color=#000000]ArrayResize[/color][color=#000000]([/color]matrix[color=#000000],[/color] nrow [color=#000000]*[/color] ncol[color=#000000]);[/color] [color=#7f0055][b]for[/b][/color] [color=#000000]([/color]i[color=#000000]=[/color]nrow[color=#000000]-[/color][color=#000000]1[/color][color=#000000];[/color] i[color=#000000]>=[/color][color=#000000]0[/color][color=#000000];[/color] i[color=#000000]--){[/color] [color=#7f0055][b]for[/b][/color] [color=#000000]([/color]j[color=#000000]=[/color][color=#000000]0[/color][color=#000000];[/color] j[color=#000000]<[/color]ncol[color=#000000];[/color] j[color=#000000]++){[/color] ishift [color=#000000]=[/color] [color=#000000]iBarShift[/color][color=#000000]([/color]symb[color=#000000][[/color]j[color=#000000]],[/color] [color=#000000]0[/color][color=#000000],[/color] Time[color=#000000][[/color]i[color=#000000]]);[/color] matrix[color=#000000][[/color]i [color=#000000]*[/color] ncol [color=#000000]+[/color] j[color=#000000]] =[/color] [color=#000000]iClose[/color][color=#000000]([/color]symb[color=#000000][[/color]j[color=#000000]],[/color] [color=#000000]0[/color][color=#000000],[/color] ishift[color=#000000]);[/color] [color=#000000]}[/color] [color=#000000]}[/color] [color=#2f9956]// assign the data to the matrix "currencies"[/color] [color=#000000]Rm[/color][color=#000000]([/color][color=#0000ff]"currencies"[/color][color=#000000],[/color] matrix[color=#000000],[/color] nrow[color=#000000],[/color] ncol[color=#000000]);[/color] [color=#2f9956]// assign the column names[/color] [color=#000000]Rf[/color][color=#000000]([/color][color=#0000ff]"names"[/color][color=#000000],[/color] symb[color=#000000]);[/color] [color=#000000]Rx[/color][color=#000000]([/color][color=#0000ff]"colnames(currencies) <- names"[/color][color=#000000]);[/color] [color=#2f9956]// make a pairs plot. the points are semi-transparent (plot_alpha)[/color] [color=#000000]Ri[/color][color=#000000]([/color][color=#0000ff]"plot_alpha"[/color][color=#000000],[/color] plot_alpha[color=#000000]);[/color] [color=#000000]Rx[/color][color=#000000]([/color][color=#0000ff]"pairs(currencies, gap=0, col=rgb(0,0,0,plot_alpha,maxColorValue=255))"[/color][color=#000000]);[/color] [color=#000000]}[/color] [color=#7f0055][b]void[/b][/color] [color=#000000]Rf[/color][color=#000000]([/color]string name[color=#000000],[/color] string factor[color=#000000][]){[/color] [color=#000000]RAssignStringVector[/color][color=#000000]([/color]hR[color=#000000],[/color] name[color=#000000],[/color] factor[color=#000000],[/color] [color=#000000]ArraySize[/color][color=#000000]([/color]factor[color=#000000]));[/color] [color=#000000]Rx[/color][color=#000000]([/color]name [color=#000000]+[/color] [color=#0000ff]" <- as.factor("[/color] [color=#000000]+[/color] name [color=#000000]+[/color] [color=#0000ff]")"[/color][color=#000000]);[/color] [color=#000000]}[/color]