- 精华
- 0
- 在线时间
- 18 小时
- UID
- 233831
- 积分
- 10
- 帖子
- 5
- 阅读权限
- 10
- 注册时间
- 2016-5-5
- 最后登录
- 2016-11-4
- 精华
- 0
- UID
- 233831
- 积分
- 10
- 帖子
- 5
- 主题
- 4
- 阅读权限
- 10
- 注册时间
- 2016-5-5
- 最后登录
- 2016-11-4
|
发表于 2016-10-27 21:34:14
|显示全部楼层
本帖最后由 ta69440830 于 2016-10-28 23:12 编辑
我想用全局变量控制开仓间隔,即系统发出新的开仓信号后,往后数十秒,再执行下一个信号,但在实盘中,出现了在第一次开仓条件满足时,每隔十秒都发出开(平)仓信号,系统中的过滤条件完全没有作用了,然后就一直开仓平仓开仓平仓。。。麻烦老师帮忙看一下问题出在哪里,还有我的return用的对不对,谢谢啦~我觉得这套框架如果有效,初学者是可以直接嵌套自己的策略的,那么就麻烦老师啦~~
Params
Numeric WaitTime(10); //预设等待时间,单位为秒,可调整
Numeric ShiftUnit(1); //下单价格偏移量,可调整
Numeric lots(1);
Vars
Numeric NewPrice;
Numeric TimeSeconds;
Bool startCondition1(False); // 多单启动条件
Bool EntryCondition1(False); // 多单开仓条件
Bool ExitCondition1(False); // 多单平仓条件
Bool startCondition2(False); // 启动条件,空单用
Bool EntryCondition2(False); // 开仓条件,空单用
Bool ExitCondition2(False); // 平仓条件,空单用
Numeric myEntryPrice1(0); // 多单开仓价格
Numeric myExitPrice1(0); // 多单平仓价格
Numeric myEntryPrice2(0); // 开仓价格,空单用
Numeric myExitPrice2(0); // 平仓价格,空单用
Begin
If ( Q_Last == 0 || ( Date != Date[1] && High == Low ) ) Return; //如果未开盘,则直接返回
If ( GetGlobalVar(10)==InvalidNumeric ) SetGlobalVar(10,0); //下单时间初始化
TimeSeconds=Value(Left(TimeToString(CurrentTime),2))*3600 //记录系统当前时间,转化为秒数
+Value(Mid(TimeToString(CurrentTime),3,2))*60
+Value(Right(TimeToString(CurrentTime),2));
If ( TimeSeconds-GetGlobalVar(10)<WaitTime ) Return; //如果发单后等待时间小于WaitTime,则返回
If(Q_BidPrice>=Q_UpperLimit Or Q_AskPrice<=Q_LowerLimit) Return; //停板情况下不允许建仓
If ( A_TotalPosition==0 )
{
If(Close[1] > Close[2])
{
startCondition1 = True;
}
If(startCondition1)
{
EntryCondition1 If( EntryCondition1)
{
NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale; //计算开仓价格
A_SendOrder(Enum_Buy,Enum_Entry,Lots,NewPrice);
SetGlobalVar(10,TimeSeconds); //记录下单时间
}
Else // 再看其它价格是否满足
{
EntryCondition1 If(EntryCondition1)
{
NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Buy,Enum_Entry,Lots,NewPrice);
SetGlobalVar(10,TimeSeconds); //记录下单时间
}
}
Return;
}
If (Close[1] < Close[2])
{
startCondition2 = True;
}
If(startCondition2)
{
EntryCondition2
If( EntryCondition2)
{
NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Sell,Enum_Entry,Lots,NewPrice);
SetGlobalVar(10,TimeSeconds);
}
Else // 再看其它价格是否满足
{
EntryCondition2
If(EntryCondition2)
{
NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Sell,Enum_Entry,Lots,NewPrice);
SetGlobalVar(10,TimeSeconds);
}
}
}
Return;
}
If ( A_BuyPosition>0 )
{
ExitCondition1
If(ExitCondition1)
{
NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition,NewPrice);
SetGlobalVar(10,TimeSeconds);
Return;
}
Else // 获利平仓
{
ExitCondition1 If(ExitCondition1)
{
NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition,NewPrice);
SetGlobalVar(10,TimeSeconds);
}
}
Return;
}
If ( A_SellPosition>0 )
{
ExitCondition2 If(ExitCondition2)
{
NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,NewPrice);
SetGlobalVar(10,TimeSeconds);
Return;
}Else // 获利平仓
{
ExitCondition2
If(ExitCondition2)
{
NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;
A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,NewPrice);
SetGlobalVar(10,TimeSeconds);
}
}
Return;
}
End
|
|