Hi
I am after some help please. I am new to furmular language and have tried to back test a simple formular that i have posted below.
I intend to see results if the MA crosses up below 0 to go long and to short when it crosses above 0.
I would hold the trade until the turning point.
It would need further work but any help would be greatly appreciated.
The formular is:
function preMain() {
setStudyTitle("MACD X-Over ");
setDefaultBarFgColor(Color.magenta, 0); // hist
setDefaultBarFgColor(Color.red, 1); // signal
setDefaultBarFgColor(Color.blue, 2); // macd
setPlotType(PLOTTYPE_HISTOGRAM, 0);
setCursorLabelName("Hist", 0);
setCursorLabelName("Signal", 1);
setCursorLabelName("MACD", 2);
}
var study = null;
var vMACD = null;
var vMACD1 = null;
var vSignal = null;
var vSignal1 = null;
var vAlert = false;
var AlertCntr = 0;
function main(nFastLength, nSlowLength, nSmoothing, nPriceSource, nSimpleMA_TorF) {
var nState = getBarState();
if (study == null) {
if (nFastLength == null)
nFastLength = 12;
if (nSlowLength == null)
nSlowLength = 26;
if (nSmoothing == null)
nSmoothing = 9;
if (nPriceSource == null) {
nPriceSource = "Close";
} else if(nPriceSource == "C" || nPriceSource == "O" || nPriceSource == "H" || nPriceSource == "L")
{
nPriceSource = nPriceSource;
} else if(nPriceSource == "Close" || nPriceSource == "Open" || nPriceSource == "High" ||
nPriceSource
==
"Low")
{
nPriceSource = nPriceSource;
} else if(nPriceSource == "HL/2" || nPriceSource == "HLC/3" || nPriceSource == "OHLC/4") {
nPriceSource = nPriceSource;
} else {
nPriceSource = "Close";
}
if (nSimpleMA_TorF == null) {
nSimpleMA_TorF = false;
} else if (nSimpleMA_TorF == "T" || nSimpleMA_TorF == "t" || nSimpleMA_TorF == "true" ||
nSimpleMA_TorF == "True") {
nSimpleMA_TorF = true;
} else if (nSimpleMA_TorF == "F" || nSimpleMA_TorF == "f" || nSimpleMA_TorF == "false" ||
nSimpleMA_TorF == "False") {
nSimpleMA_TorF = false;
} else {
nSimpleMA_TorF = false;
}
study = new MACDStudy(nFastLength, nSlowLength, nSmoothing, nPriceSource, eval
(nSimpleMA_TorF));
}
if (nState == BARSTATE_NEWBAR) {
if (vMACD != null)
vMACD1 = vMACD;
if (vSignal != null)
vSignal1 = vSignal;
vAlert = false;
}
vMACD = study.getValue(MACDStudy.MACD);
if (vMACD == null)
return;
vSignal = study.getValue(MACDStudy.SIGNAL);
if (vSignal == null)
return;
var vHist = study.getValue(MACDStudy.HIST);
if (vHist == null)
return;
if (vAlert == false) {
if (vMACD1 < vSignal1 && vMACD >= vSignal) { // crossing up
vAlert = true;
AlertCntr += 1;
drawShapeRelative(0, vSignal, Shape.UPARROW, null, Color.green, Image.TOP | Image.ONTOP,
"Alert" + AlertCntr);
}
if (vMACD1 > vSignal1 && vMACD <= vSignal) { // crossing down
vAlert = true;
AlertCntr += 1;
drawShapeRelative(0, vSignal, Shape.DOWNARROW, null, Color.red, Image.BOTTOM |
Image.ONTOP,
"Alert" + AlertCntr);
}
} else {
if ((vMACD1 < vSignal1 && vMACD < vSignal) || (vMACD1 > vSignal1 && vMACD > vSignal)) {
vAlert = false;
removeShape("Alert" + AlertCntr);
}
}
return new Array(vHist, vSignal, vMACD);
}
I am after some help please. I am new to furmular language and have tried to back test a simple formular that i have posted below.
I intend to see results if the MA crosses up below 0 to go long and to short when it crosses above 0.
I would hold the trade until the turning point.
It would need further work but any help would be greatly appreciated.
The formular is:
function preMain() {
setStudyTitle("MACD X-Over ");
setDefaultBarFgColor(Color.magenta, 0); // hist
setDefaultBarFgColor(Color.red, 1); // signal
setDefaultBarFgColor(Color.blue, 2); // macd
setPlotType(PLOTTYPE_HISTOGRAM, 0);
setCursorLabelName("Hist", 0);
setCursorLabelName("Signal", 1);
setCursorLabelName("MACD", 2);
}
var study = null;
var vMACD = null;
var vMACD1 = null;
var vSignal = null;
var vSignal1 = null;
var vAlert = false;
var AlertCntr = 0;
function main(nFastLength, nSlowLength, nSmoothing, nPriceSource, nSimpleMA_TorF) {
var nState = getBarState();
if (study == null) {
if (nFastLength == null)
nFastLength = 12;
if (nSlowLength == null)
nSlowLength = 26;
if (nSmoothing == null)
nSmoothing = 9;
if (nPriceSource == null) {
nPriceSource = "Close";
} else if(nPriceSource == "C" || nPriceSource == "O" || nPriceSource == "H" || nPriceSource == "L")
{
nPriceSource = nPriceSource;
} else if(nPriceSource == "Close" || nPriceSource == "Open" || nPriceSource == "High" ||
nPriceSource
==
"Low")
{
nPriceSource = nPriceSource;
} else if(nPriceSource == "HL/2" || nPriceSource == "HLC/3" || nPriceSource == "OHLC/4") {
nPriceSource = nPriceSource;
} else {
nPriceSource = "Close";
}
if (nSimpleMA_TorF == null) {
nSimpleMA_TorF = false;
} else if (nSimpleMA_TorF == "T" || nSimpleMA_TorF == "t" || nSimpleMA_TorF == "true" ||
nSimpleMA_TorF == "True") {
nSimpleMA_TorF = true;
} else if (nSimpleMA_TorF == "F" || nSimpleMA_TorF == "f" || nSimpleMA_TorF == "false" ||
nSimpleMA_TorF == "False") {
nSimpleMA_TorF = false;
} else {
nSimpleMA_TorF = false;
}
study = new MACDStudy(nFastLength, nSlowLength, nSmoothing, nPriceSource, eval
(nSimpleMA_TorF));
}
if (nState == BARSTATE_NEWBAR) {
if (vMACD != null)
vMACD1 = vMACD;
if (vSignal != null)
vSignal1 = vSignal;
vAlert = false;
}
vMACD = study.getValue(MACDStudy.MACD);
if (vMACD == null)
return;
vSignal = study.getValue(MACDStudy.SIGNAL);
if (vSignal == null)
return;
var vHist = study.getValue(MACDStudy.HIST);
if (vHist == null)
return;
if (vAlert == false) {
if (vMACD1 < vSignal1 && vMACD >= vSignal) { // crossing up
vAlert = true;
AlertCntr += 1;
drawShapeRelative(0, vSignal, Shape.UPARROW, null, Color.green, Image.TOP | Image.ONTOP,
"Alert" + AlertCntr);
}
if (vMACD1 > vSignal1 && vMACD <= vSignal) { // crossing down
vAlert = true;
AlertCntr += 1;
drawShapeRelative(0, vSignal, Shape.DOWNARROW, null, Color.red, Image.BOTTOM |
Image.ONTOP,
"Alert" + AlertCntr);
}
} else {
if ((vMACD1 < vSignal1 && vMACD < vSignal) || (vMACD1 > vSignal1 && vMACD > vSignal)) {
vAlert = false;
removeShape("Alert" + AlertCntr);
}
}
return new Array(vHist, vSignal, vMACD);
}
Comment