Desde 1 BTC, Fmex ha puesto en marcha una política de desbloqueo de cabezas vacías, y el mercado se ha quedado en blanco.

El autor:Gulishiduan_ ordenado en alta frecuencia, Fecha: 2019-12-15 04:11:25
Las etiquetas:

FMex ordenación de minería versión en blanco de código instrucciones de uso. (Se espera una caída lenta de más del 1%, el crudo de titanio, por el contrario, es evidente) El riesgo en el mercado de valores es enorme y puedes enfrentar una pérdida del 100% en cualquier momento.

El principio es el siguiente: En la actualidad, hay más de 100 millones de personas que viven en el país. - Detecta si los pedidos existentes superan el límite y, si lo superan, cancela el pedido de inmediato. - Detecta si la transacción ha formado una posición, si es mayor que la posición x, reduce la posición a menos de la posición establecida /

Algunos casos: Listado global: para diferenciar las estrategias de los comerciantes, se define específicamente el ordenamiento remoto como listado. Comerciante: El mayor número de posiciones, si es mayor que el puesto, disminuye aproximadamente cada 6 segundos. La posición máxima de la cabeza vacía, si es mayor que la posición, disminuye aproximadamente cada 6 segundos. La estrategia de reducción de las posiciones más grandes que 1u, la lista suspendida es mayormente de horario Mayor que el emplazamiento vacío, inicia la estrategia de reducción de emplazamiento vacío, el listado es largo En el estado normal.

Descripción de notas en el parámetro //, sólo para referencia, puede añadirse un punto El riesgo de asumir/parámetros ajustables, WeChat:ying5737


//保证金市场风险巨大,你可能随时面临100%损失。或有不明bug100%损失,概不负责。本策略使用的杠杆相对不大,可放心体验
//注意:默认近端排序不启动(给手动平仓预留空间),多头版先持仓long1u-1000u,空头版先持仓short1u-1000u.用来激活近端排序
var eName = exchange.GetName();
            if (eName == "Futures_FMex") {
                exchange.IO("extend", '{"POST/v3/contracts/orders$":{"affiliate_code":"9y40d8"}}');
            } if (eName == "FCoin") {
                exchange.IO("extend", '{"POST/v2/orders$":{"affiliate_code":"9y40d8"}}');
            }
exchange.IO("base", Url)//(联系微信:ying5737)策略仅限个人使用,若用于商业传播,请提前联系
var ordersInfo = {
    buyId: 0,    buyPrice: 0,    sellId: 0,    sellPrice: 0,    minPrice: 0,    maxPrice: 0
}
var depthInfo = {
    asks: [],
    bids: []
}
var symbol = "BTCUSD_P"
function getTicker(symbol) {
    url = "/v2/market/ticker/" + symbol;
    data = _C(exchange.IO,"api", "GET", url);
    return data.data;
}    
function getAccounts() {
    data = _C(exchange.IO,"api", "GET", "/v3/contracts/accounts")
    return data.data;
}
function createOrderPrice(body) {
    parameter = "symbol=" + body.symbol + "&type=" + body.type + "&direction=" + body.direction + "&post_only=" + body.post_only +  "&price=" + body.price + "&quantity=" + body.quantity + "&affiliate_code=9y40d8";   
    resultData = exchange.IO("api", "POST", "/v3/contracts/orders", parameter)
    return resultData;
}
function createOrder(body) {
    parameter = "symbol=" + body.symbol + "&type=" + body.type + "&direction=" + body.direction + "&quantity=" + body.quantity + "&affiliate_code=9y40d8";   
    resultData = exchange.IO("api", "POST", "/v3/contracts/orders", parameter)    
    return resultData;
}
function getOrders() {
    resultData = _C(exchange.IO,"api", "GET", "/v3/contracts/orders/open");
    return resultData.data
}
function cancelOrder(id) {
    if (typeof(id) == 'undefined') {
        return
    }
    resultData = exchange.IO("api", "POST", "/v3/contracts/orders/" + id + "/cancel");//+ id 
    return resultData;    
}
function cancelAllOrder() {
    resultData = exchange.IO("api", "POST", "/v3/contracts/orders/cancel");
    return resultData;    
}
function getPosition() {
    resultData = _C(exchange.IO,"api", "GET", "/v3/broker/auth/contracts/positions");
    return resultData.data;
}
function getMatches(id) {
    resultData = _C(exchange.IO,"api", "GET", "/v3/contracts/orders/" + id + "/matches");
    return resultData.data;
}
function getCandles(resolution, symbol) {
    resultData = _C(exchange.IO,"api", "GET", "/v2/market/candles/" + resolution + "/" + symbol);
    return resultData.data;
}

function cleanPosition() {
    res = getPosition();    
    res.results.forEach(function(it) {
        if (it.symbol == symbol) {
            if (it.quantity) {
                if (it.quantity > g_maxHoldingLong && it.direction.toUpperCase() == 'LONG') { 
                    data = createOrder({symbol: symbol,type: "MARKET",direction: "SHORT",quantity:sp_perAmount * 2
                    })
                    Log("LONG超最大仓位,减仓");
                }
                if (it.quantity > g_maxHoldingShort && it.direction.toUpperCase() == 'SHORT') {
                    data = createOrder({symbol: symbol,type: "MARKET",direction: 'LONG',quantity: sp_perAmount * 2
                    })
                    Log("SHORT超最大仓位,减仓");
                }
            }
        }
    });
}
// add new 
var hasElephantOrder = false
// var elephantOrder  = []
var elephantOrderTime = 0
function underElephant (ticker) {
    var buyPrice = ticker[2] 
    var sellPrice = ticker[4] 
    var bestAskAmount = ticker[5];
    var bestBidAmount = ticker[3];
    var now = new Date().getTime()
    if (hasElephantOrder) {
        if (now - elephantOrderTime < 3000) {
            return
        }
        // for (var index = 0; index < elephantOrder.length; index++) {
        //     cancelOrder(elephantOrder[index].id)
        //     Sleep(1000)
        // }
        hasElephantOrder = false
    }
    if (bestBidAmount > 40000 && bestBidAmount > bestAskAmount * 2) {
        //如果,买一档的单量>X万,且买一的单量大于卖一的单量的Y倍,挂单.
        //等待,撤单。重新检测,重新挂。       
        // elephantOrder.push(order.data)
      //  order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 2,quantity: sp_perAmount * 2 })
      //  Log("大象挂单买4 LONG" );
       order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 3,quantity: sp_perAmount * 3})
       Log("大象挂单买6 LONG" );
        // elephantOrder.push(order.data)
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 4,quantity: sp_perAmount * 3})
        Log("大象挂单买8 LONG" );        
        // elephantOrder.push(order.data)
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 4.5,quantity: sp_perAmount * 3})
        Log("大象挂单买9 LONG" );
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 5,quantity: sp_perAmount * 3})
        Log("大象挂单买10 LONG" );        
        // elephantOrder.push(order.data)
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 6.5,quantity: sp_perAmount * 3})
        Log("大象挂单买13 LONG" );
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "LONG",post_only: true,price: buyPrice - 7,quantity: sp_perAmount * 3})
        Log("大象挂单买14 LONG" );        
        // elephantOrder.push(order.data)
        
        // elephantOrder.push(order.data)
        hasElephantOrder = true
        elephantOrderTime = now
    }  if (bestAskAmount > 40000 && bestAskAmount > bestBidAmount * 2) {
        //如果,卖一档的单量>X万,且卖一的单量大于买一的单量的Y倍,挂单.
        //等待,撤单。重新检测,重新挂。
       // order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 1,quantity: sp_perAmount * 3})
       // Log("大象挂单卖2 LONG" );
        // elephantOrder.push(order.data)
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 2,quantity: sp_perAmount * 3})
        Log("大象挂单卖4 LONG" );
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 3,quantity: sp_perAmount * 3})
        Log("大象挂单卖6 LONG" );
        // elephantOrder.push(order.data)
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 4,quantity: sp_perAmount * 3})
        Log("大象挂单卖8 LONG" );
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 5,quantity: sp_perAmount * 3})
        Log("大象挂单卖10 LONG" );
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 6,quantity: sp_perAmount * 3})
        Log("大象挂单卖12 LONG" );
        // elephantOrder.push(order.data)
        order = createOrderPrice({symbol: symbol,type: "LIMIT",direction: "SHORT",post_only: true,price: sellPrice + 7,quantity: sp_perAmount * 3})
        Log("大象挂单卖14 LONG" );
        // elephantOrder.push(order.data)
        hasElephantOrder = true
        elephantOrderTime = now
    }
}
function marketMaker(ticker) {
    Log("市商/排序挖矿**********************************");
    lastPrice = ticker[0] 
    buyPrice = ticker[2] 
    sellPrice = ticker[4] 
    Log("lastPrice:"+lastPrice+":buyPrice:"+buyPrice+":sellPrice:" + sellPrice);
    if (lastPrice == buyPrice) {
        sellPrice = (buyPrice + 0.5).toFixed(1)
    }
    if (lastPrice == sellPrice) {
        buyPrice = (sellPrice - 0.5).toFixed(1)
    }
    Log("buyPrice:"+buyPrice+":sellPrice:" + sellPrice);    
    res = getPosition();
    Log("市商/排序挖矿Position:" + JSON.stringify(res));

    res.results.forEach(function(it) {
        if (it.quantity) {
            var index = 0
            if (it.quantity > sp_baseAmountLong && it.direction.toUpperCase() == 'LONG') {//多仓过多,改变挂单档位,short3-9,long9-10
                for (index = 0; index < 9; index++) {
                    order = createOrderPrice({symbol: symbol, type: "LIMIT", direction: "SHORT",  post_only: true,  price: lastPrice + 1 + 0.5 * index,   quantity: sp_perAmount                   })
                    Log("市商/排序SHORT卖" + (2 + index) );                            
                }
        
                for (index = 0; index < 3; index++) {
                    order = createOrderPrice({ symbol: symbol,  type: "LIMIT",   direction: "LONG",   post_only: true,   price: lastPrice - 4 - (0.5 * index),   quantity: sp_perAmount                 })
                    Log("市商/排序LONG买" + (8 + index));
                }
                
            } else if (it.quantity > sp_baseAmountShort && it.direction.toUpperCase() == 'SHORT' ) {       
                for (index = 0; index < 9; index++) {
                    order = createOrderPrice({symbol: symbol, type: "LIMIT", direction: "LONG",  post_only: true,  price: lastPrice - 1 - 0.5 * index,   quantity: sp_perAmount                   })
                    Log("市商/排序LONG买" + (2 + index) );                            
                }
            } else {//正常持仓状态,long (非全档)           short  
              
               order = createOrderPrice({  symbol: "BTCUSD_P",  type: "LIMIT",   direction: "SHORT",    post_only: true,     price: lastPrice + 1.5,     quantity: sp_perAmount                    })
                    Log("市商/排序SHORT3" );
                    order = createOrderPrice({  symbol: "BTCUSD_P",     type: "LIMIT",   direction: "SHORT",   post_only: true,  price: lastPrice + 2,     quantity: sp_perAmount                    })
                    Log("市商/排序SHORT4" );
                    order = createOrderPrice({symbol: "BTCUSD_P",    type: "LIMIT",     direction: "SHORT",  post_only: true,    price: lastPrice + 2.5,    quantity: sp_perAmount                    })
                    Log("市商/排序SHORT5" ); 
                    order = createOrderPrice({  symbol: "BTCUSD_P",  type: "LIMIT",   direction: "SHORT",    post_only: true,     price: lastPrice + 3,     quantity: sp_perAmount                   })
                    Log("市商/排序SHORT6" );
                  //  order = createOrderPrice({  symbol: "BTCUSD_P",     type: "LIMIT",   direction: "SHORT",   post_only: true,  price: lastPrice + 3.5,     quantity: sp_perAmount                   })
                   // Log("市商/排序SHORT7" );
                    order = createOrderPrice({symbol: "BTCUSD_P",    type: "LIMIT",     direction: "SHORT",  post_only: true,    price: lastPrice + 4,    quantity: sp_perAmount                     })
                    Log("市商/排序SHORT8" );   
                    order = createOrderPrice({  symbol: "BTCUSD_P",     type: "LIMIT",   direction: "SHORT",   post_only: true,  price: lastPrice + 6.5,     quantity: sp_perAmount                     })
                    Log("市商/排序SHORT7" );
                    order = createOrderPrice({symbol: "BTCUSD_P",    type: "LIMIT",     direction: "SHORT",  post_only: true,    price: lastPrice + 7,    quantity: sp_perAmount                         })
                    Log("市商/排序SHORT8" ); 
                    order = createOrderPrice({ symbol: "BTCUSD_P",  type: "LIMIT",   direction: "LONG",   post_only: true,   price: lastPrice - 3.5,   quantity: sp_perAmount  * 0.6            })
                    Log("市商/排序LONG买7" );
                    order = createOrderPrice({ symbol: "BTCUSD_P",  type: "LIMIT",   direction: "LONG",   post_only: true,   price: lastPrice - 4,   quantity: sp_perAmount   * 0.6            })
                    Log("市商/排序LONG买8" );
                    order = createOrderPrice({ symbol: "BTCUSD_P",  type: "LIMIT",   direction: "LONG",   post_only: true,   price: lastPrice - 4.5,   quantity: sp_perAmount    * 0.6           })
                    Log("市商/排序LONG买9" ); 
            }
        }
    })
}

var lastPrintfTime = null
function printfBanner() {
    var now = new Date().getTime()

    if (lastPrintfTime == null || now - lastPrintfTime > 60 * 5 * 1000) {
        Log("FMex排序挖矿多头版本代码使用说明见描述。(注意api地址)微信:ying5737)#ff0000")
        lastPrintfTime = now
    }
}

/********************END 市商/排序挖矿***************************************************************************************************/
// 模板初始化时调用
function init() {    // 过滤常见错误
    if (EnableErrorFilter) {
        SetErrorFilter("502:|503:|tcp|character|connection|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused");
    }
     _CDelay(RetryInterval)
   // 重定义需要容错的函数
    var names = ApiList.split(',');
    _.each(exchanges, function(e) {
        _.each(names, function(name) {
            if (typeof(e[name]) !== 'function') {
                throw "尝试容错 " + name + " 失败, 请确认存在此API并且输入正确.";
            }
            var old = e[name];
            e[name] = function() {
                var r;
                while (!(r = old.apply(this, Array.prototype.slice.call(arguments)))) {
                    if (Debug) {
                        Log(e.GetLabel(), name, "调用失败", RetryInterval, "毫秒后重试...");
                    }
                    Sleep(RetryInterval);
                }
                return r;
            };
        });
    });
    Log("容错机制开启", names);
}

function checkRisk(ticker) {
    lastPrice = ticker[0]
    if (lastPrice< minPrice || lastPrice > maxPrice) {
        Log(
        '===== 价格已超出箱体震荡区间 [',
        minPrice,
        ',',
        maxPrice,
        '],挂单暂停 1 分钟,1分钟后重新检测 ====='
        );
        Sleep(1000 * 60);
        return true;
    }
    return false
}

function main() {
    while(true){
        cancelAllOrder()
        tickerInfo = getTicker(symbol);
        ticker = tickerInfo.ticker;
        if (!checkRisk(ticker)) {
            marketMaker(ticker);
            underElephant(ticker)
        }
        cleanPosition();
        printfBanner()
        Sleep(Interval * 1000) 
    }    
}//FMex排序挖矿多头版本代码使用说明见描述。(注意api地址)微信:ying5737)

function onexit() {
    Log("退出,撤所有订单")
    cancelAllOrder()
}


Más.