來看看這個開拓者程序為什么不開倉
作者:開拓者 TB 來源:cxh99.com 發布時間:2013年04月19日
|
- 咨詢內容: //價格上穿20均線開多,下穿開空
//
//30%倉位上限
//
//------------------------------------------------------------------------
Params
Numeric Length(20); // 平均波動周期 ATR Length
Vars
NumericSeries AvgValue;
Numeric TotalEquity; // 按最新收盤價計算出的總資產
String BuyPositionStr;
String SellPositionStr;
Numeric BuyPosition;
Numeric SellPosition;
Numeric Units;
String BuyUnitsStr; // 交易單位
String SellUnitsStr;
Numeric BuyUnits; // 交易單位
Numeric SellUnits;
Begin
//If ( Q_Last == 0 || ( Date != Date[1] && High == Low ) ) Return; //如果未開盤,則直接返回
AvgValue = Average(Close,Length);
TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
Units=IntPart((TotalEquity*0.3) /(Close* ContractUnit()*MarginRatio()));
If(GetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyPosition")==InvalidString) //持倉狀態賦初值
{
BuyPosition=0;
}
If(GetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellPosition")==InvalidString)
{
SellPosition=0;
}
If(GetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyPosition")!=InvalidString)
{
BuyPositionStr=GetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyPosition");
BuyPosition=Value(BuyPositionStr);
}
If(GetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellPosition")!=InvalidString)
{
SellPositionStr=GetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellPosition");
SellPosition=Value(SellPositionStr);
}
If(GetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyUnits")!=InvalidString)
{
BuyUnitsStr=GetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyUnits");
BuyUnits=Value(BuyUnitsStr);
}
If(GetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellUnits")!=InvalidString)
{
SellUnitsStr=GetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellUnits");
SellUnits=Value(SellUnitsStr);
}
If((Q_Last > AvgValue) &&(Q_High<AvgValue)&&(Units >= 1)&&BuyPosition==0&&SellPosition==0) //無持倉上穿開多
{
A_SendOrder(Enum_Buy,Enum_Entry,Units,Q_UpperLimit);
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyPosition",Text(1));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyUnits",Text(Units));
}
If((Q_Last < AvgValue) &&(Q_Low>AvgValue)&&(Units >= 1)&&SellPosition==0&&BuyPosition==0) //無持倉下穿開空
{
A_SendOrder(Enum_Sell,Enum_Entry,Units,Q_LowerLimit);
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellPosition",Text(-1));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellUnits",Text(Units));
}
If((Q_Last > AvgValue) && (Units >= 1)&&BuyPosition==0&&SellPosition==-1) //空單平倉反手
{
A_SendOrder(Enum_Buy,Enum_Exit,SellUnits,Q_UpperLimit);
A_SendOrder(Enum_Buy,Enum_Entry,Units,Q_UpperLimit);
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellPosition",Text(0));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyPosition",Text(1));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellUnits",Text(0));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyUnits",Text(Units));
}
If((Q_Last < AvgValue) && (Units >= 1)&&SellPosition==0&&BuyPosition==1) //多單平倉反手
{
A_SendOrder(Enum_Sell,Enum_Exit,BuyUnits,Q_LowerLimit);
A_SendOrder(Enum_Sell,Enum_Entry,Units,Q_LowerLimit);
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyPosition",Text(0));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellPosition",Text(-1));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"BuyUnits",Text(0));
SetTBProfileString2File("D:\\TBlog.log",Symbol(),"SellUnits",Text(Units));
}
End
- TB技術人員: 具體代碼沒有細看,這里先提醒樓主Q_Last 只能用于實時行情交易,不能用于歷史測試。
- TB客服: 就是因為要具體到判斷每一跳的行情才這樣寫的,求指導,看看問題出在哪里了
- 網友回復: 在明確一下,我的意思是實盤中不下單,不是歷史測試
- 網友回復: 好的,明白了。代碼需要仔細研究,請耐心等候回復……