function MACD(freq,shareNum)%
%买卖原则为:
%dif-dea均为正,且dif上扬,买入信号参考。
%dif-dea均为负,且dif下跌,卖出信号参考。
targetList = traderGetTargetList();
%获取目标资产信息
HandleList = traderGetHandleList();
%获取账户句柄
for i=1:length(targetList);
%--------------------仓位、K线、当前bar的提取-----------------------------%
%获取当前仓位
[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
%策略中每次取数据的长度
lags=300;
barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);
if(barnum<lags)
continue;
end
%获取K线数据
[time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'min',freq, 0-lags, 0,false,'FWard');
% [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(k).Market,targetList(k).Code,'day',1,0-dlags, 0,false,'FWard');
%-------------------------交易逻辑-------------------------------%
%得到MACD指标
[ema12]=traderEMA(12,targetList(i).Market,targetList(i).Code,'day',1, 0-lags, 0,false,'FWard');
[ema26]=traderEMA(26,targetList(i).Market,targetList(i).Code,'day',1, 0-lags, 0,false,'FWard');
dif=ema12-ema26;
dea=zeros(length(dif),1);
for j=2:length(dif)
dea(j,1)=2/10*dif(j,1)+8/10*dea(j-1,1);%在DEA里,C=DIF,N=9,所以EMA(DIF,9)=2/10*今天的DIF+8/10*昨天的DIF
end
macd=(dif-dea)*2;
%macd=MACD(close,12,26,9);
%交易条件
con1= dif(end)>dif(end-1) &&dif(end)>dea(end); %MACD金叉:DIF由下向上突破DEA,为买入信号。
con2= dif(end)<dif(end-1) && dif(end)<dea(end) ; %MACD死叉:DIF由上向下突破DEA,为卖出信号。
con3= macd(end)>0&macd(end-1)<0;%MACD值由负变正,市场由空头转为多头。
con4= macd(end-1)>0&macd(end)<0;%MACD值由正变负,市场由多头转为空头。
con5= dif(end)>0&&dea(end)>0 && dif(end)>dea(end); %DIF与DEA均为正值,即都在零轴线以上时,大势属多头市场,DIFF向上突破DEA,可作买。
con6= dif(end)<0&&dea(end)<0&&dif(end)<dea(end); %DIFF与DEA均为负值,即都在零轴线以下时,大势属空头市场,DIFF向下跌破DEA,可作卖。
if marketposition==0 && con1;
orderID1=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','buy1');%开多单
% traderStopLossByOrder(HandleList(1),orderID1,stopTar,'Percent','market','stoplossS');%对订单百分比止损
%traderStopTrailingByOrder(HandleList(1),orderID1,profitTar,'Percent',pct,'Percent','market','trailingS');%对订单百分比跟踪止盈
end
if marketposition==0 && con2;
orderID2=traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','sell1');%开空单
%traderStopLossByOrder(HandleList(1),orderID2,stopTar,'Percent',shareNum,'market','stoplossB');%对订单百分比止损
%traderStopTrailingByOrder(HandleList(1),orderID2,profitTar,'Percent',pct,'Percent','market','trailingB');%对订单百分比跟踪止盈
end
if marketposition>0&&con3 && con6;
traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','sell1');%开空单
end
if marketposition<0&&con4 && con5;
traderBuyToCover(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','buy1');
end
end
end