發(fā)個(gè)模板,歡迎共享,歡迎測(cè)試、改進(jìn)、完善 - TradeBlazer公式 [開拓者 TB]
- 咨詢內(nèi)容:
//本模板包含兩個(gè)模塊:開多倉,平多倉。
//本模板還沒有完全測(cè)試完畢。已發(fā)現(xiàn)有個(gè)別重復(fù)發(fā)單現(xiàn)象。原因尚在查找中。
//歡迎copy,歡迎拍磚。
Params
//模板參數(shù)
Numeric lastOpenTime(14.55);//開倉時(shí)間限制
Numeric lastCloseTime(14.56);//退出時(shí)間限制
Numeric waittimeEntry(20);//等待入場(chǎng)成交時(shí)間秒數(shù)
Numeric waittimeExit(20);//等待出場(chǎng)成交時(shí)間秒數(shù)
Numeric lots(1); //交易量
Vars
//模板變量
Bool conBuyEntry;//開多條件
Bool conOpenOrderBuyEntry;//已存在未成交開多單
Bool conWaitTime;
Numeric priceBuyEntry;
Bool conSellExit;
Bool conOpenOrderSellExit;//已存在未成交平多單
Numeric priceSellExit;
//個(gè)性變量
Begin
//開多*******************************************************************************************************
//判斷是否已有未成交多單 (防止網(wǎng)絡(luò)延時(shí)以及全局變量意外丟失正確值)
conOpenOrderBuyEntry=(GetGlobalVar(10)==1) || (A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) != InvalidInteger) ;
If ( CurrentTime*100<lastOpenTime && A_BuyPosition==0 )
{
FileAppend("d:\\h.log",text(currenttime*100)+"***********************************準(zhǔn)備開多");
//-------------------------------------------------------------------------------------求開多條件
conBuyEntry=True;
//-------------------------------------------------------------------------------------求開多條件完畢
If (conBuyEntry) //多頭條件
{
//處理已有未成交多單
If ( conOpenOrderBuyEntry )
{
// 判斷等待時(shí)間
If (GetGlobalVar(11)==InvalidNumeric)
SetGlobalVar(11,0);//初始化等待時(shí)間變量
conWaitTime=(MyDecTime( currenttime,GetGlobalVar(11))>waittimeEntry)
|| ( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) )) > waittimeEntry );
FileAppend("d:\\h.log",text(currenttime*100)+" "+"等待時(shí)間秒數(shù)1="+text(MyDecTime( currenttime,GetGlobalVar(11)))
+" 等待時(shí)間秒數(shù)2="+text( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ))));
If ( conWaitTime )
{
FileAppend("d:\\h.log",text(currenttime*100)+" "+"延時(shí)已到,撤單重發(fā)");
FileAppend("d:\\h.log",text(currenttime*100)+" "+"撤單合同號(hào)="
+A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));
A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ) ); //撤單
//算價(jià)、下單、設(shè)置、計(jì)時(shí)
priceBuyEntry= ;
A_SendOrder(Enum_Buy,Enum_Entry,lots,priceBuyEntry);
FileAppend("d:\\h.log",text(currenttime*100)+" "+"重發(fā)單(未成交)索引號(hào)="
+text( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));
FileAppend("d:\\h.log",text(currenttime*100)+" "+"重發(fā)合同號(hào)(未成交)="
+A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));
FileAppend("d:\\h.log",text(currenttime*100)+" "+"重發(fā)合同號(hào)(末合同)="
+A_OrderContractNo( A_GetLastOrderIndex(Enum_Buy,Enum_Entry)));
SetGlobalVar(10,1);
SetGlobalVar(11,currenttime);
}
}
Else
{
//算價(jià)、下單、設(shè)置、計(jì)時(shí)
priceBuyEntry= ;
A_SendOrder(Enum_Buy,Enum_Entry,lots,priceBuyEntry);
FileAppend("d:\\h.log",text(currenttime*100)+" "+"首次發(fā)單");
FileAppend("d:\\h.log",text(currenttime*100)+" "+"首發(fā)合同號(hào)="
+A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));
SetGlobalVar(10,1);
SetGlobalVar(11,currenttime);
}
}
Else
{
FileAppend("d:\\h.log",text(currenttime*100)+" "+"不符合多頭條件");
//有多單則撤單
If ( (A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) != InvalidInteger) ) //不采用全局變量,需等待前面的單子可撤。
A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ) );
SetGlobalVar(10,0);
}
}
Else
{
If ( (A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) != InvalidInteger) ) //不采用全局變量,需等待前面的單子可撤。
A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ) );
SetGlobalVar(10,0);
}
//處理多頭倉位*************************************************************************************************************************************
If ( A_BuyPosition!=0 )
{
//判斷是否已有未成交平多單 (防止網(wǎng)絡(luò)延時(shí)以及全局變量意外丟失正確值)
conOpenOrderSellExit=(GetGlobalVar(30)==1) || (A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) != InvalidInteger) ;
FileAppend("d:\\h.log",text(currenttime*100)+"================================================準(zhǔn)備平多倉");
If (CurrentTime*100<=lastCloseTime) //退出時(shí)間限制
{
//有單無單分別處理
If ( conOpenOrderSellExit ) //有單處理,有手工單也同樣處理
{
If (GetGlobalVar(31)==InvalidNumeric)
SetGlobalVar(31,0);//初始化等待時(shí)間變量
conWaitTime=(MyDecTime( currenttime,GetGlobalVar(31))>waittimeExit)
|| ( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) )) > waittimeExit );
FileAppend("d:\\h.log",text(currenttime*100)+" "+"平倉等待時(shí)間秒數(shù)1="+text(MyDecTime( currenttime,GetGlobalVar(31)))
+" 平倉等待時(shí)間秒數(shù)2="+text( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) ))));
If ( conWaitTime ) // 等待成交的延時(shí)已到,撤單追價(jià)重發(fā)
{
FileAppend("d:\\h.log",text(currenttime*100)+" "+"延時(shí)已到,撤平倉單重發(fā)");
FileAppend("d:\\h.log",text(currenttime*100)+" "+"撤單合同號(hào)="
+A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday)));
A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) ) ); //撤單
//算價(jià)、下單、設(shè)置、計(jì)時(shí)
PriceSellExit= ;
A_SendOrder(Enum_Sell,Enum_Exit,lots,PriceSellExit);
SetGlobalVar(30,1);
SetGlobalVar(31,currenttime);
}
}
Else //無單處理
{
//-------------------------------------------------------------------------------------求平多條件
conSellExit=true;
//-------------------------------------------------------------------------------------求平多條件完畢
If (conSellExit) //平多條件
{
//算價(jià)、下單、設(shè)置、計(jì)時(shí)
PriceSellExit= ;
A_SendOrder(Enum_Sell,Enum_Exit,lots,PriceSellExit);
FileAppend("d:\\h.log",text(currenttime*100)+" "+"首次平倉發(fā)單");
SetGlobalVar(30,1);
SetGlobalVar(31,currenttime);
}
}
}
Else //退出時(shí)間已到,有單撤單,以停板價(jià)委托,之后不撤單
{
FileAppend("d:\\h.log",text(currenttime*100)+" "+"退出時(shí)限已到");
If (GetGlobalVar(39)==InvalidNumeric)
SetGlobalVar(39,0);//初始化
If ( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday)!=InvalidInteger && GetGlobalVar(39)!=1)
{
A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) ) );
FileAppend("d:\\h.log",text(currenttime*100)+" "+"有平倉單撤單");
SetGlobalVar(30,0);
}
If ( GetGlobalVar(39)!=1 )
{
A_SendOrder(Enum_Sell,Enum_Exit,lots, Q_LowerLimit);
FileAppend("d:\\h.log",text(currenttime*100)+" "+"跌停價(jià)發(fā)平倉單");
SetGlobalVar(30,1);
SetGlobalVar(39,1);
}
}
}
Else
SetGlobalVar(30,0);
End - TB技術(shù)人員:
上面的用戶函數(shù)mydectime用于計(jì)算兩個(gè)時(shí)間的秒差
Params
Numeric MyTime1; //如0.143059
Numeric MyTime2;
Vars
Numeric MyHH1;
Numeric MyMM1;
Numeric MySS1;
Numeric MyHH2;
Numeric MyMM2;
Numeric MySS2;
Begin
MyHH1 = IntPart(MyTime1*100);
MyMM1 = IntPart(MyTime1*10000)-MyHH1*100;
MySS1 = MyTime1*1000000-MyHH1*10000-MyMM1*100;
MyHH2 = IntPart(MyTime2*100);
MyMM2 = IntPart(MyTime2*10000)-MyHH2*100;
MySS2 = MyTime2*1000000-MyHH2*10000-MyMM2*100;
Return MyHH1*3600 + MyMM1*60 + MySS1 - MyHH2*3600 - MyMM2*60 - MySS2;
End - TB客服:
要是tb能提供收盤時(shí)間也能進(jìn)行盤中測(cè)試就好了
- 網(wǎng)友回復(fù):
很高興“順勢(shì)順心”利用我的MyDecTime函數(shù)。但是我自己并不使用該函數(shù),實(shí)際上使用Tick計(jì)算更合適,我認(rèn)為。
有時(shí)間研究一下你的程序框架。 - 網(wǎng)友回復(fù):
很高興“順勢(shì)順心”利用我的MyDecTime函數(shù)。但是我自己并不使用該函數(shù),實(shí)際上使用Tick計(jì)算更合適,我認(rèn)為。
有時(shí)間研究一下你的程序框架。
efrog 發(fā)表于 2010-9-13 12:31
引用你的函數(shù)沒有注明出處。哈哈。我也忘了從誰那copy的。把你的時(shí)間小數(shù)位數(shù)改了點(diǎn)。
如果以上指標(biāo)公式不適用于您常用的行情軟件
或者您想改編成選股公式,以便快速選出某種形態(tài)個(gè)股的話,
相關(guān)文章
-
沒有相關(guān)內(nèi)容