比较完整的OFDM仿真,供大家学习下载。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、%main_OFDM.m
%一个相对完整的OFDM通信系统的仿真设计,包括编码,调制,IFFT,
%上下变频,高斯信道建模,FFT,PAPR抑制,各种同步,解调和解码等模
%块,并统括系统性能的仿真验证了系统设计的可靠性。
clear all
close all
clc
%++++++++++++++++++++++++++全局变量++++++++++++++++++++++++++++++
% seq_num 表示当前帧是第几帧
% count_dds_up 上变频处的控制字的累加
% count_dds_down 下变频处的控制字的累加(整整)
% count_dds_down_tmp 下变频处的控制字的累加(小数)
% dingshi 定时同步的定位
% m_syn 记录定时同步中的自相关平台
global seq_num
global count_dds_up
global count_dds_down
global count_dds_down_tmp
global dingshi
global m_syn
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
% SNR_Pre 设定用于仿真的信噪比的初值
% interval_SNR 设定用于仿真的信噪比间隔
% frame_num 每一个信噪比下仿真的数据帧数
% err_int_final 用于计算每帧出现的误比特数
% fwc_down 设定的接收机初始载波频率控制字
% fre_offset 设定接收机初始载波频率偏移调整量(单位为Hz)
% k0 每次进入卷积编码器的信息比特数
% G 卷积编码的生成矩阵
SNR_Pre=-5;
interval_SNR=1;
for SNR_System=SNR_Pre:interval_SNR:5
frame_num=152;
dingshi=250;
err_int_final=0;
fwc_down=16.050;
fre_offset=0;
k0=1;
G=[1 0 1 1 0 1 1;1 1 1 1 0 0 1 ];
disp('--------------start-------------------');
for seq_num=1:frame_num, %frame_num 帧数
%+++++++++++++++++++++++以下为输入数据部分+++++++++++++++++++++++ datain=randint(1,90);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++以下为信道卷积编码部分+++++++++++++++++++++ encodeDATA=cnv_encd(G,k0,datain);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++信道交织编码+++++++++++++++++++++++++ interlacedata=interlacecode(encodeDATA,8,24);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++以下为QPSK调制部分+++++++++++++++++++++ QPSKdata=qpsk(interlacedata);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++生成训练序列+++++++++++++++++++++++++
if seq_num<3
trainsp_temp=seq_train();
end
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++++++++插入导频++++++++++++++++++++++++++++ PILOT=(1+j);
m_QPSKdata=QPSKdata;
data2fft_temp=[m_QPSKdata(1:8),PILOT,m_QPSKdata(9:16),PILOT,m_QPSKdata(17:24),PILO T,m_QPSKdata(25:32),PILOT,m_QPSKdata(33:40),PILOT,m_QPSKdata(41:48),m_QPSKdata(4 9:56),PILOT,m_QPSKdata(57:64),PILOT,m_QPSKdata(65:72),PILOT,m_QPSKdata(73:80),PIL OT,m_QPSKdata(81:88),PILOT,m_QPSKdata(89:end)];
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
trainsp_temp2=[trainsp_temp,zeros(1,128)];
trainsp=[trainsp_temp2(65:256),trainsp_temp2(1:64)];
%++++++++++++++++++++++++++降PAPR矩阵变换++++++++++++++++++++++++ matix_data=nyquistimp_PS();
matrix_mult=data2fft_temp*matix_data;
data2fft2=[matrix_mult(65:128),zeros(1,128),matrix_mult(1:64)];
%++++++++++++++++++++++++++++ifft运算+++++++++++++++++++++++++++
if seq_num==1
ifftin=trainsp;
elseif seq_num==2
ifftin=trainsp;
else
ifftin=data2fft2;
end
IFFTdata=fft_my(conj(ifftin)/256);
IFFTdata=conj(IFFTdata);
% figure
% plot(real(IFFTdata))
% xlabel('realIFFTdata')
% figure
% plot(imag(IFFTdata))
% xlabel('imagIFFTdata')
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++以下为插入循环前后缀,2倍升采样+++++++++++++++
data2fir=add_CYC_upsample(IFFTdata,2);
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
% +++++++++++++++++++++++++fir低通滤波++++++++++++++++++++++++++
guiyi_a=[0.0017216 0.010162 0.025512 0.028801 -0.0059219 -0.060115 -0.0496
0.091431 0.29636 0.3956 0.29636 0.091431 -0.0496 -0.060115 -0.0059219
0.028801 0.025512 0.010162 0.0017216 ];
%抽样截止频率为128kHZ,通带截止频率为20kHZ,阻带截止频率为40kHZ,带内纹波动小于1dB,带外衰减100dB
txFIRdatai=filter(guiyi_a,1,real(data2fir));
txFIRdataq=filter(guiyi_a,1,imag(data2fir));
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++发射机cic滤波++++++++++++++++++++++++++ CICidatai=cic_inter(txFIRdatai,20);
CICidataq=cic_inter(txFIRdataq,20);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++上变频++++++++++++++++++++++++++++
fwc_up=16; %控制字可以选择
DUCdata=up_convert_ofdm(fwc_up,CICidatai,CICidataq);
%++++++++++++++++++++++++++高斯白噪声信道++++++++++++++++++++++++ [DUCdata,datamax]=guiyi_DUCdata(DUCdata);
awgn_data=awgn(DUCdata,SNR_System);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%*****************************接受机*****************************
%+++++++++++++++++++++++++++++下变频+++++++++++++++++++++++++++++ DUCdata_tmp=awgn_data;
fwc_down=fwc_down+(fre_offset*128/2560000);
r_fre_offset=2560000*((fwc_down-fwc_up)/128);
[DDCdatai,DDCdataq]=down_convert_ofdm(fwc_down,DUCdata_tmp);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++++++接收机cic滤波+++++++++++++++++++++++++ CICddatai=cic_deci(DDCdatai,40,40);
CICddataq=cic_deci(DDCdataq,40,40);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++++++++fir低通滤波++++++++++++++++++++++++
guiyi_b=[ 0.019527 -0.03934 0.049055 -0.018102 -0.1003 0.5944 0.5944 -0.1003 -0.018102 0.049055 -0.03934 0.019527];
%抽样截止频率为64kHZ,通带截止频率为20kHZ,阻带截止频率为30kHZ,带内纹波动小于1dB,带外衰减60dB
rxFIRdatai=filter(guiyi_b,1,CICddatai);
rxFIRdataq=filter(guiyi_b,1,CICddataq);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++++量化++++++++++++++++++++++++++++
q_rxFIRdatai=sign(rxFIRdatai);
q_rxFIRdataq=sign(rxFIRdataq);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++++++++定时同步检测++++++++++++++++++++++++
if seq_num<3
time_syn(q_rxFIRdatai,q_rxFIRdataq);
end
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++++频率同步+++++++++++++++++++++++++++
fre_offset=fre_syn(rxFIRdatai,rxFIRdataq);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if seq_num>2
seq_num-2
fftw=32+dingshi;
rxFIRdata_syn=rxFIRdatai(fftw:fftw+255)+j*rxFIRdataq(fftw:fftw+255);
FFTdata=fft_my(rxFIRdata_syn);
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++++++降PAPR逆矩阵变换++++++++++++++++++++++ fftdata_reg=[FFTdata(193:256),FFTdata(1:64)];
dematrix_data=fftdata_reg*pinv(matix_data);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++++++++相位补偿+++++++++++++++++++++++++++ rx_qpsk_din_th=phase_comp(dematrix_data);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++++QPSK解调部分++++++++++++++++++++++++ % figure
% plot(rx_qpsk_din_th,'.')
% xlabel('星座图')
datatemp4=deqpsk(rx_qpsk_din_th);
datatemp4=sign(datatemp4);
for m=1:192
if datatemp4(m)==-1
datatemp4(m)=1;
elseif datatemp4(m)==1
datatemp4(m)=0;
end
end
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++信道解交织++++++++++++++++++++++++++++ interdout=interlacedecode(datatemp4,8,24);
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++以下为viterbi译码部分++++++++++++++++++++++ decodeDATA=viterbi(G,k0,interdout);
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++++++++误比特统计++++++++++++++++++++++++++++ err_final=sum(abs(decodeDATA-datain))
err_int_final=err_int_final+err_final
end
end
disp('------------------------------------------------------');
SNR_System
err_rate_final((SNR_System-SNR_Pre)./interval_SNR+1)=err_int_final/(90*(frame_num-2)) disp('------------------------------------------------------');
end
disp('--------------end-------------------');
SNR_System=SNR_Pre:interval_SNR:5;
figure
semilogy(SNR_System,err_rate_final,'b-*');
xlabel('信噪比/dB')
ylabel('误码率')
axis([-5,5,0,1])
grid on
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%************************beginning of file*****************************
%cnv_encd.m
%卷积码编码程序
function output=cnv_encd(G,k0,input)
% cnv_encd(G,k0,input),k0 是每一时钟周期输入编码器的bit 数,
% G 是决定输入序列的生成矩阵,它有n0 行L*k0 列n0 是输出bit 数,
% 参数n0 和L 由生成矩阵G 导出,L 是约束长度。L 之所以叫约束长度
% 是因为编码器在每一时刻里输出序列不但与当前输入序列有关,
% 而且还与编码器的状态有关,这个状态是由编码器的前(L-1)k0。
% 个输入决定的,通常卷积码表示为(n0,k0,m),m=(L-1)*k0 是编码
% 器中的编码存贮个数,也就是分为L-1 段,每段k0 个
% 有些人将m=L*k0 定义为约束长度,有的人定义为m=(L-1)*k0
% 查看是否需要补0,输入input 必须是k0 的整数部
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++
% G 决定输入序列的生成矩阵
% k0 每一时钟周期输入编码器的bit 数
% input 输入数据
% output 输入数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if rem(length(input),k0)>0
input=[input,zeros(size(1:k0-rem(length(input),k0)))];
end
n=length(input)/k0;
% 检查生成矩阵G 的维数是否和k0 一致
if rem(size(G,2),k0)>0
error('Error,G is not of the right size.')
end
% 得到约束长度L 和输出比特数n0
L=size(G,2)/k0;
n0=size(G,1);
% 在信息前后加0,使存贮器归0,加0 个数为(L-1)*k0 个
u=[zeros(size(1:(L-1)*k0)),input,zeros(size(1:(L-1)*k0))];
% 得到uu 矩阵,它的各列是编码器各个存贮器在各时钟周期的内容
u1=u(L*k0:-1:1);
%将加0 后的输入序列按每组L*k0 个分组,分组是按k0 比特增加
%从1 到L*k0 比特为第一组,从1+k0 到L*k0+k0 为第二组,。。。。,
%并将分组按倒序排列。
for i=1:n+L-2
u1=[u1,u((i+L)*k0:-1:i*k0+1)];
end
uu=reshape(u1,L*k0,n+L-1);
% 得到输出,输出由生成矩阵G*uu 得到
output=reshape(rem(G*uu,2),1,n0*(L+n-1));
% ************************end of file***********************************
%************************beginning of file***************************** %interlacecode.m
function dout=interlacecode(din,m,n)
%实现信道的交织编码
%din为输入交织编码器的数据,m,n分别为交织器的行列值
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++
% din 输入数据
% m 交织器的行值
% n 交织器的列值
% dout 输出数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for j=1:m
temp(j,:)=din(j*n-(n-1):j*n);
end
dout_temp=reshape(temp,1,length(din));
dout=dout_temp(1:end);
%************************end of file**********************************
%************************beginning of file***************************** %qpsk.m
%QPSK调制映射
function dout=qpsk(din)
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++
% din 输入数据
% dout 输出数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
din2=1-2*din;
din_temp=reshape(din2,2,length(din)/2);
for i=1:length(din)/2,
dout(i)=din_temp(1,i)+j*din_temp(2,i);
end
% ************************end of file***********************************
%************************beginning of file***************************** %seq_train.m
%生成用于同步的训练符号
function dout=seq_train()
%第一帧产生短训练序列,第二帧产生长训练序列
%每个短训练符号由16个子载波组成,短训练序列
%是由伪随机序列经过数字调制后插0后,再经过
%IFFT之后得到的。具体过程如下:首先采用抽头
%系数为[1 0 0 1 ]的4级移位寄存器产生长度为
%15的伪随机序列之后末尾补0,经过QPSK调制之
%后的伪随机序列只在16的整数倍位置上出现,其
%余的位置补0,产生长度为128的序列,此序列再
%补128个0经过数据搬移后做256点的IFFT变换就
%得到16个以16为循环的训练序列,经过加循环前
%后缀就会产生20个相同的短训练序列。长训练序
%列的产生同短训练序列。
global seq_num
if seq_num==1
fbconnection=[1 0 0 1];
QPSKdata_pn=[m_sequence(fbconnection),0];
QPSKdata_pn=qpsk(QPSKdata_pn);
elseif seq_num==2
fbconnection=[1 0 0 0 0 0 1];
QPSKdata_pn=[m_sequence(fbconnection),0];
QPSKdata_pn=qpsk(QPSKdata_pn);
end
countmod=0;
for k=1:128
if seq_num==1
if mod(k-1,16)==0 %生成16位循环的短训练符号
countmod=countmod+1;
trainsp_temp(k)=QPSKdata_pn(countmod);
else
trainsp_temp(k)=0;
end
elseif seq_num==2
if mod(k-1,2)==0
countmod=countmod+1;
trainsp_temp(k)=QPSKdata_pn(countmod);
else
trainsp_temp(k)=0;
end
end
end
dout=trainsp_temp;
% ************************end of file***********************************
%************************beginning of file***************************** %m_sequence.m
%用线性移位寄存器产生m序列
function [mseq]= m_sequence(fbconnection);
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++
% fbconnection 线性移位寄存器的系数
% mseq 生成的m序列
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
n = length(fbconnection);
N = 2^n-1;
register = [zeros(1,n - 1) 1];%定义移位寄存器的初始状态
mseq(1)= register(n);
newregister(1)= mod(sum(fbconnection.*register),2);
for j = 2:n,
newregister(j)= register(j-1);
end;
register = newregister;
mseq(i) = register(n);
end
% ************************end of file**********************************
%************************beginning of file***************************** %nyquistimp_PS.m
%使用改进的Nyquist脉冲实现OFDM信号的PAPR抑制
function dout=nyquistimp_PS()
%改进的Nyquist脉冲整形方法能够显著改善OFDM信
%号的PAPR分布;该方法实现简单,和PTS和SLM相比
%不需迭代计算多个IFFT操作,不需传送边带信息,
%不会引起信号的畸变;通用性强,可以调整滚降
%系数以适应任何子载波数的通信系统。当然,
%Nyquist脉冲成形的方法由于扩展了频谱,一定程
% 度上降低了频谱利用率。
%creat a matrix to shape the subcarries.
%the spectrum of the pulse is as follows:
% if abs(f)<=Bw*(1-b)
% spec=1;
% else if (abs(f)>Bw*(1-b))&(abs(f)<=Bw)
% spec=exp(aa.*(Bw.*(1-b)-abs(f)));
% else if (abs(f)>Bw)&(abs(f) % spec=1-exp(aa.*(abs(f)-Bw.*(1+b))); % else if abs(f)>=Bw*(1+b) % spec=0; % end % end % end % end N=106; L=11; b=0.22; % N=84; % L=22; % N=98; % L=15; % b=0.3; % N=116; % L=6; % b=0.1; T=0.004; Ts=T/N; Bw=1/Ts; begin=-Bw*(1+b)+Bw*(1+b)/128; finish=Bw*(1+b)-Bw*(1+b)/128; distance=Bw*(1+b)/64; kk=0; aa=log(2)/(b.*Bw); for f=begin:distance:finish kk=kk+1; if abs(f)<=Bw*(1-b) spec=1; else if (abs(f)>Bw*(1-b))&(abs(f)<=Bw) spec=exp(aa.*(Bw.*(1-b)-abs(f))); else if (abs(f)>Bw)&(abs(f) spec=1-exp(aa.*(abs(f)-Bw.*(1+b))); else if abs(f)>=Bw*(1+b) spec=0; end end end end C(kk)=spec; end for m=0:N-1 for k=0:(N+2*L-1) p(m+1,k+1)=C(k+1)*exp(-i*2*pi.*m.*(k-L)./N); end end % ************************end of file*********************************** %************************beginning of file***************************** %fft_my.m %实现N点FFT运算 function dout=fft_my(din) %本程序对输入序列din实现DIT——FFT基2算法,点数取大于等于din长度的2的幂次 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ m=nextpow2(din) ; N=2^m ; if length(din) din=[din,zeros(1,N-length(din))]; end nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1; y=din(nxd); for mm=1:m Nmr=2^mm; u=1; WN=exp(-i*2*pi/Nmr); for j=1:Nmr/2 for k=j:Nmr:N kp=k+Nmr/2; t=y(kp)*u; y(kp)=y(k)-t; y(k)=y(k)+t; end u=u*WN; end end dout=y; % ************************end of file********************************** %************************beginning of file***************************** %add_GI_upsample.m %加循环前后缀和升采样程序 function dout=add_CYC_upsample(din,upsample) %插入循环前后缀是将每个OFDM符号的前32个数据放 %到符号尾部,将每个OFDM符号的后32个数据放到符号头部, %升采样是通过中间插零的方式实现 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % upsample 升采样倍数 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data_buf=[din(225:256),din,din(1:32)]; temp(1,:)=data_buf; temp(2:upsample,:)=zeros(upsample-1,length(data_buf)); dout_temp=reshape(temp,1,length(data_buf)*upsample); dout=dout_temp(1:end); % ************************end of file********************************* %************************beginning of file***************************** %cic_inter.m %发射机的CIC滤波器设计 function dout=cic_inter(din,r) %插值CIC滤波器通过复制样值实现升采样 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % r 升采样的插值因子 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ din_1d=[0,din]; diff1=[din,0]-din_1d; diff1_1d=[0,diff1(1:end-1)]; diff2=[diff1(1:end-1),0]-diff1_1d; for i=1:r temp1(i,:)=diff2(1:end-1); end temp2=reshape(temp1,1,length(diff2(1:end-1))*r); data_int=temp2; for i=1:length(data_int) int1(i)=sum(data_int(1:i)); int2(i)=sum(int1(1:i)); end dout=int2; %************************end of file********************************** %************************beginning of file***************************** %up_convert_ofdm.m %用DDS的方式实现上变频 function dout=up_convert_ofdm(fwc_up,dini,dinq) %fwc_up是上变频处的频率控制字,每个控制字对应一个载波频率 %count_dds_up是用于查找存储表的整数值, %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % fwc_down 上变频处的频率控制字 % dini 输入数据的实部 % dinq 输入数据的虚部 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ global seq_num global count_dds_up for mk=1:length(dini) if (seq_num==1) & (mk==1) count_dds_up=0; else count_dds_up=count_dds_up+fwc_up; if count_dds_up>=128 count_dds_up=count_dds_up-128; end end [up_sin,up_cos]=ram_sin(count_dds_up); up_sin_t(mk)=up_sin; up_cos_t(mk)=up_cos; end for xl=1:length(dini) DUCdata(xl)=dini(xl)*up_cos_t(xl)-dinq(xl)*up_sin_t(xl); end dout=DUCdata; % ************************end of file*********************************** %************************beginning of file***************************** %ram_sin.m %构造用于DDS的查找表 function [ysin,ycos]=ram_sin(adr) %dds方式需要的sin表 %ram_sin为寄存器名称 %adr为输入地址,y为读出数据 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % adr 输入地址 % ysin 输出的正弦值 % ycos 输出的余弦值 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ anl_inc=2*pi/128; for n=1:128 data_sin(n)=sin((n-1)*anl_inc); data_cos(n)=cos((n-1)*anl_inc); end ysin=data_sin(adr+1); ycos=data_cos(adr+1); % ************************end of file*********************************** %************************beginning of file***************************** %guiyi_DUCdata.m function [dataout,datamax]=guiyi_DUCdata(datain) %实现数据的归一化 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % datain 输入数据 % dataout 输出数据 % datamax 输入数据中的最大值 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ datamax=max(abs(datain)); dataout=datain./datamax; % ************************end of file********************************** %************************beginning of file***************************** %down_convert_ofdm.m function [douti,doutq]=down_convert_ofdm(fwc_down,din) %用DDS的方式实现下变频 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % fwc_down 下变频处的频率控制字 % din 输入数据 % douti 输出数据的实部 % doutq 输出数据的虚部 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ global seq_num global count_dds_down global count_dds_down_tmp for mkd=1:length(din) if (seq_num==1) & (mkd==1) count_dds_down=0; count_dds_down_tmp=0; else count_dds_down=round(count_dds_down_tmp+fwc_down); count_dds_down_tmp=count_dds_down_tmp+fwc_down; if count_dds_down>=128 count_dds_down=count_dds_down-128; count_dds_down_tmp=count_dds_down_tmp-128; end end [up_sin_d,up_cos_d]=ram_sin(count_dds_down); up_sin_td(mkd)=up_sin_d; up_cos_td(mkd)=up_cos_d; DDCdatai(mkd)=din(mkd)*up_cos_td(mkd); DDCdataq(mkd)=-din(mkd)*up_sin_td(mkd); end douti=DDCdatai; doutq=DDCdataq; % ************************end of file********************************** %************************beginning of file***************************** %cic_deci.m %接收机的CIC滤波器设计 function dout=cic_deci(din,r,init) %抽取CIC滤波器通过降采样实现 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % r 降采样的抽取因子 % init 设定的初始值 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ for i=1:length(din), int1(i)=sum(din(1:i)); int2(i)=sum(int1(1:i)); end data_diff=zeros(1,length(int2)/r); data_diff=int2(init:r:end); data_1d=[data_diff,0]; diff1=[0,data_diff]-data_1d; diff1_1d=[diff1,0]; diff2=[0,diff1]-diff1_1d; dout=diff2(1:end-2); % ************************end of file********************************** %************************beginning of file***************************** %time_syn.m %系统的定时同步 function time_syn(datai,dataq) %通过前导结构的两个训练帧的延时自相关算法和本地 %互相关检测可以实现精确度非常高的定时同步。 global seq_num global dingshi global m_syn if seq_num==1 for nc=1:length(datai)-64 %计算相关值 for m=1:32 m1_syn(m)=(datai(nc+m-1)+j*dataq(nc+m-1))*conj(datai(nc+m-1+16)+j*dataq(nc+m-1+16)); end m2_syn(nc)=sum(m1_syn); m_syn(nc)=abs(m2_syn(nc)); %自相关自相关判决函数 end % figure % plot(m_syn) % xlabel('采样点索引号') % ylabel('自相关判决函数') elseif seq_num==2 local_seq=[ -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i ]; for nn=1:length(datai)-128 %计算相关值(输入信号与本地信号互相关) for m=1:100 t1_syn(m)=(datai(nn+m-1)+j*dataq(nn+m-1))*conj(local_seq(m)); end lolol(nn)=sum(t1_syn); t_syn(nn)=abs(sum(t1_syn)); %输入信号与本地信号互相关判决函数 end for ni=1:length(t_syn) if t_syn(ni)>60 dingshi=find(t_syn(ni:ni+6)==max(t_syn(ni:ni+6)))+ni-1; break end end % figure % plot(t_syn) % xlabel('采样点索引号') % ylabel('互相关判决函数') end % ************************end of file*********************************** %************************beginning of file***************************** %fre_syn.m function dout=fre_syn(datai,dataq) %实现系统的频率同步 %频偏的估计范围由帧长度和循环间隔长度来决定。在 %本系统中,短训练序列的频偏估计范围为(2000Hz);长训 %练序列频偏估计范围为250Hz,前一个有较大的纠偏范围,估 %计值得到的方差较大;后一个方法的纠偏范围较小,估计值得 %到的方差较小。频率跟踪可以用循环前后缀的周期重复性来完 %成,其频偏估计范围为125Hz。 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % datai 输入数据的实部 % dataq 输入数据的虚部 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ global seq_num global dingshi global m_syn if seq_num==1 if m_syn(50)>10 for m=1:128 fre_back_tmp(m)=(datai(40+m-1)+j*dataq(40+m-1))*conj(datai(40+m-1+16)+j*dataq(40+m-1+1 6)); end fre_back_sum=sum(fre_back_tmp); fre_offset_tmp=-320*angle(fre_back_sum)/(2*pi*16); fre_offset=fre_offset_tmp/0.005; end elseif seq_num==2 for m=1:128 fre_back_tmp(m)=(datai(dingshi+m-1)+j*dataq(dingshi+m-1))*conj(datai(dingshi+m-1+128)+j*d ataq(dingshi+m-1+128)); end fre_back_sum=sum(fre_back_tmp); fre_offset_tmp=-320*angle(fre_back_sum)/(2*pi*128); fre_offset=fre_offset_tmp/0.005; elseif seq_num>2 for m=1:48 fre_back_tmp(m)=(datai(dingshi+m)+j*dataq(dingshi+m))*conj(datai(dingshi+m+256)+j*dataq(d ingshi+m+256)); end fre_back_sum=sum(fre_back_tmp); fre_offset_tmp=-320*angle(fre_back_sum)/(2*pi*256); fre_offset= fre_offset_tmp/0.005; end dout=fre_offset; % ************************end of file********************************** %************************beginning of file***************************** %phase_comp.m %实现OFDM符号的相位补偿 function dout=phase_comp(din) %使用导频的相位信息来调整有效数据的偏移相位, %以实现正确的QPSK解调 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ qpsk_din=[din(1:8),din(10:17),din(19:26),din(28:35),din(37:44),din(46:53),din(54:61),din(63:70), din(72:79),din(81:88),din(90:97),din(99:106)]; VAR1:=(H+L)/2; AO:=SMA(VAR1,5,1)-SMA(VAR1,34,1),COLOR6699CC; AC:=SMA((AO-SMA(AO,5,1)),5,1),COLOR6699CC; X1:=AO>REF(AO,1) AND AC>REF(AC,1); X2:=AO 红:SMA(Y,5,1),COLORRED; 绿:SMA(Y,3,1),COLORGREEN; 上张:=蓝>=REF(蓝,1) AND 红>=REF(红,1) AND 绿>=REF(绿,1); 下张:=蓝=R2,UL,REF(UL,BARSLAST(H>R2))); 下碎:=IF(L<=R2,DL,REF(DL,BARSLAST(L<=R2))); STICKLINE(BARSLAST(ABS(上碎-REF(上碎,1))) 混沌理论要点: 1. 非线性系统的非因果性 当原因与结果间的关系并不确定时,便产生非线性现象。比如说利率提高1%(原因),市场反应(结果)就是不确定的——结果取决于人群对该消息的解释。 再如美国家森林公园,每年都由雷电引起数百起火灾(起因相同),仿佛老天爷每年都要向大地投放火星大小相同的成百上千个未熄的烟头,于是几百次火灾被引发,并蔓延、终止,有时烧毁数亩、有时蔓延数百亩,有时……1988年那次,使黄石公园全部150万亩森林片草无存(该公园去年已被世界自然遗产目录剔除)。以致其它森林公园为防止枯草积得太厚,还不得不让消防人员,每年人为制造些火灾。 量子世界、人类历史、地震、天气运行……莫不如此。远至恐龙时代的大小生态灭绝事件,近至非典、上月的北美大停电、各国证券市场,每年无数个烟头被仍向场内,引发或大或小的震动,并蔓延、终止……但到底哪个烟头,才是那颗重要的烟头? 相同的初始力,令人瞠目的结果,是所有混沌系统的基本特征。大家都不难理解,曾救了萨达姆命的藏身之所,这次偏就成了送命之处,但很多人却很难理解同样一个历史点位,并不代表同样的未来。许多历史学家在逐次的趋势和循环中,搜寻说得过去的理由与解释,显然是用错了工具。这些传统观念产生于匀衡物理和天文学中,而合适的工具,却在非线性的非匀衡物理中。新物理学家们则开始用模拟游戏代替方程式,去发现事态运行的规律。 2.对初始条件的极端敏感依赖性 伦敦气象局计算机系统每日处理覆盖全欧洲的数千个气象站的上亿条数据,一次洛伦兹将5.06127输入为5.06,万分之一的省略,提供了两份截然不同的天气预报。于是洛伦兹在美国科学促进会提出:“一只蝴蝶在巴西煽动翅膀可能会在美国德克萨斯引起一场龙卷风”,从此,令人着迷、发人深省的“蝴蝶效应”,就以其大胆的想象力与迷人美学色彩,更加之深刻科学内涵与内在哲学魅力,倾倒了不断在复杂系统中苦苦求索的芸芸众生。“蝴蝶效应”反映了混沌运动的一个基本特征:对初始条件的极端敏感依赖性。 经典动力学认为,初始条件的微小变化,对未来状态所造成的差别也微小。但混沌理论认为,初始条件的十分微小的变化经过不断放大,对其未来状态会造成极其巨大的差别。 大家不妨想像一下台球桌面:撞击母球不到1度的微小偏差,会使台面出现纵线与横折两种极端迥异的走势。一个储蓄组合的未来资产变化模拟图,也仅因规则改为不计零数,模型便立即报废。导致蝗灾的因素有不下两百种,漏算或误算其中2%,不久20%的因素都会相应改换,一切也就大相径庭。西方流传的一首民谣更是对此作了形象的说明:“醉了一个农夫,丢了一颗铁钉;丢了一颗铁钉,少安一付马掌;少了一付马掌,跛了一匹战马;跛了一匹战马,摔坏一位将军;死了一个将军,输了一场战争;输了一场战争,亡了一个国家!” 系统对无数变化,何时极度敏感,何时能消化掉而不予理会,对此人类不是无能为力,而是丝毫都无能为力——地球上每天亿万只蝴蝶上下翻飞、百万只苍鹰鼓翼、千百只大鹏展翅……初始力或相同、或不同,初始因素本身虽不大,但经时间积累后的结果,已远非人们当初之想当然。 从前我们经常听到“明年将现暖冬”“下月平均气温将低于去年同期”等说法,但拥有超乎想像的完备数据的美国家气象局去年已宣布:“从此再不对超过10天的气象做任何预测。”这是人类科学认识的又一步飞跃。 3. 能量法则 完全不同于线性代数的产物——概率论。该法则是不同国度的学者们,耗时巨大的独立研究后,最终共同发现的一项新的重要自然法则,已被证实是一个适用于上千种的模板的、普遍 证券交易新空间》关于鳄鱼指标的源码在此。 包括鳄鱼线AO AC 指标。源码不加密。关于使用方法,最好看书《证券混沌操作法》里面说的非常详细,权威。 Y:=(HIGH+CLOSE+LOW)/3; 吻线:REF(SMA(Y,5,1),3),COLORGREEN; 齿线:REF(SMA(Y,8,1),5),COLORRED; 颚线:REF(SMA(Y,13,1),8),COLORBLUE; VAR2:=H>=REF(H,1)&&H>=REF(H,2)&&H>REFX(H,1)&&H>REFX(H,2); VAR3:=L<=REF(L,1)&&L<=REF(L,2)&&L 证券混沌操作法:鳄鱼线 证券混沌操作法:鳄鱼线 证券混沌操作法是由比尔?威廉姆(Bill Williams)发展和推广的,他声称这是一套能在全球任何市场长期获取利润的交易方法。目前已有不少交易员使用这套方法在市场中进行交易。 鳄鱼线是运用分形几何学和非线性动力学的一组平均线(实际上就是一种比较特别的均线)。它分为蓝、红、绿三条。蓝线被称为鳄鱼的颚部,红线被称为鳄鱼的牙齿,绿色被称为鳄鱼的唇吻。它们的构造方法如下:颚部——13根价格线的平滑移动均线,并将数值向未来方向移动8根价格线;牙齿——8根价格线的平滑移动平均线,并将数值向未来方向移动5根价格线;唇吻——5根价格线的平滑移动均线,并将数值向未来方向移动3根价格线。 鳄鱼线的基本使用方法是当颚部、牙齿、唇吻纠缠在一起时,我们便进入了观望期(鳄鱼休息了);当唇吻在牙齿以上,牙齿在颚部以上时,我们便进入了多头市场(颚鱼要开始吃牛肉了);当唇吻在牙齿以下,牙齿在颚部以下时,我便进入了空头市场(鳄鱼要开始吃熊肉了)。简单来说鳄鱼线是交易员的指南针,它能告诉交易员市场正处于什么状态,并保证交易员能在行情中进行交易,在市场休整时离场观望。 两套鳄鱼线的源码: 用SMA编的 var1:=(H+L)/2; 下颚:SMA(VAR1,13,1),SHIFT8,COLORBLUE; 牙 齿:SMA(VAR1,8,1),SHIFT5,COLORRED; 上唇:SMA(VAR1,5,1),SHIFT3,COLORGREEN; 用EMA编的 var1:=(H+L)/2; 下颚:SMA(VAR1,13,1),SHIFT8,COLORBLUE; 牙 齿:SMA(VAR1,8,1),SHIFT5,COLORRED; 上唇:SMA(VAR1,5,1),SHIFT3,COLORGREEN; 混沌第一章 Alligator 第一章:鳄鱼线(Alligator) 于本章,我们将叙述鳄鱼线:做什么用的?如何构成的?如何用之为交易策略??… ⊙ The Alligator - Our Compass and Odds Maker 基本上,无论实时价格往任何方向移动,鳄鱼线(如图标)扮演着使我们的交易保持正当方向的 罗盘角色。 而且, 鳄鱼线会协助我们在有方向的趋势中获利 (见电子期仿真交易日记 9/17~1/16) 。 并且将这个获利持续到会吃掉我们利润的盘整趋势(见电子期仿真交易日记 1/16~目前)出现为 止。 ⊙ What the Alligator is 动量监视器:一个与市场结合并接近市场的动量监视器。(详章三:AO) 交易的指针:一个简单且仅在现在的趋势中交易的指针。(详章二:Fractal) 保护的装备:一个使你在盘整走势中不会损失的保护装备。 ⊙ What is the Alligator? 鳄鱼线是结合了不规则碎形几何学和非线性动力学的平均线。有蓝、红、绿三条。 蓝线,是鳄鱼的颚。(如图标) 它的画法是取 13 根 bar 的平滑移动平均,然后将算出来的结果往未来的方向移动 8 根 bar。 红线,是鳄鱼的牙齿。(如图标) 红色线是取 8 根 bar 的平滑移动平均,然后将算出来的结果往未来的方向移动 5 根 bar 所构成。 绿线,是鳄鱼的上唇。(如图标) 绿色线是取 5-bar 平滑移动平均数,然后将算出来的结果往未来的方向移动 3 根 bar 所构成。 ⊙ Trading the Alligator 当蓝、红、绿三条移动平均线纠缠在一起时(如图 1/16~目前),表示鳄鱼他睡着了。 当他从长时间的睡眠中醒来时,会十分饥饿。而且进一步的追捕价格(如图 9/17~1/16),以填 满他的胃,直到他得到满足。 然后,他开始闭上嘴巴,并且丧失了进食的兴趣(如图 1/16)。 只要嘴巴开始闭起来,就是告诉我们:取得利润。并等待。观察鳄鱼是否将打个盹儿? 所以,当鳄鱼睡觉时,我们通常会逗留在市场外,并且等待。直到有个碎形(详章二:Fractal) 在下颚外被触发为止。 他能让我们远离波动不定的市场,并使我们能进入重要且趋势明显的市场中。 亦即价格向上或向下突破碎形(详章二:Fractal)时,便是你从趋势中开始获利的时候。 ⊙ Alligator behavior 我们的交易策略是: ﹡不进行交易,直到第一个在鳄鱼嘴巴外面的碎形(详章二:Fractal)被突破时。 ﹡若价格在鳄鱼的嘴巴之上,仅取用买的讯号而且不卖。并且将停利单向上移动。 ﹡若价格在鳄嘴向下的另一边,只取用卖的讯号。且仅在停损离场时才买。不做多。 证券混沌操作法-低风险获利指南 比尔.威廉姆 1.市场是自然的函数,它们的行为并不遵循古典物理学、参数统计学、线性数学 2.分形几何学(fractal geometry)提供一种截然不同的观点来稳定获利 3.混沌理论的另外一项结论是:没有人根据市场来交易,我们都是根据自己的信念系统来 交易 4.任何人都可以计算苹果内的种子,然而,没有人可以计算种子内的苹果 5.理想的交易基本上并不是来自于头脑,它来自于勇气与心灵。不需过度的思考,你需要 的是自觉、对于自身需求与市场需求的敏锐感觉、以及扎扎实实的普通常识。 6.如果你认为自己可以学习如何精确预测行情,你已经把自己剔除于10%的顶尖交易员 之外。 7.未来并不如同过去 8.我们都是已自己的信念系统来交易。这便是“一致性获利法”的精髓。我们发现市场的 根本结构时,调整个人的根本结构,使个人的根本激斗与市场的根本结构相互融合,结构便是几何学上的协调性。 9.市场具有能量(energy)的特质,能量永远是遵循阻力最小的途径移动(如:河流的河 床变化)。期货市场的根本结构具有“分形”(fractal)的性质,他最适合以混沌理论处理。 10.所有的商品市场都是由一群对于价值看法不同,而对于价格看法相同的人们所创造。 11.我们所了解的真理,是特定真理而非普遍真理,例如:在地球重力下三角形内角和等于 180度,而在太空将超过180度 12.我们如法直接观察世界,永远是透过范式(模型或模式,一组共同认定的假设,是我们 感知世界的方法)的滤镜来观察世界。永远无法观察世界的整体,仅能够看见其中的片段。 13.混沌并不是随机性的,恰好相反。混沌是一种较高层次的次序,其中的组织原则是随机 性与刺激,而不是牛顿与欧几里德传统下大“因果关系”。因为自然界与人类的脑部都是混沌的现象,而市场则是自然界的一部分,并反映人类的性质,所以市场也是一种混沌的现象。 14.分形几何学是混沌理论的一项工具,研究对象是混沌的现象。 15.市场能量的分析原则 15.1.能量永远遵循阻力最小的途径 15.2.始终存在而通常不可见的根本结构,将决定阻力最小的途径 15.3.这些始终存在而通常不可见的根本结构,可以被发现,并加以改变。 16.结构:要素(成份)(parts or components)、计划(plan)、能源(power source)、宗旨 (purpose) 17.影响交易绩效结构的要素构成:欲望、信念、假设、志向、对市场和自己结构的了解 18.在人生当中,所有最严重与最重要的问题,基本上都是无法解决的,它们永远无法解决, 而仅可以“扁的不重要”(outgrown) 19.学习任何新知识的五个阶段 19.1.初学交易者:学习基本知识,术语等,保证盈亏基本持平 19.2.进阶交易者:工具是艾略特波浪与分形,单合约稳定获利后才能增加资金 19.3.胜任交易者:交易伙伴(?)、计划交易,增加投资额并多合约、价差交易 19.4.精炼交易者:以自身的信念系统交易(将自身和市场的根本机构互相融合),金钱 生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来。 --泰戈尔 △▲ 道氏理论的基本法则 一、平均指数包含一切; 二、市场有三种趋势; 1、主要趋势(一年甚至几年); 2、次要趋势(三个星期到三个月,调整位通常为先前趋势运动的三分之一至三分之二,最常见的为百分之五十); 3、小趋势(不到三个星期,细微波动)。 三、主要趋势分为三个阶段; 1、收集阶段(经过一轮大的下跌,市场“利空”消息不断,价格开始企稳,机敏的投资者开始买入); 2、公众参与阶段(价格加速上扬,消息开始转好,大多数技术型趋势追随者开始参与); 3、派发阶段(所有报刊开始刊登看涨故事时,所有人投身市场时,机敏的投资者开始卖出)。 四、各种平均指数必须相互验证; 五、成交量必须印证趋势; 1、上升趋势中,成交量伴随上涨而增加,下跌而减少; 2、下降趋势中,成交量伴随下跌而增加,上涨而减少。 六、趋势在给出明确的反转信号之前被假定一直有效; 1、失效摆动; 高点C挑战高点A失败,随后市场跌破低点B,构成了在点S处的“卖出信号”。 2、非失效摆动。 高点C突破高点A,随后市场跌破低点B构成S1处的第一个“卖出信号”,接着市场反弹到高点E,最后跌破低点D构成S2处的第二个“卖出信号”。 注:失效摆动和非失效摆动在底部时同样有用. 证券混沌操作法:鳄鱼线 证券混沌操作法是由比尔·威廉姆(Bill Williams)发展和推广的,他声称这是一套能在全球任何市场长期获取利润的交易方法。目前已有不少交易员使用这套方法在市场中进行交易。 鳄鱼线是运用分形几何学和非线性动力学的一组平均线(实际上就是一种比较特别的均线)。它分为蓝、红、绿三条。蓝线被称为鳄鱼的颚部,红线被称为鳄鱼的牙齿,绿色被称为鳄鱼的唇吻。它们的构造方法如下:颚部——13根价格线的平滑移动均线,并将数值向未来方向移动8根价格线;牙齿——8根价格线的平滑移动平均线,并将数值向未来方向移动5根价格线;唇吻——5根价格线的平滑移动均线,并将数值向未来方向移动3根价格线。 △▲ 道氏理论的基本法则 一、平均指数包含一切; 二、市场有三种趋势; 1、主要趋势(一年甚至几年); 2、次要趋势(三个星期到三个月,调整位通常为先前趋势运动的三分之一至三分之二,最常见的为百分之五十); 3、小趋势(不到三个星期,细微波动)。 三、主要趋势分为三个阶段; 1、收集阶段(经过一轮大的下跌,市场“利空”消息不断,价格开始企稳,机敏的投资者开始买入); 2、公众参与阶段(价格加速上扬,消息开始转好,大多数技术型趋势追随者开始参与); 3、派发阶段(所有报刊开始刊登看涨故事时,所有人投身市场时,机敏的投资者开始卖出)。 四、各种平均指数必须相互验证; 五、成交量必须印证趋势; 1、上升趋势中,成交量伴随上涨而增加,下跌而减少; 2、下降趋势中,成交量伴随下跌而增加,上涨而减少。 六、趋势在给出明确的反转信号之前被假定一直有效; 1、失效摆动; 高点C挑战高点A失败,随后市场跌破低点B,构成了在点S处的“卖出信号”。 2、非失效摆动。 高点C突破高点A,随后市场跌破低点B构成S1处的第一个“卖出信号”,接着市场反弹到高点E,最后跌破低点D构成S2处的第二个“卖出信号”。 注:失效摆动和非失效摆动在底部时同样有用. 证券混沌操作法:鳄鱼线 证券混沌操作法是由比尔·威廉姆(Bill Williams)发展和推广的,他声称这是一套能在全球任何市场长期获取利润的交易方法。目前已有不少交易员使用这套方法在市场中进行交易。 鳄鱼线是运用分形几何学和非线性动力学的一组平均线(实际上就是一种比较特别的均线)。它分为蓝、红、绿三条。蓝线被称为鳄鱼的颚部,红线被称为鳄鱼的牙齿,绿色被称为鳄鱼的唇吻。它们的构造方法如下:颚部——13根价格线的平滑移动均线,并将数值向未来方向移动8根价格线;牙齿——8根价格线的平滑移动平均线,并将数值向未来方向移动5根价格线;唇吻——5根价格线的平滑移动均线,并将数值向未来方向移动3根价格线。 鳄鱼线的基本使用方法是当颚部、牙齿、唇吻纠缠在一起时,我们便进入了观望期(鳄鱼休息了);当唇吻在牙齿以上,牙齿在颚部以上时,我们便进入了多头市场(颚鱼要开始吃牛肉了);当唇吻在牙齿以下,牙齿在颚部以下时,我便进入了空头市场(鳄鱼要开始吃熊肉了)。简单来说鳄鱼线是交易员的指南针,它能告诉交易员市场正处于什么状态,并保证交易员能在行情中进行交易,在市场休整时离场观望。 两套鳄鱼线的源码: 新版混沌第一章:鳄鱼线(Alligator) 混沌第一章:鳄鱼线(Alligator) 于本章,我们将叙述鳄鱼线:做什么用的如何构成的如何用之为交易策略… ⊙ The Alligator - Our Compass and Odds Maker 基本上,无论实时价格往任何方向移动,鳄鱼线(如图标)扮演着使我们的交易保持正当方向的罗盘角色。 而且,鳄鱼线会协助我们在有方向的趋势中获利(见电子期仿真交易日记9/17~1/16)。 并且将这个获利持续到会吃掉我们利润的盘整趋势(见电子期仿真交易日记 1/16~目前)出现为止。 ⊙ What the Alligator is 动量监视器:一个与市场结合并接近市场的动量监视器。(详章三:AO) 交易的指针:一个简单且仅在现在的趋势中交易的指针。(详章二:Fractal)保护的装备:一个使你在盘整走势中不会损失的保护装备。 ⊙ What is the Alligator 鳄鱼线是结合了不规则碎形几何学和非线性动力学的平均线。有蓝、红、绿三条。蓝线,是鳄鱼的颚。(如图标) 它的画法是取13根bar的平滑移动平均,然后将算出来的结果往未来的方向移动8根bar。 红线,是鳄鱼的牙齿。(如图标) 红色线是取8根bar的平滑移动平均,然后将算出来的结果往未来的方向移动5根bar所构成。 绿线,是鳄鱼的上唇。(如图标) 绿色线是取5-bar 平滑移动平均数,然后将算出来的结果往未来的方向移动3根bar所构成。 ⊙ Trading the Alligator 当蓝、红、绿三条移动平均线纠缠在一起时(如图1/16~目前),表示鳄鱼他睡着了。 当他从长时间的睡眠中醒来时,会十分饥饿。而且进一步的追捕价格(如图9/17~1/16),以填满他的胃,直到他得到满足。 然后,他开始闭上嘴巴,并且丧失了进食的兴趣(如图1/16)。 只要嘴巴开始闭起来,就是告诉我们:取得利润。并等待。观察鳄鱼是否将打个盹儿 所以,当鳄鱼睡觉时,我们通常会逗留在市场外,并且等待。直到有个碎形(详章二:Fractal)在下颚外被触发为止。 他能让我们远离波动不定的市场,并使我们能进入重要且趋势明显的市场中。亦即价格向上或向下突破碎形(详章二:Fractal)时,便是你从趋势中开始获利的时候。 ⊙ Alligator behavior 我们的交易策略是: ﹡不进行交易,直到第一个在鳄鱼嘴巴外面的碎形(详章二:Fractal)被突破时。 ﹡若价格在鳄鱼的嘴巴之上,仅取用买的讯号而且不卖。并且将停利单向上移动。﹡若价格在鳄嘴向下的另一边,只取用卖的讯号。且仅在停损离场时才买。不做 比尔威廉姆-混沌操作法的总结用法 背离线法则入场的方式,如果趋势是顺着背离线的方向发展,那么止损点就设在最近的3根或5根竖线的最低点稍下方(上升趋势),或最近的3根或5根竖线的最高点稍上方(下降趋势),如果趋势逆着背离线的方向运行,则止损点设在反向的分形上,如果鳄鱼线张开,则出场点分三种情况,1.一般情况是收盘价收在红线以下出场,2.在暴涨暴跌的行情中,收盘价收在绿线以下就出场,3.就是AO,AC同时为连续为5根同色的时候,以第5根竖线的最高(下跌行情)或最低价格(上涨行情)突破为出场点。 点评:很多人不太理解背离线是什么,我给大家举几个学习的方式,大家可以深入学习理解,比如K线形态中,穿头破脚,或者反转K线的这种形式来理解背离线会跟容易一些,不要被新名词所误导。 5颗子弹入场方式,也是运用后面这种止损出场方式出场。背离线法则是一种快进快出的法则,适合的止损方式不同于5颗子弹法则。 鳄鱼组线就是运用分形几何学与非线性动力学的一组平衡线,蓝线,绿线,红线都可以叫做平衡线,不过我们实战中使用的平衡线就是蓝线。我们看看三条线的定义: 蓝线:13根价格线的平滑移动均线,并将数值向未来的方向移动8根价格线。 红线:8根价格线的平滑移动均线,并将数值向未来的方向移动5根价格线。 绿线:5根价格线的平滑移动均线,并将数值向未来的方向移动3根价格线。 对于蓝线来说就是当前周期里的平衡线,而红线就是次一级时间结构的平衡线,绿线就是再次一级的时间结构的平衡线,三根竖线是属于不同时间结构的平衡线,但对于实战来说我们只讲本周期的平衡线,也就是蓝线。本周期指的是我们入场时的周期。 点评:鳄鱼线其本质依然是均线,只不过数学算法比普通均线稍微复杂了一点而已。 在混沌理论实战中的入场策略之一就是背离线法则,此法则就是讲求的价格线与平衡线,也就是蓝线之间的夹角的大小来判断趋势的起始点。还有5颗子弹法则入场后的加仓信号中的平衡线加仓信号也是指的蓝线这根平衡线,如果理解成红线和绿线就会出现问题,因为那是次一级和再次一级的时间结构的平衡线。 比如我们在寻找价格线和平衡线的夹角的时候不以蓝线为基准而以红线或绿线为基准,所选择的夹角就会失准。 鳄鱼线的作用很大,总结起来有以下几种: 1.入场前的使用:观察现在所处的位置是推动浪还是调整浪,价格在鳄鱼线上下跳动就是调整浪,价格在鳄鱼线单边运行就是推动浪。 2.入场时的使用:我们可以根据价格线和鳄鱼线之间的夹角的 大小来判断现在是不是一个很好的入场点,如果夹角够大,说明价格受到平衡线的拉力就越大,那么价格运动的动力就越大。 3.入场后的使用:我们在趋势运行的过程中可以根据鳄鱼线中的平衡线的加仓法则来寻找加仓点,这也是市场风险最小的时候,也是我们获取利润的最佳时刻,我们还犹豫什么呢? 4.出场时的使用:我们在趋势快要结束的时候,可以观察价格线的收盘价格在鳄鱼线红线的位置来判断是不是该出场了。 第一本书中提到的macd(5345)与现在混沌理论运用的AO在功能上是一样的,都是用来判断趋势的结束的依据的,不过macd中有条信号线,通过信号线高于或低于macd的竖线来判断动量发生了变化,不过AO已经把竖线的高低用颜色的不同表现了出来,高于前根竖线的竖线用绿线标示,低于前根竖线的竖线用红色表示,只要观察颜色的变化就代表动量发生了变化了,而把信号线去掉了。 证券混沌操作法要点 前段稍有点空,赶紧把一个偶然机会买到的证券混沌操作法翻了一下感觉还可以,有值得借鉴的地方: 1、一致性获利计划交易,在交易时候,要有计划,并设定安全气囊(止损)以及五颗子弹 2、信号判断(五颗子弹)不外乎形态、指标、成交量和波浪 (1)指标背离:根据MFI指标的背离,来判断波浪的素性 (2)波浪的量度幅度 (3)形态:产生分形形态,底部或者顶部形态 (4)在分形形态中,出现“蛰伏”信号,此信号类似于放量滞涨或者放量不跌 (5)动能产生转变,类似于macd信号 由于五颗子弹中,(1)、(4)、(5)都牵涉到MFI指标 MFI(Market Facilitation Index)-市场促进指数:MFI=价格区间/交易量=(最高价-最低价)/交易量表明价格每跳动一个单位对应的平均变动量, 作者的意图是:在实际操作中,就是要找MFI比较大的时段进行交易这样就是不用多少成交量就导致价格迅速波动 在MFI基础上再加工一致获利法的5/34/5MACD: 既取MFI的5期平均和34期平均之差作为震荡指标,再对震荡指标移动平均作为信号线: 写成公式即为: MFI:=(HIGH-LOW)/VOL; OSC:=MA(MFI,5)-MA(MFI,34),COLORSTICK; MACD:MA(OSC,5) 此动能指标有如下功能: 1、协助判断第三波的蜂位; 2、判断第四波的终点;或者第四波最低条件已经满足; 3、判断趋势的结束与第五波的顶部; 4、显示动能方向,表明多空信号 5/34/5MACD动能指标在五颗子弹中,第五颗子弹就是它 而第一颗子弹也是借助于它,判断波浪的特性: 第三波与第五波的之间,OSC会发生背离:如果是下跌五浪中,第五浪价格低于第三浪,而OSC高于第三浪;相反在上升五浪中,第五浪价格高于第三浪,而OSC则低于第三浪。 期货交易获得财务自由 交易要有正确的地图 混沌理论:随机与刺激非线性关系非直接因果关系 左脑 右脑混沌 脑核心: 两股冲突力量界面不是混沌而是较高层次的自我组织 自然界充满菲波纳奇数列和0.618黄金分割 混沌理论提供了一种精确可预测的方法 市场能量法则:1、永远遵循阻力最小法则;2、不可见的根本结构决定阻力最小途径;3、根本结构可以被发现与改变。 推论:辨识主导交易行为的市场结构,根据交易宗旨改变结构。改变自己的结构,顺应市场结构。 不要总是试图解决问题,而是提升一个层次,在新的结构里顺应自然,超越原有的问题本身。原有问题不再那么重要时,自然会有解决的办法。 充分发挥脑部功能: 左脑:线性分析16件/秒分析、判断、拟定决策。计划功能、整体决策。培养习惯行为,解决问题。 右脑:直觉、灵感对知识的无限包容 脑核心:产生感知300万件/秒、控制体内运作、无意识控制、自动驾驶 结论:充分运用脑部的功能、用合适的功能做合适的事梦想→现实思维方式 自信、乐在其中的交易程序 核心理念:在一个无风险的市场结构中,我能够享有乐趣与利润。 无风险:盘后分析制订操作策略,纳入最坏预期,设定安全气囊,从而随后的交易中所有情况都在预料之中。所谓无风险,并非无亏损,而是心理上的无风险状态。 市场结构:根据波浪时空结构,提前确定好止损、加仓、反转、离场的位置与仓位。机会出现进才交易,没有机会决不交易。 自由操作:在确信市场结构的基础上,享受交易的乐趣 与利润。交易过程中,不是用左脑去拼斗(左脑已在风险控制和市场结构环节发挥了功能),而是发挥右脑潜能,在脑核心协调下,享受交易的乐趣与利润。 总结论:洞悉市场结构→调整自身结构与市场结构共振(获得一致性体验)→确定交易策略→在交易过程中以最小阻力自由滑行,享受交易的乐趣。 混沌操作法——第一智者MT4源码https://www.doczj.com/doc/783302941.html,/s/blog_62f6a62b0100gmc8.html //+------------------------------------------------------------------+ //| BW-wiseMan-1.mq4 | //| Copyright ? 2005, wellx | //| https://www.doczj.com/doc/783302941.html, | //+------------------------------------------------------------------+ #property copyright "Copyright ? 2005, wellx" #property link "https://www.doczj.com/doc/783302941.html," #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 OrangeRed extern int updown=5; extern int back=2; //---- buffers double BWWM1Up[]; double BWWM1Down[]; int pos=0; int i=0; bool contup=true,contdown=true; //+-----------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,140); SetIndexBuffer(0,BWWM1Up); SetIndexEmptyValue(0,0.0); 混沌操作法的突破系统 混沌操作法的两大系统。 一套是混沌操作法的高抛低吸系统,扑捉市场趋势底部的起点的买入和高位终点的卖出。(五颗神奇子弹) 另一套是混沌操作法的突破系统,当新的大趋势形成了突破关键点买入,随后有一段爆炸大行情。 混沌操作法的突破系统 优点: 1.是最赚钱的系统,掌握了这个系统操作,当大趋势产生时,可以获得巨大的赚钱利润。 2.可以把握市场最好的时机,市场大部分的时间趋势不是很直接,都是些小趋势,最好的时机,是少数时间的大趋势大机会。 难点: 1.它的成功率不高,只有30%的成功率。 2.突破点买入时机很难把握,要很好耐心守候。 比尔讲的这套系统只是: 1.分形是混沌的进场系统,也是鳄鱼醒来的第一信号。 2.不是所有的信号都获利,在“低租金的区域”停损,再停损。损失相对获利而言是小的。 比尔对这套系统没有讲透(好多人都用不好,分形第一次突破买入,停损。分形第二次再突破再买入,再停损。第三次就不敢买入,心态以坏。股票大涨--) 我对这套系统总结: 第一,中期走势图(周k线图)有没有买点。趋势指标AO买入信号。趋向指标DMI是否是有趋势ADX>25。 第二,短期走势图(日k线图)分形突破进场,也是鳄鱼醒来的第一信号。趋向指标DMI是否是有趋势ADX>25。 第三,成交量要明显的放大。(配合其他振荡指标观察) 以上总结的多周期共振,提高买入时机。多指标共振买入,提高成功率。 附件 日.jpg(157.87 KB) 2007-12-18 20:37 周.jpg(139.32 KB) 2007-12-18 20:37 混沌操作法的突破系统 混沌操作法的两大系统。 THE AWESOME OSCILLATOR(AO) 股票及商品市场中最好的动能指针。 AO测量最近的5个价格之条形图动能,并和过去的34支条形图作比较。 它是以5个价格之条形图之中点价(最高+最低)/2取移动平均,再减去34支条形图之中点价(最高+最低)/2之移动平均,并以柱状图之形式表示。 AO精确地告诉我们当下动能发生的变化。 作者提到,当了解及适当的使用,AO是超过40年所发现最好最精确的指针。 其实大家可以参考混沌操作法中之MACD。而在软件使用上,AO的柱状图如果比前一根高,则标记为绿色;反之若比前一根来的低,则标记为红色。如此我们只要看颜色之改变,就能知道动能之改变了。 知道了颜色变化之义意后,在进一步介绍AO之买卖讯号之前,我们须回顾之前所教的,在鳄鱼嘴巴外还没有产生碎形之买卖讯号之前,我们不采取任何AO之买卖讯号。此点务必切记! 接下来进入主题开始介绍AO之买卖讯号。 AO三买讯: SAUCER BUY SIGNAL(浅碟买讯), CROSS BUY SIGNAL(穿越买讯), TWIN PEAKS BUY SIGNAL(双峰买讯)。 AO三卖讯: SAUCER SELL SIGNAL(浅碟卖讯), CROSS SELL SIGNAL(穿越卖讯), TWIN PEAKS SELL SIGNAL(双峰卖讯)。 1、SAUCER BUY SIGNAL(浅碟买讯): 说明:在SAUCER BUY 中,至少需要三根柱状图,而中间之b(red )为最低,而右方之c(green)比b高,如此便构成中间凹陷如同碟子一般之SAUCER BUY。而碟子中,凹陷部份可以有几根柱状图则没有限制。而当c产生时,我们便找符合条件之条形图,在其最高点加一文件作为进场之价位。 1、SAUCER BUY。 混沌操作法 混沌操作法由Bill.Williams 博士提出,其理论依据为“混沌理论”。具体操作步骤如下: 1选择可以交易的市场 工具为“鳄鱼组线”,其解释如下: 当线交叠时,鳄鱼处于沉睡状态;当线发散时,鳄鱼处于进食状态在鳄鱼嘴之上时只做多,在鳄鱼嘴之下时只做空。 当鳄鱼沉睡时,就是准备交易的时候,因为最大的行情往往起源于最沉闷的市场中 2、抓住第一个分形突破信号 首先要说明的是“分形”的概念: ◎一系列的至少5根连续的价格线,其中最高的高价之前有两个较低的高价,而之后又 有两个较低的高 (相反的构造则成卖出分形) 2076 1969 1863 理麦411第鱼组銭 VS11 2004/08/06 州T 1756 曰銭 ◎颚线 『蓝』 ◎齿先 『红』 13根价格线的平滑移动均线,并向未来移动8根价格线; 8根 价格线的平滑移动均线,并向未来移动5根价格线;5根价格 线的平滑移动均线,并向未来移动3根价格线; 价,这就构成买入分形 口 由 2382 卞分形突破 ■ 11 ZOM/OT/3O ff242O * &242S t t >&2424 t @2708 i ^¥9320 t 埠 方向时『当前柱线高于之前的柱线』 B:穿越买进信号一一当柱状图由负值专为正值时 C:双峰买进信号——当你得到一个向下的峰值,此后又接着有另一个峰值高于前一个峰值时 市场加速指标(AC 指标) AC 柱状图是5/34动量柱状图与其5线简单移动平均值之差值的5线简单移动平均值。 AC 买进信号 A:当两根连续柱线的最高点高于最邻近的最低柱线的最高点时 B:当柱状图形成了低点依次升高的 3根柱线,且这些柱线的低点均高与最近的最低柱线的峰值时 C:若柱状图的下峰 值位于零轴以下,并且在峰值之后的第二根或第三根柱线穿越零轴时 区域交易法 ?当AO 与 AC 都上涨时,处于绿色区域中 ?当AO 与 AC 都下跌时,处于红色区域中 ?当AO 与 AC 不同向时,处于灰色区域中 连续两根绿线,产生买进信号,若下一根价格线收盘价高于前两根,则买进 连续5根绿先后,停止加仓。 以上方法为买进信号,卖出信号则反之。 4、设置止损、收取利润 ◎收盘于鳄鱼牙齿之上(或以下)的价位一一红线 ◎若出现5根连续的红色价格线,将止盈位设在第 5根价格线的最高价上方,若没有触及,则将止盈位 继续下移,直到被止盈出场 ◎绿线(唇线)离场位,若价格走势很强烈,这是个很好的方法 ◎反向信号,不常用,效果不好 若想进一步了解,请阅读相关著作! 什么是混沌? 混沌一词,来源于英文的chaos ,近些年来除了受到数学、物理学等学术研究领域的关注外,在音 乐、艺术、 美工设计等方面的应用更加普遍。采用计算机作图技术,根据混沌等式可以画出奇妙无比的 图形。例如根据Z 5 作出 沪嗚 11市场這勢指标 cull 2004/05/17 2004/05/1T AC 0. 00 -50.00 (E23640 t S9T4 I 仓3408: 23760 2349T [%」 23233 f 05/18 100,00 B 22970 生分钟 《混沌操作法》读后感 初次阅读《混沌操作法》时,我感觉到此书的理论和观点都比较新颖,但读过之后的印象却并不深刻,大约2个月后,一种强烈的潜意识告诉我应再看一下,从那时起《混沌操作法》就吸引了我,至今我已读了10遍以上——我迷上了它。每当我困惑无助时,《混沌操作法》就会给我指引,帮我树立信心,指导我度过黎明前的黑暗,和我共同享受朝阳的灿烂光辉。那么,《混沌操作法》是本什么样的书呢? 《混沌操作法》应该是为具有一定分析基础和交易经验的交易员写的训练教材。作为教材它结构严谨,论点突出而明确,论据充实而丰富,论证方法也简练。一些例证很幽默并贴近生活,同时内容和其他教材一样的通俗易懂。作者在书中阐述了宇宙中充满非线性动态的事实,提出生命和智慧基于混沌才可能发生,我们通过特定的范式观察世界有一定的局限性,并且很难反思范式的本身。同时简单介绍了混沌理论和分形几何学的知识,描述了稳定是暂时的,混沌才是永恒的。而金融市场也不例外,同样具有非线性的性质。市场是混沌的,是自然的函数,具有不可测性。成功的交易应与市场共舞,而不是与市场为敌。指出要在市场交易中成功,必须了解市场的根本结构和自己的根本结构,然后寻找到自然的交易自我,与市场融合,进入阻力最小的通道,如此才能达到知己知彼,百战不殆的境界。 因为作者不仅是一位成功的交易者,同时也是一位著名的交易教练,所以他在《混沌操作法》中还详细介绍了学习混沌交易的五个阶段应如何分别进修及每段的目标,知识,工具等。所以,想要学招数的朋友应该也会有不小的收获。 并且,基于作者还具有心理学博士身份,因此,他运用了深厚的心理学知识叙述了人类和市场沟通的三项定律,描绘了三种身体结构如何影响你的交易风格,解释了脑部结构的组成和左右脑.脑核心的处理速度,以及它们的功能弱点(特质),最后总结出了三者协调运行的方法。对那些由于不能克服人性弱点,而因此始终无法达到知行合一的交易者,这实在是极好的内容。 另外,《混沌操作法》在很多方面有较大的突破。例如,mfi(市场促进指数)的发明和视窗的建立,使我们对价格运动有了进一步的认识;使用5/34/5macd指标和通达信指标公式源码 混沌操作法
(完整word版)混沌理论要点
鳄鱼全套指标 通达信指标公式源码
证券混沌操作法:鳄鱼线
新版混沌操作法
证券混沌操作法-低风险获利指南
最秘密的股票操作k线波浪技巧
证券交易新空间一书中的精华包含所有源码
新版混沌操作法
比尔威廉姆混沌操作法的总结用法
证券混沌操作法要点
混沌操作法学习心得
混沌操作法II——第一智者MT4源码
混沌操作法
混沌:动量震荡指标(AO)
混沌操作法操作步骤
《混沌操作法》读后感