Loading ...

知乎专栏 实例文章策略

Author: 小小梦, Date: 2017-04-22 15:39:21
Tags: Commodity-futures

知乎专栏 实例文章策略


// 参数变量 (待填写)
var ContractType = "rb1710";  // 标的物合约代码   ,螺纹钢 1710 合约 目前主力合约
var UsedRatio = 0.5
// 全局变量 (待填写)
var Interval = 500;           // 轮询时间 , 毫秒  , 500 毫秒 = 0.5 秒
var Balance_Unit = 0;
var ContractTypeInfo = null;  // 合约信息
var initAccount = null;       // 初始账户信息
var LONG = 1;
var SHORT = 2;
// 功能函数 (待填写)
function loop(){              // 主循环函数
    CheckBalance_Unit(LONG);
}

function CheckBalance_Unit(Direction){
    ContractTypeInfo = exchange.SetContractType(ContractType);
    Log("标的物合约信息:", ContractTypeInfo);
    Balance_Unit = _N(initAccount.Balance * UsedRatio / 10, 2);
    Log("账户信息:", initAccount, "资金分配 10份,一份为:", Balance_Unit);

    var ticker = _C(exchange.GetTicker);
    var OneContractMargin = ContractTypeInfo.VolumeMultiple * ticker.Last * (Direction == LONG ? ContractTypeInfo.LongMarginRatio : ContractTypeInfo.ShortMarginRatio);
    if(Balance_Unit < OneContractMargin * 1.2){
        throw "最新价格:" + ticker.Last + "调整系数1.2" + " ,资金可用部分的10分之一 不足 开" + (Direction == LONG ? "多" : "空") + "1手合约," + "1手合约需:" + OneContractMargin;
    }else{
        Log("最新价格:" + ticker.Last + "调整系数1.2" + "1份资金 可开:", Direction == LONG ? "多" : "空", _N(Balance_Unit / OneContractMargin, 0));
    }
    var nowAccount = _C(exchange.GetAccount);
    if(nowAccount.Balance < Balance_Unit){
        throw "当前账户资金已小于初始资金可用部分的十分之一。当前资金:" + nowAccount.Balance + ", 初始资金可用部分的十分之一为:" + Balance_Unit;
    }else if(nowAccount.Balance < OneContractMargin * 1.2){
        throw "资金不足:" + JSON.stringify(nowAccount) + ", 系数1.2,1手合约保证金:" + OneContractMargin;
    }
}

// 入口函数 main 
function main(){
    // 程序的初始化工作 (待填写)
    while(true){
        if(exchange.IO("status") == true && (initAccount = exchange.GetAccount()) !== null){
            break;
        }
        LogStatus("等待交易时间获取账户信息初始化!" + "时间:", new Date());
        Sleep(Interval);
    }
    CheckBalance_Unit(LONG);
    CheckBalance_Unit(SHORT);
    
    // 主循环, 程序完成初始化后在此 循环执行,直到手动关闭。
    var LoginState = null;
    var nowTimeStamp = 0;
    while(true){
        nowTimeStamp = new Date().getTime();
        if(exchange.IO("status") == true){
            LoginState = true;
            loop();
        }else{
            LoginState = false;
        }
        LogStatus("时间:", _D(nowTimeStamp), LoginState ? "已连接服务器" : "未连接服务器!"/*, 待显示的一些信息可以写在此处,如账户信息,实时行情,程序状态*/)
        Sleep(Interval);     //  暂停 0.5 秒, 避免轮询频率过高,访问交易所服务器过于频繁导致问题。
    }
}

function onexit(){
    // 做一些在程序停止时的 收尾工作。(待填写)
    
    Log("程序退出!");
}

Related

More