根据仓位号平仓,不自定义数量平仓

Author: 17732164739, Created: 2023-11-15 15:09:18, Updated: 2023-11-15 15:45:51

老师们在吗,我在okx上想平掉一次加仓或者想全平多仓或者空仓,如何不根据自定义数量平仓,而是根据仓位号平仓,我用的是js语言写的,
exchange.SetDirection(“closebuy”) exchange.Sell(-1, 1)这样的不行呢,不能自定义数量平仓


More

小小梦 ```js 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) } ``` 大概就是这样。

小小梦 /upload/asset/16da3d5e574f1d5032e1.png 交易员平仓操作是需要调用这里的接口,使用exchange.IO调用。 封装的exchange.Buy / Sell只是普通的市价单、限价单下单函数。

小小梦 不客气。策略是Javascript语言的吧,可以先刷新、清缓存试下,看能不能解决问题。

小小梦 清空缓存或者强制刷新一下页面,试下。

17732164739 梦总好,我在进行实盘级回测的时候出现一个错误提示:Uncaught RuntimeError: Aborted(). Build with -sASSERTIONS for more info您看一下,不知道是什么原因呢,好像上次回测还正常,改了一下参数就不行了,改回来也不行呢

17732164739 梦总好,打扰了,我在想在咱们平台使用webhook 推送消息的过程中是不是不用exchange.SetDirection("buy") var result = exchange.Buy(-1, amount)这种的开仓吧,只需要推送出去开仓信号,让webhook 接收端执行开仓就可以吧,但是这样有一个问题就是 position = exchange.GetPosition()无法获取持仓信息,主要是无法获取持仓均价呢,这样的话应该怎么处理呢,通过计算来获取均价吗

小小梦 这个我这边没有相关资料。

17732164739 梦总好,有点别的事想请教一下,我看咱们平台上的GPT挺好用,像是专门用策略训练过,我是做专利行业的,也想这样训练出来一个专门写专利的GPT,就是不知道应该怎么弄呢,您这边有推荐的教程一类的吗或者传授一下经验,谢谢梦总谢谢

小小梦 就是文档里写的:http请求 Url > https://www.fmz.com/user-guide#%E5%AE%9E%E7%9B%98%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81

17732164739 梦总好,那这个推送信号的消息格式怎么设置呢

小小梦 这里的意思是,使用webhook 推送消息,由某个程序接收。例如可以是你的其它的量化系统,接口等。这里用golang 语言写的例子是一个接收请求的程序脚本。用来测试你在FMZ平台上推送设置里设置的webhook url 的推送效果。

17732164739 梦总好,想问一下这个具体是怎么设置呢golang的服务程序怎么写呢,在哪里写呢,这里有没有相关教程啊,麻烦您了,我确实是不太懂这块儿

小小梦 /upload/asset/16113ad8d68015391a1b.jpg

小小梦 PINE语言和麦语言这些高度封装的脚本,主要是做趋势策略,设计之初就确定了不能双向同时持仓。如果要写双向同时持仓的策略,建议使用javascript/ python/ cpp 比较容易设计。也比较灵活。

17732164739 梦总好,我还有一个问题,就是pine语言编写策略的时候怎么才能双向持仓呢,如何同时获取多空仓的仓位信息呢,fun hasLong() => strategy.position_size > 0 fun hasShort() => strategy.position_size < 0这样似乎不行呢

17732164739 梦总好,我看了这个文档没有找到您说的内容呢,您能具体和我说一下吗,就是我想实现的是通过咱们平台向外推送交易信号,让别的平台的机器人接收交易信号下单,类似和tradingview一样的功能

小小梦 https://www.fmz.com/syntax-guide#fun_log 文档这个章节末尾有个推送例子。

17732164739 梦总好打扰了,就是有一个问题,在信号推送设置中,webhook推送,能够设置推送的格式或者内容吗,就是和trading view的一样的功能

小小梦 不同合约的规格有差别,要根据具体合约规格计算,这个模板可以参考下里面有换算:https://www.fmz.com/strategy/276298

17732164739 那我需要每个币种都换算一遍吗,不太会呀,您能给举个例子吗

小小梦 根据合约具体规则换算就可以,每个交易所不一样。例如OKX BTC币本位合约 一张合约100美元。

17732164739 梦总好,我明白了一些,我上面计算出来的amount实际上是币的数量,而不是张数,那如何才能换算成交易品种的合约张数呢

小小梦 举个例子,如果是U本位合约,保证金都是USDT,那么先计算总资产的1% 的USDT, 然后把这个数量换算成对应的要交易的品种的合约张数,然后判断这个下单的合约张数是否满足交易所最小订单量要求,如果满足,则下单。

17732164739 梦总好,打扰了,有一些问题想请教,以下是我的部分开仓策略《 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个该币种,导致有的币种投入的资金很多有的投入资金很少,偏离的我最初的本意,您能帮我看一下,这个问题怎么解决吗,谢谢梦总

小小梦 不客气。

17732164739 可以了谢谢梦总

小小梦 ```js var createResult = exchange.IO("api", "POST", "/api/v5/tradingBot/grid/order-algo", "", JSON.stringify(params)); ``` 这样试下。

17732164739 梦总好,关于代码这块儿我还算是个小白,不太懂啊,你能麻烦梦总帮忙改一下吗,谢谢您

小小梦 貌似代码里写错了, exchange.IO 函数的第四个参数是urlencode形式, 第五个参数才是raw,可以传JSON(根据交易所实际需要的参数形式)

17732164739 总是报错,我的 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"}报错呢

17732164739 梦总好,我有一个调用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"}报错呢

小小梦 您好,这个不用的,你可以遍历这个数组,逐个切换到交易对,然后操作。

17732164739 梦总好,有一个小问题想请教一下,多币种的策略如果我将所有币种放到一个数组中,那我在实盘时操作台上也需要将每个币种都选择上吗

17732164739 好的梦总,太感谢了

小小梦 不客气,你可以试下代码,看行不行。

17732164739 有点明白了,谢谢梦总