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上穿");这个代码在止损后同一周只运行一次