怎么实现30分钟破boll上轨买入,10s周期上止盈止损
分解成2个问题
30分钟破boll上轨买入 和 10s周期上止盈止损
单独写会不会写
然后才是跨周期的问题
Params Numeric Length(14); //长的 Numeric SlowLength(3); //慢的 Numeric SmoothLength(3); //平整的
Vars Series<Numeric> HighestValue; //高点序列 Series<Numeric> LowestValue; //低点序列 Series<Numeric> KValue; Series<Numeric> JValuemy; Numeric SumHLValue; Numeric SumCLValue; Numeric DValue; Numeric MinPoint; // 一个最小变动单位, 也就是一跳 Numeric MyEntryPrice; // 开仓价格, 例中为开仓均价, 可设置为某次入场价 Numeric TakeProfitSet(5); // 止赢设置 Numeric StopLossSet(3); // 止损设置 Numeric MyExitPrice; // 平仓价格 Events OnBar(ArrayRef<Integer> indexs) { Range[1:1] //长周期 { MinPoint = MinMove*PriceScale; HighestValue = HighestFC(High, Length); //求最高(High,14) LowestValue = LowestFC(Low, Length); //求最低(Low,14) SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength); //快速求和(最高-最低,3) SumCLValue = SummationFC(Close - LowestValue,SlowLength); //快速求和(收盘价-最低,3) If(SumHLValue <> 0) // 最高-最低≠0 { KValue = SumCLValue/SumHLValue*100; // 这个就k值; }Else { KValue = 0; } DValue = AverageFC(KValue,SmoothLength); //D为平均值(kv,3) JValuemy=3*KValue - 2*DValue; PlotNumeric("K",KValue); //k就是kvalue PlotNumeric("D",DValue); //"D",DValue PlotNumeric("J",3*KValue - 2*DValue); //"J",3*KValue - 2*DValue PlotNumeric("Ref1",20); PlotNumeric("Ref2",80); } Range[1:1] { if ( JValuemy>=80 and JValuemy[1]<80 ) { Buy(1,Close); }
Range[0:0] //短周期 { //止损止盈 If ( MarketPosition > 0) { //... MinPoint = MinMove*PriceScale; // 一个最小变动单位, 也就是一跳 =当前公式应用商品的最小变动量*当前公式应用商品的计数单位。 MyEntryPrice =Data[1]. AvgEntryPrice; // 开仓价格= 获得当前持仓的平均建仓价格 If(MarketPosition == 1 And BarsSinceEntry >= 1) // 有多仓的情况 { If(Data[0].High >= MyEntryPrice + TakeProfitSet*MinPoint) // 止赢条件表达式 最高价≥开仓价+止盈数*最小变动单位 { MyExitPrice = MyEntryPrice + TakeProfitSet*MinPoint; //平仓价格=开仓价+止盈数*最小变动单位 // 如果该 Bar 开盘价即跳空触发, 用开盘价代替 If(Data[0].Open > MyExitPrice) MyExitPrice = Data[0].Open; //如果开盘价>平仓价格,则平仓价=开盘价 Sell(0,MyExitPrice); //按平仓价卖出 }Else If(Data[0].Low <= MyEntryPrice - StopLossSet*MinPoint) // 止损条件表达式,如果最低价≤开仓价-止损数*最小变动单位 { MyExitPrice = MyEntryPrice - StopLossSet*MinPoint; //平仓价=开仓价-止损数*最小变动单位 // 如果该 Bar 开盘价即跳空触发, 则用开盘价代替 If(Data[0].Open < MyExitPrice) MyExitPrice = Data[0].Open; //开盘价<平仓价,开盘价赋值给平仓价 Sell(0,MyExitPrice); } } }
} }
Range[1:1] //长周期 30min
Range[0:0] //短周期10s
但是,这个测试结果不低,都是长周期交易,短周期没有
搞不明白,怎么回事?
交易记录才两条,短周期,不可能不交易!
然后有个基础要点
跨周期的,所有交易内容尽量都放在最小周期
高周期的数据赋值传过去就行了
好 ,按老师的思路改改,在测试测试
怎么大小周期,都有交易
分解成2个问题
30分钟破boll上轨买入 和 10s周期上止盈止损
单独写会不会写
然后才是跨周期的问题
Params
Numeric Length(14); //长的
Numeric SlowLength(3); //慢的
Numeric SmoothLength(3); //平整的
Vars
Series<Numeric> HighestValue; //高点序列
Series<Numeric> LowestValue; //低点序列
Series<Numeric> KValue;
Series<Numeric> JValuemy;
Numeric SumHLValue;
Numeric SumCLValue;
Numeric DValue;
Numeric MinPoint; // 一个最小变动单位, 也就是一跳
Numeric MyEntryPrice; // 开仓价格, 例中为开仓均价, 可设置为某次入场价
Numeric TakeProfitSet(5); // 止赢设置
Numeric StopLossSet(3); // 止损设置
Numeric MyExitPrice; // 平仓价格
Events
OnBar(ArrayRef<Integer> indexs)
{
Range[1:1] //长周期
{
MinPoint = MinMove*PriceScale;
HighestValue = HighestFC(High, Length); //求最高(High,14)
LowestValue = LowestFC(Low, Length); //求最低(Low,14)
SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength); //快速求和(最高-最低,3)
SumCLValue = SummationFC(Close - LowestValue,SlowLength); //快速求和(收盘价-最低,3)
If(SumHLValue <> 0) // 最高-最低≠0
{
KValue = SumCLValue/SumHLValue*100; // 这个就k值;
}Else
{
KValue = 0;
}
DValue = AverageFC(KValue,SmoothLength); //D为平均值(kv,3)
JValuemy=3*KValue - 2*DValue;
PlotNumeric("K",KValue); //k就是kvalue
PlotNumeric("D",DValue); //"D",DValue
PlotNumeric("J",3*KValue - 2*DValue); //"J",3*KValue - 2*DValue
PlotNumeric("Ref1",20);
PlotNumeric("Ref2",80);
}
Range[1:1]
{
if ( JValuemy>=80 and JValuemy[1]<80 )
{
Buy(1,Close);
}
Range[0:0] //短周期
{
//止损止盈
If ( MarketPosition > 0)
{
//...
MinPoint = MinMove*PriceScale; // 一个最小变动单位, 也就是一跳 =当前公式应用商品的最小变动量*当前公式应用商品的计数单位。
MyEntryPrice =Data[1]. AvgEntryPrice; // 开仓价格= 获得当前持仓的平均建仓价格
If(MarketPosition == 1 And BarsSinceEntry >= 1) // 有多仓的情况
{
If(Data[0].High >= MyEntryPrice + TakeProfitSet*MinPoint) // 止赢条件表达式 最高价≥开仓价+止盈数*最小变动单位
{
MyExitPrice = MyEntryPrice + TakeProfitSet*MinPoint; //平仓价格=开仓价+止盈数*最小变动单位
// 如果该 Bar 开盘价即跳空触发, 用开盘价代替
If(Data[0].Open > MyExitPrice) MyExitPrice = Data[0].Open; //如果开盘价>平仓价格,则平仓价=开盘价
Sell(0,MyExitPrice); //按平仓价卖出
}Else If(Data[0].Low <= MyEntryPrice - StopLossSet*MinPoint) // 止损条件表达式,如果最低价≤开仓价-止损数*最小变动单位
{
MyExitPrice = MyEntryPrice - StopLossSet*MinPoint; //平仓价=开仓价-止损数*最小变动单位
// 如果该 Bar 开盘价即跳空触发, 则用开盘价代替
If(Data[0].Open < MyExitPrice) MyExitPrice = Data[0].Open; //开盘价<平仓价,开盘价赋值给平仓价
Sell(0,MyExitPrice);
}
}
}
}
}
Range[1:1] //长周期 30min
Range[0:0] //短周期10s
但是,这个测试结果不低,都是长周期交易,短周期没有
搞不明白,怎么回事?
交易记录才两条,短周期,不可能不交易!
然后有个基础要点
跨周期的,所有交易内容尽量都放在最小周期
高周期的数据赋值传过去就行了
好 ,按老师的思路改改,在测试测试
怎么大小周期,都有交易