Skip to content

Latest commit

 

History

History
149 lines (119 loc) · 5.19 KB

OKex期货测试for新手.md

File metadata and controls

149 lines (119 loc) · 5.19 KB

策略名称

OKex期货测试for新手

策略作者

tomjava

策略描述

OKex期货使用较麻烦,故我写了这么一个框架,方便新用户理解和使用。注意ETH是10美元为一张的。

策略参数

参数 默认值 描述
Interval 10 轮询周期(秒)
mnum 20 30分钟线周期
initRatio 0.5 初始仓位比例

源码 (javascript)

/*backtest
start: 2019-01-01 00:00:00
end: 2019-10-10 00:00:00
period: 1d
exchanges: [{"eid":"OKEX","currency":"ETH_USDT","stocks":0}]
args: [["OpMode",1,10989],["MaxAmount",1,10989],["TradeFee",0.001,10989]]
*/
//注册币乎后https://m.bihu.com/signup?i=1ewtKO&s=4&c=4
//搜索 物联网区块链 可以联系到作者区班主
var isInit = 1; //表示初始态
function oper(){
    var allAmount;
    var cashRatio;
    var lastPrice;
    var wantRatio;
    var wantOper=0;//期待的操作,0不操作,1买入,-1卖出
    var mhigh;
    var mlow;
   
        
        var mrecords = exchange.GetRecords(PERIOD_M30);
        //一定周期内的高低点
        mhigh=TA.Highest(mrecords, mnum, 'High');
        mlow=TA.Lowest(mrecords, mnum, 'Low');
        
        var midLine = (mhigh+mlow)/2;
        
        var ticker = _C(exchange.GetTicker);
        var nowPrice=ticker.Sell;
        var account = _C(exchange.GetAccount);
        var objid;
        var order;
        
        if (isInit == 1) {  //初始化状态为默认仓; 
            /*exchange.SetDirection("sell");    
            objid = exchange.Sell(nowPrice,Math.floor(nowPrice*account.Stocks*0.2/10)); //Okex必须取整
            order = exchange.GetOrder(objid);            // 参数id为订单号码,需填入你想要查询的订单的号码
            
            if (objid) { //如果购买成功
                      isInit=2; //初始化成功
                      account = _C(exchange.GetAccount);
                      Log(account);
                      Log("公允价格",midLine,"高点",mhigh,"低点",mlow);
                      Log("刚下订单的信息,ID:", order.Id, "Price:", order.Price, "Amount:", order.Amount,
        "DealAmount:", order.DealAmount, "type:", order.Type);
            }*/
            
            exchange.SetDirection("buy");    
            objid = exchange.Buy(nowPrice,Math.floor(nowPrice*account.Stocks*0.2/10)); //Okex必须取整
            order = exchange.GetOrder(objid);            // 参数id为订单号码,需填入你想要查询的订单的号码
           
            if (objid) { //如果购买成功
                      isInit=2; //初始化成功
                      account = _C(exchange.GetAccount);
                      Log(account);
                      Log("公允价格",midLine,"高点",mhigh,"低点",mlow);
                      Log("刚下订单的信息,ID:", order.Id, "Price:", order.Price, "Amount:", order.Amount,
        "account.Stocks:", account.Stocks, "type:", order.Type);
            }
            
            exchange.SetDirection("buy");    
            objid = exchange.Buy(nowPrice,Math.floor(nowPrice*account.Stocks*0.2/10)); //Okex必须取整
            order = exchange.GetOrder(objid);            // 参数id为订单号码,需填入你想要查询的订单的号码
           
            if (objid) { //如果购买成功
                      isInit=2; //初始化成功
                      account = _C(exchange.GetAccount);
                      Log(account);
                      Log("公允价格",midLine,"高点",mhigh,"低点",mlow);
                      Log("刚下订单的信息,ID:", order.Id, "Price:", order.Price, "Amount:", order.Amount,
        "DealAmount:", order.DealAmount, "type:", order.Type);
            }
        }else if(isInit==2){ //日常操作检测
            //打印未成交仓位
            var orders = _C(exchange.GetOrders);
           
            for (var i = 0; i < orders.length; i++) {
                Log("下单",orders[i]);
            }
           
            var positions = exchange.GetPosition();
            Log("持仓数",positions.length);
            for (i = 0; i < positions.length; i++) { //下两张多单会合并成一张单
                 if (positions[i].Type == PD_LONG) {
                    //exchange.SetDirection("closebuy");
                    //exchange.Sell(nowPrice,positions[i].Amount);
                } else {
                   // exchange.SetDirection("closesell");
                   // exchange.Buy(nowPrice,positions[i].Amount);
                }
                Log("持仓",positions[i]);
            }
            //如果没有挂单也没有持单
            if(orders.length<2){//&&positions.length==0){
                isInit=3;
                account = _C(exchange.GetAccount);
                Log("已成交");
                Log(account);
            }
        }else{
        }
}

function main() {
    var initAccount = _C(exchange.GetAccount);
    Log(initAccount);
    exchange.SetContractType("quarter")    // 举例设置为OKEX期货当周合约
    exchange.SetMarginLevel(5);              // 设置杠杆为5倍
    while (true) {
        oper();
        Sleep(Interval*1000);
    }
}

策略出处

https://www.fmz.com/strategy/170842

更新时间

2020-02-20 19:45:23