DAS 脚本按股票组织状态与账户上下文
区分只读行情字段、QuoteObj.data 与账户专属状态。
三种归属与生命周期
前置知识:自定义对象与行情对象。BID、ASK 等字段报告市场观察;QuoteObj.data 是文档明确允许写入的自定义数据槽;账户状态则属于明确指定的账户。同一个股票的 QuoteObj 并不会为两个账户自动生成两份 data。
附加一条有归属的记录
Advanced Script · 读取行情并替换该行情对象的自定义 data。练习会话需已加载 MSFT 行情,且没有其他脚本使用这个 data 槽。初始化不能放在每秒重复执行的 Timer 中。
示例代码
$feQuote = GetQuoteObj("MSFT");
$feQuote.data = NewUserObj();
$feQuote.data.owner = "FE_QuotePractice";
$feQuote.data.schema = 1;
$feQuote.data.enabled = 0;
$feQuote.data.sampleSecond = GetSecond();
$feQuote.data.observedBid = $feQuote.BID;
$feQuote.data.observedAsk = $feQuote.ASK;
MsgBox($feQuote.data.owner, $feQuote.data.observedBid);
什么在更新,什么只是快照
行情对象可能持续暴露变化的报价,observedBid 则只是本次读取的副本。sampleSecond 是脚本观察时间,不是交易所时间。重新赋 data 会替换这个槽中的旧值。多个模块共享时,应建立统一父对象并划分子记录,或使用独立的应用注册表。自定义 armed 标记不能当作券商状态。
账户读取
GetAccountObj("account") 在手册中列出 BP、NBP、Equity。使用准确的模拟账户标识并先检查对象。下方 TR_PRACTICE 是占位名称,不是已经创建的账户。BP、NBP、Equity 不能互换;不能仅凭缩写猜一个通用 NBP 计算公式。
账户读取片段
// Replace TR_PRACTICE with a verified training account first.
$feAccount = GetAccountObj("TR_PRACTICE");
$feAccount.ShowObject();
MsgBox($feAccount.BP, $feAccount.Equity);
练习与参考解答
两个账户都观察 MSFT 并写 quote.data.ready,问题在哪里?参考解答:该对象按股票寻址,不是按账户加股票寻址。应在记录内保存账户并检查是否匹配,或为账户分别维护注册表;切换账户时使准备状态失效。专门测试“股票不变,只切换账户”。