//----------------获得当前持仓位置的浮动盈亏--------------
if (MarketPosition!=0 And BarStatus ==2){
FileDelete("C:\\Program_Trading.log");
FileAppend("C:\\Program_Trading.log","浮动盈亏 = "+Text(A_ProfitLoss()));为什么输出的是一个N/A的字符串。
请问一下管理员同志及其它大侠,Bool A_SendOrder(Integer BuyOrSell,Integer EntryOrExit,Numeric fLot,Numeric fPrice)函数,能否把Numeric fPrice 替换为NextOpen来获取交易价格数据,因为这样不会发生重复开仓的问题,谢谢!
if ( tr_hbop[1] > tr_x[1] And (Abs(tr_s1[1]-tr_x[1])<=0 or Abs(tr_s1[1]-tr_x[1])<=0.50))
{
if (A_SellPosition()>0)
{
A_SendOrder(Enum_Sell,Enum_Exit,A_SellPosition(),Q_AskPrice());
}
A_SendOrder(Enum_Buy,Enum_Entry,1,Q_BidPrice());
}
if ( tr_hbop[1]<tr_x[1] And (Abs(tr_b1[1]-tr_x[1])<=0 or Abs(tr_b1[1]-tr_x[1])<=0.50))
{
if (A_BuyPosition()>0)
{
A_SendOrder(Enum_Buy,Enum_Exit,A_BuyPosition(),Q_BidPrice());
}
A_SendOrder(Enum_Sell,Enum_Entry,1,Q_AskPrice());
}
//----------------止损操作--------------
if ((A_BuyPosition()>0 or A_SellPosition()>0 ) And BarStatus ==2)
{
//-------------止损平仓100-----------------
if (A_BuyProfitLoss()<=-100)
{
A_SendOrder(Enum_sell,Enum_exit,A_BuyPosition(),Q_BidPrice());
}
if (A_SellProfitLoss()<=-100)
{
A_SendOrder(Enum_Buy,Enum_exit,A_SellPosition(),Q_AskPrice());
}
//----------------止损操作--------------
if ((A_BuyPosition()>0 or A_SellPosition()>0 ) And BarStatus ==2)
{
//-------------止损平仓100-----------------
if (A_BuyProfitLoss()<=-100)
{
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice());
}
if (A_SellProfitLoss()<=-100)
{
A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition(),Q_AskPrice());
}
}作者: lh948 时间: 2010-4-27 09:22:58
启动了自动交易吗?
BarStatus ==2这句可以删去
以下平仓部分没有问题
if (A_BuyPosition()>0 or A_SellPosition()>0 )
{
//-------------止损平仓100-----------------
if (A_BuyProfitLoss()<=-100)
{
A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice());
}
if (A_SellProfitLoss()<=-100)
{
A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition(),Q_AskPrice());
}
}作者: zejunl 时间: 2010-4-27 10:23:25
刚刚才我把程序代码做了些修改,主要是为了避免同一方向重复下单的问题,按照您的提示,我把代码修改如下,请看下列代码,其中我有一个疑问,为什么还是在重复发送同一方向的单,我应该把SetGlobalVar(0,0) and SetGlobalVar(1,0)的初始值放在程序的那一部分。如果把SetGlobalVar(0,0) and SetGlobalVar(1,0)放在Begin and End 之间的话,可能随时都会去把默认值识为当前值。期待您及高手的回答!
关于开平仓记录请看附件中的文件,先行谢过了。
Parms
......
Vars
......
Begin
{
//前面程序计算部分.........
if ( tr_hbop[1] > tr_x[1] And (Abs(tr_s1[1]-tr_x[1])<=0 or Abs(tr_s1[1]-tr_x[1])<=0.50))
{
if (GetGlobalVar(1)==1)
{
A_SendOrder(Enum_Sell,Enum_Exit,A_SellPosition(),Q_AskPrice());
SetGlobalVar(1,0);
}
if (GetGlobalVar(0)==0)
{
A_SendOrder(Enum_Buy,Enum_Entry,1,Q_BidPrice());
SetGlobalVar(0,1);
}
}
if ( tr_hbop[1]<tr_x[1] And (Abs(tr_b1[1]-tr_x[1])<=0 or Abs(tr_b1[1]-tr_x[1])<=0.50))
{
if (GetGlobalVar(0)==1)
{
A_SendOrder(Enum_Buy,Enum_Exit,A_BuyPosition(),Q_BidPrice());
SetGlobalVar(0,0);
}
if (GetGlobalVar(1)==0)
{
A_SendOrder(Enum_Sell,Enum_Entry,1,Q_AskPrice());
SetGlobalVar(1,1);
}
}