第二步 对每个指数生成需要横向比较的指标。下面的代码用的是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;
第三步 买入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"); } }
在筛选出了股票之后 下单 进入仓位维护和跟踪阶段 你是怎么考虑的? 我在想重新生成几个list 里面放入所有已经有持仓的个股 对每一个个股开一个chart 实时跟踪 但是开chart的话 如果跟踪股票(实际持仓)超过50个 那一个amibroker实例就不够了感觉 因为每个股票的跟踪模型和exploration毕竟不同 没法把模型都放在一个exploration里吧