策略原理:+ D6 m9 D. f; L& B f6 C5 Z- s
将资金分为N份,采取随机抛点的形式入场,止损为10%,止盈为11%
* s) G5 r$ j {1 u/ i' o/ ~! j" j 如果该份资金获利超过11%,则上移止盈止损线,且启动下一份资金抛点入场。2 L! }$ S+ m9 w' n% B3 b6 k
只有多头入场' l3 {. ]; R: \& E0 p1 @
6 J/ s. I7 B1 t
策略代码:
/ I8 D. f, e, d# S2 _* A1 @; efunction Strategy1(default_unit,default_exitway,freq)%
" ]" D! n7 a% A3 o/ Q4 `8 A( R4 BtargetList = traderGetTargetList(); %获取目标资产信息 HandleList = traderGetHandleList(); %获取账户句柄 global entrybar; global record; for k=1:length(targetList); ) s6 ]: D5 Q$ [/ l( o
%--------------------仓位、K线、当前bar的提取-----------------------------% %获取当前仓位 [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code); %策略中每次取数据的长度 lags=90; dlags=20; barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code); %数据长度限制 if(barnum<lags) continue; end if(barnum<dlags) continue; end %获取K线数据 [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-lags, 0,false,'FWard'); if length(close)<lags continue; end; %-------------------------交易逻辑-------------------------------% %----------入场信号--------------------% stoplossratio=0.01; stopearnratio=0.011; remain_num=find(record.isopen==1); remain.isopen=record.isopen(remain_num); remain.isearn=record.isearn(remain_num); remain.pivotprice=record.pivotprice(remain_num); remain.entrybar=record.entrybar(remain_num); remain.unit=record.unit(remain_num); [ValidCash,MarketCap,OrderFrozen,MarginFrozen,PositionProfit] = traderGetAccountInfo(HandleList(1)); [~,~,Multiple,~,~,~,~,~,~] = traderGetFutureInfo(targetList(k).Market,targetList(k).Code); remain_share=10-length(remain_num); con1=0; if remain_share~=0; con1=1; buyunit=fix(ValidCash/remain_share/close(end)/Multiple); end; for i=1:length(remain_num) index=remain_num(i); % barsinceentry=barnum-remain.entrybar(i); % [~,entryopen,entryhigh,entrylow,entryclose,~,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-barsinceentry, 0,false,'FWard'); % enterprice=entryclose(1); if close(end)<remain.pivotprice(i)-stoplossratio*remain.pivotprice(i) % 触发止损线 orderID2=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','sell'); if orderID2==0 continue; end; record.isopen(index)=0; elseif close(end)>remain.pivotprice(i)+stopearnratio*remain.pivotprice(i) % 触发止盈线 record.pivotprice(index)=close(end); record.isearn(index)=2; end; end; con2=randi([1 10],1,1)==1; con3=isempty(find(remain.isearn==1,1)); buycon=con1 && con2 && con3; %---------------------------入场操作--------------------------------% if buycon orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,buyunit,0,'market','buy'); if orderID1==0 continue; end; record.pivotprice=[record.pivotprice,close(end)]; record.isearn=[record.isearn,1]; record.isopen=[record.isopen,1]; record.unit=[record.unit,buyunit]; record.entrybar=[record.entrybar,barnum]; end; end end
! k8 S! W2 |7 X3 X' f P/ e2 i: f# m2 @' Q* D) h6 I
/ H. f% B+ |& {! J+ x
2 b9 T; x' M. n# z k5 O
2 g6 q/ `$ y- s0 ] |