[TOC]
常见问题汇总(持续更新…)
搜集常见问题方便查看,如何在帖子上搜索关键字?
使用Ctrl + f
键打开页面搜索,输入关键字例如:“托管者”。那么页面上关于有托管者字样的位置都会搜索出来。
目前FMZ国际站仅支持数字货币业务。
微信:
为何GetTicker
和GetDepth
得到的买一价和卖一价会不同呢?
GetTicker
和GetDepth
可能不是同时获取。有一定延迟,数据上就有变化。并且一般来说可能GetTicker
数据更快一点因为数据比较少。
exchang.GetOrders
得到的是未成交的挂单,那么已经成交的单子在哪里获取?
查询订单还有一个API就是exchange.GetOrder
,这个是根据ID
查询所有类型的订单。输入订单ID
就查出这个订单。获取成交的订单只有看交易所有没有提供这样的接口了,每个交易所可能提供的接口都不一样。
JavaScript
策略时间字符串转时间戳的结果不对
需要考虑系统时间设置中的时区。
为什么我打印出来的开盘价、收盘价都一样?
1、可能是交易所这个时刻确实没交易,本身就是这个BAR高开低收一样。 2、看下是不是观察的是最后一个BAR,在最后一个BAR生成的瞬间,高开低收是一样的。
Signature not valid:Invalid submission time or incorrect time format[无效的提交时间,或时间格式错误]
,此类和服务器校对时间的错误
该问题为windows2000/2003/XP
等比较旧的操作系统的问题,参考资料:
建议使用Linux
服务器,或者在这些出现该问题的windows
系统安装时间同步软件,高频率同步时间,防止出现时间校验错误。
为什么麦语言的ATR
(TR
)计算出的数值和TA
/talib
库计算出来的有差异?
原因是麦语言指标的计算方式和TA
/talib
库底层算法不一致。两者都对,算法不同而已。类似MACD
有的用一倍的DIF-DEA
,有的用两倍的DIF-DEA
,都是对的。
交易所名称为Futures_Esunny
的代表的是什么?
代表易盛协议的交易所对象,可由exchange.GetName()
函数返回。
目前FMZ国际站仅支持数字货币业务。
麦语言多周期引用数据,在多周期引用代码块内#EXPORTTEST...#END
声明好变量后。在策略中引用时使用了REF
,就会按照当前的周期去引用数据导致和想象中的不一样。
所有需要的多周期数据,在#EXPORTTEST...#END
中处理好,在外部只直接使用。
找不到FMZ API文档了
可以直接输入页面地址:https://www.fmz.com/api,或者如图点击链接:
为啥MACD
跟交易所算出来的值不一样?
对比时需要注意是否K线周期一致,MACD
指标参数是否一致,时间段一致,品种一致,此外MACD
的量柱算法有多种。有的是DIF-DEA
,有的是2*(DIF-DEA)
,DIF
和DEA
应当是一致的。
请问获取历史K线数据的时候,获得的K线数量跟什么有关?
在访问exchange.GetRecords
接口获取K线数据时,具体接口返回的K线数量是交易所定的。可能每家交易所的返回的K线数量都不一致(甚至有些交易所没有提供K线接口,此类情况托管者在策略调用exchange.GetRecords
的时候会调用获取交易所交易历史数据的接口根据交易历史合成K线)。托管者接受到的K线会持续累计在一起,需要有一定频率的去访问exchange.GetRecords
接口,否则可能会影响数据的持续性。
我看API文档执行exchange.Buy
函数只会返回ID
,怎么会返回那么多信息?
FMZ的API函数中可以产生日志输出的函数例如Log
、exchange.Buy
、exchange.CancelOrder
等都可以在必要参数后跟一些附带输出参数。例如:exchange.CancelOrder(orders[i].Id, orders[j])
这样就是在取消orders[j]
这个订单时,附带输出这个订单信息。
实盘如何微信推送信息?
只有实盘有效,在Log
函数最后加上字符'@'
即可推送该条Log
函数打印的信息,详见API文档:https://www.fmz.com/api#Log
目前FMZ国际站仅支持数字货币业务。
exchange.GetAccount
这里获取信息会不会因为网络等其他问题造成获取失败,FMZ系统底层是已经有对失败做处理了?还是用户必须自己处理请求失败的情况?为什么官方不做出处理呢?这样用户使用的时候不是更方便吗?
会有失败,需要用户容错处理。FMZ底层不处理数据,反馈给用户的是未加工过的数据,具体容错方式或者逻辑由策略制定。如果这个处理了可能会影响用户决策,决策交给策略处理,具体是过滤错误信息还是重试等等处理方式。
OKEX合约下单量是什么单位?是币数还是合约张数?
OKEX合约交易下单量在FMZ下单时是按合约张数,例如exchange.Buy(1000,1)
就是下价格为1000,量为1张合约的订单。
在FMZ上调用exchange.Sell
和exchange.Buy
是下普通限价单吗?
具体是看传入的第一个参数(第一个参数是下单价格)。部分交易所支持市价单,价格参数传入-1
即为下市价单,买入和卖出量的意义有些不同(第二个参数),价格不是-1
就是限价单。大部分现货交易所下单接口,市价单买单的下单量都是金额并非币数。数字货币期货交易所下单接口,下单量一般为合约张数是整数。
参看下单接口:
https://www.fmz.com/api#exchange.buyprice-amount
https://www.fmz.com/api#exchange.sellprice-amount
Mail函数
Mail("smtp.qq.com", "xxxx@qq.com", "xxx", "xxx@qq.com", "test title", "test body")
访问QQ的smtp 203.205.232.7 超时,目前绝大多数云服务器基本都屏蔽了25端口,除非实体服务器,运营商基本不会屏蔽25端口的。 绝大多数云服务器,也可以申请解封25端口,我就是申请然后解封的。
Pine语言、麦语言的模板参数:变量最长周期数会影响指标计算
默认这个「变量最长周期数」为600,如果指标参数设置过大,例如计算MA(1000)。则由于系统只保留了600个数据,无法计算出1000个数据的均值。
InternalError: arg1 type error 触发场景:
function main() {
_G(11212, "123")
}
_G
函数键名不能为数值类型。
无限递归调用错误:signal arrived during external code execution
根据该特征判断:Exception 0xc00000fd
Exception 0xc00000fd 0x1 0x5cdd203f40 0x1ee5955
PC=0x1ee5955
signal arrived during external code execution
实盘页面会有控制台输出信息(运行时错误),例如一个引发内存溢出的例子:
def create_large_list():
large_list = []
while True:
large_list.append(" " * 1024) # Append a string of 1024 bytes to the list
print(f"Current list size: {len(large_list)}")
def main():
create_large_list()
弹框报错,报错信息:SyntaxError: variable name expected
检查策略代码编辑区是否有错误提示,检查是否var name = “a” 的时候忘记写name(没有写变量名)。检查是否设置策略界面参数时使用了编程语言的关键字,不建议对变量命名使用编程语言常见的关键字,容易引起冲突(即使当前编程语言中没有这个关键字)。
BITMEX
429错误,{"error":{"message":"Rate limit exceeded retry in 1seconds……"}}
看到429错误,即访问交易所接口频率过高。需要增加轮询间隔,降低访问接口频率。
实盘Bittrex
报错:{"success":false,"message":"NOT_ALLOWED","result":null}
交易所限制了权限,登录一下Bittrex
交易所网站,查看是否需要勾选用户协议之类的信息。
实盘运行报错:TypeError:value has no property at
回测和实盘时报错信息不一样,所以回测测不出这个报错信息。
unable to open database
报错
如果是苹果电脑Mac OS
注意查看是否为权限问题。
设备硬盘空间满了,无法创建实盘的数据库文件,导致报错。
报错:不支持该功能
回测时添加的交易所对象为数字货币现货交易所,代码中调用了期货的API函数。
报错:in SetCurrency OSError: exception: access violation reading 0x000000FCF25F0000
数字货币期货,Python
策略,回测系统使用私有托管者,代码中切换了交易对报错。
原因是回测系统不支持数字货币期货回测切换交易对。
报错 decrypt [图片] 由于修改了FMZ账号的密码, 导致配置的API KEY失效,引起的报错。 解决办法:重新配置交易所API KEY ,停止托管者,重新启动托管者,再尝试启动实盘。
Python
本地回测引擎,报错EOFerror
。
EOF
错误是回测结束的错误可以捕获异常就行了可以在任何支持Python
的地方调用。
# encoding: utf-8
'''backtest
start: 2021-08-30 00:00:00
end: 2022-09-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''
from fmz import *
task = VCtx(__doc__) # initialize backtest engine from __doc__
def main():
while not exchange.IO("status"):
Sleep(1000)
exchange.SetContractType("swap")
while True:
bars_1min = _C(exchange.GetRecords, PERIOD_M1) # 获取1minK线
print(len(bars_1min))
_CDelay(2000)
# 调用主函数
try:
main()
except:
print(task.Join(False))
麦语言牵涉到周期计算的很隐蔽的问题,计算出的数值可能有N/A的情况,如此范例:
原因是计算周期参数超出,数据范围,导致计算出N/A值。处理办法:
麦语言出现报错:解析错误,并且策略只有简单代码,报错行数为很长的位置,找不到原因。
可能是早期麦语言模板的问题。处理办法:1.导出策略为xml文件。2、创建一个新的空的麦语言策略。3.把xml文件导入到新创建的空策略中。4、创建实盘测试即可。
报错:fatal error:unexpected signal during runtime execution...go routine 11[syscall,locked to thread]
检查C++
编写的策略有没有使用空指针,建议用容错模式回测检验。
调用exchange.SetMarginLevel(10)
报错:Futures_OP 0:403:{"error":{"message":"Access Denied","name":"HTTPError"}}
检查交易所申请的API KEY
相关权限是否开启。
回测错误:symbol not set
期货交易所回测代码中没有设置合约,参看API文档中exchange.SetContractType
函数。
ERR_INVALID_POSITION
错误
回测系统报错,一般为策略编写错误。在没有持仓或者持仓数量不足时尝试下单平仓会引起该报错,检查是否有未成交订单导致的仓位冻结。
ERR_INVALID_ORDER
错误
回测系统报错,一般为策略编写错误,注意检查下单价格(回测系统数字货币期货暂时不支持市价单),下单量是不是为0或者负数或者小数(期货合约是合约张数都是整数)。
ERR_INSUFFICIENT_ASSET
错误
回测系统报错,一般为可用资产数量已经不足当前下单需要的资产数量。简单说就是没有资金下单了。
Binding Error:Cannot passnon-string to std::string
报错信息
策略代码中,一般为某个属性名(使用未定义的属性)用错导致。
{"status":6004,"msg":"timestamp is out of range"}
错误
服务器时间戳超出范围需要更新服务器时间,不能偏差过大。
timeout
错误
该错误是超时错误,是指访问交易所接口后超过一定时间没有得到交易所接口应答数据导致的报错。一般是托管者所在系统的网络访问问题(很多是墙导致的问题)、或者是交易所接口的问题。一般解决办法:使用其它海外地区的服务器运行托管者。
编写策略后运行实盘时的报错:syntax error invalid label
问题根源:
function main(){
if(1){
continue
}
}
//这样会导致运行时报错
continue
语句必须用于循环!
报错:400:{"error":{"message":"Nonce is not increasing.This nonce:1523891993165,last nonce:1523891993165","name":"HTTPError"}}
关于nonce
校验的错误,报错信息上有关nonce
通常是时间戳校验不通过,尝试同步一下该实盘使用的托管者所在系统的时间。
Secretkey decrypt failed
错误
这个报错是说API KEY
解析失败。检查是不是配置了API KEY
后修改过FMZ账号的密码,尝试在FMZ平台添加交易所的页面重新配置交易所的API KEY
并且重启托管者,然后重新运行实盘测试。
请问使用exchange.Getorder
经常报出这个错:GetOrder(455284455):Error:invalid order id or order cancelled.
有可能是什么原因呢?
字面意思:订单已经取消或者订单ID无效。原因:有些交易所订单取消了交易所就不再维护这个订单信息了,就清除了。所以你在exchange.GetOrder
查询这个订单就报这个错误,或者本身查询的这个ID就是错误的。
rate limit, 429 Too Many Requests(太多请求) 报错
rate limit, 429 Too Many Requests(太多请求)
策略中访问交易所接口频率过于频繁,降低访问交易所接口的频率。
回测和实盘时候总是显示Invalid order price/amount
此类问题是由于调用下单函数exchange.Buy
或者exchange.Sell
时传入的价格和下单量数值错误引起的。对于负数下单量、0等检测错误方法:可以在exchange.Buy
或exchange.Sell
下单前调用Log
函数输出下即将传入的价格参数或者数量参数,确定下问题。
GetOrders:400:{"code":-1121,"msg":"Invalid symbol."}
这是什么错误?
这个报错是说:无效的交易对。您检查下是不是交易对设置错误了。
实盘日志上报错有些错误码是什么意思?
各个交易所API接口返回的错误码解释需要看下交易所API文档。
Pine语言、麦语言实盘收益曲线打印时间 根据Pine语言/麦语言模板参数上的设置定时打印,策略完全平仓时也会打印。
麦语言实盘打印了信号触发行数,但是没有任何下单操作。
可能是麦语言模板参数设置不合适,例如精度、最小下单量精度等参数。原因是信号触发层判断成功,到了交易执行层由于参数某些问题导致判定为不可下单,进而没有实际下单。 参看麦语言相关帖子: https://www.fmz.com/digest-topic/5789 https://www.fmz.com/digest-topic/5768
我设置好Tradingview上的webhook url报警,为什么实盘(机器人)收不到请求信号?
检查webhook url这个设置的地址里,API KEY 是否正确。这里的API KEY指的是FMZ的扩展API KEY,在FMZ右上角账号设置里设置。检查webhook url里面的实盘ID是否填写正确。 检查FMZ的扩展API KEY权限是否给与正确。权限是英文逗号间隔,默认是*,即所有权限,不要直接在*后面写给与权限的函数名。
创建实盘时交易所对象配置上为什么只有有限的几种货币对?实际交易所是支持很对交易对的。
设置交易对的自定义控件(只有实盘可以,回测时数据中心的数据只有有限的品种,并不能自定义设置),如图:
为什么在服务器上运行FutuOpenD(富途)获取不到行情,在本机上的可以获取到?
检查服务器是否是海外IP地址,富途对于海外IP有限制。
麦语言策略运行了一直不动,就开始更新了一下行情,是什么问题?
检查是不是使用的收盘价模型,检查设置在策略麦语言模板参数上。
BITMEX
交易所K线数据时间戳为什么比其它交易所相同位置的Bar多一个周期时间?
原因是BITMEX
交易所的K线时间戳是以当前Bar的结束时间作为时间戳的(有些K线周期BITMEX
交易所接口没有支持,所以这些周期的时间戳是以Bar起始时间作为时间戳的)。例如右图:
回测系统报错:Exception catching is disabled
Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.
检查是否使用了「自定义数据源」功能,自定义数据源服务提供的数据是否正确,引发该报错的原因可能是异常的回测行情数据。
如何测试手续费是taker/maker? 手续费 taker/maker 测试场景
/*backtest
start: 2022-11-08 00:00:00
end: 2023-02-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
function main() {
var t = exchange.GetTicker()
exchange.Buy(t.Last - 10, 100/(t.Last - 10))
while(1){
t = exchange.GetTicker()
Sleep(1000)
}
}
币安期货、BITMEX
回测,资金费率是否算入回测系统生成的盈亏曲线?
资金费率是算入回测系统生成的盈亏曲线的。
回测按钮显示不可点击
检查是否开了代理,导致回测页面文件加载不完整,检查页面控制台是否有报错信息。
实盘级Tick回测时,为什么有50MB的限制?
实盘级别回测, 就是这个实盘级Tick, 行情数据是逐秒的,真实记录。 并且还有盘口快照, 订单流数据, 这些数据量非常大, 只支持 50MB的数据量。 也就是说 实盘级别回测 ,范围最多几个小时, 无法长时间范围回测。主要用于测试高频策略。
回测系统修改了手续费,为什么不起作用?
回测系统中,界面上设置手续费,只有添加上才生效,之前添加的交易所对象是无法通过界面上的控件直接修改的。
怎么才能让回测自定义画图显示的数据多一点?
自定义图表画图时(Chart
函数),画图在回测时候显示的数据量和回测设置上的图表参数有关,控制图表显示最大条数。注意是否使用了chart.reset
函数清空了部分旧数据。
C++
回测什么都不显示,也没有报错信息和日志,点击按钮后页面没有变化
C++
策略一些异常不抛出错误,用排除法逐级检查代码可能的运行时错误。例如:指标计算时K线数量不足导致的指标算出NAN
后NAN
和数值类型做比较判断,引起程序崩溃。
python
回测卡死!
不能在try
异常检测里面写Sleep
函数,如图的写法就会卡死。
为什么回测的时候只有几个交易所,交易所的交易对也只有有限的几种?
交易所的交易对太多了,所以在回测系统只选择了几种有代表性的交易对用来测试。可以选择情况相近的交易对回测,在实盘的时候是完全可以用自定义控件设置交易所支持的交易对。
回测系统为什么不支持多些交易对?
回测系统暂时只支持一些比较大的交易所的主流币种,有些币种暂时还没支持。如果需要检验策略可以在回测系统中用其它币种代替测试。其实数字货币用不同币种测试除了行情因素,对于检验策略还是可以的。简单说就是回测系统尽量把主流交易对支持,回测不应当拟合具体某个品种。就是说如果策略有效,哪怕是一系列有交易规律的随机生成的行情变动,或者是其它币种行情,都应该是有基本上正向收益的的表现。这个就是策略的普适性,如果只能拟合一段历史数据或者在某个品种表现不错,那这种策略实际上是有潜藏风险或者有缺陷的。
回测系统中:平仓盈亏、持仓盈亏、保证金、预估收益、当前可用的USDT的概念
平仓盈亏:就是当前持仓之前的所有交易开仓,平仓时,产生的盈亏,是所有累计的盈亏。 持仓盈亏:就是当前持仓的盈亏,如果当前没持仓,就是0 保证金:当前持仓的仓位占用的保证金数额 预估收益:把当前持仓按照当前价格(假设)平仓,产生的盈亏,再和平仓累计的盈亏相加,算出预估的收益。 当前可用的USDT:当前可以用来开仓的USDT数额。
回测系统胜率计算
for (var i = 0; i < profits.length; i++) {
if (i == 0) {
if (profits[i][1] > 0) {
winningResult++
}
} else {
if (profits[i][1] > profits[i - 1][1]) {
winningResult++
}
}
if ((profits[i][1] + totalAssets) > maxAssets) {
maxAssets = profits[i][1] + totalAssets
maxAssetsTime = profits[i][0]
}
if (maxAssets > 0) {
var drawDown = 1 - (profits[i][1] + totalAssets) / maxAssets
if (drawDown > maxDrawdown) {
maxDrawdown = drawDown
maxDrawdownTime = profits[i][0]
maxDrawdownStartTime = maxAssetsTime
}
}
}
上面是胜率算法,描述一下是这样计算的: 在回测系统定时计算浮动盈亏后,统计出一条浮动盈亏曲线。从第一个点开始对比下一个点,如果高于则记录为胜,低于记录为负,然后用下一个点往后继续对比。
FMZ平台上托管者显示离线,服务器上托管者robot程序被停止 在linux操作系统,有可能内存不足导致托管者被系统停止。触发原因: 1、策略过度使用硬件资源。 2、策略Log输出了一个非常大的内容。 3、托管者所在设备上运行了过多的策略实盘。 4、其它(补充中)
MAC电脑运行托管者时报错:dyld: cannot load (load command is unknown)
dyld: cannot load (load command is unknown)
操作系统版本太低导致。
Linux
系统的托管者部署的视频在哪儿?
B站链接:https://www.bilibili.com/video/BV1eZ4y1c73v?share_source=copy_web
更新托管者是不是必须要停止旧的托管者,然后删除掉robot
程序,然后重新运行?
可以不停止托管者,直接删除旧的robot
程序文件,然后下载新的压缩包,解压缩出新的robot
程序文件,放在原来的位置。这个时候托管者就更新了,但是运行中的实盘在内存使用的还是旧版本,只有重启实盘的时候才会使用最新的版本。
Linux
服务器托管者部署
Linux
安装托管者步骤:https://www.bilibili.com/video/BV1eZ4y1c73v?share_source=copy_web
使用screen
运行托管者程序robot
时,出现-bash:screen:command not found
,托管者运行不起来。
Linux
系统没有安装screen
软件,一般安装即可。CentOS
系统的安装命令:yum install screen
。
当前托管者已经支持SSH
断开转入后台运行。可以不使用screen
这个工具,在托管者程序robot
目录下直接使用命令:./robot -s node.fmz.com/xxxxxxx
,然后输入FMZ的账号密码后显示Login OK
即为部署成功。注意./robot -s node.fmz.com/xxxxxxx
中的xxxxxxx是每个FMZ账号唯一的识别码,输入自己的即可(在账号登录后跳转托管者页面,点击添加托管者,跳转到添加托管者页面可以看到),这里并不是要输入xxxxxxx
。
托管者运行时上面的实盘的日志在哪?
在托管者程序所在目录logs
文件夹内的DB3
数据库文件中,数据库文件名为实盘的id
,扩展名为db3
。
Linux
系统下./robot -l
查看托管者支持的交易所名称,里面出现的exchange
是什么交易所?
名字为exchange
的交易所对象代指通用协议接入的交易所,通用协议详情:https://www.fmz.com/api#通用协议
托管者页面托管者无法按列表显示
添加的托管者超过5个会出现按列表显示的控件。
创建实盘时托管者选择的下拉框里有不是自己部署的托管者,是正常的么?
平台提供的公共托管者为初学者用户增加的一个快速上手的工具。学习时不用部署托管者了,方便上手。不过真正实盘测试还是推荐使用私有托管者,毕竟公共托管者的硬件资源、网络都是共享的,并且平台可能不定期维护这些公共托管者。
部署托管者时那一串地址(./robot -s node.fmz.com/1234567
)是我自己唯一的还是?
这个地址是每个用户自己的地址标识,每个用户/1234567
部分的数值都是唯一的,用来标识用户。部署托管者的时候从控制中心->点击添加托管者按钮->添加托管者页面,然后就能看到这个地址,直接复制、粘贴就可以使用了。
托管者所在系统的环境变量添加了python2.7
了,为什么还提示找不到环境变量。
windows
系统初次安装python
,设置环境变量后需要重启生效。
EOF错误
python回测是靠EOF异常结束回测的(因为有时候可能策略是个死循环)。所以提示EOF异常是正常情况。
一个托管者可以跑几个实盘?
并不限制数量,具体看服务器配置和策略复杂程度,具体要考虑这多个实盘是否都访问相同的交易所接口(考虑接口调用频率,实盘越多频率越高),一般5-6个实盘没问题。
托管者、实盘等基础概念理解
实盘、托管者页面内容全部消失
实盘、托管者页面内容全部消失,实盘在正常运行,托管者在服务器正常运行。
检查浏览器报错信息,是否浏览器安装有插件,插件引起的全局变量污染问题。处理办法为写在浏览器插件,或者使用一个没有安装任何浏览器插件的浏览器登录FMZ。
租用的官方策略、一键部署租用的服务器,只要FMZ账户余额足够,会自动续费么?
租用的策略不会自动续费,一键部署的托管者服务器会自动续费。
模板功能在哪里呢?我想把一些函数独立出来放到模板里,其它策略也好引用。
FMZ API
文档中的说明:https://www.fmz.com/api#模板类库
FMZ模拟盘wexApp
仿真交易所,只能选BTC_USDT
吗?我怎么自定义其它交易对呢?
wexApp
模拟盘暂时只支持几个主流的交易对,并非所有交易对都有模拟。
扩展API并发调用的问题,并发时总是报nonce校验错误。
可以创建多个FMZ平台的扩展API KEY
,用于并发请求。
在使用调试工具时,在托管者上创建的调试线程会记录状态么?
调试工具执行时,如果第二次什么都没有修改会保留之前创建的交易所对象,不会释放。所以一些状态会记录例如交易所对象当前为币币模式还是杠杆模式。
为什么我注册了wexApp
模拟交易所登录上去,什么资产都没有,钱包和币币区都没有资产?
注册后需要验证邮箱激活账户,在个人中心激活账户即可。
日志信息比较长被截断了,后面显示…但是需要看数据的结构怎么办?
解决办法,使用控制中心的调试工具,调试工具中使用return
语句返回需要显示的内容,不会截断内容显示。
JavaScript
策略中$.
开头的函数是什么意思?
$.
开头的函数是模板的导出函数,类似模块的接口函数。参看API文档中的描述:https://www.fmz.com/api#模板类库
python
版策略的导出函数开头是以ext.
声明的。
如何在回测结果的行情数据图上绘制直线?
回测时最终显示的图表分2种:一种是系统生成的,策略无法控制。另一种是策略代码里面用FMZ的API接口Chart
函数画的。参看:https://www.fmz.com/api#chart...
误删了手机上的谷歌验证器,如何重置谷歌验证?在平台上账号设置页面没有找到用邮箱重置的地方。 可以用另外的浏览器登录FMZ平台,在需要输入谷歌验证码时,点击「解除绑定」跳转到使用邮箱解除绑定的页面。
交易所API KEY
安全保障
用户的API KEY
是在浏览器端加密上传,FMZ并不保存用户交易所账户的明文信息,并且使用的是Https
协议。
策略的安全性问题
FMZ平台计费系统、计费机制
实盘计费标准: 1、一个实盘一小时计费一次(0.05 USD/小时),买断一小时使用时间。 2、一小时内停止、重启实盘不会重复计费。 3、已经停止的实盘,下一个小时不会触发计费。 4、新创建的实盘会立即计费一小时。
该计费时间为计费操作处理时间,因为这些处理操作会耗时,所以扣费时间有可能往后延迟。例如当前计费时间为9:00,有可能处理这个计费操作的时间为9:02(截图上显示的时间),会在下一次扣费操作时矫正(下次扣费时间为10:00,并非提前计费)。
talib库处理数据精度有限
如果数据特别小会被截断,最终显示为0。 参考:https://github.com/TA-Lib/ta-lib-python/issues/157
计费项目中实盘扣费,一次性扣除超过一小时计费(0.05USD) 原因可能为托管者和FMZ平台长时间通信断开(期间实盘是直接和交易所交互的,所以执行策略是正常的),扣费累积,扣费延迟,一次性结算扣费导致。
重置注册时的邮箱 如果邮箱丢失等原因,需要重置当前FMZ账号绑定的邮箱,需要使用该FMZ账号提交工单,提交历史充值记录截图等其它信息验证,人工审核之后重置邮箱地址。
vg80771610 我的实盘有一个打不开是什么情况
18803662506 账户余额怎么转出?
Stalker pine回测的时候已经勾选实时模型,为什么回测图表上显示收盘价平仓,实时价开仓?
Issac Futures_OP 4: 400: {"code":"50000","data":[],"msg":"Body can not be empty."} 显示下单异常是什么意思啊 看了教程感觉设置的对啊
xaifer48 py 支持sympy库这个么?好像用不了@小小梦
xowox 充值
yingjun Buy(-1, 6): 400: {"code":-2022,"msg":"ReduceOnly Order is rejected."} 这是什么错误
DXM time out
ohduring 托管
eth8888 使用麦语言的策略,为啥老是平不了仓提示持有反方向仓位然后报错停止策略
GraysonZ 您好,发明者有封装的函数获取资金费率吗,用于回测。直接调用http的接口 没办法回测
huangsongxin 模拟
無用心 我想问一下,实盘时获取K线数据,用python绘图类库为什么画出来是乱的,回测并没有出现这个问题
ttry1 Traceback (most recent call last): File "<string>", line 1615, in Run File "<string>", line 146, in <module> File "<string>", line 138, in main File "<string>", line 115, in trace KeyError: 43999.96000000001
389230565 /upload/asset/1e5e44ad18aab047782b6.jpg新开的实盘过几个小时就会显示这个错误,是什么原因?
烤韭菜 怎么获取币安U本位合约的USDT划转历史数据,没找到API呢
wxb1888 充值不了
gaoyaxing24 Python 中没有引用类库的功能吗?
zld123123 您好,简单的均线策略,运行时会出现一段时间正常开一单,一段时间出信号连开两单,求帮助
cute 您好,期货同时开多仓和空仓的时候,position[0].profit只能获得多仓的浮动盈亏,那么要怎么获取空仓的浮动盈亏呢
zhangmintao 你好,实盘点开提示这个
币胜氪 网页版,登录不上去呀,一直在登录中,扫码登录的二维码也点不出来,是浏览器的原因吗。还是需要科学上网
efc645cgx 为何论坛无法发帖?
zhousone 请问公共托管者能运行实盘机器人吗?
羽于羊 回测时exchange.GetAccount()是只会获得设定的初始量吗?如果我在策略里使用了exchange.buy,这个返回的Balance是不是也不会更新啊
骨刀 没有看明白以上问题的答案在哪里看呀
wwq4817 请问移仓换月容易出现相反仓位,该怎么修复避免这种情况???????
17606551005fmz /upload/asset/175f0fef6971c19389a0c.png /upload/asset/17633f3636a154477bb5a.png /upload/asset/1764cf80d829ca5ed5a6e.png /upload/asset/17667f2629b47a011bb8f.png 为什么getposition获取不到空单的持仓呢
Mrhuang00 main:102:18 - TypeError: method.apply is not a function请问这是什么问题呢?小白第一次编出个策略来
bamsmen 看到有的模板里使用了这几个函数 _.each() _.contains() _.last() 请问 _.这个对象是在哪里定义的?没有找到相关文档
dsaidasi my语言里,好像只能等k线走完才能进场,不能设置一个价格,等突破这个价格立刻进场?
光辉岁月 策略里初始化阶段想进行交易所连通性、api有效性测试,怎么样写?查了社区里面没有找到案例
dsaidasi 像火币和ok这些被墙的交易所,你们的机器人可以连接吗。还有如果开了机器人托管,我自己的电脑是否需要24h开机。
wufuhao100w 问题的描述在这上面找到了...但是问题的回答没有啊....醉了...
xiaoyi007 机器人启动报错 Traceback (most recent call last): File "<string>", line 1028, in __init_botvs__ File "<string>", line 11, in <module> ImportError: DLL load failed: �Ҳ���ָ����ģ�顣 2019-05-22 04:19:42
pixiu777 多线程具体在什么情况下用
moneymonster 想问一下为什么exchange.Buy(-1,1)回测的时候,每次都只买入了0.0几的币,不是应该买入1个嘛
jeffzh 我的策略需要保存交易数据供以后计算分析,怎么在策略里实现数据的存储和分析呢?
13036897450 我想获取ok合约中已开仓的实时盈亏比和预计强平价格 改调用哪个函数?
13036897450 GetOrders: Ret: map[result:false error_code:10007]这是什么原因啊
黄天霸 ERR_INSUFFICIENT_ASSET 和TypeError: Cannot convert "null" to double是什么错?新手头都扣烂了
Mrkoeng TA.KDJ里面返回的数组能解释一下么 想获取K值 D值
1095176636@qq.com 我想掉数据但为什么每次要完成的时候都被终止掉了
qhh87 平台上有个美国的公用服务器,但是也连接不上OKEX平台吗?我试了也提示timeout超时。大家都去哪里租托管呀?
1095176636@qq.com 为什么我回测BTC时历史交易量都是整数而且是等差数列
whjy 2018-07-23 09:58:40 错误 TypeError: cannot read property 'Last' of null at main (__FILE__:5) 2018-07-23 09:58:40 Futures_OKCoin 错误 GetTicker: timeout 2018-07-23 09:58:20 信息 null BTC_USD 开启机器人为啥为空
chan122 我想在回测的时候以五分钟为一个判断周期,迅速跑完数据,应该怎么设置?
roshanzheng 我想问一下平台如何保证用户的交易所ID和KEY的安全?比如,确保不会发生黑客批量获取ID和KEY之后劫持用户进行黑客的交易指令?
jklwonder python如何获得回测时的时间呢
jkyei 请教下,为什么simnow显示:(CTP_T@9999) Error: 75 CTP:连续登录失败次数超限,登录被禁止
bijiasuo 马克一下,第4条,我在哪里看?
wcg123 请教下,为什么算出来的CCI指标总是与okex期货的指标差1到3个数值,别的指标都能对的上。
Carpedium6740 无效的IP或与绑定的IP不一致
Ancly 模拟回测的时候如何取得一个订单信息呢?exchange.GetOrder 没有Order的ID怎么办呢?
BOBO 用IO函数访问币安原始api接口可以实现
发明者量化-小小梦 您好,您可以发下工单,附上具体截图,这边帮您看下。
发明者量化-小小梦 可以发工单处理。
发明者量化-小小梦 var和varip声明的变量机制不同,在工单上回复您了。
Stalker 我试了两种exit的方式,一种是直接在开单时挂进去,代码如下,回测图一 if strategy.position_size >= 0 and Trend < 0 and TCI_bear strategy.entry("SHORT", strategy.short, qty= rolling == true ? roll_size : size, comment='OP-S@') strategy.exit("CL-S", "SHORT", xxxxxx) state := -1 trading_1:=0 另一种是入场后采用查找订单的方式exit,代码如下(奇怪的是用这种方式exit直接不起作用了(回测图二),查找订单的函数是直接从文章里复制的) if barstate.isrealtime and findOrderIdx("SHORT") >= 0 and state == -1 state := 0 strategy.exit("CL-S", "SHORT", xxxxxx) /upload/asset/1656cda7ac73bb62bc54e.png /upload/asset/16596c76416af7cde208b.png 还有一点,不知道为什么同一信号连续开了3次,代码如下 if trading_1 == 0 and Trend == -1 and TCI_bear and strategy.position_size < 0 strategy.entry("IP-S1", strategy.short, qty=size) trading_1 := -1 梦总帮忙看一下是怎么回事
发明者量化-小小梦 这个和具体策略设计有关,要看策略具体分析。
发明者量化-小小梦 您好,这个具体是哪个交易所,IO调用的代码,可以把具体场景发一下工单。
xaifer48 好滴,谢谢
发明者量化-小小梦 建议使用私有托管者,在自己的设备上安装需要用的python库。
xaifer48 公用托管者可以么?我试了好像不支持sympy这个库,是直接写import sympy这样吧?
发明者量化-小小梦 您好,任何python库都可以导入的,需要在托管者所在设备系统的python环境安装这个库。
发明者量化-小小梦 您好,这个具体问题是?
发明者量化-小小梦 可能是下单方向不对,检查一下SetDirection()函数的参数设置。
发明者量化-小小梦 It`s a problem with your device network. Try to change other device such as VPS in Singapore or England.
发明者量化-小小梦 还有其他参数也要检查下,精度等设置,参看文章:https://www.fmz.com/digest-topic/5768
eth8888 滑点设置的5
发明者量化-小小梦 是不是滑点加的小了,可以调整一下麦语言模版类库参数上滑点参数。
发明者量化-小小梦 目前QQ、微信群都解散了,可以在FMZ首页上点击电报链接加电报群。
朱永强 qq群号多少
发明者量化-小小梦 回测除了币安期货永续合约、BitMex,其他的没有资金费率机制的。目前也没有接口获取资金费率。实盘的时候使用HttpQuery函数或者其它网络库访问交易所这个公共接口获取资金费率相关数据。
無用心 我看了,好像确实这样,我以为和实盘数据一致
发明者量化-小小梦 可以到交易所盘面上看下,可能K线本身就是这样。
無用心 /upload/asset/223d0ac6a9df9afd9e23c.png 获取的是欧易模拟盘,不是这个原因吧
发明者量化-小小梦 可以具体截图看下具体问题、场景。
发明者量化-小小梦 策略语法错误,检查一下策略代码115行。
发明者量化-小小梦 图片显示不出来。复制具体的报错信息。
发明者量化-小小梦 价格传-1 就是真正的市价单。一定成交。FMZ API文档上有。
烤韭菜 所以其实exchange.Buy()等等函数其实都是“限价单”,不是“市价单”, 如果价格波动太快,那么下单以后就很难成交了啊,这个可以设置什么参数让它变成市价单吗?我在API文档中没有找到相关设置。
发明者量化-小小梦 可以的,不过要考虑接口访问频率问题。交易所接口请求有限频。
烤韭菜 同一个接口,比如GetTicker这个方法,我可以同时针对10个不同的交易对,同时请求这一个接口函数吗?
发明者量化-小小梦 可以扫API文档 或者首页上的企业微信二维码加专员帮你处理。
发明者量化-小小梦 可以加下API 文档开头的企业二维码微信处理。
gaoyaxing24 我就是按着这个试,结果一直在报错,提示 ext 中没有方法可用。 从 dir 里面看也没有这个方法。 有实例介绍吗?拿着官方的例子直接照着也不行。
发明者量化-小小梦 有的,可以参看API文档,三种语言描述。https://www.fmz.com/api#%E6%A8%A1%E6%9D%BF%E7%B1%BB%E5%BA%93
发明者量化-小小梦 可以到FMZ首页加下FMZ群组,QQ群、微信群都有,可以在群内具体提问,发出具体截图。
cute 明白了,感谢梦总
发明者量化-小小梦 不太明白你的意思,在QQ群里@我一下,具体看。 你上面的代码,如果你有空头持仓,继续访问position[1] 。但是你只访问了索引为0的即position[0]。
cute 有空头持仓的呀,这个代码里面多头和空头都同时开了,position里面的数据遍历出来了,但是没有空头持仓的数据
发明者量化-小小梦 没有空头持仓,空仓浮动盈亏不就是0么?就不用计算了吧。position是个数组,你要遍历里面的数据。 如果不明白遍历的概念可以百度一下。
cute 不行啊,访问出来的只有多仓的数据,没有空仓的数据,源码 var n = 0.005 //初始下单数 var MarginLevel = 20 //合约杠杆 function main() { exchange.SetContractType("swap") exchange.SetMarginLevel(MarginLevel) var position = [] while (true) { var account = exchange.GetAccount() position = exchange.GetPosition() if (position.length == 0) { exchange.SetDirection("sell") exchange.Sell(-1, n, "开空", "倍率参数:", q = 1, "账户总额:", account.Balance) exchange.SetDirection("buy") exchange.Buy(-1, n, "开多", "倍率参数:", x = 1, "账户总额:", account.Balance) } if (position.length > 0) { Log(position[0]) Sleep(12000) } } }
发明者量化-小小梦 GetPosition返回的是一个数组,空仓结构,多仓结构都在里面。用索引访问。
发明者量化-小小梦 提示什么 ?
发明者量化-小小梦 是不是本机开着梯子了,关了试下。
发明者量化-小小梦 可以发帖子呀。但是不要违规,违规会封号。
发明者量化-小小梦 公共托管者一般用于测试、练习,实盘建议使用自己的设备运行托管者。
骨刀 是我太二了-_'' ,老年人看字费劲,把浏览器字体设置太大,一个页面只看得到“问”这边,没显示出来“答”这边。。。。拉一下就看到了
发明者量化-小小梦 /upload/asset/16011a2067f6ff610b2b.png
发明者量化-小小梦 就是把即将交割的仓位平掉, 再新主力合约开出来仓位。好像没什么问题呀。
wwq4817 /upload/asset/17ae92e032761f21d020f.png
发明者量化-小小梦 没太明白,移仓换月相反仓位指的什么?
17606551005fmz 哦哦 明白了 谢谢
发明者量化-小小梦 下单没有成交。所以不会有持仓。下单时吃对手盘的价格 ,再超价一点试下。
发明者量化-小小梦 102行上下的代码发下看下(包括102行),是不是用_C函数。
发明者量化-小小梦 JS库 http://underscorejs.org/
发明者量化-小小梦 可以,设置麦语言:麦语言交易类库参数,执行方式 : 实时价模型 /upload/asset/166d993a8809d6f7f518.png
发明者量化-小小梦 策略广场 有可以看下。https://www.fmz.com/strategy/125569
发明者量化-小小梦 这类被墙的交易所, 一般用国外的服务器,运行托管者,然后机器人分配这个托管者运行,这样本机电脑就不用保持开机,因为机器人程序是在托管者所在服务器上运行的。
发明者量化-小小梦 不客气 。
wufuhao100w 哦哦,原来在后面,谢谢!
发明者量化-小小梦 后面有显示 问题原因的:检查是否API 相关权限开启。
wufuhao100w Futures_OP 0: 403: {"error":{"message":"Access Denied","name":"HTTPError"}} 具体编号72
发明者量化-小小梦 具体指的是哪个问题 ? 编号多少 ?
wufuhao100w 要在哪里看呢
wufuhao100w 上面的所有问题都没有解决方案的...
发明者量化-小小梦 哪个问题 ?
发明者量化-小小梦 用的是 python 么,导入了这个 乱码名字的 DLL ,乱码因为字符集原因。检查下策略导入那些 库。
小草 同时访问多个接口时,可以节约时间
发明者量化-小小梦 可以详细看下 API 文档上关于市价单的 描述, 市价单 买入的时候传入的第二个参数是 金额 不是 币数。
发明者量化-小小梦 可以使用 _G 函数 保存 详情参看 API 文档。
发明者量化-小小梦 这个需要 写程序 算。 访问GetPosition 接口,查询下 原始信息,里面应该有相关的数据。
发明者量化-小小梦 这个10007是 交易所的 错误码,https://www.fmz.com/bbs-topic/597 帖子是交易所API 文档汇总,可以查询相关交易所的 错误码信息。
发明者量化-小小梦 1、 ```ERR_INSUFFICIENT_ASSET ``` 这个是 资产不足 以 下单了。 2、```TypeError: Cannot convert "null" to double``` 这个是 传参数 传错了 ,应该是要求传的参数是 数值 类型, 传入 null 空值了。 这个直接百度 翻译字面意思 大概就知道了。
发明者量化-小小梦 可以看下 发明者知乎专栏 : https://zhuanlan.zhihu.com/p/27300549 这篇文章。
发明者量化-小小梦 哦 ? 具体是什么问题 ?
发明者量化-小小梦 百度 VPS 应该有很多 亚马逊 阿里云 其他地区 等等
发明者量化-小小梦 具体调用的是哪个 接口 ? 回测系统中 深度接口 除第一档 都是模拟数据。 还有一些不是 关键的数据 也是 模拟的。
发明者量化-小小梦 现在就是 非对称的加密,只要您保存好您的 FMZ 密码就可以,只不过 这个 牵涉安全问题和核心技术, 过多细节 不能告知,请见谅。
发明者量化-小小梦 用的是 python 的 time 包的 sleep 么。
chan122 sleep(300),回测的时候也得等300秒。。
发明者量化-小小梦 是的。租个 亚马逊之类的。
whjy 怎么解决 直接用国外的服务器么
发明者量化-小小梦 访问 交易所 超时 , 目前只有国外的服务器 能访问到 OKEX 。
发明者量化-小小梦 可以 跟随 5分钟K线 的更新 做处理, 其余时间用Sleep 跳过。
小草 这种条件太苛刻了
小草 api key使用密码明文加密的,你输入key时需要输入密码,botvs没有保存明文,所以没有问题
发明者量化-小小梦 哦 好的,感谢提出建议, 这边 安全机制 开发 等 ,是另一个部门负责的,这方面可能我不是很清楚。您提出的建议我们这边 积极考虑,给用户一个十分安全放心的量化交易环境。
老猫爱吃鱼 用原密码解密,这就是对称加密啊。 上传api key时候,输入的是botvs的密码进行加密。 部署托管者的时候,输入的仍然是botvs的密码进行解密。。。 如果botvs储存的加密后的apikey被泄露,只要获取用户的botvs密码,就能解密获取key的明文。 这很不安全。 建议换成非对称的公钥私钥。 公钥用来加密上传,私钥只在用户手里,只在部署托管者时使用。
发明者量化-小小梦 是非对称的, BotVS 不储存 明文API KEY, 用户 服务器本地 解密 使用的。 除非用户服务器被黑,或者 用户自己的密码外泄。现在 就是 部署托管者时需要输入 密码。
老猫爱吃鱼 谢谢回复。 深入讨教下整个api key的使用流程: 1、我们在botvs网站,web端输入api key并提交; 2、加密后,通过https传输到botvs服务器保存; 3、botvs服务器,把加密的api key推送给托管者; 4、托管者将收到的api key在本地解密,去连接对应的交易所。 所以,这是一个对称加密。只要有密钥,都可以解密。 也就是说,如果botvs的服务器被攻破,或者内部工作人员职业道德问题,key会外泄。 我的理解对吗? 如果是这样,建议换成非对称加密以保管key。 由用户在托管者处输入私钥,开始启动连接交易所。
发明者量化-小小梦 已经更新上,参看第47个 说明。
发明者量化-小小梦 已经更新上,参看第47个 说明。
老猫爱吃鱼 握手,我是刚刚接触botvs的代码老狗,同问。
发明者量化-小小梦 取当前时间在 python 代码中是这样写 ``` import time def main(): Log("当前时间:", _D(time.time())) # 输出当前时间。 ```
发明者量化-小小梦 不客气 ^^
Carpedium6740 是这个问题,已解决,谢谢
发明者量化-小小梦 应该是 密码配置 错误 ,失败登录次数超过限制了,导致的, 可以联系下 simnow 客服 , 申请下解封。 配置好密码 账户 之类的 ,之后 如果 修改了 BotVS 密码,配置的 就会失效,需要重新配置。
发明者量化-小小梦 可能 有些 指标 OK 用的 和 Talib 库的实现的 不一样。 好几个都是, 比如 STOCHRSI
发明者量化-小小梦 这个 问题 应该是 在您申请 交易所 API KEY 的时候 设置了 白名单 地址, 然后 您实际 创建机器人 访问 交易所 API KEY 的时候 使用的 IP 地址 不是 这个白名单上的, 您检查下 API KEY 申请时的设置。
发明者量化-小小梦 必须有 ID 的 否则 不知道 要查询的是 哪个订单。