a函数为什么不发单,急.. [开拓者 TB]
- 咨询内容:
本帖最后由 xiaosong 于 2013-7-24 08:11 编辑
Begin //if(BarStatus==2 && Time==0.090000 && CurrentTime<0.090000) Return; // 集合竞价过滤
If (barstatus==0 || GetGlobalVar(1)==InvalidNumeric)
{
If(A_BuyPosition==0)
{
setglobalvar(1,0);
} else If(A_BuyPosition>0)
{
SetGlobalVar(1,1);
}
}
else if(GetGlobalVar(1)!=InvalidNumeric)
{
SetGlobalVar(1,GetGlobalVar(1));
}
If (barstatus==0 || GetGlobalVar(2)==InvalidNumeric)
{
If(A_SellPosition==0)
{
SetGlobalVar(2,0);
} else If(A_SellPosition>0)
{
SetGlobalVar(2,1);
}
} else if(GetGlobalVar(2)!=InvalidNumeric)
{
SetGlobalVar(2,GetGlobalVar(2));
}
If (barstatus==0 || GetGlobalVar(0)==InvalidNumeric)
{
if(A_TotalPosition()==0)
{
SetGlobalVar(0,0);
}else if(A_TotalPosition()!=0)
{
SetGlobalVar(0,1);
}
} else if(GetGlobalVar(0)!=InvalidNumeric)
{
SetGlobalVar(0,GetGlobalVar(0));
}
conEntryReady=CurrentTime*100 >=tradBegin and CurrentTime*100<tradEnd and Q_LowerLimit>20*MinMove*PriceScale AND Q_UpperLimit-C>20*MinMove*PriceScale;//不靠近涨跌停
if(A_GetOpenOrderCount==0 and A_TotalPosition()==0 AND A_AccountID!="" and conEntryReady AND GetGlobalVar(0)==0 AND GetGlobalVar(1)==0 AND GetGlobalVar(2)==0) //返回当前公式应用的帐户下当前商品的总持仓 (无持仓)
{
IF(a>b) //开多条件
{
A_SendOrder(Enum_Buy,Enum_Entry,Lots,Q_AskPrice()+N*MinMove*PriceScale);//发送委托单 开多仓一手
SetGlobalVar(0,1);
SetGlobalVar(1,1);
SetGlobalVar(2,0);
}
IF(a<b) // 开空条件
{
A_SendOrder(Enum_Sell,Enum_Entry,Lots,Q_BidPrice()-N*MinMove*PriceScale); //发送委托单 开空仓一手
SetGlobalVar(0,1);
SetGlobalVar(1,1);
SetGlobalVar(2,0);
}
}
急啊.......................
...........................................
..................
- TB技术人员:
管量员在吗?版主在吗????????????????????????????
我是你们付费用户啊. - TB客服:
xiaosong 发表于 2013-7-24 08:08
管量员在吗?版主在吗????????????????????????????
我是你们付费用户啊. ...
抱歉啊。公司的论坛维护人员是没有上夜班的。所以没法在夜里及时的回复您的问题,请谅解。
你的公式,前面一段的回局变量的赋值是干什么用的呢??感觉逻辑上有不太合理的地方呢。
其一,a_xxx类函数只在最后K线有效,所以你条件里的barstatus==0的情况下是绝对不能取到a_buyposition==0这样的判断。于是你只能从 GetGlobalVar(1)==InvalidNumeric这一条件进入判断。既然如此 ,那barstatus==0放在这里也是没有必要的。
其二,看到这些全局变量仅是简单地判断持仓而进行赋值的。感觉没有必要啊。在后面的交易中,直接判断持仓量来决定是否下单更好,不必要增加这三个全局变量的。
交易部分。
1,建议不要使用上述三个全局变量的判断。直接判断持仓量来决定开平动作就好。
2,建议将所有用得到的判断变量都输出日志,查看一下到底是哪些交易不符合你的要求,从而没有发出指令的。
3,想要判断多空均无持仓,直接使用a_buyposition==0,a_sellposition==0即可,不必要判断a_totalposition的.
4,因为a_xxxx函数,只在最后K线有效,建议在使用中加上barstatus==2的判断能提高效率。
- 网友回复:
谢谢老大. 谢谢回贴,这个软件是不错,是能解决小资金的执行力的问题. 但是编程的确是有难度,这主限制它的推广
你们不是说:当一个Tick来时触发条件,这时发单,如果因延时成交回单没有回来时,再来一个Tick触发条件,再发一次单.
所以,我设想三个全面变量. 0 为开与平. 1为持多仓与无持多仓, 2为持空仓与无持
Begin //if(BarStatus==2 && Time==0.090000 && CurrentTime<0.090000) Return; // 集合竞价过滤
If (barstatus==2 || GetGlobalVar(1)==InvalidNumeric)
{
If(A_BuyPosition==0)
{
setglobalvar(1,0);
} else If(A_BuyPosition>0)
{
SetGlobalVar(1,1);
}
}
else if(barstatus==2 || GetGlobalVar(1)!=InvalidNumeric)
{
SetGlobalVar(1,GetGlobalVar(1));
}
If (barstatus==2 || GetGlobalVar(2)==InvalidNumeric)
{
If(A_SellPosition==0)
{
SetGlobalVar(2,0);
} else If(A_SellPosition>0)
{
SetGlobalVar(2,1);
}
} else if(barstatus==2 GetGlobalVar(2)!=InvalidNumeric)
{
SetGlobalVar(2,GetGlobalVar(2));
}
If (barstatus==2 || GetGlobalVar(0)==InvalidNumeric)
{
if(a_buyposition==0 and a_sellposition==0)
{
SetGlobalVar(0,0);
}else if(A_TotalPosition()!=0)
{
SetGlobalVar(0,1);
}
} else if(barstatus==2 || GetGlobalVar(0)!=InvalidNumeric)
{
SetGlobalVar(0,GetGlobalVar(0));
}
if(barstatus==2 and a_buyposition==0 and a_sellposition==0 AND GetGlobalVar(0)==0 AND GetGlobalVar(1)==0 AND GetGlobalVar
(2)==0) )无持仓
{
IF(a>b) //开多条件
{
A_SendOrder(Enum_Buy,Enum_Entry,Lots,Q_AskPrice()+N*MinMove*PriceScale);//发送委托单 开多仓一手
SetGlobalVar(0,1); 因为开了仓 全面变量0设为1
SetGlobalVar(1,1); 因为开的多 全面变量1设为1
SetGlobalVar(2,0);
}
IF(a<b) // 开空条件
{
A_SendOrder(Enum_Sell,Enum_Entry,Lots,Q_BidPrice()-N*MinMove*PriceScale); //发送委托单 开空仓一手
SetGlobalVar(0,1); 因为开了仓 全面变量0设为1
SetGlobalVar(1,1);
SetGlobalVar(2,0); 因为开的多 全面变量2设为1
}
}
SetGlobalVar(2,GetGlobalVar(2));
}
if(barstatus==2 and a_buyposition>0 and a_sellposition==0 AND GetGlobalVar(0)==1 AND GetGlobalVar(1)==1 AND GetGlobalVar
(2)==0) ) //持多仓,在没有检查到用户函数,又因为有全局变量的二种控制,所以,保证不重发单
{ if(c>b) 平多条件
..........................................
SetGlobalVar(0,1); 因为平了仓 全面变量0设为0
SetGlobalVar(1,1); 因为平多了 全面变量1设为0
SetGlobalVar(2,0);
}
- 网友回复:
xiaosong 发表于 2013-7-24 11:46
谢谢老大. 谢谢回贴,这个软件是不错,是能解决小资金的执行力的问题. 但是编程的确是有难度,这主限制它的 ...
这样写,感觉不是很合理哟。至少不是很适用于实际交易。
建议先看一下F1里公式策略进阶里关于a_sendorder与全局变量配合使用的例子。
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容