871.问:
mr:ma(c,5)>ma(c,10);
mc:ma(c,5)<ma(c,10) or ?
买入条件:5日均线大于10日均线(不是上穿)。
卖出条件:1、5日均线小于10日均线;2、最低价格低于第一个买入条件成立时的最低价。
请问第2个条件如何编写?尝试过 l<ref(l,barslast(mr)),可是结果显示的是上一次条
件成立时的最低价而不是第一个,又不希望买入条件采用cross(ma(c,5),ma(c,10)),
答(股市骑兵00):
这样试试。
mr:ma(c,5)>ma(c,10);
mc:ma(c,5)<ma(c,10) or c<ref(l,BARSLAST(cross(mr,0.5)));
QUOTE:
872.问:
如何编辑公式在波段的高低点处显示涨跌幅的数值?
如:AB段的涨幅为15%,如何在B点显示15%这个数。
答(hx817):
别名: 前M个波峰值
所属类别: 指标函数 参数数量: 3
前M个ZIG转向波峰值。
用法:
PEAK(X,N,M)表示之字转向ZIG(X,N)的前M个波峰的数值,M必须大于等于1
例如:
PEAK(1,5,1)表示5%最高价ZIG转向的上一个波峰的数值
PEAK(MA(C,20),10,1)表示均线的10%的ZIG转向的上一个波峰的数值
别名: 前M个波谷值
所属类别: 指标函数 参数数量: 3
答(股市骑兵00):
这样试试。
x:=4;n:=10;w:=FLATZIG(x,n);
DRAWNUMBER(w=1,h*1.02,c/TROUGH(x,n,1)*100-100,2);
DRAWNUMBER(w=0,l*0.98,c/PEAK(x,n,1)*100-100,2);
QUOTE:
873.问:
我想找出主图界面内包含K线的数量,但这个值是浮动的,随着主图放大、
缩小而变,请教用什么函数表示?
答(bajatje):
SYSPARAM(3)-SYSPARAM(2)
SYSPARAM(3)
系统参数:主图可见K线最后位置
注意:该函数仅K线图形分析且打开十字光标时有效,否则返回值不确定
SYSPARAM(2)
系统参数:主图可见K线最初位置
注意:该函数仅K线图形分析且打开十字光标时有效,否则返回值不确定
QUOTE:
874.问:
怎样在分时上做 昨天的高点和低点各画一条直线,还有昨天5日均线画一条直线;
答(股市骑兵00):
1)先建个引用公式,名称:X21
HH:H;
LL:L;
M:MA(C,5);
2)再建公式选主图叠加。
HH:"X21.HH##day";
LL:"X21.LL##day";
M:"X21.M##day";
问:
可不可以做出30分钟内的分时上最高画一条横线
答(股市骑兵00):
1)
HHM:=HHV(H,30);
HH:HHM[DATACOUNT];
2)
HH:"X21.HH#MIN1";
QUOTE:
875.问:
鬼变脸文字化表述的解盘公式
答(股市骑兵00):
利用鬼变脸公式的数据,用下面涵数做。
别名: 显示解盘数值
所属类别: 解盘函数 参数数量: 5
在[解]中输出带数值的解盘。
用法:
EXPLAINEX(COND,TEXT,NUMBER,PRECISION,SKIPLINES)
在COND条件满足时在[解]中输出数值解说。
PRECISION为小数显示位数,SKIPLINES为空出几行显示下一个解盘
例如:
EXPLAINEX(HIGH>=HHV(HIGH,20), '20天新高价:',HIGH,2,1)表示在创20天新高时在
[解]中输出数值解说。
......
帮你做3天解盘
pg:=SYSPARAM(1);
w1:=BARSLAST(kk=3 or kk=4 or kk=5);w2:=BARSLAST(kk=1 or kk=2 or kk=6);
EXPLAINEX(kk=1 or kk=2 or kk=6,'红'+NUMTOSTR(w1[pg],0)+'今天:',c,2,0),COLORRED;
EXPLAINEX(kk=3 or kk=4 or kk=5,'绿'+NUMTOSTR(w2[pg],0)+'今天:',c,2,0),COLORGREEN;
EXPLAINEX(ref(kk=1 or kk=2 or kk=6,1),'红'+NUMTOSTR(w1[pg-1],0)+'昨天:',ref(c,1),2,0),COLORRED;
EXPLAINEX(ref(kk=3 or kk=4 or kk=5,1),'绿'+NUMTOSTR(w2[pg-1],0)+'昨天:',ref(c,1),2,0),COLORGREEN;
EXPLAINEX(ref(kk=1 or kk=2 or kk=6,2),'红'+NUMTOSTR(w1[pg-2],0)+'前天:',ref(c,2),2,0),COLORRED;
EXPLAINEX(ref(kk=3 or kk=4 or kk=5,2),'绿'+NUMTOSTR(w2[pg-2],0)+'前天:',ref(c,2),2,0),COLORGREEN;
QUOTE:
876.问:
我想在K线副图上连续显示等份的竖线
答(凹地):
看这个。等分 : 10天
VERTLINE(MOD(BARPOS,10)=0)
QUOTE:
877.问:
如何在一分钟K线图附图显示日K线图
已建立附图显示日K线图,如下:
STICKLINE (ISEQUAL AND C>=REF(C,1),C,C,7,1) COLORRED;
STICKLINE (ISEQUAL AND C<REF(C,1),C,C,7,1) COLORcyan;
STICKLINE (ISUP,H,L,0,0) COLORRED;
STICKLINE (ISUP,C,O,7,1) COLORRED;
STICKLINE (ISDOWN,H,L,0,0) COLORcyan;
STICKLINE (ISDOWN,O,C,7,0) COLORcyan;
该公式只与主图同周期,如何在一分钟K线附图显示日K线图?
答(bajatje):
1分钟图日K线
w:=barslast(hour<ref(hour,1));
oo:=ref(o,w);
cc:=refx(c,239-w);
hh:=refx(hhv(h,w+1),239-w);
LL:=refx(LLv(L,w+1),239-w);
f:=cc-ref(cc,w+1);
k:=BACKSET(ISLASTBAR,w+1);
STICKLINE (cc>oo and BETWEEN(w,INTPART(w[datacount]/2*0.93),INTPART(w[datacount]-w/2*1.07)),hh,LL,10,0) COLORRED;
STICKLINE (cc>oo,oo,cc,10,0) COLORRED;
STICKLINE (cc<oo and BETWEEN(w,INTPART(w[datacount]/2*0.93),INTPART(w[datacount]-w/2*1.07)),hh,LL,10,0) COLORcyan;
STICKLINE (cc<oo,oo,cc,10,0) COLORcyan;
STICKLINE (cc=oo and f>=0 and BETWEEN(w,INTPART(w[datacount]/2*0.93),INTPART(w[datacount]-w/2*1.07)),hh,LL,10,0) COLORRED;
STICKLINE (cc=oo and f>=0,oo,cc,10,0) COLORRED;
STICKLINE (cc=oo and f<0 and BETWEEN(w,INTPART(w[datacount]/2*0.93),INTPART(w[datacount]-w/2*1.07)),hh,LL,10,0) COLORcyan;
STICKLINE (cc=oo and f<0,oo,cc,10,0) COLORcyan;
QUOTE:
878.问:
昨天的K线形态与前天的K线形态基本相同怎样编写?
答(bajatje):
a:=BETWEEN(c,ref(c,1)-0.02,ref(c,1)+0.02) and BETWEEN(l,ref(l,1)-0.02,ref(l,1)+0.02)
and BETWEEN(h,ref(h,1)-0.02,ref(h,1)+0.02) and BETWEEN(o,ref(o,1)-0.02,ref(o,1)+0.02) ;
ref(a,1);
答(股市骑兵00):
n:=1.003;n1:=0.997;co:=c/o;hl:=h/l;hc:=h/c;
BETWEEN(co/ref(co,1),n,n1) and BETWEEN(hl/ref(hl,1),n,n1) and BETWEEN(hc/ref(hc,1),
n,n1);
QUOTE:
879.问:
请介绍<分析家4.0转3.0公式转换器>具体操作步骤
答(范数):
1.把原版分析家40的公式导出,置于桌面,命名123
2.退出原版分析家40.再打开分析家4.0转3.0公式转换器
3.将置于桌面,命名123的公式导入分析家4.0转3.0公式转换器的版本内
4.再将分析家4.0转3.0公式转换器内的公式导出,在导出时选择30格式.
5.一切工作完成后,则40变成了30.
QUOTE:
880.问:
我是想在电脑解盘里面显示以前均线交叉时的买进价位.
比如:EXPLAINEX(5日线大于25日线,'起始买进价位=',起始买进价位,0,0),colorcc10ff;
怎样才能让 (起始买进价位)显示以前均线交叉时的价位????
答(hx817):
ma1:=ma(c,5);
ma2:=ma(c,25);
fc:ref(c,BARSLAST(cross(ma1,ma2))+1);
EXPLAINEX(ma1>ma2,'起始买进价位=',fc,2,0),colorcc10ff;
QUOTE:
881.问:
当出现买入信号时都会出现很多"买入"字样,因为符合条件的K线太多,我只想让它只出现前两个,
后面的就不显示了.除非由"买入"转入"卖出",就再只显示"卖出"的前两个..
答(股市骑兵00):
B:=MA(C,20);
A:=C>B;
A1:=C<B;
B1:=REF(HHV(H,5),1);
B2:=REF(LLV(L,5),1);
X:=A AND c>B1 AND C>O or barpos=1 or barpos=2;
Y:=A1 AND c<B2 AND C<O or barpos=1 or barpos=2;
dx:=sumbars(x,1);ex:=sum(y,dx);
dy:=sumbars(y,1);ey:=sum(x,dy);
x1:=(cross(ey,ex) or ey<3 and barpos<>2 and barpos<>1)*x;
y1:=(cross(ex,ey) or ex<3 and barpos<>2 and barpos<>1)*y;
DRAWTEXT(X1,L,'买进'),colorWHITE;
DRAWTEXT(Y1,H,'卖出'),colorGREEN;
问:如果我只单独选择第一个或者单独选择第二个用公式怎么表达?
答(股市骑兵00):
每次买卖只发一个信号,就去除
or ey<3
or ex<3
问:如果只显示第二个"买进",而不显示第一个,应该怎么表示???
答(股市骑兵00):
改这2句,上面barpos=2多余了
x1:=(ey=2 and barpos<>1)*x;
y1:=(ex=2 and barpos<>1)*y;
QUOTE:
882.问:
选出股价在60均线正负2%之内的股票
答(股迷):
ABS(CLOSE-MA(CLOSE,60))/CLOSE<0.02;
QUOTE:
883.问:
x1:=(cross(ey,ex) and barpos<>2 andbarpos<>1)*x;
y1:=(cross(ex,ey) and barpos<>2 and barpos<>1)*y;
我是想把x1这个K线的收盘价作为买进价写在电脑解盘里面
EXPLAINEX(BBB>0,'★起始多单价位= ',起始买进价位,0,0),colorcc10ff;
就是不知道怎么样来用 "起始买进价位"表达x1时K线的收盘价???
答(股市骑兵00):
B:=MA(C,20);
A:=C>B;
A1:=C<B;
B1:=REF(HHV(H,5),1);
B2:=REF(LLV(L,5),1);
X:=A AND c>B1 AND C>O or barpos=1;
Y:=A1 AND c<B2 AND C<O or barpos=1;
dx:=sumbars(x,1);ex:=sum(y,dx);
dy:=sumbars(y,1);ey:=sum(x,dy);
x1:=(cross(ey,ex) or ey<3 and barpos<>1)*x;
y1:=(cross(ex,ey) or ex<3 and barpos<>1)*y;
DRAWTEXT(X1,L,'买进'),colorWHITE;
DRAWTEXT(Y1,H,'卖出'),colorGREEN;
sj:=MOD(date,10000)/100;fc:=c;x2:=sumbars(x1,1);y2:=sumbars(y1,1);gb:=SYSPARAM(1);
EXPLAIN(X2,'买入时间:'+NUMTOSTR(sj[gb-x2[gb]+1],2)+' 买入价:'+NUMTOSTR(fc[gb-x2[gb]+1],2)),COLORRED;
EXPLAIN(Y2,'卖出时间:'+NUMTOSTR(sj[gb-y2[gb]+1],2)+' 卖出价:'+NUMTOSTR(fc[gb-y2[gb]+1],2)),COLORGREEN;
QUOTE:
884.问:
可以在一个选股公式里面设多个条件,而且这多个条件里面的数值都可以设置,如选择
1、最高价与最低价10元到15元;
2、开盘价在某一范围;
3、涨跌幅度在某一范围等。
答(hx817):
input.:年(2004),月(7),日(16),收盘小价格(5),收盘大价格(5.3),最高价格(15),最低价格(10);
n:=DATEDIFF(((年-1900)*10000+月*100+日),DATE);//计算输入日期和现在日期时间差
tj1:REF(CLOSE,n)>收盘小价格 and REF(CLOSE,n)<收盘大价格;//选择收盘价
tj2:REF(HIGH,n)<最高价格 and REF(LOW,n)>最低价格;//选择收盘价
//开盘价、涨跌幅度 方法和 tj1 类似
QUOTE:
885.问:
对飞狐RSI指标理论性失误的疑问
在飞狐里的RSI公式为
N1:6,2,10O
N2:12,2,100
N3:24,2,100
LC := REF(CLOSE,1);
RSI1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;
RSI2:SMA(MAX(CLOSE-LC,0),N2,1)/SMA(ABS(CLOSE-LC),N2,1)*100;
RSI3:SMA(MAX(CLOSE-LC,0),N3,1)/SMA(ABS(CLOSE-LC),N3,1)*100;
以下是我翻看函数说明的一些个人注解,不知道对不对
ABS(X) 绝对值 数学
取X的绝对值
MAX (A,B) 最大值 数学 取A和B中最大的值
SMA (X,N,M) 移动平均 引用 求X的N日静态平均,M为权重
若Y=SMA(X,N,M) 则 Y=[M*X+(N-M)*Y')/N, 其中Y'表示上一周期Y值,N必须大于M。
REF(X,N) 向前引用 引用 引用N周期前的X值
LC:=REF(CLOSE,1)
该句为中间语句,不显示
因为1天前的收盘价格CLOSE
可以理解为“上日收盘价格”
CLOSE-LC:今日收盘价格-上日收盘价格“LC:=REM(CLOSE,1)”
max(a,b)back to max a,or b.
max(close-lc,0)
取CLOSE-LC 或0的最大值
可以理解为,如果收盘价格大于LC,则取他们的差值,否则取0。
SMA(MAX(CLOSE-LC,0),N1,1)
求移动平滑因子为1时的N1日的(今日收盘价-上日收盘价)或0的移动平均价
ABS(CLOSE-LC)
取CLOSE-LC的绝对值
SMA(ABS(CLOSE-LC),N1,1)
取移动平滑因子为1是的N1天前的(收盘价-上日收盘价的绝对值)的移动平均价
在期货市场技术分析书中第273页,对RSI的定义是
RS=X天内上涨收市价的平均值/X内下跌收市价的平均值
解释:X天内的上涨了的收市价格的上涨幅度相加,然后除于X,在结算下跌幅度时则把所有的下跌了的收市价格的下跌幅度相加,然后除于X,得出相对力度(RS)
RSI=100-(100/(1+RS))
我觉的飞狐里的RSI出现了理论性的错误。
SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100
里面取的是
N1天前的收盘差最大值/N1天前的收盘差绝对值*100
而墨非定义的是涨跌幅度之间的关系,RSI并非是最大值与绝对值之间的关系。
因为不会编程,不能够自己编写与原来RSI进行对比严整
答(hx817):
在期货市场技术分析书中第273页,对RSI的定义是
RS = X天内上涨收市价的平均值/X内下跌收市价的平均值
解释:X天内的上涨了的收市价格的上涨幅度相加,然后除于X,
在结算下跌幅度时则把所有的下跌了的收市价格的下跌幅度相加,然后除于X,得出相对力度(RS)
www.g158.com
RSI=100-(100/(1+RS))
涨跌幅度=C-REF(C,1)=C-LC
上涨幅度 C>LC 即 C-LC>0
MAX(C-LC,0) 只计算上涨的幅度
X天内上涨幅度的平均值=SMA(MAX(C-LC,0),X,1)
每天涨跌幅度的总和:ABS(CLOSE-LC)
SMA(ABS(CLOSE-LC),N1,1)
RSI = 100-100/(1+RS)
= (100*(1+RS)-100)/(1+RS)
= (100+100*RS-100)/(1+RS)
= (100*RS)/(1+RS)
= RS/(1+RS)*100
RS = X天内上涨幅度的平均值/X天内下跌幅度的平均值
假设 RS=R1/R2
那么:
RSI = (R1/R2)/(1+R1/R2)*100
= R1/(R1+R2)*100
R1为 X天内上涨幅度的平均值 = SMA(MAX(C-LC,0),X,1)
R2为 X天内下跌幅度的平均值
R1+R2 为X天内涨跌幅度的平均值 = SMA(ABS(CLOSE-LC),N1,1)
那么:
RSI = SMA(MAX(C-LC,0),X,1)/SMA(ABS(CLOSE-LC),N1,1)*100
CODE:[Copy to clipboard]886.问:
请南客老师将这段源码转成飞狐公式,谢谢。
input.:N(5,0,100,1),D(1050426,0,1999999,1),M(80,1,1000,1),
M1(50,1,1000,1),N1(0,0,1000,1);
variable:AA=0,BB=0,CC=0,DD=0, EE=0,FF=0,HH=0,II=0;
varAA:=0;
varBB:=0;
varCC:=0;
varDD:=barpos-1;
varEE:=capital*(M/100);
varFF:=capital*(m1/100);
varD:=date>=D;
var0:=ma( ref(vol,1),N );{N=1,与上一交易日比较}
var00:=var0*( (100+N1)/100 );
varV:=vol/var00-1;
var1:=if(vol>var00,vol-var00,0);
var2:=if(vol<var00,var00-vol,0);
var3:=(vol-var0)*100/var0;
差:vol-var0,colorffcc00,linethick0,precis0;
幅%:var3,colorccffff,linethick0,precis0;
STICKLINE(vol>var0,0,var1,6,0),COLORffccff;
STICKLINE(vol<var0,0,var2,6,1),colorccff33;
if varD then begin
for i=0 to varDD do begin
if varAA< varEE then begin
varAA := varAA + ref(vol,i);
if varAA >= varEE then
varZZ:=i+1;
end
end
for i=0 to varDD do begin
if varBB< varFF then begin
varBB := varBB + ref(var1,i);
if varBB >= varFF then
varXX:=i+1;
end
end
for i=0 to varDD do begin
if varCC< varFF then begin
varCC := varCC + ref(var2,i);
if varCC >= varFF then
varYY:=i+1;
end
end
if Vol>var00 then begin
AA:=AA+varV;
BB:=BB+1;
end
else if Vol<var00 then begin
CC:=CC+varV;
DD:=DD+1;
end
if C>O then begin
EE:=EE+varV;
FF:=FF+1;
end
else if C<O then begin
HH:=HH+varV;
II:=II+1;
end
end
涨%:if(BB=0,0,AA*100/BB),precis2,colorffccff;
跌%:if(DD=0,0,CC*100/DD),precis2,colorcyan;
阳%:if(FF=0,0,EE*100/FF),precis2,color99ffff;
阴%:if(II=0,0,HH*100/II),precis2,colorffff99;
(天):varZZ,precis0,linethick0,coloreeeeee;
天↑:varXX,precis0,linethick0,colorffcccc;
天↓:varYY,precis0,linethick0,colorccff33;
答(股市骑兵00):
上面的公式是分析家的,和飞狐写法不同,一个字都没改怎么能用呢
input.:N(5,0,100,1),D(1050426,0,1999999,1),M(80,1,1000,1),
M1(50,1,1000,1),N1(0,0,1000,1);
variable:AA=0*c,BB=0*c,CC=0*c,DD=0*c, EE=0*c,FF=0*c,HH=0*c,II=0*c;
varAA:=0*c;
varBB:=0*c;
varCC:=0*c;
varDD:=barpos-1;
varEE:=capital*(M/100);
varFF:=capital*(m1/100);
varD:=date>=D;
var0:=ma( ref(vol,1),N );{N=1,与上一交易日比较}
var00:=var0*( (100+N1)/100 );
varV:=vol/var00-1;
var1:=if(vol>var00,vol-var00,0);
var2:=if(vol<var00,var00-vol,0);
var3:=(vol-var0)*100/var0;
差:vol-var0,colorffcc00,linethick0,PRECISION0;
幅%:var3,colorccffff,linethick0,PRECISION0;
STICKLINE(vol>var0,0,var1,6,0),COLORffccff;
STICKLINE(vol<var0,0,var2,6,1),colorccff33;
fv:=v;fc:=c;fo:=o;
for i=1 to datacount do begin
if varD then begin
for j=i downto 1 do begin
if varaa[j]<varee then
varaa:=varaa+fv[j];
if varaa>=varee then begin
varzz:=i-j+1;
break;
end;
end;
for j=i downto LBOUND(var1) do begin
if varbb[j]<varff then
varbb:=varbb+var1[j];
if varbb>=varff then begin
varxx:=i-j+1;
break;
end;
end;
for j=i downto LBOUND(var2) do begin
if varcc[j]<varff then
varcc:=varcc+var2[j];
if varcc>=varff then begin
varyy:=i-j+1;
break;
end;
end;
if fv>var00 then begin
aa:=aa[i-1]+varv;
bb:=bb[i-1]+1;
end;else begin
aa:=aa[i-1];
bb:=bb[i-1];
end;
if fv<var00 then begin
cc:=cc[i-1]+varv;
dd:=dd[i-1]+1;
end;else begin
cc:=cc[i-1];
dd:=dd[i-1];
end;
if fc>fo then begin
ee:=ee[i-1]+varv;
ff:=ff[i-1]+1;
end;else begin
ee:=ee[i-1];
ff:=ff[i-1];
end;
if fc<fo then begin
hh:=hh[i-1]+varv;
ii:=ii[i-1]+1;
end;else begin
hh:=hh[i-1];
ii:=ii[i-1];
end;
end;
end;
涨%:if(BB=0,0,AA*100/BB),PRECISION2,colorffccff;
跌%:if(DD=0,0,CC*100/DD),PRECISION2,colorcyan;
阳%:if(FF=0,0,EE*100/FF),PRECISION2,color99ffff;
阴%:if(II=0,0,HH*100/II),PRECISION2,colorffff99;
(天):varZZ,PRECISION2,linethick0,coloreeeeee;
天↑:varXX,PRECISION2,linethick0,colorffcccc;
天↓:varYY,PRECISION2,linethick0,colorccff33;
www.g158.com
CODE:[Copy to clipboard]887.问:
在电脑解盘中:
EXPLAIN(x1,提示平仓一半),有没有办法让"提示平仓一半"不重复出现啊!
因为在一段时间x1条件会反复出现.
count(x1,m)=1;
答(南客):
如何使买入信号、卖出信号一一对应
(1)
在设计公式时,我们经常遇到这样的问题,如何使买卖信号一一对应?
比如下面的代码:
input.:n(26,5,300),p(2,0.1,10);
close;
mid : ma(close,n);
upper: mid + p*std(close,n);
lower: mid - p*std(close,n);
tjb:=cross(close,lower);
tjs:=cross(upper,close);
drawicon(tjb,close,4);
drawicon(tjs,close,5);
可以看出,买入信号连续发出多次后,才出现卖出信号,卖出信号连续发出多次后,
才发出买入信号。
(2)
如何过滤连续的买入、卖出信号,使买入后只要没有发出卖出信号,就不再发出买入信号;同样,卖出后只要没有出现买入信号,就不再发出卖出信号。即买入、卖出信号一一对应。
容易想到的是使用过滤函数filter(),但这个函数是难以实现的,因为未来有多少个连续的买入(或卖出)信号是未知的。
另一种方法是,从前一次卖出(或买入)信号开始累加买入(或卖出)信号,如果累加次数等于1,则发出真正的买入(或卖出)信号。
但这里还有一个问题,如果首次信号是卖出信号的话,也应该过滤,因为没有买入哪来卖出?应让首次信号是买入信号才合理。方法是,在第1根K线的位置,虚拟一个卖出信号。
以下是实现上述想法的常规函数代码:
input.:n(26,5,300),p(2,0.1,10);
close;
mid : ma(close,n);
upper: mid + p*std(close,n);
lower: mid - p*std(close,n);
//以下为常规函数处理代码//
tjb:=cross(close,lower);//初始买入信号,可换成其它任意买入条件
tjs:=cross(upper,close);//初始卖出信号,可换成其它任意卖出条件
{以下代码,使买、卖信号一一对应}
tsb:=barssince(tjb);
tss:=barssince(tjs);
if tjs[datacount]<tjb[datacount] then begin
a:=setlbound(tjs,1);
tjs:=tjs or barpos=1;
end;
tjbuy:=count(tjb,barslast(tjs))=1 and tjb; //买入信号
tjsell:=count(tjs,barslast(tjb))=1 and tjs; //卖出信号
drawicon(tjbuy,low,4);
drawicon(tjsell,high,5);
答(cwy):
如下也可解决
input.:n(26,5,300),p(2,0.1,10);
close;
mid:ma(close,n);
upper:mid + p*std(close,n);
lower:mid - p*std(close,n);
tjb:=cross(close,lower);
tjs:=cross(upper,close);
tsb:=barslast(tjb);
tss:=barslast(tjs);
tj1:=tjb and count(tjb,tss+1)<2;
tj2:=tjs and count(tjs,tsb+1)<2;
drawicon(tj1,close,4);
drawicon(tj2,close,5);
允许连续出现2次买入信号或卖出信号
input.:n(26,5,300),p(2,0.1,10);
close;
mid:ma(close,n);
upper:mid + p*std(close,n);
lower:mid - p*std(close,n);
tjb:=cross(close,lower);
tjs:=cross(upper,close);
tsb:=barslast(tjb);
tss:=barslast(tjs);
tj1:=tjb and count(tjb,tss+1)<3;
tj2:=tjs and count(tjs,tsb+1)<3;
drawicon(tj1,close,4);
drawicon(tj2,close,5);
答(股市骑兵00):
1.用循环我试着答一下。
input.:n(26,5,300),p(2,0.1,10),s(1,1,5);//S为允许连续出现信号调节参数!
close;
mid := ma(close,n);
upper: mid + p*std(close,n);
lower: mid - p*std(close,n);
//以下为常规函数处理代码//
tjb:=cross(close,lower);//初始买入信号,可换成其它任意买入条件
tjs:=cross(upper,close);//初始卖出信号,可换成其它任意卖出条件
///////////////////////////////////////////////////////////
m:=0*c;w:=0*c;mm:=0*c;
for i=LBOUND(upper) to datacount do begin
mm:=mm[i-1]+tjb;
m:=m[i-1]+tjb;
w:=w[i-1]+tjs;
if tjs then m:=0;
if tjb then w:=0;
if m<=s and tjb then z:=1;
if w<=s and tjs and mm>0 then t:=1;//首次要发卖出信号去掉and mm>0
end;
drawicon(z,low,4);
drawicon(t,high,5);
2.稍微改下思路试试。
///////////////////////////////////////////////////////////
m:=0*c;w:=0*c;mm:=0*c;
for i=LBOUND(upper) to datacount do begin
mm:=mm[i-1]+tjb;
m:=m[i-1]+tjb;
w:=w[i-1]+tjs;
if w>w[i-1] then m:=0;
if m>m[i-1] or mm=0 then w:=0;
if m-w>s then m:=m[i-1];
if w-m>s then w:=w[i-1];
end;
drawicon(m>ref(m,1),low,4);
drawicon(w>ref(w,1),high,5);
问:
刚刚发现问题。如果将买入、卖出条件改为以下方式,就无法实现信号的对应了。请问老师在买入条件仍然保持“C>MID”,而不是“CROSS(C,MID)”的情况下如何实现?
MID:MA(C,30);
tjb:=C>MID AND L>MID;//初始买入信号,可换成其它任意买入条件
U1:=L<REF(L,BARSLAST(CROSS(TJB,0.5)));
U2:=L<MID;
tjs:=U1 OR U2;//初始卖出信号,可换成其它任意卖出条件
{以下代码,使买、卖信号一一对应}
tsb:=barssince(tjb);
tss:=barssince(tjs);
if tjs[datacount]<tjb[datacount] then begin
a:=setlbound(tjs,1);
tjs:=tjs or barpos=1;
end;
tjbuy:=count(tjb,barslast(tjs))=1 and tjb; //买入信号
tjsell:=count(tjs,barslast(tjb))=1 and tjs; //卖出信号
drawicon(tjbuy,low,4);
drawicon(tjsell,high,5);
答(股市骑兵00):
你的买卖条件不对呀!
tjs//初始卖出信号
tjb//初始买入信号
2个条件自相矛盾了,同时买卖信号都会发的,那你听买的呢,还是卖的呢?
你硬要这个条件,下面的你参考
MID:=MA(C,30);
tjb:=C>MID AND L>MID;
U1:=L<REF(L,BARSLAST(CROSS(TJB,0.5)));
U2:=L<MID;
tjs:=U1 OR U2;//初始卖出信号,可换成其它任意卖出条件
tjb:=tjb and not(tjs);//初始买入信号,可换成其它任意买入条件
{以下代码,使买、卖信号一一对应}
tsb:=barssince(tjb);
tss:=barssince(tjs);
if tjs[datacount]<tjb[datacount] then begin
a:=setlbound(tjs,1);
tjs:=tjs or barpos=1;
end;
tjbuy:=count(tjb,barslast(tjs))=1 and tjb; //买入信号
tjsell:=count(tjs,barslast(tjb))=1 and tjs; //卖出信号
drawicon(tjbuy,low,4);
drawicon(tjsell,high,5);
问:
公式中的“U2”又改了一下:
U2:=C>REF(C,BARSLAST(CROSS(TJB,0.5)));
请教怎样才能在“tjsell”条件成立后,当“C>MID AND L>MID”条件满足时即可产生新的“tjbuy”信号?谢谢!
答(股市骑兵00):
你的买卖条件本身有重叠的问题。肯定有信号损失的,如果以买入信号为基准。
损失卖出信号改为如下表达。
MID:=MA(C,30);
tjb:=C>MID AND L>MID;//初始买入信号,可换成其它任意买入条件
U1:=L<REF(L,BARSLAST(CROSS(TJB,0.5)));
//U2:=L<MID;
U2:=C>REF(C,BARSLAST(CROSS(TJB,0.5)));
tjs:=(U1 OR U2) and not(tjb);//初始卖出信号,可换成其它任意卖出条件
答(cwy):
这个作业不能说是真正的用循环语句来实现,对常规函数使用的考虑还是较多,
如处理第一个卖出信号,实际上我不是做出来而是试出来的,
input.:n(26,5,300),p(2,0.1,10);
close;
mid:ma(close,n);
upper:mid + p*std(close,n);
lower:mid - p*std(close,n);
//以下为常规函数处理代码//
tjb:=cross(c,lower);//初始买入信号,可换成其它任意买入条件
tjs:=cross(upper,c);//初始卖出信号,可换成其它任意卖出条件
tss1:=BARSSINCE(tjb);//第一个卖出信号
///////////////////////////////////////////////////////
fb:=0*c;
fs:=0*c;
for i =n to datacount do begin
fb:=fb[i-1]+tjb;
fs:=fs[i-1]+tjs;
if tjs then fb:=0;
if tjb then fs:=0;
if fb=1 and tjb then fb1:=1;
if fs=1 and tjs then fs1:=1;
end;
drawicon(fb1 ,l,4);
drawicon(fs1 and tss1>2 ,h,5);
QUOTE:
888.问:
在100日内,从股价最低点到最高点,标出0。618。0。382的位置上画出线。
相反从最高到最低,也同样标出2条线
答(股市骑兵00):
hh:hhv(h,100);
ll:llv(l,100);
f1:(hh-ll)*0.618+ll;
f2:(hh-ll)*0.382+ll;


意见与建议
沪ICP证:沪B2-20070217 版权所有:东方财富网



