FennEdge Learn · 编程

DAS Trader Advanced Hotkey Script Course

读懂代码,检查状态,验证结果。 从语言与数据结构,到订单对象、事件工作流和完整项目,系统学习 Advanced Script 编程。

按约 1046 分钟安排,已包含阅读、算例和每课练习;实际用时因人而异。

36节课程≈1046预计分钟—登录后保存进度
27
第 27/36 课 · 约 28 分钟

做一个可审查的 DAS 仓位数量计算器

把数学结果、账户约束与可执行数量分开。

从明确假设开始

基础数量模型用假设预算除以正的每股距离。它是在指定价格假设下的模型,不是最大损失保证;没有涵盖滑点、跳空、费用、保护被拒或行情变化。

Advanced Script · 假设输入 · 仅计算。 展示未舍入的模型数量,不写入 Share。

$feBudget = 30;
$feDistance = 0.25;
$feRawUnits = 0;
if ($feBudget > 0) {
    if ($feDistance > 0) {
        $feRawUnits = $feBudget / $feDistance;
        MsgBox($feRawUnits);
    } else {
        MsgBox("Distance must be positive");
        return;
    }
} else {
    MsgBox("Budget must be positive");
    return;
}

预期模型数量是 120。距离改成 0.40,结果为 75;改成零,不应再展示有效数量。

从模型变成可审查的规格

步骤 必须明确的决定
验证输入 正的预算和距离、正确单位
计算模型 预算除以距离
加入约束 账户购买力、数量上限、交易单位规则
明确舍入 有文档、经过测试、不放大允许敞口的规则
重新计算 数量乘以距离,费用另外考虑
展示结果 同时展示输入、假设与输出

不要猜一个 Floor() 函数,也不要把 Round(...,100) 当成普通整数舍入。手册为部分 Round precision 值定义了特殊的整手含义;转成订单输入之前,先核对准确规则。

动手练习:边界输入

预算为 30,距离依次为 0.25、0.40、0、-0.25;然后预算改成 0。再加一组产生小数数量的输入,先把期望舍入规则写成规格,再实现。

两种约束取更严格的一种

假设预算模型给出 120,另有手动练习数量上限 80,则候选数量是 80。再应用“向下到整百股”的教学规则会变成 0,所以本次模型应显示“没有满足该整手规则的数量”,不能偷偷改用四舍五入得到 100。

下面只使用固定假数据与全局变量。上限是练习配置,不是读取到账户授权或 Buying Power。这里选择 100 股为练习手数,只用于演示 Round(...,100) 的文档语义。

$feBudget = 30;
$feDistance = 0.25;
$feCap = 110;
$feSizedReady = 0;
$feSizedUnits = 0;
if ($feBudget <= 0) { return; }
if ($feDistance <= 0) { return; }
if ($feCap <= 0) { return; }
$feCandidate = $feBudget / $feDistance;
if ($feCandidate > $feCap) {
    $feCandidate = $feCap;
}
$feSizedUnits = Round($feCandidate, 100);
if ($feSizedUnits <= 0) {
    MsgBox("No quantity under this lot rule");
    return;
}
$feModelExposure = $feSizedUnits * $feDistance;
$feSizedReady = 1;
MsgBox($feSizedUnits, " / ", $feModelExposure);

练习解答

代码输入得到候选 110、整手数量 100、模型敞口 25。把上限改 80,ready 保持 0;不能把上一轮 100 当作本轮结果。预算 30、距离 0.40 的原始数量为 75,也无法满足本例整百股规则。取整选择会改变是否有可用结果,因此属于规格而不是格式化。

如需加入名义金额上限,先把金额除以正的假定价格变为数量,再与其他数量约束比较;不能直接拿美元与股数取较小值。手续费、跳空与滑点不在这个模型里。继续在 数值与单位 中检查量纲。