以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- 关于一个改变买卖点的代码问题 (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=167493) |
-- 作者:m1978xz -- 发布时间:2019/1/3 14:15:48 -- 关于一个改变买卖点的代码问题 我先贴上目前的代码: DA:EMA(CLOSE,3),COLORBLUE;//输出DA:收盘价的3日指数移动平均,画蓝色 DB:EMA(CLOSE,5) ,COLORBLUE;//输出DB:收盘价的5日指数移动平均 ,画蓝色 DC:EMA(CLOSE,8) ,COLORBLUE;//输出DC:收盘价的8日指数移动平均 ,画蓝色 DD:EMA(CLOSE,10) ,COLORBLUE;//输出DD:收盘价的10日指数移动平均 ,画蓝色 DE:EMA(CLOSE,12) ,COLORBLUE;//输出DE:收盘价的12日指数移动平均 ,画蓝色 DF:EMA(CLOSE,15) ,COLORBLUE;//输出DF:收盘价的15日指数移动平均 ,画蓝色 CA:EMA(CLOSE,30) ,COLORYELLOW;//输出CA:收盘价的30日指数移动平均 ,画黄色,那个被我 成为黄标的东西就是这个,整个长期均线组也是黄的,只是被后继条件的颜色遮盖了。 CB:EMA(CLOSE,35) ,COLORYELLOW;//输出CB:收盘价的35日指数移动平均 ,画黄色 CC:EMA(CLOSE,40) ,COLORYELLOW;//输出CC:收盘价的40日指数移动平均 ,画黄色 CD:EMA(CLOSE,45) ,COLORYELLOW;//输出CD:收盘价的45日指数移动平均 ,画黄色 CE:EMA(CLOSE,50) ,COLORYELLOW;//输出CE:收盘价的50日指数移动平均 ,画黄色 CF:EMA(CLOSE,60) ,COLORYELLOW;//输出CF:收盘价的60日指数移动平均 ,画黄色 //上边这些就是画出顾比均线组 CDYX:=CA>CB AND CB>CC AND CC>CD AND CD>CE AND CE>CF;//cdyx就是30分>35分>40分>45分>50分>60分。也就是说长期线组以多头排列。 CKYX:=CA<CB AND CB<CC AND CC<CD AND CD<CE AND CE<CF;//CKYX就是30<35分<40分<45分<50分<60分,也就是说长期线组以空头排列。 DDYX:=DA>DB AND DB>DC AND DC>DD AND DD>DE AND DE>DF;//DDYX就是3分>5分>8分>10>12>15,也就是说短期线组以多头排列。 DKYX:=CA<CB AND DB<DC AND DC<DD AND DD<DE AND DE<DF;//DKYX就是3分<5分<8分<10分<12分<15分,也就是说长期线组以空头排列。 IF(CDYX,CA,DRAWNULL),COLORBROWN; IF(CDYX,CB,DRAWNULL),COLORBROWN; IF(CDYX,CC,DRAWNULL),COLORBROWN; IF(CDYX,CD,DRAWNULL),COLORBROWN; IF(CDYX,CE,DRAWNULL),COLORBROWN; IF(CDYX,CF,DRAWNULL),COLORBROWN; IF(CKYX,CA,DRAWNULL),COLORCYAN; IF(CKYX,CB,DRAWNULL),COLORCYAN; IF(CKYX,CC,DRAWNULL),COLORCYAN; IF(CKYX,CD,DRAWNULL),COLORCYAN; IF(CKYX,CE,DRAWNULL),COLORCYAN; IF(CKYX,CF,DRAWNULL),COLORCYAN; IF(DDYX,DA,DRAWNULL),COLORRED; IF(DDYX,DB,DRAWNULL),COLORRED; IF(DDYX,DC,DRAWNULL),COLORRED; IF(DDYX,DD,DRAWNULL),COLORRED; IF(DDYX,DE,DRAWNULL),COLORRED; IF(DDYX,DF,DRAWNULL),COLORRED; IF(DKYX,DA,DRAWNULL),COLORGREEN; IF(DKYX,DB,DRAWNULL),COLORGREEN; IF(DKYX,DC,DRAWNULL),COLORGREEN; IF(DKYX,DD,DRAWNULL),COLORGREEN; IF(DKYX,DE,DRAWNULL),COLORGREEN; IF(DKYX,DF,DRAWNULL),COLORGREEN; KO:=CLOSE; KC:=REF(CLOSE,1);//KC赋值:1日前的收盘价 STICKLINE(KO<=KC ,CLOSE ,OPEN,3,0 ),COLOR008800;//当满足条件收盘价<=前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为3,0不为0则画空心柱.,COLOR叶绿色 STICKLINE(KO<=KC ,CLOSE ,OPEN,2,0 ),COLOR00BB00;//当满足条件收盘价<=前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为2,0不为0则画空心柱.,COLOR叶绿色 STICKLINE(KO<=KC,CLOSE ,OPEN,1,0 ),COLOR00EE00;//当满足条件收盘价<=前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为1,0不为0则画空心柱.,COLOR叶绿色 STICKLINE(KO<=KC,CLOSE ,OPEN,0.5,0 ),COLOR66FF00;//当满足条件收盘价<=前日收盘价时时,在收盘价和开盘价位置之间画柱状线,宽度为0.5,0不为0则画空心柱.,COLOR叶绿色 STICKLINE(KO>KC,CLOSE,OPEN,3,0 ),COLOR000088;//当满足条件收盘价<>前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为3,0不为0则画空心柱.,COLOR宝蓝色 STICKLINE(KO>KC,CLOSE,OPEN,2,0 ),COLOR0000BB;//当满足条件收盘价<>前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为2,0不为0则画空心柱.,宝蓝色 STICKLINE(KO>KC,CLOSE,OPEN,1,0 ),COLOR0000EE;//当满足条件收盘价<>前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为1,0不为0则画空心柱.,宝蓝色 STICKLINE(KO>KC,CLOSE,OPEN,0.5 ,0 ),COLOR0033FF;//当满足条件收盘价>前日收盘价时,在收盘价和开盘价位置之间画柱状线,宽度为0.5,0不为0则画空心柱.,宝蓝色 STICKLINE(KO>KC,OPEN,LOW,0,0 ),COLORRED;//当满足条件收盘价>前日收盘价时,在开盘价和最低价位置之间画柱状线,宽度为0,0不为0则画空心柱.,画红色 STICKLINE(KO>KC,CLOSE,HIGH,0 ,0 ),COLORRED;//当满足条件收盘价>前日收盘价时,在收盘价和最高价位置之间画柱状线,宽度为0,0不为0则画空心柱.,画红色 STICKLINE(KO<=KC,CLOSE,LOW,0 ,0 ),COLOR66CC33;//当满足条件收盘价<=前日收盘价时,在收盘价和最低价位置之间画柱状线,宽度为0,0不为0则画空心柱.,叶绿色 {ART} N:=10; M:=1.5; TR1:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); //TR1赋值: { 先求最高价减去最低价的值 再求前日收盘价减去今日最高价的绝对值 再求前日 收盘价减去今日最低价的绝对值 之后看这3个值中哪个最大 ,我搜了一下这个是求真实波动值的公式} ATR:=MA(TR1,10);//ATR赋值:TR1的10日简单移动平均 ,得到了平均波幅通道指标 DDD:=(HIGH + LOW) / 2;//MEDIAN赋值: (最高价 + 最低价) / 2,就是取日内最高价和最低价之间的中间值 X:=20;//给X赋值为20、 {MID :=MA(C,X);// UPPER: MID + 2*STD(CLOSE,X),COLORGRAY; LOWER: MID - 2*STD(CLOSE,X),COLORGRAY;} HH:=DDD + ATR * M;//HH赋值:用日内中间值加均幅乘20 LL:=DDD - ATR * M;//LL赋值:用日内中间值减去ATM乘20, 得到类似布林带一样的通道。 W:=BARSLAST((HH>=HHV(HH,N)))-BARSLAST((LLV(LL,N)>=LL)); //W赋值:计算如果 HH上轨值>=10日内HH上轨的最高值)距今天数,就返回条件成熟至今的周期数,否则返回0 { 然后计算十日内的最低值是不是≥LL,如果是就返回条件成熟至今的周期数,否则返回零。 之后用第一个数值减去第二个数值。 这根线是否>0,决定了是显示红色倒数线,还是显示蓝色倒数线。还决定了此时K线是红色还是绿色。} BBX:=LLV(HH,BARSLAST(W<0));//BBX赋值:上次W<0距今天周期数日内HH的最低值 SSX:=HHV(LL,BARSLAST(W>0));//SSX赋值:上次W>0距今天周期数数日内LL的最高值 WW:=IF(W>0,BBX,IF(W<0,SSX,C));//,COLOrwhite,LINETHICK6;//WW赋值:如果W>0,返回BBX,否则返回如果W<0,返回SSX,否则返回收盘价 WWW:IF(W<0,WW,DRAWNULL),COLORMAGENTA,LINETHICK2;//输出WWW:如果W<0,返回WW,否则返回无效数,画洋红色,线宽为2红色倒数线画无效数这个 很重要 WWW1:IF(W>0,WW,DRAWNULL),COLORBLUE,LINETHICK2;//输出WWW1:如果W>0,返回WW,否则返回无效数,画蓝色,线宽为2蓝色倒数线 STICKLINE(0>W,H,L,0,0),COLORRED;//当满足条件0>W时,在最高价和最低价位置之间画柱状线,宽度为0,0不为0则画空心柱.,颜色为红色 STICKLINE(0>W AND C>O,O,C,3,0),COLORRED;//当满足条件0>WANDC,同时收盘价>开盘价时,在开盘价和收盘价位置之间画空心柱,宽度为3,颜色为红色 STICKLINE(0>W AND C<O,O,C,3,0),COLORRED;//当满足条件0>WANDC,同时收盘价<开盘价时,在开盘价和收盘价位置之间画空心柱,宽度为3,颜色为红色 STICKLINE(0<W,H,L,0,0),COLOR00AA00;//当满足条件0>W时,在开盘价和收盘价位置之间画空心柱,宽度为0不为.颜色为红色 STICKLINE(0<W AND C>O,O,C,3,0),COLOR00AA00;//当满足条件0<W时,在最高价和最低价位置之间画柱状线,宽度为0,0不为0则画空心柱.,颜色为深绿色 STICKLINE(0<W AND C<O,O,C,3,0),COLOR00AA00;//当满足条件0<WANDC>开盘价时,在开盘价和收盘价位置之间画柱状线,宽度为3,0不为0则画空心柱.,颜色为深绿色 //交易指令---------- CCCC:=REF(high,1);//CCC赋值为前一根K线最高点。 DDDD:=REF(low,1);//CCC赋值为前一根K线最低点。 EEEE:=CCCC+1;//在前一根K线高点上加一点 FFFF:=DDDD-1;//在前一根K线低点下减一点 QWW:=REF(WW,1);//前一K线周期内的倒数线值 //多开条件 IF HOLDING=0 THEN BEGIN //若持仓为0 IF W<0 THEN BEGIN //且倒数线在上方 IF CCCC>QWW THEN BEGIN //前一K线最高点上破ww BUY(1,1,LIMITR,EEEE); //在前一K线最高点顶部加一个点开多单 END END END //空开条件 IF HOLDING=0 THEN BEGIN //若持仓为0 IF W>0 THEN BEGIN //且倒数线在下方 IF DDDD<QWW THEN BEGIN //前一K线最高点上破ww BUYSHORT(1,1,LIMITR,FFFF); //在前一K线最高点顶部加一个点开空单 END END END //平多条件 IF HOLDING>0 THEN BEGIN //若持有多单 IF DDDD<QWW THEN BEGIN //前一K线最低点低于ww SELL(1,1,LIMITR,FFFF); //平多单 END END //平空条件 IF HOLDING<0 THEN BEGIN //若持有空单 IF CCCC>QWW THEN BEGIN //前一K线最低点低于ww SELLSHORT(1,1,LIMITR,EEEE); //平空单 END END ----------- 我现接下来想做的是一种在混沌理论中叫蓝灯特价的买卖方法。 现在代码中写的是如果前一K线突破倒数线,就在前一K线最高点+1的地方做多。 但是有一种情况就是这么设了预买之后,本K线的最高点比这个预买的位置低,没达到这个买点。 我希望在本 周期K线走完的同时,把预买价位改为这根K线的最高价+1.也就是降低预买价位。 请问该怎么写啊? |
-- 作者:FireScript -- 发布时间:2019/1/3 14:29:35 -- 没太明白你这个需求,你配合关键的下单代码说明下吧。 应该就是这几句吧 IF HOLDING=0 THEN BEGIN //若持仓为0 IF W<0 THEN BEGIN //且倒数线在上方 IF CCCC>QWW THEN BEGIN //前一K线最高点上破ww BUY(1,1,LIMITR,EEEE); //在前一K线最高点顶部加一个点开多单 END END END |
-- 作者:FireScript -- 发布时间:2019/1/3 15:10:29 -- 你的意思是当前K最高价比EEEE低就调整下单的价格对吧。但是你担心当前K走完之前,不好确定当前K最高价和EEEE的大小关系是吗? 你什么模式交易的,走完K还是固定轮询?
|
-- 作者:m1978xz -- 发布时间:2019/1/3 15:20:16 -- 走完K线模式。 不是当前K走完之前,不好确定当前K最高价和EEEE的大小关系 是不知道咋用代码来写这个过程。就是当前K走完之前的当前k的最高价不一定是当前K线真正的最高价。可要是当前K走完了。它应该就不叫当前K了。它的最高点是该写成high还是别的啥我不知道。
|
-- 作者:FireScript -- 发布时间:2019/1/3 15:28:33 -- 走完K的发单时间是当前K刚结束,下一个K刚开始的瞬间。 所以我觉得你可以直接用high和EEEE做对比来判断是否需要调整价格。因为发单的时候是取当前K最后成形时刻公式的计算结果。这个时候这个HIGH可以代表这个K最终的最高价。 |
-- 作者:m1978xz -- 发布时间:2019/1/3 15:40:03 -- 好的,版主~严重感谢。 我明白啦马上试试
![]() |
-- 作者:m1978xz -- 发布时间:2019/1/3 16:14:00 -- 请问版主~ 开仓价的代码是啥啊? 比如我开仓之后,想在(开多仓价-20)的价位设止损。
|