En la carga de los recursos... Cargando...

El contrato

El autor:Un chico con un puñetazo, Fecha: 2020-04-05 21:24:29
Las etiquetas:

..............


/*backtest
start: 2020-01-08 00:00:00
end: 2020-04-06 00:00:00
period: 1d
exchanges: [{"eid":"Futures_OKCoin","currency":"ETH_USD","stocks":1400}]
args: [["PRICE_PRECISION",2],["AMOUNT_PRECISION",4]]
*/

var tempOrders = [];

var COLOR = {
    GREEN: '#00a500',
    RED: '#ff0000',
    GRAY: '#b2b2b2',
    ORANGE: '#ff9e38'
}

function cancelOrder(ex,order_id){
    if (!order_id) return Log('不正确的订单id', order_id);
	Log("取消订单" + order_id);
	ex.CancelOrder(order_id);
	Sleep(500);
	var orders=_C(ex.GetOrders);
	var find=false;
	for (var i=0;i<orders.length;++i){
		if (orders[i].Id===order_id){
			find=true;
			break;
		}
	}
	if (find){
		cancelOrder(ex.order_id);
	}
}

var trade = function(direction, amount) {
    var ticker = _C(exchange.GetTicker);
    exchange.SetDirection(direction);
    var price = 0
    if (_.contains(['buy', 'closesell'], direction)) {
        price = _N(new Decimal(ticker.Last).plus(SLIP_POINT).toNumber(), PRICE_PRECISION);
    } else {
        price = _N(new Decimal(ticker.Last).minus(SLIP_POINT).toNumber(), PRICE_PRECISION);
    }
    var orderInfo = null;
    var avgPrice = null;
    var oid = null;
    var beginTime = null;
    var dealAmount = _.reduce(tempOrders, function(p, n) {
        return new Decimal(p).plus(n.DealAmount).toNumber();
    }, 0);
    var remainAmount = Math.floor(new Decimal(amount).minus(dealAmount).toNumber());
    if (remainAmount < 1) {
        avgPrice = _N(new Decimal(_.reduce(tempOrders, function(p, n) {
            return new Decimal(p).plus(new Decimal(n.AvgPrice).mul(n.DealAmount).mul(FACE_VALUE)).toNumber()
        }, 0)).div(new Decimal(dealAmount).mul(FACE_VALUE)).toNumber(), PRICE_PRECISION);
        orderInfo = {
            Id: _.last(tempOrders).Id,
            Type: _.contains(['buy', 'closebuy'], direction) ? PD_LONG : PD_SHORT,
            Price: price,
            AvgPrice: avgPrice,
            Amount: amount,
            DealAmount: dealAmount,
            Orders: _.pluck(tempOrders, 'Id')
        }
        tempOrders = [];
        return orderInfo;
    } else {
        oid = _.contains(['buy', 'closesell'], direction) ? exchange.Buy(price, remainAmount) : exchange.Sell(price, remainAmount);
        if (oid) {
            beginTime = Unix();
            while(1) {
                orderInfo = _C(exchange.GetOrder, oid);
                if (orderInfo.Status !== ORDER_STATE_PENDING) {
                    tempOrders.push(orderInfo);
                    return trade(direction, amount);
                }
                if (Unix() - beginTime >= TRADE_TIMEOUT) {
                    Log('交易超时, 撤销订单' + oid + COLOR.RED);
                    cancelOrder(exchange, oid);
                    continue;
                }
                Sleep(250);
            }
        } else {
            return null;
        }
    }
}
$.OpenPos = function(direction, amount) {
    return trade(direction, amount);
};

$.ClosePos = function(direction, amount) {
    return trade('close' + direction, amount);
}

function main() {
    exchange.SetContractType('this_week');
    exchange.SetPrecision(PRICE_PRECISION, 0);
    Log($.OpenPos('buy', 2));
    $.OpenPos('sell', 1);
    $.ClosePos('buy', 1);
    $.ClosePos('buy', 1);
    $.ClosePos('sell', 1);
    Log(exchange.GetPosition());
}

Más.

XMaxZone. ¿ Qué quieres decir?Los Estados miembros deberán establecer un marco para la evaluación de la compatibilidad de las medidas de salvaguarda y salvaguarda de los recursos humanos con los objetivos de la Unión.

XMaxZone. ¿ Qué quieres decir?Si el precio de la bolsa es el mismo que el precio de la bolsa, entonces el precio de la bolsa es el mismo.

los guardias de seguridadPor favor Id: _.last ((tempOrders).Id ¿Hay algún problema aquí? Error de respuesta: main:58:35 - TypeError: Cannot read property 'Id' of undefined

el año 2020¿Cómo se cita esta plantilla?