麻烦高手 看下我判断仓位为什么失效???
//------------------------------------------------------------------------
// 简称: bbb
// 名称: bbb
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------
Params
Numeric Length(120);
Numeric Offset(2);
Numeric zhiying(50);
Numeric zhisun(50);
Vars
Numeric UpLine; //上轨
Numeric DownLine; //下轨
NumericSeries MidLine; //中间线
Numeric Band;
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric TakeProfitSet(50); // 止赢设置
Numeric StopLossSet(50); // 止损设置
Numeric MyExitPrice; // 平仓价格
Numeric AvgValue1;
// 跟踪止损部分的定义
Numeric TrailingStart1(50); // 跟踪止损启动设置1
Numeric TrailingStart2(100); // 跟踪止损启动设置2
Numeric TrailingStop1(30); // 跟踪止损设置1
Numeric TrailingStop2(61); // 跟踪止损设置2
// Numeric StopLossSet(50); // 止损设置 重复定义
// Numeric MyExitPrice; // 平仓价格
NumericSeries HighestAfterEntry; // 开仓后出现的最高价
NumericSeries LowestAfterEntry; // 开仓后出现的最低价
//
Begin
TakeProfitSet=zhiying;
StopLossSet=zhisun;
MidLine = AverageFC(Close,Length);
Band = StandardDev(Close,Length,2);
UpLine = MidLine + Offset * Band;
DownLine = MidLine - Offset * Band;
PlotNumeric("UpLine",UpLine);
PlotNumeric("DownLine",DownLine);
PlotNumeric("MidLine",MidLine);
If (High > UpLine)
{
if (low< UpLine)
{
if (MarketPosition==1) //1 先平多仓
{
sell(0,UpLine-5.5);
}
if (MarketPosition==0) //无仓情况下触发做空
{
If (A_GetOpenOrderCount()>0)
{
A_DeleteOrder(); // 2 撤单
}
sellShort(1,UpLine-5); //放空
}
}
}
If (Low < DownLine)
{
if (high>DownLine)
{
if (MarketPosition==-1)
{
BuyToCover(0,DownLine+5.5); //先平仓
}
if (MarketPosition==0) //无仓才多
{
If (A_GetOpenOrderCount()>0)
{
A_DeleteOrder(); //撤单
}
Buy(1,DownLine+5); //开空仓
}
}
}
//以下是跟踪止盈部分代码
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 >= MyEntryPrice + TrailingStart2*MinPoint) // 最高价触发多单第二级跟踪止损生效 的条件表达式
{
If(Low <= HighestAfterEntry - TrailingStop2*MinPoint) // 如果最低价比最高价回调指定幅度 则 触发 离场信号
{
MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint;
If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空 触发,则用开盘价代替
Sell(0,MyExitPrice);
}
}else if(HighestAfterEntry >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止 损的条件表达式
{
If(Low <= HighestAfterEntry - TrailingStop1*MinPoint)
{
MyExitPrice = HighestAfterEntry - 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 <= MyEntryPrice - TrailingStart2*MinPoint) // 第二级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry + TrailingStop2*MinPoint)
{
MyExitPrice = LowestAfterEntry + TrailingStop2*MinPoint;
If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice);
}
}else if(LowestAfterEntry <= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry + TrailingStop1*MinPoint)
{
MyExitPrice = LowestAfterEntry - 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);
}
}
End
程序运行后会不断触发 开仓做多和做空 判断仓位语句没有起作用,请高手帮忙看看是为什么???
不胜感激!!!! 用buy sell开仓不能用A函数判断仓位吧 哦 谢谢 flyfish 请问要用什么函数判断? if (MarketPosition==0) //无仓情况下触发做空
请问这句判断仓位有问题吗? qiangqiang2046 发表于 2012-11-7 15:27 static/image/common/back.gif
哦 谢谢 flyfish 请问要用什么函数判断?
buy、sell等普通发单函数 用MarketPosition来判断持仓,该函数用法请参考F1帮助文档 lh948 我是用了那个函数的啊
if (MarketPosition==0) //无仓情况下触发做空
请问这句判断仓位是否为0有问题吗? if (MarketPosition==0) //无仓才多
{
If (A_GetOpenOrderCount()>0)
已经用了marketposition了,里面就不要再用A函数了
我的问题类似,不知道那么多年过去解决了么
页:
[1]