模型 (文华财经WH8赢智V8.2)

投资者咨询:模型 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-22 19:09
 //该组件仅仅用来示范如何编写算法交易组件
//用户需要根据自己交易经验,编写组件再实际应用!!!

//主要策略:设定分批总手数,开平仓时,自动根据买卖盘动态分批。
VAR Modname;
VAR N;//定义总手数。
VAR Code1;//定义合约名称
VAR KPN;//卖1量
VAR PPN;//买1量
VAR Status;//定义交易所状态修正变量,开仓总手数
GLOBAL_VAR YYN;//定义目前已有手数。
GLOBAL_VAR BuyPosition;//定义目前已有手数。
GLOBAL_VAR SellPosition;//定义目前已有手数。

VOID MAIN()//主函数。
{
    Modname="模组名"; 
N=20;//开仓总手数
    Code1=Modname.F_DealCode();
    SellPosition=AL_SellRemainPosition(Code1);
    BuyPosition=AL_BuyRemainPosition(Code1);
KPN=Offers(Code1,"askvol1");//取得当前合约卖1量。
PPN=Offers(Code1,"bidvol1");//取得当前合约买1量。
    Status=T_IsExchangeOpen(Code1);//判断当前合约所属交易所的状态。
IF(Modname.F_FreshSig() == 1)
{
IF(Modname.F_Sig() == BK&&T_IsExchangeOpen(Code1) == 1)//当前信号为开多仓信号并且交易所处于开盘状态的时候。  
{    
BKDeal();//运行开多仓分批函数。 
}  
ELSE IF(Modname.F_Sig() == SK&&T_IsExchangeOpen(Code1) == 1)//当前信号为开空仓信号并且交易所处于开盘状态的时候。  
{    
SKDeal();//运行开空仓分批函数。 
ELSE IF(Modname.F_Sig() == BP&&T_IsExchangeOpen(Code1) == 1) //当前信号为平空仓信号并且交易所处于开盘状态的时候。 
{    
BPDeal();//运行平空仓分批函数。 
ELSE IF(Modname.F_Sig() == SP&&T_IsExchangeOpen(Code1) == 1) //当前信号为平多仓信号并且交易所处于开盘状态的时候。 
{    
SPDeal();//运行平多仓分批函数。 
}
ELSE IF(Modname.F_FreshSig() == 0)
{
IF(Modname.F_Sig() == BK&&T_IsExchangeOpen(Code1) == 1)//当前信号为开多仓信号并且交易所处于开盘状态的时候。  
{    
BKDeal();//运行开多仓分批函数。 
}  
ELSE IF(Modname.F_Sig() == SK&&T_IsExchangeOpen(Code1) == 1)//当前信号为开空仓信号并且交易所处于开盘状态的时候。  
{    
SKDeal();//运行开空仓分批函数。 
ELSE IF(Modname.F_Sig() == BP&&T_IsExchangeOpen(Code1) == 1) //当前信号为平空仓信号并且交易所处于开盘状态的时候。 
{    
BPDeal();//运行平空仓分批函数。 
ELSE IF(Modname.F_Sig() == SP&&T_IsExchangeOpen(Code1) == 1) //当前信号为平多仓信号并且交易所处于开盘状态的时候。 
{    
SPDeal();//运行平多仓分批函数。 
}
}
VOID BKDeal()//定义开仓分批函数
{  
IF(YYN+KPN<=N)//如果已开仓手数小于需要开仓手数。    
{      
IF(Modname.F_Sig() == BK&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为BK并且无挂单。          
{            
T_Deal(Code1,0,0,KPN,Offers(Code1,"ask1"));//做多指定手数。            
YYN=YYN+KPN;//已开仓手数增加KPN          
}          
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。    
}  
ELSE IF(YYN+KPN>N && YYN<N)//如果已开仓手数大于需要开仓手数。 
{
IF(Modname.F_Sig() == BK&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为BK并且无挂单。          
{            
T_Deal(Code1,0,0,N-YYN,Offers(Code1,"ask1"));//做多指定手数。                  
MessageOut("good");
}          
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。 
}
ELSE
{
MessageOut("开多仓分批已成交");//新的已开仓手数等于需要开仓手数。
}   
}
VOID SKDeal()//定义开仓分批函数
{  
IF(YYN+PPN<=N)//如果已开仓手数小于需要开仓手数。    
{         
IF(Modname.F_Sig() == SK&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为SK并且无挂单。          
{            
T_Deal(Code1,1,0,PPN,Offers(Code1,"bid1"));//做空指定手数。            
YYN=YYN+PPN;//已开仓手数增加PPN          
}      
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。    
}  
ELSE IF(YYN+PPN>N && YYN<N)//日过已开仓手数等于需要开仓手数。 
{
IF(Modname.F_Sig() == SK&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为BK并且无挂单。          
{            
T_Deal(Code1,0,0,N-YYN,Offers(Code1,"bid1"));//做多指定手数。                  
MessageOut("good");
}          
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。 
}
ELSE
{
MessageOut("开空仓分批已成交");//新的已开仓手数等于需要开仓手数。
}   
}
VOID BPDeal()//定义平仓分批手数
{  
IF(SellPosition-KPN>=0 && SellPosition>0)//如果已有持仓的手数大于0    
{      
IF(Modname.F_Sig() == BP&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为BP并且无挂单。         
{           
T_Deal(Code1,0,1,KPN,Offers(Code1,"ask1"));//平空仓指定手数。
//此句中T_Deal的第3个参数为1,表示平仓,只适用于非上交所合约,如果绑定上交所合约时,请将1改为2即可。下同理。           
YYN=YYN-KPN;//已开仓手数减少KPN         
}           
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。    
}  
ELSE IF(SellPosition<KPN && SellPosition>0)//已开仓手数为0的时候   
{
IF(Modname.F_Sig() == BP&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为BK并且无挂单。          
{            
T_Deal(Code1,0,1,SellPosition,Offers(Code1,"ask1"));//做多指定手数。                  
}          
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。
}
ELSE
{
MessageOut("平空仓分批已成交");//新的已开仓手数等于需要开仓手数。
}
}
VOID SPDeal()//定义平仓分批手数
{  
IF(BuyPosition-PPN>=0 && BuyPosition>0)//如果已有持仓的手数大于0    
{        
IF(Modname.F_Sig() == SP&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为SP并且无挂单。         
{           
T_Deal(Code1,1,1,PPN,Offers(Code1,"bid1"));//平多仓指定手数。
//此句中T_Deal的第3个参数为1,表示平仓,只适用于非上交所合约,如果绑定上交所合约时,请将1改为2即可。下同理。           
YYN=YYN-PPN;//已开仓手数增加KPN         
}      
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。    
}  
ELSE IF(BuyPosition<PPN && BuyPosition>0)//已开仓手数为0的时候   
{
IF(Modname.F_Sig() == BP&&T_IsNoOrder() == 1&&Status == 1)//如果当前信号为BK并且无挂单。          
{            
T_Deal(Code1,1,1,BuyPosition,Offers(Code1,"ask1"));//做多指定手数。                  
}          
ELSE          
MessageOut("等待成交");//其他情况显示“等待成交”。
}
ELSE
{
MessageOut("平多仓分批已成交");//新的已开仓手数等于需要开仓手数。
}
}
上面是软件里的模型范例,我虽不太懂,但还是看出了不少错误,包括后面的中文说明,希望老师们仔细看看
 
技术人员回复
日期:2018-8-22 19:19
wh8范例已经重新整理编制了

目前正在内测阶段,后续测试没有问题后,就会进行更新的

您可以在持续关注下