Params
//此处添加参数
Numeric Length1(12);
Numeric Length2(144);
Numeric Length3(169);
Numeric Length4(288);
Numeric Length5(388);
Numeric lots1(10);
Numeric lots5(1);
Vars
Series<Numeric> EMA1;
Series<Numeric> EMA2;
Series<Numeric> EMA3;
Series<Numeric> EMA4;
Series<Numeric> EMA5;
Numeric lots;
Series<Numeric> HighAfterEntry; // 开仓后出现的最高价
Series<Numeric> LowAfterEntry; // 开仓后出现的最低价
Numeric StartPro1(3); //1级跟踪止盈,盈利%启动
Numeric StopPro1(30); //1级跟踪止盈,盈利回撤%触发
Numeric StartPro2(4); //2级跟踪止盈,盈利%启动
Numeric StopPro2(20); //2级跟踪止盈,盈利回撤50%触发
Numeric StartPro3(5); //3级跟踪止盈,盈利%启动
Numeric StopPro3(20); //3级跟踪止盈,盈利回撤%触发
Numeric StopLoss(5); // 止损%
Bool BuyEntry(False);
Bool SellEntry(False);
Bool BuyExit(False);
Bool SellExit(False);
Defs
//此处添加公式函数
Numeric calcAvg(Numeric a,Numeric b)
{
return (a+b)/2;
}
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnBar(ArrayRef<Integer> indexs)
{
{
Print("ExitSize:" + Text(ExitSize()));
}
Range[0:DataSourceSize() - 1]
{
PlotNumeric("EMA1",XAverage(Close, Length1));
PlotNumeric("EMA2",XAverage(Close, Length2));
PlotNumeric("EMA3",XAverage(Close, Length3));
PlotNumeric("EMA4",XAverage(Close, Length4));
PlotNumeric("EMA5",XAverage(Close, Length5));
EMA1=XAverage(Close, Length1);
EMA2=XAverage(Close, Length2);
EMA3=XAverage(Close, Length3);
EMA4=XAverage(Close, Length4);
EMA5=XAverage(Close, Length5);
lots=lots1;
if(crossover(EMA1[1],EMA5[1]))
{
Buy(lots,Open);
}
if(CrossUnder(EMA1[1],EMA5[1]))
{
SellShort(lots,Open);
}
If(MarketPosition==-1 && BarsSinceLastEntry>0 && LowAfterEntry[1]<=LastEntryPrice*(1-0.01*StartPro3) && High>=LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro3)
{
BuyToCover(lots5,Max(Open,LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro3));
Commentary("最大盈利达到"+Text(StartPro3)+"%之后盈利回撤"+Text(StopPro3)+"%平空");
}
If(MarketPosition==1 && BarsSinceLastEntry>0 && HighAfterEntry[1]>=LastEntryPrice*(1+0.01*StartPro3) && Low<=HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro3)
{
Sell(lots5,Min(Open,HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro3));
Commentary("最大盈利达到"+Text(StartPro3)+"%之后盈利回撤"+Text(StopPro3)+"%平多");
}
If(MarketPosition==-1 && BarsSinceLastEntry>0 && LowAfterEntry[1]<=LastEntryPrice*(1-0.01*StartPro2) && High>=LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro2)
{
BuyToCover(lots5,Max(Open,LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro2));
Commentary("最大盈利达到"+Text(StartPro2)+"%之后盈利回撤"+Text(StopPro2)+"%平空");
}
If(MarketPosition==1 && BarsSinceLastEntry>0 && HighAfterEntry[1]>=LastEntryPrice*(1+0.01*StartPro2) && Low<=HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro2)
{
Sell(lots5,Min(Open,HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro2));
Commentary("最大盈利达到"+Text(StartPro2)+"%之后盈利回撤"+Text(StopPro2)+"%平多");
}
If(MarketPosition==-1 && BarsSinceLastEntry>0 && LowAfterEntry[1]<=LastEntryPrice*(1-0.01*StartPro1) && High>=LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro1)
{
BuyToCover(lots5,Max(Open,LowAfterEntry[1]+(LastEntryPrice-LowAfterEntry[1])*0.01*StopPro1));
Commentary("最大盈利达到"+Text(StartPro1)+"%之后盈利回撤"+Text(StopPro1)+"%平空");
}
If(MarketPosition==1 && BarsSinceLastEntry>0 && HighAfterEntry[1]>=LastEntryPrice*(1+0.01*StartPro1) && Low<=HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro1)
{
Sell(lots5,Min(Open,HighAfterEntry[1]-(HighAfterEntry[1]-LastEntryPrice)*0.01*StopPro1));
Commentary("最大盈利达到"+Text(StartPro1)+"%之后盈利回撤"+Text(StopPro1)+"%平多");
}
If(MarketPosition==-1 && High>=LastEntryPrice*(1+StopLoss*0.01))
{
BuyToCover(lots5,Max(LastEntryPrice*(1+StopLoss*0.01),Open));
Commentary("空头亏损"+Text(StopLoss)+"%止损");
}
If(MarketPosition==1 && Low<=LastEntryPrice*(1-StopLoss*0.01))
{
Sell(lots5,Min(LastEntryPrice*(1-StopLoss*0.01),Open));
Commentary("多头亏损"+Text(StopLoss)+"%止损");
}
//记录开仓后高低点
If(BarsSinceentry == 0)
{
HighAfterEntry = High;
LowAfterEntry = Low;
}else
{
HighAfterEntry = Max(HighAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
LowAfterEntry = Min(LowAfterEntry,Low); // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
}
}
}
序列类型定义一个状态变量 止盈以后就关闭这个状态变量
能帮忙写一下么 我不会写 谢谢你
看置顶帖
建议不要采用化缘式量化开发