// 获取合约代码前两位
symbolCode = SubStr(ContractCode,0,2);
// 设置品种持仓倍数(根据交割月规则)
LotMultiple = 1; // 默认值
if(symbolCode == "RB" || symbolCode == "WR" || symbolCode == "HC")
LotMultiple = 30; // 螺纹钢/线材/热卷
else if(symbolCode == "CU" || symbolCode == "AL" || symbolCode == "ZN" || symbolCode == "PB")
LotMultiple = 5; // 铜/铝/锌/铅
else if(symbolCode == "FU")
LotMultiple = 0; // 燃料油禁止持仓。ContractCode。TB中没有这函数?如何改谢谢?请大神帮助,谢谢。
试试这个DEMO
String StrSource(\"MO2405-P-5100\");
String TempStr(\"\");
String TempSymbol(\"\");
String TempTime(\"\");
Integer i;
If (FindFirstOf(StrSource, \"P\") >= 0)
Print(\"PutOption\");
Else
Print(\"CallOption\");
i = FindFirstOf(StrSource, \"-\");
StrSource = Left(StrSource, i);
Print(StrSource);
TempStr = Mid(StrSource, 1, 1);
If(TempStr >= \"0\" && TempStr <= \"9\")
{
TempSymbol = Left(StrSource, 1);
Print(\"Symbol: \" + TempSymbol);
TempTime = Right(StrSource, Len(StrSource) - 1);
Print(\"Time: \" + TempTime);
}
Else
{
TempSymbol = Left(StrSource, 2);
Print(\"Symbol: \" + TempSymbol);
TempTime = Right(StrSource, Len(StrSource) - 2);
Print(\"Time: \" + TempTime);
}
If(TempStr >= \"0\" && TempStr <= \"9\")
{
TempSymbol = Left(StrSource, 1);
Print(\"Symbol: \" + TempSymbol);
TempTime = Right(StrSource, Len(StrSource) - 1);
Print(\"Time: \" + TempTime);
}
Else
{
TempSymbol = Left(StrSource, 2);
Print(\"Symbol: \" + TempSymbol);
TempTime = Right(StrSource, Len(StrSource) - 2);
Print(\"Time: \" + TempTime);
}
大概意思就是类似的
主要是取第二个字符
判断是否数字
如果是数字
品种代码就取一位
如果不是数字
品种代码就是两位
StringSplit 可以对symbol字符串自己切割
请帮把上面代码改一下。因我不会改
你这上面的不会是AI写的吧
感觉最近都是DeepSeek用户🤣
是的,但它对我这个不太懂写代码的人是很好的帮助,它写的经慢调式,有时能实现自己的想法。
这个AI写的不能说很差吧,但也就是毫无关系的样子
Vars
String firstTwoLetters(""); // 存储提取的前两位字母
Events
OnInit()
{
// 初始化事件,可以在此设置数据源和其他初始化操作
}
OnBar(ArrayRef<Integer> indexs)
{
firstTwoLetters = Left(Symbol(), 2);
Print("提取的前两位字母: " + firstTwoLetters);
}
让AI写了一下
symbolPrefix =Left(Symbol(), 2);
Print("提取的前两位字母: " + symbolPrefix);
// 设置品种持仓倍数(根据图片中的手写笔记规则)
LotMultiple = 1; // 默认值
if(symbolPrefix == "RB") LotMultiple = 30; // 螺纹钢
else if(symbolPrefix == "CU") LotMultiple = 5; // 铜
else if(symbolPrefix == "FU") LotMultiple = 0; // 燃料油禁止持仓。据你的帮助通过了编译。谢谢了
有的合约
代码只有一个字母
也许你现在都是两个字母用不到
尽量考虑通用算法