关于异常开仓问题
If(MarketPosition == 0 && CrossOver(Close[1],MyentryPrice)) { Buy(Lots,Open); Commentary("再次上穿基准价"); }老师蓝色线即为基准价 这里为什么会触发上穿开仓呢
If(MarketPosition == 0 && CrossOver(Close[1],MyentryPrice)) { Buy(Lots,Open); Commentary("再次上穿基准价"); }老师蓝色线即为基准价 这里为什么会触发上穿开仓呢
发完整代码,不要让人猜内容我猜像是开了自动换月
回复:Params //此处添加参数 Numeric Fund(10000); Numeric Length(20); //周期 Numeric Offset(2); //标准差倍数 Numeric RsiLength(14) ; //周期 Numeric OverSold(30) ; //超卖 Numeric OverBought(70) ; //超买 Numeric SlowLength(3); Numeric SmoothLength(3); Vars //此处添加变量 Numeric Lots; Plot plt1; Plot plt2; Global Array<String> iconDatas; //字符串集 Global Integer id(0); Series<Numeric> ATR; Series<Numeric> UpLine; //上轨 Series<Numeric> DownLine; //下轨 Series<Numeric> MidLine; //中间线 Numeric Band; Series<Numeric> HighestValue; Series<Numeric> LowestValue; Series<Numeric> KValue; Numeric SumHLValue; Numeric SumCLValue; Series<Numeric> DValue; Series<Numeric> NetChgAvg( 0 ); Series<Numeric> TotChgAvg( 0 ); Numeric SF( 0 ); Numeric Change( 0 ); Numeric ChgRatio( 0 ) ; Series<Numeric> RSIValue; Bool Cond1; Bool Cond2; Bool Cond3; Bool Cond4; Bool Cond5; Series<Numeric> MyentryPrice;//基准价 Series<Numeric> flag(0); Series<Numeric> flag1(0); Series<Numeric> CCond(0); Series<Numeric> XzOne(0); Defs //此处添加公式函数 Events //此处实现事件函数 OnInit() { id = SubscribeBar(ContinuousSymbol(), "1w", BeginDateTime,0,Enum_Data_RolloverBackWard);//订阅行情数据 //SetBasePeriod("1w"); //与数据源有关 Range[0:DataCount-1] { //=========数据源相关设置============== AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权 AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格 AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算 AddDataFlag(Enum_Data_FullPeriod ); //设置K线分割为有效交易时段 Enum_Data_FullPeriod Enum_Data_ActivePeriod SetOrderMap2MainSymbol(); //设置委托映射到主力 SetSlippage(Enum_Rate_PointPerHand,1); //设置滑点为2跳/手 SetOrderPriceOffset(1); //设置委托价为叫买/卖价偏移2跳 SetSwapPosVolType(2); //设置自动换仓量类型 //SetTradeSide(1);//设置双向持仓交易方向 } //与数据源无关 //=========交易相关设置============== SetInitCapital(1000000); //设置初始资金为100万 } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Range[1:1] { ATR = AvgTrueRange(RsiLength); //BOLL通道 MidLine = AverageFC(Close,Length); Band = StandardDev(Close,Length,2); UpLine = MidLine + Offset * Band; DownLine = MidLine - Offset * Band; Commentary("MidLine:"+Text(MidLine)); Commentary("UpLine:"+Text(UpLine)); Commentary("DownLine:"+Text(DownLine)); //RSI If(CurrentBar <= RsiLength - 1) { NetChgAvg = ( Close - Close[RsiLength] ) / RsiLength ; TotChgAvg = Average( Abs( Close - Close[1] ), RsiLength ) ; }Else { SF = 1/RsiLength; Change = Close - Close[1] ; NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ; TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ; } If( TotChgAvg <> 0 ) { ChgRatio = NetChgAvg / TotChgAvg; }else { ChgRatio = 0 ; } RSIValue = 50 * ( ChgRatio + 1 ); Commentary("RSI:"+Text(RSIValue)); //KD HighestValue = HighestFC(High, RsiLength); LowestValue = LowestFC(Low, RsiLength); SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength); SumCLValue = SummationFC(Close - LowestValue,SlowLength); If(SumHLValue <> 0) { KValue = SumCLValue/SumHLValue*100; }Else { KValue = 0; } DValue = AverageFC(KValue,SmoothLength); Commentary("KValue:"+Text(KValue)); Commentary("DValue:"+Text(DValue)); PlotNumeric("UpLine",UpLine); PlotNumeric("MidLine",MidLine); PlotNumeric("DownLine",DownLine); Cond1=CrossOver(Close[1],DownLine[1]); Cond2=CrossOver(RSIValue[1],OverSold); Cond3=Close[1]>Open[1]; Cond4=CrossOver(KValue[1],DValue[1]); If(CurrentBar>=MaxBarsBack)CCond=1; If(CCond==1 && Cond1 && Cond2)XzOne=1; If(Data1.cond1 && Data1.cond2)plt1.icon("icon1",Low-50,"xiangshang"); If(Data1.Cond1&&Data1.RSIValue<OverSold&&Data1.cond3)plt1.icon("icon1",Low-50,"xiangshang"); //If(Data1.Cond2)plt1.icon("icon2",Low-50,"yuanquan"); /* If(Data1.Cond4&&Data1.KValue<20&&Data1.DValue<20)flag1=1; If(Data1.KValue>20&&Data1.DValue>20)flag1=0; Commentary("flag1:"+Text(flag1)); If(flag1==1&&Data1.CrossOver(Data1.KValue,20))plt1.icon("icon1",Low-40,"yuanquan"); If((Data1.cond1 && Data1.cond2)||(Data1.Cond1&&Data1.RSIValue<OverSold&&Data1.cond3))flag=1; If(Data1.RSIValue>40)flag=0; If(flag==1&&Data1.Cond2)plt1.icon("icon1",Low-50,"xiangshang");//*/ //If(Data0.MarketPosition!=0 && CCond==1 && Cond1 && Cond2) XzOne=0; } Range[0:0] { If(Data1.CurrentBar>=Data1.MaxBarsBack) { Commentary("UpLine:"+Text(Data1.UpLine)); Commentary("MidLine:"+Text(Data1.MidLine)); Commentary("DownLine:"+Text(Data1.DownLine)); Commentary("RSIValue:"+Text(Data1.RSIValue)); Commentary("KValue:"+Text(Data1.KValue)); Commentary("DValue:"+Text(Data1.DValue)); } PlotNumeric("基準價:",MyentryPrice); //开仓计算 Lots=Max(1, IntPart(Fund/(Open*ContractUnit*BigPointValue*MarginRatio)));//标准按照保证金计算开仓手数 Commentary("基准价:"+Text(MyentryPrice)); Commentary("XzOne:"+Text(Data1.XzOne)); If(MarketPosition==0 && Data1.CCond==1 && Data1.Cond1 && Data1.Cond2 && Data1.XzOne==1) { Buy(Lots,Open); MyentryPrice = EntryPrice; Data1.XzOne=0; Commentary("满足条件支撑位+RSI上穿"); } If(MarketPosition != 0 && Close[1]<MyentryPrice*(1-0.01)&&MyentryPrice==MyentryPrice[1]) { Sell(0,Open);//1%止损 Commentary("当前位置1%止损"); } If(MarketPosition == 0 && CrossOver(Close[1],MyentryPrice)) { Buy(Lots,Open); Commentary("再次上穿基准价"); } //达到固定止盈比例 If(MarketPosition != 0 && Close[1]>MyentryPrice+Data1.ATR[1]*7) { Sell(0,Open); Commentary("止盈出场"); } } } 老师 图中问题点为 15min周期 pta连续合约2021/2/24日 还有另一个问题 请问如何限定Commentary("满足条件支撑位+RSI上穿");这个代码在止损后同一周只运行一次