老师们在吗,我在okx上想平掉一次加仓或者想全平多仓或者空仓,如何不根据自定义数量平仓,而是根据仓位号平仓,我用的是js语言写的,
exchange.SetDirection("closebuy")
exchange.Sell(-1, 1)这样的不行呢,不能自定义数量平仓
javascript
function main() {
// POST /api/v5/copytrading/close-subposition instType : SPOT / SWAP , subPosId
var tradeType = "SPOT" // 如果是永续合约就写 SWAP
var subPosId = "xxxxx" // 仓位ID
var ret = exchange.IO("api", "POST", "/api/v5/copytrading/close-subposition", "instType=" + tradeType + "&subPosId=" + subPosId)
Log(ret)
}
大概就是这样。
总是报错,我的 JSON.stringify(params)打印出来是这样的: {"instId":"XRP_USDT","algoOrdType":"contract_grid","maxPx":2.8925,"minPx":0.5785,"gridNum":38,"runType":"1","sz":22.01,"direction":"long","lever":"10","triggerParams":[{"triggerAction":"start","triggerStrategy":"instant"}]}看着也没错啊为什么会有Futures_OP 4: {"code":"50014","data":[],"msg":"algoOrdType can’t be empty"}报错呢
梦总好,我有一个调用OKXAPI的代码总是报错,我不知道问题出在哪里了您能帮我看一下吗,谢谢,我的代码是这样的: var params = {
"instId":uuSymbols[i],
"algoOrdType":"contract_grid",
"maxPx":maxPx,
"minPx":minPx,
"gridNum":gridNum,
"runType":"1",
"sz": sz,
"direction": direction,
"lever": lever,
"triggerParams": [
{
"triggerAction": "start",
"triggerStrategy": "instant"
}
]
};
var createResult = exchange.IO("api", "POST", "/api/v5/tradingBot/grid/order-algo", JSON.stringify(params)); 另外调用的OKX的API文档是这样的:POST /api/v5/tradingBot/grid/order-algo
body
{
"instId": "BTC-USDT-SWAP",
"algoOrdType": "contract_grid",
"maxPx": "5000",
"minPx": "400",
"gridNum": "10",
"runType": "1",
"sz": "200",
"direction": "long",
"lever": "2",
"triggerParams":[
{
"triggerAction":"start",
"triggerStrategy":"rsi",
"timeframe":"30M",
"thold":"10",
"triggerCond":"cross",
"timePeriod":"14"
},
{
"triggerAction":"stop",
"triggerStrategy":"price",
"triggerPx":"1000",
"stopType":"2"
}
]
}
感觉没有什么问题啊,为什么会有Futures_OP 4: {"code":"50014","data":[],"msg":"algoOrdType can’t be empty"}报错呢
貌似代码里写错了, exchange.IO 函数的第四个参数是urlencode形式, 第五个参数才是raw,可以传JSON(根据交易所实际需要的参数形式)
javascript
var createResult = exchange.IO("api", "POST", "/api/v5/tradingBot/grid/order-algo", "", JSON.stringify(params));
这样试下。
梦总好,打扰了,有一些问题想请教,以下是我的部分开仓策略《 var price = exchange.GetTicker(currency).Last;
var account = exchange.GetAccount();
var available = account.Balance * positionSize*bei;
var amount = _N(available / price,0);
exchange.SetDirection("buy")
var result = exchange.Buy(-1, amount);》这样我本意是想设置每笔的开仓所用的资金是我全部资金的百分之一,但是我用百分之1的资金计算出开仓量之后,在okx这个开仓量却是按照最小开仓量的倍数来算的,不同币种的最小开仓量还不一样,例如我计算出的开仓量是10,但是okx上这一币种最小开仓量是100个,也就是说,我实际开仓了1000个该币种,导致有的币种投入的资金很多有的投入资金很少,偏离的我最初的本意,您能帮我看一下,这个问题怎么解决吗,谢谢梦总
举个例子,如果是U本位合约,保证金都是USDT,那么先计算总资产的1% 的USDT, 然后把这个数量换算成对应的要交易的品种的合约张数,然后判断这个下单的合约张数是否满足交易所最小订单量要求,如果满足,则下单。
不同合约的规格有差别,要根据具体合约规格计算,这个模板可以参考下里面有换算:https://www.fmz.com/strategy/276298
梦总好打扰了,就是有一个问题,在信号推送设置中,webhook推送,能够设置推送的格式或者内容吗,就是和trading view的一样的功能
梦总好,我还有一个问题,就是pine语言编写策略的时候怎么才能双向持仓呢,如何同时获取多空仓的仓位信息呢,fun hasLong() => strategy.position_size > 0
fun hasShort() => strategy.position_size < 0这样似乎不行呢
PINE语言和麦语言这些高度封装的脚本,主要是做趋势策略,设计之初就确定了不能双向同时持仓。如果要写双向同时持仓的策略,建议使用javascript/ python/ cpp 比较容易设计。也比较灵活。
梦总好,我看了这个文档没有找到您说的内容呢,您能具体和我说一下吗,就是我想实现的是通过咱们平台向外推送交易信号,让别的平台的机器人接收交易信号下单,类似和tradingview一样的功能
这里的意思是,使用webhook 推送消息,由某个程序接收。例如可以是你的其它的量化系统,接口等。这里用golang 语言写的例子是一个接收请求的程序脚本。用来测试你在FMZ平台上推送设置里设置的webhook url 的推送效果。
梦总好,打扰了,我在想在咱们平台使用webhook 推送消息的过程中是不是不用exchange.SetDirection("buy")
var result = exchange.Buy(-1, amount)这种的开仓吧,只需要推送出去开仓信号,让webhook 接收端执行开仓就可以吧,但是这样有一个问题就是 position = exchange.GetPosition()无法获取持仓信息,主要是无法获取持仓均价呢,这样的话应该怎么处理呢,通过计算来获取均价吗
梦总好,有点别的事想请教一下,我看咱们平台上的GPT挺好用,像是专门用策略训练过,我是做专利行业的,也想这样训练出来一个专门写专利的GPT,就是不知道应该怎么弄呢,您这边有推荐的教程一类的吗或者传授一下经验,谢谢梦总谢谢
梦总好,我在进行实盘级回测的时候出现一个错误提示:Uncaught RuntimeError: Aborted(). Build with -sASSERTIONS for more info您看一下,不知道是什么原因呢,好像上次回测还正常,改了一下参数就不行了,改回来也不行呢
梦总好,打扰了,有个问题想请教,account = exchange.GetAccount();这里面我开仓之后account.Balance的资金会减少,但是account.FrozenBalance却一直是0,我想着始终获取我所有资金的总数,用account.Balance+account.FrozenBalance也不行呢
GetAccount返回的结构增加了2个字段:
https://www.fmz.com/digest-topic/10451#1、account-结构新增字段equity、upnl
用equity这个。
梦总好,我试了一下实盘级回测,用的是币安BTC现货,8月份的数据,records[{"Time":1723680000000,"Open":58683.37,"High":58683.37,"Low":58678.01,"Close":58678.01,"Volume":0.04762,"OpenInterest":0}]只有一个数据啊,还是不能使用
梦总好,我在期货模拟级回测时,不知道是什么原因,一小时周期只能回测3天的数据,一分钟周期只能回测十几分钟的数据,超过了程序就停了,可是我用的是while(true)啊,不知道是怎么回事
您清空浏览器缓存,然后重新测试下,有可能缓存的缘故,如果还是不行,您发下工单,附上具体测试代码,代码里可以记录具体的回测配置,或者截图回测页面设置也行。
梦总好,提交工单了,标题:
我在期货模拟级回测时,不知道是什么原因,一小时周期只能回测3天的数据,一分钟周期只能回测十几分钟的数据,超过了程序就停了,可是我用的是while(true)啊,不知道是怎么回事
分类:
回测系统
用户名:
17732164739
梦总好,我有个问题,我有一个网格策略,想进行实盘级回测,可是,实盘级现在没多少数据,只有一两个小时的数据,看不出来什么呢,模拟回测的话一分钟K线数据只有开盘价最高价最低价收盘价,感觉会不准呢
使用模拟级别回测,底层K线周期设置1分钟,对于网格策略也可以初步测试。因为即使是模拟级别回测,tick也是基于底层K线价格框架生成的,通过算法会把范围内的价格走一遍。
就是模拟级回测的话一分钟K线只有最高价最低价收盘价这四个数据,假设我设置的是1%的网格,那到最高价平仓往往会超出去很多,次数多了,整体上收益曲线会偏离很多很多
明白了梦总,再就是想问一下,咱们的模拟级回测是默认的是全仓还是逐仓模式呢,我想实盘跑网格,担心如果设置全仓的话,如果下跌资金会越来越少
梦总好,我网格跑的是okx,市价跑的,感觉滑点和手续费太多了,怎么写限价挂单的网格呢,有没有教程或者参考策略呢,我一般用JS语言的比较多,谢谢梦总
梦总好,我这实盘工作流,为什么开不了仓呢,有那个开多和开空的组件,已经有推送了,就是开不了呢,例如我设置的开BTC的数量1,显示需要10万多U才行,我改成了DOGE数量1也开不了单
梦总好,这个回测实盘级回测能不能再数据多一些,只有几个小时的数据,回测不出来什么呢,模拟级的回测误差太大,策略也不算高频,就是1%买卖这种的
- 1





