wiki:JavaScriptSample

Sample JavaScript Strategy

This is a sample Moving Average Crossover strategy.

It shows the basic usage of the event handler functions, trading order classes, indicators and global properties.

/*
 * Moving Average Crossover
 */

var length1 = 7;
var length2 = 21;
var qty = 50;
var stopPercent = 5;

var sma1;
var sma2;
var entryEnabled = true;
var stopExitEnabled = false;
var lossTarget;

function onStrategyStart() {
    if (instrument == instruments['F.MI']) {
        qty = 90;
    }
    else if (instrument == instruments['MB.MI']) {
        qty = 35;
    }
    else if (instrument == instruments['MS.MI']) {
        qty = 90;
    }

    sma1 = new SMA(length1);
    sma2 = new SMA(length2);
}

function onBar(bar) {
    cross = sma1.crosses(sma2, bar);
    if (entryEnabled) {
        if (cross == Above) {
            marketOrder = new MarketOrder(Buy, qty, "Entry");
            marketOrder.send();
            entryEnabled = false;
        }
    }
    else {
        if (cross == Below) {
            marketOrder = new MarketOrder(Sell, qty, "Crossover Exit");
            marketOrder.send();
            stopExitEnabled = false;
        }
    }
}

function onTrade(trade) {
    if (hasPosition() && stopExitEnabled) {
        if (trade.price < lossTarget) {
            marketOrder = new MarketOrder(Sell, qty, "Stop Target");
            marketOrder.send();
            stopExitEnabled = false;
            entryEnabled = true;
        }
    }
}

function onPositionOpened() {
    lossTarget = position.price - (stopPercent / 100 * position.price);
    stopExitEnabled = true;
}

function onPositionClosed() {
    entryEnabled = true;
    stopExitEnabled = false;
}