// 定义参数和变量
Params
Numeric Length_SmallPeriod(50); // 小周期的高低价通道周期
Numeric Amount_ATR(5); // 多少个ATR作为趋势标准
Numeric Avg_Period(100); // 指定AvgATR的过去周期数
Numeric Trace_Back_Period(100); // 收盘价回溯周期
Numeric Risk_Percentage(2); // 每笔交易的风险百分比(例如2%)
Vars
Numeric Lots(1);
Series<Numeric> Slips;
Numeric TimeFrame(60); // 目标时间周期参数
Numeric BarsBack(1); // 目标时间周期BAR偏移
Series<Numeric> mtBarCnt;
Series<Numeric> iHigh;
Series<Numeric> iLow;
Series<Numeric> iClose;
Series<Numeric> iCurbar;
Series<Numeric> Holding;
Series<Numeric> XJ;
Series<Numeric> HH;
Series<Numeric> LL;
Series<Numeric> MA_HL;
Series<Numeric> ZG;
Series<Numeric> ATR;
Series<Numeric> GD;
Series<Numeric> DD;
Series<Numeric> SG;
Series<Numeric> XG;
Series<Numeric> SG2;
Series<Numeric> XG2;
Series<Numeric> DP;
Series<Numeric> KP;
Series<Bool> KD;
Series<Bool> PD;
Series<Bool> KK;
Series<Bool> PK;
// ATR跟踪止盈
Series<Numeric> ATR_2024; // 上涨波动指标
Series<Numeric> AvgATR; // 过去指定周期内的平均波动
Series<Numeric> Close_Minors_AvgATR; // 上涨中ATR下限
Series<Numeric> Close_Adds_AvgATR; // 下跌中ATR上限
Numeric i;
Numeric k;
// 平仓全局变量说明
// Var(0): 开仓价格
// Var(1): 最新止盈价格
// Var(2): 开仓后的趋势新高/低
// Var(3): 止盈价格可变(0:不可变,1:可变)
// Var(4): 止损价格
Events
onBar(ArrayRef<Integer> indexs)
{
/* ATR: 确定ATR跟踪线 --------------------------------------------- */
ATR_2024 = Max(High, Close[1]) - Min(Low, Close[1]);
AvgATR = Average(ATR_2024, Avg_Period);
Close_Minors_AvgATR = Close - Amount_ATR * AvgATR;
Close_Adds_AvgATR = Close + Amount_ATR * AvgATR;
// 上涨趋势的ATR下限
k = Highest(Close_Minors_AvgATR, Trace_Back_Period);
If (Close_Minors_AvgATR <= k) {
Close_Minors_AvgATR = k;
}
// 下跌趋势的ATR上限
k = Lowest(Close_Adds_AvgATR, Trace_Back_Period);
If (Close_Adds_AvgATR >= k) {
Close_Adds_AvgATR = k;
}
// 输出ATR区间
If (Close > Close_Minors_AvgATR)
PlotNumeric(\"A1\", Close_Minors_AvgATR, 0, Green);
If (Close < Close_Adds_AvgATR)
PlotNumeric(\"A2\", Close_Adds_AvgATR, 0, Yellow);
/* ---------------------------------------------------------------- */
// 添加长期移动平均线来判断趋势
Series<Numeric> MA_Long = Average(Close, 200); // 例如200周期的移动平均线
// 计算小周期数据
mtBarCnt = k_Bar(TimeFrame, BarsBack); // 调用跨周期基础函数
iHigh = k_Bar(TimeFrame, \"High\"); // 读取跨周期BAR数据
iLow = k_Bar(TimeFrame, \"Low\"); // 读取跨周期BAR数据
iClose = k_Bar(TimeFrame, \"Close\"); // 读取跨周期BAR数据
iCurbar = k_Bar(TimeFrame, \"curbar\"); // 读取跨周期BAR数据
HH = Highest(High, Length_SmallPeriod);
LL = Lowest(Low, Length_SmallPeriod);
MA_HL = Average(High - Low, Length_SmallPeriod);
if (CurrentBar == 0) XJ = Close;
ZG = (HH + LL) / 2;
ATR = MA_HL * 5;
GD = HH;
DD = LL;
SG = ZG;
XG = ZG;
SG2 = MAX(GD, SG);
XG2 = MIN(DD, XG);
DP = MAX(ZG, XJ - ATR);
KP = MIN(ZG, XJ + ATR);
KD = Holding == 0 AND H >= SG2[1]; // BK买开
PD = Holding > 0 AND L <= DP[1]; // SP卖平
KK = Holding == 0 AND L <= XG2[1]; // SK卖开
PK = Holding < 0 AND H >= KP[1]; // BP买平
If (CurrentBar < Length_SmallPeriod) Return;
IF (PD) {
XJ = MIN(O, DP[1]);
// 此段仅进行止损平仓
If (XJ <= GetGlobalVar(0)) {
Sell(0, XJ);
Holding = 0;
SetGlobalVar(0, 0);
SetGlobalVar(1, 0);
SetGlobalVar(3, 0);
}
}
/* ATR: ATR多单止盈平仓 ------------------------------------------- */
If (Holding > 0) {
If (High > GetGlobalVar(2)) {
SetGlobalVar(2, High);
SetGlobalVar(3, 1);
}
If (Low[1] < Close_Minors_AvgATR[1] and Low[1] > GetGlobalVar(1) and GetGlobalVar(3) > 0) {
SetGlobalVar(1, Low[1]);
SetGlobalVar(3, 0);
}
If (Low < GetGlobalVar(1) and GetGlobalVar(0) < GetGlobalVar(1)) {
Sell(0, Min(GetGlobalVar(1) - MinMove * PriceScale, Open));
Holding = 0;
SetGlobalVar(0, 0);
SetGlobalVar(1, 0);
}
}
/* ---------------------------------------------------------------- */
IF (KD and Close > MA_Long){
XJ = MAX(O, SG2[1]);
Lots = Max(1, IntPart(30000 / (XJ * ContractUnit * BigPointValue * 0.1))); // 开仓手数以3万保证金计算,假设每个品种的保证金率都为10%
Buy(Lots, XJ);
Holding = 1;
SetGlobalVar(0, XJ);
SetGlobalVar(1, 0);
SetGlobalVar(2, High);
SetGlobalVar(3, 0);
// 设置动态止损
SetGlobalVar(4, XJ - 2 * ATR);
}
IF (PK) {
XJ = MAX(O, KP[1]);
// 此段仅进行止损平仓
If (XJ >= GetGlobalVar(0)) {
BuyToCover(0, XJ);
Holding = 0;
SetGlobalVar(0, 0);
SetGlobalVar(1, 0);
SetGlobalVar(3, 0);
}
}
/* ATR: ATR空单止盈平仓 ------------------------------------------- */
If (Holding < 0) {
If (Low < GetGlobalVar(2)) {
SetGlobalVar(2, Low);
SetGlobalVar(3, 1);
}
If (High[1] > Close_Adds_AvgATR[1] and High[1] < GetGlobalVar(1) and GetGlobalVar(3) > 0) {
SetGlobalVar(1, High[1]);
SetGlobalVar(3, 0);
}
If (High > GetGlobalVar(1) and GetGlobalVar(0) > GetGlobalVar(1)) {
BuyToCover(0, Max(GetGlobalVar(1) + MinMove * PriceScale, Open));
Holding = 0;
SetGlobalVar(0, 0);
SetGlobalVar(1, 0);
}
}
/* ---------------------------------------------------------------- */
IF (KK and Close < MA_Long){
XJ = MIN(O, XG2[1]);
Lots = Max(1, IntPart(30000 / (XJ * ContractUnit * BigPointValue * 0.1))); // 开仓手数以3万保证金计算,假设每个品种的保证金率都为10%
SellShort(Lots, XJ);
Holding = -1;
SetGlobalVar(0, XJ);
SetGlobalVar(1, 9999999999);
SetGlobalVar(2, Low);
SetGlobalVar(3, 0);
// 设置动态止损
SetGlobalVar(4, XJ + 2 * ATR);
}
// 止损检查
If (Holding > 0 and Low < GetGlobalVar(4)) {
Sell(0, Min(GetGlobalVar(4) - MinMove * PriceScale, Open));
Holding = 0;
SetGlobalVar(0, 0);
SetGlobalVar(1, 0);
SetGlobalVar(3, 0);
SetGlobalVar(4, 0);
}
If (Holding < 0 and High > GetGlobalVar(4)) {
BuyToCover(0, Max(GetGlobalVar(4) + MinMove * PriceScale, Open));
Holding = 0;
SetGlobalVar(0, 0);
SetGlobalVar(1, 0);
SetGlobalVar(3, 0);
SetGlobalVar(4, 0);
}
}
问题是 这个导入 有问题。不知道问题在哪儿
你的问题是什么
你理解全局变量的用法吗