关于多帐号的序列变量的赋值和使用问题
2024-06-12 11:06

老师好,我有个策略是用来止损的,但是运行时可能会关联多个帐号,我需要查询一个最高的浮赢,然后根据比例来止损,例如我的代码如下:

变量定义如下:

Vars

   Series<Numeric> highLProfit; // 多仓最高盈亏

   Series<Numeric> highSProfit; // 空仓最高盈亏


关键代码如下:

Numeric i;

For i = 0 to A_AccountCount()-1

{

Array<String> acct_symbols;

   A_GetPositionSymbols(acct_symbols, i);

Numeric j;

   For j = 0 to GetArraySize(acct_symbols)-1

   {

       Position pos;

       A_GetPosition(acct_symbols[j], pos, \"\", i);

       highLProfit=Max(highLProfit, pos.longFloatProfitO;);

       highSProfit=Max(highSProfit, pos.shortFloatProfitO;);

       ... 然后balaala代码

   }

}

理论上,着两个high应该获取到最高值啊,但是我发现取到的数据永远是最新的数据并不是历史最高,请问是哪里的业务逻辑有问题么?


评论区
tbn1723023116

因为我是一个for循环遍历用来做止损(拿最高回撤举例),我要记录每一个帐号的每一个合约的最高浮赢(计算回撤比例),如果是序列值就会被此被覆盖成当前值(就是当前值变成了最高值),如果是global类型,如果是单帐户单合约是没问题的,如果是多合约,因为我只取最高浮赢,有些合约已入场可能就是负数,这个时候我会默认把最高浮赢置为零(因为入场就为负数有另外一个对浮亏更加敏感的循环来实现,他俩的比例和敏感度不一样),所以如果碰到这种情况,就会发现A合约的global值(假如最高浮赢是正数)会传递给B合约(假如是最高浮赢是负数)从而导致结果不准确。

但是如果存到dbprofile就没问题了,每个都是自己单独的。

2024-06-14 11:40
tbn1723023116

使用Series或者Global在多帐号多合约的场景下, 都不行,我使用TBProfile中转存储一下搞定了,谢谢老师。

2024-06-12 11:45
tbn1723023116

谢谢老师,如果换成global变量的话,那么第二个j循环里面获取到的最高值都是同一个了

2024-06-12 11:19
tbn1723023116

尤其是多帐号多合约的时候,这两个值就完全和预期不一致了。所以请教老师看看是不是代码的设计逻辑有点问题

2024-06-12 11:13
顶部