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