用AB做行业轮动

Discussion in 'AmiBroker' started by rypan, Dec 23, 2014.

  1. 第一步

    导入数据,要求数据的开始和结束日期都相同。然后把导入的数据加入一个watchList“风格指数”
     
  2. 第二步

    对每个指数生成需要横向比较的指标。下面的代码用的是N日的涨幅

    analysis -- automatic analysis -- scan,"use filter"选“风格指数”

    Code:
    beginPeriod = 10;
    endPeriod = 100;
    step = 10;
    
    for(period = beginPeriod; period <= endPeriod; period = period + step)
    {
    
    	//*生成N日涨幅序列
    	compName = "~" + name() + "-" + period + "日涨幅";	
    	AddToComposite(100 * c / ref(c, -period), compName, "X" );
    	//*/
    	
    	//把生成的行情加入watchlist
    	CategoryAddSymbol(compName, categoryWatchlist, period);
    }
    
    buy = sell = false;
    
    
     
  3. 第三步

    买入N日涨幅最大的指数,卖出持有的指数

    analysis -- automatic analysis -- optimize,"use filter"选“风格指数”

    Code:
    //参数设置
    beginPeriod = 10;
    endPeriod = 100;
    step = 10;
    beginDate = "100601";
    
    //佣金。关键变量!
    SetOption("CommissionAmount", 0.1);
    
    setOption("CommissionMode", 1); //percent of trade
    SetOption("InitialEquity", 2000000);
    TickSize = 0.01;
    RoundLotSize = 1;
    
    _TRACE("!CLEAR!"); 
    
    period = Optimize("period", beginPeriod, beginPeriod, endPeriod, step); 
    
    //必须放在控制买卖信号的程序的的前面
    buy = sell = cover = short = false;
    
    //遍历#1watchlist
    list = CategoryGetSymbols( categoryWatchlist,  period); 
    
    
    // _trace("list=" + list);
    //对某个指数的行情进行逐Bar的判断
    for(i = period; i < barCount; i++)
    {
    	maxx = -1;
    	symName = "";
    
    	// _trace("i = "+NumToStr(i));
    	for( j = 0; ( sym = StrExtract( list, j ) ) != ""; j++ ) 
    	{
    		// _trace("j="+NumToStr(j));	
    		// _trace("sym[" + j + ", " +i + "]=" + sym);
    		tmpC = foreign(sym, "Close");
    		// _trace("tmpC[i]=" + tmpC[i]);
    		if(tmpC[i] > maxx) {
    			// _trace("maxx="+maxx);
    			maxx = tmpC[i];
    			symName = sym;
    		}
    	} 
    	
    	//如果当前行情有对应的最大值,买入
    	// _trace("thisQuote  = " + name());
    	// _trace("maxSymName=" + symName + NumToStr(datenum()));
    	// _trace("namex     = " + StrMid( symName, 1, 13));
    	/*买入一手期指对应的金额
    	positionSize = 300 * foreign(beginDate + "-000300", "Close");
    	//*/
    	//*买入固定金额
    	positionSize = 200000;
    	//*/
    	
    	if(StrMid( symName, 1, 13)  == name()){
    		buy[i] = true;
    		// _trace("buy");
    	} else {
    		sell[i] = true;
    		// _trace("sell");		
    	}
    }
    
     
  4. 在筛选出了股票之后 下单 进入仓位维护和跟踪阶段
    你是怎么考虑的?
    我在想重新生成几个list 里面放入所有已经有持仓的个股 对每一个个股开一个chart 实时跟踪
    但是开chart的话 如果跟踪股票(实际持仓)超过50个 那一个amibroker实例就不够了感觉
    因为每个股票的跟踪模型和exploration毕竟不同 没法把模型都放在一个exploration里吧
     
  5. 股票如果做日线,可以把平仓条件做成一个指标,在大智慧里用列表形式查看

    达到条件就收盘时平仓

    用指标进行实时报警,也许也可行
     
  6. 都是做A股吗?发现Amibroker按照A股交易时间的话,小时线都无法正常显示啊,多出来一个小时。
     
  7. 你可以在databasesetting里把交易时间定为930开始
     
  8. 就是设置成9:30开始,15:00结束,我这里显示被划成了5个小时。你们都是4个小时?
     
  9. 请rypan指导一下如何导入A股数据,谢谢!
     
  10. 大智慧导出,AB导入。只是几个指数的数据。

    大批量的股票数据我都是买的。