发个模板,欢迎共享,欢迎测试、改进、完善 - 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的。把你的时间小数位数改了点。
如果以上指标公式不适用于您常用的行情软件
或者您想改编成选股公式,以便快速选出某种形态个股的话,
- 上一篇:我拟提供一市面上目前售价每年一万元的交…
- 下一篇:一个牛人的技术分析历程
相关文章
-
没有相关内容