【机器学习】使用MATLAB进行机器学习策略模型构建(一)


#1

自动输入高开低收价及成交量持仓量,同时对每日的K线的标记序号也进行输入。

让计算机根据行情自动学习匹配,在2010-2011年底的5五分钟数据为样本内进行学习,拟合出来相对关系为:
升降信息 y满足:
y= cos( barT) + 0.52* sin[cos(low/3+barT)/acos(2sin((low/2+high/2)^(3.14barT)))]
当y大于0,则买进;y小于0,则卖出。加上简单的0.5%的止盈与1.5%,每日日内进行平仓。

策略源码及执行代码下载:机器学习系列之一

function test2(bInit,bDayBegin,cellPar)%
global g_idxK;
global TLen;
global pstbar;
global entryP;
stoprate = cellPar{1};
Freq =cellPar{2};
if bInit
    g_idxK = traderRegKData('min',Freq);
    TLen = length(g_idxK(:,1));
    entryP = nan(1,TLen);
    pstbar = zeros(1,TLen);
else
    if bDayBegin
        pstbar = zeros(1,TLen);
    end
    mp=traderGetAccountPositionV2(1,1:TLen); %仓位读取
    [~,BarTime] = traderGetCurrentBarV2();  % 获取当下时间
    dateVec = datevec(BarTime);             % datevec将时间转化为序列。对应[年,月,日,时,分,...]
    nowTime = dateVec(4)*100 + dateVec(5);
    if nowTime>= 1445
        for i = 1:TLen
            if mp(i)~=0
                traderPositionToV2(1,i,0,0,'market','buy1');%开多单
            end
        end
        return;
    end
    datas = traderGetRegKData(g_idxK,1,true); % 获取11个数据
    realTime = max(datas(1:8:end,end));
    for i=1:TLen
        data = datas(1+8*(i-1):8*i,:);
        if  data(6,end) ==0 || data(1,end)~=realTime || data(4,end)==0
            continue;
        end
        
        if mp(i)==0
            entryP(i)=nan;
        elseif isnan(entryP(i))
            entryP(i) = data(2,end);
        end
        pstbar(i) = pstbar(i)+1;
        y = cos(pstbar(i)) + 0.52* sin(cos(pstbar(i)+data(4,end)/3)/acos(2*sin((data(4,end)/2+data(3,end)/2)^3.14*pstbar(i))));
        
        if sign(mp(i))*(entryP(i)-data(5,end))>entryP(i)*stoprate||(sign(mp(i))*(data(5,end)-entryP(i))>3*entryP(i)*stoprate)
            traderPositionToV2(1,i,0,0,'market','buy1');%开多单
        end
       
        amount = 100 ;
        
        if mp(i) == 0 && y>0 && nowTime>= 930&&nowTime< 1440
            traderBuyV2(1,i,amount,0,'market','buy1');%开多单
        elseif  mp(i) == 0  && y<0 && nowTime>= 930&&nowTime< 1440
            traderSellShortV2(1,i,amount,0,'market','sell1');%开空单
        end
    end
end
end