3.46K 浏览
0

你好,如下图片,请问被标记的这两处代码有什么作用,它们是不是与绿色标记处重复了;

lookis 已回答的问题 2020年7月22日
0

没用重复,你要注意红色和绿色中间还有一个 wait_price 的递归调用,当调用进去之后,本层的wait_price 就被 “接管” 了,在多头方向就相当于增加了一层网格。比方说现在在多头第N层,调用进去之后就变成第N+1层,并且在第N+1层里while True循环。

当代码在第N+1层的时候,相当于一直在检测是否到了网格的新一个格子,如果到了就下单并且进入第N+2 层,如果没到就在本层循环,如果退了一格就需要退一格档位(通过看return那三行)

当退一格档位的时候,代码就回到了第N层,这个时候就需要把在第N+1层里调整过的持仓调整回来,所以才有红色的调用。

那为什么不在上一层N-1而要在第N层直接设置成N呢?我猜原因可能主要在于边界情况,比方说第0层的时候再N-1就是-1了……

lookis 发表新评论 2020年7月23日

感谢官方的回复;
假如现在是多头方向,当代码在n层的时候,先执行绿色标记处的 target_pos.set_target_volume(grid_volume_long[n + 1]),再进入递归(即 n+1 层),当在 n+1 层里碰到 wait_update( ) 时,n 层绿色标记处就成交了,表示当前已经持有 n+1 手多单;因为程序有可能从 n+1 层退回到 n 层,那我们想一下,在什么情况下会退回到上一层呢? 只有满足n+1层里的 if quote.last_price > grid_prices_long[layer] 的情况下才会退回到 n 层,也就是不满足 if layer < GRID_AMOUNT and quote.last_price <= grid_prices_long[layer+ 1],也就是说程序根本不会触碰 n+1 层里的绿框代码……碰到 n+1 层里的 return 后就退回到了 n 层,之前持有的 n+1 手多单保持不变,所以没有必要再次执行红框代码;我的理解对吗?

我不是官方哈,也是个用户。你的理解基本正确,每一层都保证代码在自己这层运行时,仓位是自己这层应该持有的。不管进了多深,也不管在N+1、N+2有多少特殊的情况发生,只要回到我第N层,那么就保持着我应有的仓位