> Name 指数均衡策略-教学 > Author 发明者量化-小小梦 > Strategy Arguments |Argument|Default|Description| |----|----|----| |Ratio|0.25|0.25|0.25|占总资产比例| |BaseAsset|BTC|基准货币| |ToBuy|0.1|0.1|0.1|补仓的下跌比例| |ToSell|0.1|0.1|0.1|减仓的上涨比例| |Interval|10|检查间隔(s)| |diff|0.01|滑价| > Source (javascript) ``` javascript var coinValue = {}; // 声明 全局变量 coinValue ,用一个空对象赋值 var totalValue = 0; // 总价值 function updateValue(){ // 更新 价值 var logString = 'Time: '+ _D() + '\n'; // 声明一个变量 , 日志字符串并且初始化, 初始化记录上 当前时间 var account = _C(exchanges[0].GetAccount); // 获取 为了给 coinValue的 BaseAsset 属性 (也就是基础币种资产)初始化的账户数据。 coinValue[BaseAsset] = {amount:account.Balance + account.FrozenBalance, value:account.Balance + account.FrozenBalance}; // amount , value 属性 初始化 均为 总计价币数。BaseAsset 为 基准货币 totalValue = coinValue[BaseAsset].value; // 更新 总价值 logString += BaseAsset + ': ' + _N(coinValue[BaseAsset].value,5) + '\n'; // 给日志字符串 添加上 当前 基准货币 总价值 数据 for(var i=0;i 1){ // 统计 keepPercent 数组中的元素值总和 throw 'sum of keep percent should be lower than 1'; // 各资产 占比总和 不能超过 100% } var buyPercent = ToBuy.split('|').map(Number); // 根据参数处理字符串,构造 买入比例 数组 var sellPercent = ToSell.split('|').map(Number); // ... 构造 卖出比例 数组 for(var i=0;i (1+coinValue[symbol].sellPercent)*totalValue*coinValue[symbol].keepPercent){ var sellAmount = (coinValue[symbol].value - totalValue*coinValue[symbol].keepPercent)/coinValue[symbol].buyPrice exchanges[i].Sell(coinValue[symbol].buyPrice, sellAmount) CancelPendingOrders(exchanges[i]); } else if(coinValue[symbol].value < (1-coinValue[symbol].buyPercent)*totalValue*coinValue[symbol].keepPercent){ var buyAmount = (totalValue*coinValue[symbol].keepPercent - coinValue[symbol].value)/coinValue[symbol].sellPrice exchanges[i].Buy(coinValue[symbol].sellPrice, buyAmount); CancelPendingOrders(exchanges[i]); } } } function main() { while(true){ // 主循环 onTick(); // 主要逻辑函数 Sleep(Interval*1000); } } ``` > Detail https://www.fmz.com/strategy/120581 > Last Modified 2021-04-21 09:14:03