-- 作者:beijib
-- 发布时间:2011/7/25 10:05:06
-- 两种模式下单如何处理?
Numeric MinPoint; // 一个最小变动单位,也就是一跳 Numeric MyEntryPrice; // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格 Numeric TrailingStart1(50); // 跟踪止损启动设置1 Numeric TrailingStart2(80); // 跟踪止损启动设置2 Numeric TrailingStop1(30); // 跟踪止损设置1 Numeric TrailingStop2(20); // 跟踪止损设置2 Numeric StopLossSet(50); // 止损设置,默认50 Numeric MyExitPrice; // 平仓价格
NumericSeries HighestAfterEntry; // 开仓后出现的最高价 NumericSeries LowestAfterEntry; // 开仓后出现的最低价
//跟踪止盈止损 If(BarsSinceentry == 0) { HighestAfterEntry = Close; LowestAfterEntry = Close; If(MarketPosition <> 0) { HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry } }else { HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断 LowestAfterEntry = Min(LowestAfterEntry,Low); // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断 }
Commentary("HighestAfterEntry="+Text(HighestAfterEntry)); Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
MinPoint = MinMove*PriceScale; MyEntryPrice = AvgEntryPrice; If(MarketPosition==1) // 有多仓的情况 { If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) // 第二级跟踪止损的条件表达式 { If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint) { MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint; If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替 Sell(0,MyExitPrice); } }else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式 { If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint) { MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint; If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替 Sell(0,MyExitPrice); } }else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在这里写上初始的止损处理 { MyExitPrice = MyEntryPrice - StopLossSet*MinPoint; If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替 Sell(0,MyExitPrice); } }else if(MarketPosition==-1) // 有空仓的情况 { If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) // 第二级跟踪止损的条件表达式 { If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint) { MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint; If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替 BuyToCover(0,MyExitPrice); } }else if(LowestAfterEntry[1] <= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式 { If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint) { MyExitPrice = LowestAfterEntry[1] - TrailingStop1*MinPoint; If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替 BuyToCover(0,MyExitPrice); } }else If(High >= MyEntryPrice + StopLossSet*MinPoint)//可以在这里写上初始的止损处理 { MyExitPrice = MyEntryPrice + StopLossSet*MinPoint; If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替 BuyToCover(0,MyExitPrice); } }
|
-- 作者:阿火
-- 发布时间:2011/7/25 10:33:25
--
一大推代码看着真累。
怎么连个开仓条件都没有啊?
还不如直接说出你的思路,我帮你写
看别人的代码比自己写代码难受多了
举个例子,突破hi20买入,lo20卖出 止损采用你的设置,代码如下:(30行不到的代码就搞定)
variable:zs=c,hl=c; hi20:=ref(hhv(h,20),1); lo20:=ref(llv(l,20),1); if holding>0 and l<zs then sell(1,1,limitr,min(o,zs)-mindiff);//止损 if holding<0 and h>zs then sellshort(1,1,limitr,max(o,zs)+mindiff);//止损 if holding>0 and l<lo20 then sell(1,1,limitr,min(o,lo20)-mindiff);//离场 if holding<0 and h>hi20 then sellshort(1,1,limitr,max(o,hi20)+mindiff);//离场 if holding=0 and h>hi20 then begin//开多 buy(1,1,limitr,max(o,hi20)+mindiff); hl:=h;//记录开仓后的最高点 zs:=enterprice-50*mindiff;//初始止损50个跳动点 end if holding=0 and l<lo20 then begin//开空 buyshort(1,1,limitr,min(o,lo20)-mindiff); hl:=l;//记录开仓后的最低点 zs:=enterprice+50*mindiff;//初始止损50个跳动点 end if holding>0 and h>hl then begin//上移最高点 hl:=h; if hl>enterprice+80*mindiff then zs:=hl-20*mindiff;//满80个点,回落20点为止损位 else if hl>enterprice+50*mindiff then zs:=hl-30*mindiff;//满50个点,回落30点为止损位 end if holding<0 and l<hl then begin hl:=l; if hl<enterprice-80*mindiff then zs:=hl+20*mindiff;//满80个点,反弹20点为止损位 else if hl<enterprice-50*mindiff then zs:=hl+30*mindiff;//满50个点,反弹30点为止损位 end
[此贴子已经被作者于2011-7-25 10:47:28编辑过]
|