程序中唯一的SellShort语句,被包含在一个if判断中。判断有三个条件,按说都不复杂,但是看信号发现,第三个条件语句似乎经常不能正确执行,麻烦老师帮忙看看问题出在哪里。谢谢
// 简称: slkd3
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
//此处添加参数
Numeric millsecs(1000);
Numeric Length(9); //slowkd原始参数
Numeric SlowLength(3);
Numeric SmoothLength(3);
Numeric DayShifts(23); //一小时5 半小时8 十五分钟15 夜盘半小时12 夜盘15分钟23
Numeric slippery(0);
Vars
Numeric pos(1);
Numeric Lots(1);
Series<Numeric> xt;
Series<Numeric> xt1;
Series<Numeric> xt2;
Global Integer timerId;
Series<Numeric> HighestValue; //slowkd原始变量
Series<Numeric> LowestValue;
Series<Numeric> KValue;
Series<Numeric> DValue;
Series<Numeric> RSV;
Series<Numeric> FastK(50);
Series<Numeric> crsupk1(50); //记录穿越时KValue 数值
Series<Numeric> crsupk2(50);//cross up k value No.2 的简写
Series<Numeric> crsupk3(50);
Series<Numeric> crsupk4(50);
Series<Numeric> crsdnk1(50);
Series<Numeric> crsdnk2(50);//cross down k value No.2 的简写
Series<Numeric> crsdnk3(50);
Series<Numeric> crsdnk4(50);
Series<Numeric> crsuplks1(0); //记录穿越时位置,当前K线为0
Series<Numeric> crsuplks2(0);//cross up location No.2 的简写
Series<Numeric> crsuplks3(0);
Series<Numeric> crsuplks4(0);
Series<Numeric> crsdnlks1(0);
Series<Numeric> crsdnlks2(0);//cross down location No.2 的简写
Series<Numeric> crsdnlks3(0);
Series<Numeric> crsdnlks4(0);
Numeric CrosCheck(-5); //附图底端折线记录标准一次穿越的位置,初始值-5,向上尖表示crossup,向下尖表示crossdown
Numeric CrosDoubleCheck(1); //附图底端折线记录中间带一次纠结的穿越的位置
Numeric CrosTripleCheck(7); //附图底端折线记录中间带两次纠结的穿越的位置
Series<Numeric> DayHi1; //带day的都是日线相关参数 构建日slowkd
Series<Numeric> DayHi2;
Series<Numeric> DayHi3;
Series<Numeric> DayHi4;
Series<Numeric> DayHi5;
Series<Numeric> DayHi6;
Series<Numeric> DayHi7;
Series<Numeric> DayHi8;
Series<Numeric> DayHi9;
Series<Numeric> DayLo1;
Series<Numeric> DayLo2;
Series<Numeric> DayLo3;
Series<Numeric> DayLo4;
Series<Numeric> DayLo5;
Series<Numeric> DayLo6;
Series<Numeric> DayLo7;
Series<Numeric> DayLo8;
Series<Numeric> DayLo9;
Series<Numeric> DayCrsupk1(50); //日线二次交叉 记录较为简单 可以改进
Series<Numeric> DayCrsupk2(50);
Series<Numeric> DayCrsdnk1(50);
Series<Numeric> DayCrsdnk2(50);
Series<Numeric> DayCrsuplks1(0);
Series<Numeric> DayCrsuplks2(0);
Series<Numeric> DayCrsdnlks1(0);
Series<Numeric> DayCrsdnlks2(0);
Numeric DayCrosCheck(-5); //记录日二次交叉
Series<Numeric> DayRSV(0);
Series<Numeric> DayFastK(0);
Series<Numeric> DayKValue(0);
Series<Numeric> DayDValue(0);
Series<Numeric> DayLowest(9999999);
Series<Numeric> DayHighest(0);
Numeric i;
Series<Numeric> DayDiffOrigin;
Series<Bool>UpCondition1;//一次更高金叉
Series<Bool>UpCondition2;//前两次金叉太近可以合二为一
Series<Bool>UpCondition3;//前三次金叉太近可以合二为一
Series<Bool>UpCondition4;//上次金叉低于20
Series<Bool>UpCondition5;//连续三个向上
Series<Bool>UpCondition6;//三个向上尖尖
Series<Bool>DownCondition1;//一次更低死叉
Series<Bool>DownCondition2;//前两次死叉太近可以合二为一
Series<Bool>DownCondition3;//前三次死叉太近可以合二为一
Series<Bool>DownCondition4;//上次死叉高于80
Series<Bool>DownCondition5;//连续三个向下
Series<Bool>DownCondition6;//三个向下尖尖
Series<Numeric> HighestAfterEntry; //止盈止损用
Series<Numeric> LowestAfterEntry; //止盈止损用
Series<Numeric> DayCrsFlag(0); //日线是否处于二次穿越后状态 是持续性参数 0,±1
Series<Numeric> DayMmtFlag(0); //日线momentum 持续性参数 0,1
Series<Numeric> stops(0); //止盈止损后不要下一根同方向立即开仓 0,1
Series<Numeric> MaShort;
Defs
//此处添加公式函数
Numeric calcAvg(Numeric a,Numeric b)
{
return (a+b)/2;
}
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
timerId=createTimer(millsecs);
//与数据源有关
Range[0:DataCount-1]
{
//=========数据源相关设置==============
//AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
//AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
//AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
//AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
//AddDataFlag(Enum_Data_OnlyDay()); //设置仅日盘
//AddDataFlag(Enum_Data_OnlyNight()); //设置仅夜盘
//AddDataFlag(Enum_Data_NotGenReport()); //设置数据源不参与生成报告标志
//=========交易相关设置==============
//MarginRate rate;
//rate.ratioType = Enum_Rate_ByFillAmount; //设置保证金费率方式为成交金额百分比
//rate.longMarginRatio = 0.1; //设置保证金率为10%
//rate.shortMarginRatio = 0.2; //设置保证金率为20%
//SetMarginRate(rate);
//CommissionRate tCommissionRate;
//tCommissionRate.ratioType = Enum_Rate_ByFillAmount;
SetCommissionRate(BitOr(Enum_Rate_FreeOfExitToday,Enum_Rate_ByFillAmount),5); //设置开仓手续费为成交金额的5%%
//tCommissionRate.closeRatio = 2; //设置平仓手续费为成交金额的2%%
//tCommissionRate.closeTodayRatio = 0; //设置平今手续费为0
//SetCommissionRate(tCommissionRate); //设置手续费率
//SetSlippage(Enum_Rate_PointPerHand,2); //设置滑点为2跳/手
//SetOrderPriceOffset(2); //设置委托价为叫买/卖价偏移2跳
//SetOrderMap2MainSymbol(); //设置委托映射到主力
//SetOrderMap2AppointedSymbol(symbols, multiples); //设置委托映射到指定合约,symbols是映射合约数组,multiples是映射倍数数组
SetConsecEntries(1);
}
//与数据源无关
//SetBeginBarMaxCount(10); //设置最大起始bar数为10
//SetBackBarMaxCount(10); //设置最大回溯bar数为10
//=========交易相关设置==============
//SetInitCapital(1000000); //设置初始资金为100万
//AddTradeFlag(Enum_Trade_Ignore_Buy()); //设置忽略多开
//AddTradeFlag(Enum_Trade_Ignore_Sell()); //设置忽略多平
//AddTradeFlag(Enum_Trade_Ignore_SellShort()); //设置忽略空开
//AddTradeFlag(Enum_Trade_Ignore_Buy2Cover()); //设置忽略空平
}
//在所有的数据源准备完成后调用,应用在数据源的设置等操作
OnReady()
{
}
//基础数据更新事件函数
OnDic(StringRef dicName,StringRef dicSymbol,DicDataRef dicValue)
{
}
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{//on bar~~
Lots=IntPart(50*10000/(Open*contractunit*BigPointValue));
MaShort=Average(close,3);
if(BarsSinceEntry==1)
{
HighestAfterEntry=max(high,high[1]);
LowestAfterEntry=min(low,low[1]);
}Else
{
HighestAfterEntry = Max(HighestAfterEntry,High);
LowestAfterEntry = Min(LowestAfterEntry,Low);
}//$132
HighestValue=HighestFC(high,Length);
LowestValue=LowestFC(low,Length);
RSV=IIF(HighestValue==LowestValue,RSV[1],(Close-LowestValue)/(HighestValue-LowestValue)*100);
FastK=(RSV*(2/3)^0+RSV[1]*(2/3)^1+RSV[2]*(2/3)^2+RSV[3]*(2/3)^3+RSV[4]*(2/3)^4+RSV[5]*(2/3)^5+RSV[6]*(2/3)^6+RSV[7]*(2/3)^7+RSV[8]*(2/3)^8)/3+FastK[9]*(2/3)^9;
KValue=(FastK*(2/3)^0+FastK[1]*(2/3)^1+FastK[2]*(2/3)^2+FastK[3]*(2/3)^3+FastK[4]*(2/3)^4+FastK[5]*(2/3)^5+FastK[6]*(2/3)^6+FastK[7]*(2/3)^7+FastK[8]*(2/3)^8)/3+KValue[9]*(2/3)^9;
DValue=(KValue*(2/3)^0+KValue[1]*(2/3)^1+KValue[2]*(2/3)^2+KValue[3]*(2/3)^3+KValue[4]*(2/3)^4+KValue[5]*(2/3)^5+KValue[6]*(2/3)^6+KValue[7]*(2/3)^7+KValue[8]*(2/3)^8)/3+DValue[9]*(2/3)^9;
PlotNumeric(\".K\",KValue); //plots
PlotNumeric(\".D\",DValue); //$$145
If(KValue>DValue and KValue[1]<DValue[1])//金叉 //记录近期每一个金死叉位置和高度,各四个↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
{
crsupk4=KValue[crsupk3+1];
crsupk3=KValue[crsupk2+1];
crsupk2=KValue[crsupk1+1];
crsupk1=KValue[1];//金叉之前的那个k
crsuplks4=crsuplks3+1;
crsuplks3=crsuplks2+1;
crsuplks2=crsuplks1+1;
crsuplks1=0;
}Else If(KValue<DValue and KValue[1]>DValue[1])//死叉
{
crsdnk4=KValue[crsdnk3+1];
crsdnk3=KValue[crsdnk2+1];
crsdnk2=KValue[crsdnk1+1];
crsdnk1=KValue[1];//死叉之前的那个k
crsdnlks4=crsdnlks3+1;
crsdnlks3=crsdnlks2+1;
crsdnlks2=crsdnlks1+1;
crsdnlks1=0;
}Else
{
crsuplks1=crsuplks1+1;
crsuplks2=crsuplks2+1;
crsuplks3=crsuplks3+1;
crsuplks4=crsuplks4+1;
crsdnlks1=crsdnlks1+1;
crsdnlks2=crsdnlks2+1;
crsdnlks3=crsdnlks3+1;
crsdnlks4=crsdnlks4+1;
} //$$183
//三种穿越的定义↓
UpCondition1=crsuplks1==0 and crsupk1-crsupk2>10; //目前金叉且距离上一次k值小于10
UpCondition2=crsuplks1==0 and crsupk1>crsupk3 and Max(crsdnk1,Max(crsdnk2,crsupk2))-Min(crsdnk1,Min(crsdnk2,crsupk2))<15;
UpCondition3=crsuplks1==0 and crsupk1<crsupk4 and Max(Max(crsdnk1,crsupk2),Max(Max(crsupk3,crsdnk2),crsdnk3))-Min(Min(crsdnk1,crsupk2),Min(Max(crsupk3,crsdnk2),crsdnk3))<20;
DownCondition1=crsdnlks1==0 and crsdnk1-crsdnk2<-10;
DownCondition2=crsdnlks1==0 and crsdnk1<crsdnk3 and Max(crsupk1,Max(crsupk2,crsdnk2))-Min(crsupk1,Min(crsupk2,crsdnk2))<15;
DownCondition3=crsdnlks1==0 and crsdnk1<crsdnk4 and Max(Max(crsupk1,crsupk2),Max(Max(crsupk3,crsdnk2),crsdnk3))-Min(Min(crsupk1,crsupk2),Min(Max(crsupk3,crsdnk2),crsdnk3))<20;
If(DownCondition1) {CrosCheck=-8;}Else If(UpCondition1) {CrosCheck=-2;} Else{CrosCheck=-5;} //三种穿越的绘制
If(DownCondition2) {CrosDoubleCheck=-2;}Else If(UpCondition2){CrosDoubleCheck=4;}Else{CrosDoubleCheck=1;}
If(DownCondition3){CrosTripleCheck=4;}Else If(UpCondition3){CrosTripleCheck=10;}Else{CrosTripleCheck=7;}
UpCondition4=crsuplks1==0 and crsupk1>crsupk2 and crsupk2<20;
DownCondition4=crsdnlks1==0 and crsdnk1<crsdnk2 and crsdnk2>80;
UpCondition5=crsuplks1==0 And crsupk1>crsupk2 and crsupk2>crsupk3 And crsuplks2>3 and crsuplks3>crsuplks2+4 and crsuplks2>crsuplks1+4;
DownCondition5=crsdnlks1==0 And crsdnk1<crsdnk2 and crsdnk2<crsdnk3 And crsdnlks2>3 and crsdnlks3>crsdnlks2+4 and crsdnlks2>crsdnlks2+4;
UpCondition6=(CrosTripleCheck==10 And CrosDoubleCheck==4) Or (CrosTripleCheck==10 and CrosCheck==-2);
DownCondition6=(CrosTripleCheck==4 And CrosDoubleCheck==-2) Or (CrosTripleCheck==4 and CrosCheck==-8);
PlotNumeric(\"tpgdcrs\",CrosTripleCheck,0,White);
PlotNumeric(\"dbgdcrs\",CrosDoubleCheck,0,White);
PlotNumeric(\"gdcrs\",CrosCheck,0,White);
//$$214
//==================================================================================================================================
//处理日slowkd的画线以及数据记录↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
DayHi1=HighD(1);
DayHi2=HighD(2);
DayHi3=HighD(3);
DayHi4=HighD(4);
DayHi5=HighD(5);
DayHi6=HighD(6);
DayHi7=HighD(7);
DayHi8=HighD(8);
DayHi9=HighD(9);
DayHighest=Max(DayHi1,Max(DayHi2,Max(DayHi3,Max(DayHi4,Max(DayHi5,Max(DayHi6,Max(DayHi7,Max(DayHi8,DayHi9))))))));
DayLo1=LowD(1);
DayLo2=LowD(2);
DayLo3=LowD(3);
DayLo4=LowD(4);
DayLo5=LowD(5);
DayLo6=LowD(6);
DayLo7=LowD(7);
DayLo8=LowD(8);
DayLo9=LowD(9);
DayLowest=Min(DayLo1,Min(DayLo2,Min(DayLo3,Min(DayLo4,Min(DayLo5,Min(DayLo6,Min(DayLo7,Min(DayLo8,DayLo9)))))))); //
DayRSV=IIF(DayHighest==DayLowest,DayRSV[1],(CloseD(1)-DayLowest)/(DayHighest-DayLowest)*100);
//DayFastK=IIF(,DayFastK[1],(DayRSV[1]+DayRSV[1*DayShifts+1]*(2/3)^1+DayRSV[2*DayShifts+1]*(2/3)^2+DayRSV[3*DayShifts+1]*(2/3)^3+DayRSV[4*DayShifts+1]*(2/3)^4+DayRSV[5*DayShifts+1]*(2/3)^5+DayRSV[6*DayShifts+1]*(2/3)^6+DayRSV[7*DayShifts+1]*(2/3)^7+DayRSV[8*DayShifts+1]*(2/3)^8)/3+DayFastK[9*DayShifts+1]*(2/3)^9);
if(date!=date[1])
{
Numeric q1 = (DayRSV[1]+DayRSV[1*DayShifts+1]*(2/3)^1+DayRSV[2*DayShifts+1]*(2/3)^2+DayRSV[3*DayShifts+1]*(2/3)^3+DayRSV[4*DayShifts+1]*(2/3)^4+DayRSV[5*DayShifts+1]*(2/3)^5+DayRSV[6*DayShifts+1]*(2/3)^6+DayRSV[7*DayShifts+1]*(2/3)^7+DayRSV[8*DayShifts+1]*((2/3)^8))/3;
xt = DayRSV[9*DayShifts+1]*(2/3)^9;
DayFastK = q1+xt;
/*DayFastK = (DayRSV[1]+DayRSV[1*DayShifts+1]*(2/3)^1+
DayRSV[2*DayShifts+1]*(2/3)^2+DayRSV[3*DayShifts+1]*(2/3)^3+
DayRSV[4*DayShifts+1]*(2/3)^4+DayRSV[5*DayShifts+1]*(2/3)^5+DayRSV[6*DayShifts+1]*(2/3)^6+
DayRSV[7*DayShifts+1]*(2/3)^7+DayRSV[8*DayShifts+1]*(2/3)^8)/3;*/
Commentary(\"q1:\"+text(q1));
Commentary(\"xt:\"+text(xt));
}
//PlotNumeric(\"xxt\",xt);
/*Commentary(\"DayFastK[1]\"+text(DayFastK[1]));
Commentary(\"DayRSV[1]:\"+text(DayRSV[1]));
Commentary(\"DayRSV[1*DayShifts+1]\"+text(DayRSV[1*DayShifts+1]));
Commentary(\"DayRSV[2*DayShifts+1]\"+text(DayRSV[2*DayShifts+1]));
Commentary(\"DayRSV[3*DayShifts+1]\"+text(DayRSV[3*DayShifts+1]));
Commentary(\"DayRSV[4*DayShifts+1]\"+text(DayRSV[4*DayShifts+1]));
Commentary(\"DayRSV[5*DayShifts+1]\"+text(DayRSV[5*DayShifts+1]));
Commentary(\"DayRSV[6*DayShifts+1]\"+text(DayRSV[6*DayShifts+1]));
Commentary(\"DayRSV[7*DayShifts+1]\"+text(DayRSV[7*DayShifts+1]));
Commentary(\"DayRSV[8*DayShifts+1]\"+text(DayRSV[8*DayShifts+1]));
Commentary(\"DayRSV[9*DayShifts+1]*(2/3)^9:\"+text(DayRSV[9*DayShifts+1]*(2/3)^9));
Commentary(\"currentbar:\"+text(currentbar));
Commentary(\"DayShifts*9:\"+text(DayShifts*9+1));*/
//DayKValue=IIF(date==date[1],DayKValue[1],(DayFastK[0]*(2/3)^0+DayFastK[1*DayShifts]*(2/3)^1+DayFastK[2*DayShifts]*(2/3)^2+DayFastK[3*DayShifts]*(2/3)^3+DayFastK[4*DayShifts]*(2/3)^4+DayFastK[5*DayShifts]*(2/3)^5+DayFastK[6*DayShifts]*(2/3)^6+DayFastK[7*DayShifts]*(2/3)^7+DayFastK[8*DayShifts]*(2/3)^8)/3+DayKValue[9*DayShifts]*(2/3)^9);
DayKValue = (DayFastK[0]*1+DayFastK[1*DayShifts]*(2/3)^1+DayFastK[2*DayShifts]*(2/3)^2+DayFastK[3*DayShifts]*(2/3)^3+DayFastK[4*DayShifts]*(2/3)^4+DayFastK[5*DayShifts]*(2/3)^5+DayFastK[6*DayShifts]*(2/3)^6+DayFastK[7*DayShifts]*(2/3)^7+DayFastK[8*DayShifts]*((2/3)^8+0.078))/3;
//DayKValue = DayKValue[9*DayShifts+1]*(2/3)^9;
/*Commentary(\"DayFastK[0]\"+text(DayFastK[0]));
Commentary(\"DayRSV[1]:\"+text(DayRSV[1]));
Commentary(\"DayRSV[1*DayShifts+1]\"+text(DayFastK[1*DayShifts]));
Commentary(\"DayRSV[2*DayShifts+1]\"+text(DayFastK[2*DayShifts]));
Commentary(\"DayRSV[3*DayShifts+1]\"+text(DayFastK[3*DayShifts]));
Commentary(\"DayRSV[4*DayShifts+1]\"+text(DayFastK[4*DayShifts]));
Commentary(\"DayRSV[5*DayShifts+1]\"+text(DayFastK[5*DayShifts]));
Commentary(\"DayRSV[6*DayShifts+1]\"+text(DayFastK[6*DayShifts]));
Commentary(\"DayRSV[7*DayShifts+1]\"+text(DayFastK[7*DayShifts]));
Commentary(\"DayRSV[8*DayShifts+1]\"+text(DayFastK[8*DayShifts]));
*/
//DayDValue=IIF(date==date[1],DayDValue[1],(DayKValue[0]*(2/3)^0+DayKValue[1*DayShifts]*(2/3)^1+DayKValue[2*DayShifts]*(2/3)^2+DayKValue[3*DayShifts]*(2/3)^3+DayKValue[4*DayShifts]*(2/3)^4+DayKValue[5*DayShifts]*(2/3)^5+DayKValue[6*DayShifts]*(2/3)^6+DayKValue[7*DayShifts]*(2/3)^7+DayKValue[8*DayShifts]*(2/3)^8)/3+DayDValue[9*DayShifts]*(2/3)^9);
//$$$243
DayDValue= (DayKValue[0]*1+DayKValue[1*DayShifts]*(2/3)^1+DayKValue[2*DayShifts]*(2/3)^2+DayKValue[3*DayShifts]*(2/3)^3+DayKValue[4*DayShifts]*(2/3)^4+DayKValue[5*DayShifts]*(2/3)^5+DayKValue[6*DayShifts]*(2/3)^6+DayKValue[7*DayShifts]*(2/3)^7+DayKValue[8*DayShifts]*((2/3)^8+0.078))/3;
If(DayKValue>DayDValue and DayKValue[1]<DayDValue[1])//日线二次金叉
{
DayCrsupk2=DayCrsupk1;
DayCrsupk1=DayKValue[1];
DayCrsuplks2=DayCrsuplks1+1;
DayCrsuplks1=0;
}Else If(DayKValue<DayDValue and DayKValue[1]>DayDValue[1])//日线二次死叉
{
DayCrsdnk2=DayCrsdnk1;
DayCrsdnk1=DayKValue[1];
DayCrsdnlks2=DayCrsdnlks1+1;
DayCrsdnlks1=0;
}Else
{
DayCrsuplks2=DayCrsuplks2+1;
DayCrsuplks1=DayCrsuplks1+1;
DayCrsdnlks2=DayCrsdnlks2+1;
DayCrsdnlks1=DayCrsdnlks1+1;
}//$264
If(DayCrsdnlks1==0 and DayCrsdnk1<DayCrsdnk2){DayCrosCheck=-6.5;}Else If(DayCrsuplks1==0 and DayCrsupk1>DayCrsupk2){DayCrosCheck=8.5;}Else{DayCrosCheck=1;}//在底部画绿线并记录二次穿越点
PlotNumeric(\"daycrs\",DayCrosCheck,0,Green);
DayDiffOrigin=(DayKValue-DayDValue)*1+100; //日k日d差距 “健壮性”
PlotNumeric(\"DK\",DayFastK,0,Red);//啊啊啊发发个 DayKValue
PlotNumeric(\"DD\",DayDValue,0,Green);//问题问题========
PlotNumeric(\"DyDiff\",DayDiffOrigin,0,white);
//PlotNumeric(\"DayDif\",DayDiffOrigin);
PlotNumeric(\"Ref1\",20,0,Red);//--------------------------------------------------
PlotNumeric(\"Ref2\",80,0,Red);//--------------------------------------------------
PlotNumeric(\"Ref3\",100,0,Red);
PlotNumeric(\"k-d\",KValue-DValue+50,0,Red);
//$$281
//处理日slowkd的画线以及数据记录↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//*ssssssssssssssssssssssssssssssssss
if(CrossUnder(KValue,DValue) and KValue[1]>50 and Highest(KValue,4)<Highest(KValue[5],30)){
SellShort(Lots,Close);
}
if(CrossOver(KValue,DValue)){
BuyToCover(Lots,Close);
}
Commentary(\"hs\"+text(Highest(KValue,4)));
Commentary(\"hl\"+text(Highest(KValue[5],30)));
//Commentary(\"KVacrsnk2]\"+ KValue[1]>50);
//sssssssssssssssssssssssssssssssssss
}//on bar~~
//下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组
OnBarClose(ArrayRef<Integer> indexs)
{
}
//Tick更新事件函数,需要SubscribeTick函数订阅后触发,参数evtTick表示更新的tick结构体
OnTick(TickRef evtTick)
{
}
//持仓更新事件函数,参数pos表示更新的持仓结构体
OnPosition(PositionRef pos)
{
}
//策略账户仓更新事件函数,参数pos表示更新的账户仓结构体
OnStrategyPosition(PositionRef pos)
{
}
//委托更新事件函数,参数ord表示更新的委托结构体
OnOrder(OrderRef ord)
{
}
//成交更新事件函数,参数ordFill表示更新的成交结构体
OnFill(FillRef ordFill)
{
}
//定时器更新事件函数,参数id表示定时器的编号,millsecs表示定时间的间隔毫秒值
OnTimer(Integer id,Integer intervalMillsecs)
{
}
//通用事件触发函数,参数evtName为事件名称,参数evtValue为事件内容
OnEvent(StringRef evtName,MapRef<String,String> evtValue)
{
}
//当前策略退出时触发
OnExit()
{
}
//------------------------------------------------------------------------
// 编译版本 2024/01/04 223356
// 版权所有 yanniwj_wj
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//-----------------------------------------
好的 谢谢老师 那我试试
不要这么使用序列类型的对象
用变量先把表达式的判断结果计算出来,再放到if分支结构
比如 a = highest<highest
if(a)
更多说明在官网搜索序列类型