欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]找不到求帮忙

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有1993人关注过本帖树形打印复制链接

主题:[求助]找不到求帮忙

帅哥哟,离线,有人找我吗?
cq2698
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:131 积分:491 威望:0 精华:0 注册:2010/10/8 10:04:16
[求助]找不到求帮忙  发帖心情 Post By:2017/11/9 8:34:57    Post IP:180.169.30.6[只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171109082300.png
图片点击可在新窗口打开查看
//逐根
#Run_By_Bar
#Run_Every_Bar
#NoDefaultOutput
#MainChart
//自定义
#define 上涨             1
#define 下跌            -1
#define 盘整             0
#Define 顶               1
#Define 底              -1
#Define 上破             2
#Define 下破            -2
#Define 废弃的顶         3
#Define 废弃的底        -3
#Define 分型右侧元素延伸 1
#Define 向上笔分型构造   5
#Define 向上笔延伸       6
#Define 向下笔分型构造  -5
#Define 向下笔延伸      -6
#Define 笔中的顶         7
#Define 笔中的底        -7
#Define 新笔周期         3
#Define 新笔             3
#Define 旧笔             4
#Define 最新完成K线位置  0

Input:
  新笔标准(1);
 
VARIABLE:
  新高(0),新低(0),笔状态(0),K线方向(0),TL_ID(-1),                //连续
  K线类型(0), 分型区间上沿(0), 分型区间下沿(0), 笔尖(Invalid),  //离散
 
  NumericSimple i(0),
  NumericSimple 前笔高点位置(0),//顶位置
  NumericSimple 前笔低点位置(0),//底位置
  NumericSimple 今笔高点位置(0),//顶位置
  NumericSimple 今笔低点位置(0),//底位置
 
  NumericSimple 顶位置(0),//笔中分型顶
  NumericSimple 底位置(0),//笔中分型底
  NumericSimple 分型上沿(0),//分型区间上沿
  NumericSimple 分型下沿(0),//分型区间下沿
 
  NumericSimple 分型右侧元素(1),//分型右侧元素包含
  NumericSimple 新K形成(0),     //非包含
  NumericSimple 找到符合K线(0), //特殊处理时标志
  NumericSimple 笔计数(0);      //计算一笔的非包含K线数

//******************************主程序******************************

//1.第一根K线处理
笔:笔尖,LineDot,ColorYellow;

 
IF BARPOS=最新完成K线位置+1 THEN
BEGIN
  前笔高点位置=最新完成K线位置;
  前笔低点位置=最新完成K线位置;
  今笔高点位置=最新完成K线位置;
  今笔低点位置=最新完成K线位置;
  顶位置=最新完成K线位置;
  底位置=最新完成K线位置;
  分型上沿=High[最新完成K线位置];
  分型下沿=Low[最新完成K线位置];
  新高[最新完成K线位置]=分型上沿;
  新低[最新完成K线位置]=分型下沿;
  K线方向[最新完成K线位置]=盘整;
  笔状态[最新完成K线位置]=盘整;
  Print('第一根K线处理');
 
  Exit;
END;

前笔高点位置++;
前笔低点位置++;
今笔高点位置++;
今笔低点位置++;
顶位置++;
底位置++;

//2.K线处理
新K形成=True;
//2.1 K线方向
  //2.1.1 上升K线
If High[最新完成K线位置]>新高[最新完成K线位置+1] And
   Low[最新完成K线位置]>新低[最新完成K线位置+1]  Then
Begin
  K线方向[最新完成K线位置]=上涨;
  顶位置=最新完成K线位置;
End Else Begin
  //2.1.2 下降K线
  If High[最新完成K线位置]<新高[最新完成K线位置+1] And
     Low[最新完成K线位置]<新低[最新完成K线位置+1] Then
  Begin
    K线方向[最新完成K线位置]=下跌;
        底位置=最新完成K线位置;
  End Else Begin
  //2.1.3 包含K线,保持原方向
    K线方向[最新完成K线位置]=K线方向[最新完成K线位置+1];
        新K形成=False;
  End;
End;       

//2.2 非包含处理序列K线
If 新K形成=False Then
Begin
  If K线方向[最新完成K线位置]=下跌 Then
  Begin
    新高[最新完成K线位置]=Min(High[最新完成K线位置],新高[最新完成K线位置+1]);
        If Low[最新完成K线位置]<=新低[最新完成K线位置+1] Then
        Begin
          新低[最新完成K线位置]=Low[最新完成K线位置];
          底位置=最新完成K线位置;
          分型下沿=Low[最新完成K线位置];
          If 分型右侧元素=分型右侧元素延伸 Then
            分型区间下沿[顶位置]=Min(分型区间下沿[顶位置],新低[最新完成K线位置]);
        End Else
          新低[最新完成K线位置]=新低[最新完成K线位置+1];       
  End Else Begin
        If High[最新完成K线位置]>=新高[最新完成K线位置+1] Then
        Begin
          新高[最新完成K线位置]=High[最新完成K线位置];
          顶位置=最新完成K线位置;
          分型上沿=High[最新完成K线位置];
          If 分型右侧元素=分型右侧元素延伸 Then
            分型区间上沿[底位置]=Max(分型区间上沿[底位置],新高[最新完成K线位置]);
        End Else
          新高[最新完成K线位置]=新高[最新完成K线位置+1];
        If K线方向[最新完成K线位置]=上涨 Then
      新低[最新完成K线位置]=Max(Low[最新完成K线位置],新低[最新完成K线位置+1]);
        Else Begin
          If Low[最新完成K线位置]<=新低[最新完成K线位置+1] Then
          Begin
            新低[最新完成K线位置]=Low[最新完成K线位置];
            底位置=最新完成K线位置;
            分型下沿=Low[最新完成K线位置];
                If 分型右侧元素=分型右侧元素延伸 Then
              分型区间下沿[顶位置]=Min(分型区间下沿[顶位置],新低[最新完成K线位置]);
          End Else
            新低[最新完成K线位置]=新低[最新完成K线位置+1];
        End;
  End;
End Else Begin
  新高[最新完成K线位置]=High[最新完成K线位置];
  新低[最新完成K线位置]=Low[最新完成K线位置];
  If K线方向[最新完成K线位置]=下跌 And (K线方向[最新完成K线位置+1]=上涨 Or
     K线方向[最新完成K线位置+1]=盘整) Then
  Begin
    分型区间上沿[顶位置]=分型上沿;
        分型区间下沿[顶位置]=Min(分型下沿,新低[最新完成K线位置]);
    分型下沿=新低[最新完成K线位置];
        K线类型[顶位置]=笔中的顶;
        分型右侧元素=True;
  End Else Begin
    If K线方向[最新完成K线位置]=上涨 And (K线方向[最新完成K线位置+1]=下跌 Or
     K线方向[最新完成K线位置+1]=盘整) Then
        Begin
          分型区间下沿[底位置]=分型下沿;
          分型区间上沿[底位置]=Max(分型上沿,新高[最新完成K线位置]);
          分型上沿=新高[最新完成K线位置];
          K线类型[底位置]=笔中的底;
          分型右侧元素=True;
        End Else Begin
          分型右侧元素=False;
          If K线方向[最新完成K线位置]=下跌 Then
          Begin
            分型上沿=新高[最新完成K线位置+1];
                分型下沿=新低[最新完成K线位置];
          End Else Begin
            分型上沿=新高[最新完成K线位置];
                分型下沿=新低[最新完成K线位置+1];
          End;
        End;
  End;
 
  笔计数++;
End;

//3.笔处理

笔状态[最新完成K线位置]=笔状态[最新完成K线位置+1];

//3.1 盘整K线
If K线方向[最新完成K线位置+1]=盘整 Then
Begin
  //3.1.1 下跌K线
  If 新K形成 And K线方向[最新完成K线位置]=下跌 Then
  Begin
    K线类型[顶位置]=顶;
        笔状态[最新完成K线位置]=向上笔分型构造;
        笔计数=1;
        笔尖[顶位置]=High[顶位置];
        笔[顶位置]=笔尖[顶位置];
        今笔高点位置=顶位置;       
        今笔低点位置=最新完成K线位置;
        前笔高点位置=顶位置;
        前笔低点位置=底位置;
  End Else Begin
  //3.1.2 上涨K线
    If 新K形成 And K线方向[最新完成K线位置]=上涨 Then
    Begin
          K线类型[底位置]=底;
          笔状态[最新完成K线位置]=向下笔分型构造; 
          笔计数=1;
          笔尖[底位置]=Low[底位置];
          笔[底位置]=笔尖[底位置];
          今笔低点位置=底位置;       
          今笔高点位置=最新完成K线位置;
          前笔高点位置=顶位置;
      前笔低点位置=底位置;
    End;
  End;
End;

//3.2 下跌K线
If K线方向[最新完成K线位置]=下跌 Then
Begin
  Switch (笔状态[最新完成K线位置+1])
  Begin
    //3.2.1 向下笔延伸
        Case 向上笔分型构造:
          If 新低[最新完成K线位置]<分型区间下沿[前笔高点位置] Then
          Begin
            笔状态[最新完成K线位置]=向下笔延伸;
                今笔低点位置=最新完成K线位置;
          End Else
            If Low[最新完成K线位置]=分型区间下沿[前笔高点位置] Then
                  今笔低点位置=最新完成K线位置;
         
        //3.2.2 向下笔继续延伸         
        Case 向下笔延伸:
          If Low[最新完成K线位置]<=新低[今笔低点位置] Then
            今笔低点位置=最新完成K线位置;
       
        //3.2.3 向下笔分型构造或向上笔延伸
        Default: Begin
          //3.2.3.1 向上笔完成
          If K线方向[最新完成K线位置+1]=上涨 And
             笔状态[最新完成K线位置+1]=向上笔延伸 And
             新高[最新完成K线位置+1]=新高[今笔高点位置]  And
             ((笔计数>新笔 And 新笔标准=True And (今笔低点位置-今笔高点位置)>新笔周期) Or
                 (笔计数>旧笔)) Then
          Begin
                       
                  K线类型[今笔高点位置]=顶;
                  笔状态[最新完成K线位置]=向上笔分型构造;
                  笔计数=1;
                  笔尖[今笔高点位置]=新高[今笔高点位置];
                  笔[今笔高点位置]=笔尖[今笔高点位置];
                  前笔高点位置=今笔高点位置;
                  今笔低点位置=最新完成K线位置;
//                  TL_ID[前笔低点位置]=Tl_New(Date[前笔低点位置],Time[前笔低点位置],新低[前笔低点位置],
//                                             Date[前笔高点位置],Time[前笔高点位置],笔尖[前笔高点位置]);
//                  Tl_SetColor(TL_ID[前笔低点位置],ColorYellow);
//                  Tl_SetStyle(TL_ID[前笔低点位置],3);
          End Else Begin
          //3.2.3.2 向上笔完成前
                //突破向下笔的低点
                找到符合K线=False;
            If 新低[最新完成K线位置]<新低[前笔低点位置] Then
                Begin
                  笔状态[最新完成K线位置]=向下笔延伸;
                  //向上笔区间大于向下笔区间的特殊情况
                  If 新高[今笔高点位置]>新高[前笔高点位置] Then
                  Begin
                    K线类型[最新完成K线位置]=下破;
                        K线类型[前笔低点位置]=废弃的底;
                        K线类型[前笔高点位置]=废弃的顶;
                        笔尖[前笔低点位置]=Invalid;
                        笔尖[前笔高点位置]=Invalid;
                        笔[前笔高点位置]=Invalid;
                        笔[前笔低点位置]=Invalid;
//                        If TL_ID[前笔高点位置]<>-1 Then
//                          Tl_Delete(TL_ID[前笔高点位置]);
                        //查找合适的笔尖
                        i=前笔高点位置+1;
                        While i<DataCount Do
                        Begin
                          //查找符合的顶或底
                          If K线类型[i]=顶 Then
                          Begin
                            If 笔尖[i]>=新高[前笔高点位置] Then
                                Begin
                                  找到符合K线=True;
                                  Break;
                                End Else Begin
                                  K线类型[i]=废弃的顶;
                                  笔尖[i]=Invalid;
                                  笔[i]=Invalid;
//                                  Tl_Delete(TL_ID[i]);
                                End;
                          End Else Begin
                            If K线类型[i]=底 Then
                                Begin
                                  前笔低点位置=i;
                                  If 笔尖[i]<=新低[今笔低点位置] Then
                                  Begin
                                    找到符合K线=True;
                                        Break;
                                  End Else Begin
                                    K线类型[i]=废弃的底;
                                        笔尖[i]=Invalid;
                                        笔[i]=Invalid;
//                                        Tl_Delete(TL_ID[i]);
                                  End;
                                End;
                          End;
                          i++;
                        End;                       
                        //找到向下笔或找不到符合的笔
                        If (找到符合K线=True And K线类型[i]=底) Or 找到符合K线=False Then
                        Begin                         
                          前笔高点位置=今笔高点位置;
                          K线类型[今笔高点位置]=顶;
                          笔尖[今笔高点位置]=新高[今笔高点位置];
                          笔[今笔高点位置]=笔尖[今笔高点位置];
                          笔计数=0;
//                          If 找到符合K线=True Then
//                            Tl_SetEnd(TL_ID[i],Date[前笔高点位置],Time[前笔高点位置],笔尖[前笔高点位置]);
                          i=今笔高点位置-1;
                          While i>=最新完成K线位置 Do
                          Begin
                            If (High[i]>新高[i+1] And Low[i]>新低[i+1]) Or
                                   (High[i]<新高[i+1] And Low[i]<新低[i+1]) Then
                                  笔计数++;
                                  i--;
                          End;
                          If 笔计数<2 Or (笔计数>1 And 新低[最新完成K线位置]>=分型区间下沿[今笔高点位置]) Then
                            笔状态[最新完成K线位置]=向上笔分型构造;
                        End Else
                          If 找到符合K线=True And K线类型[i]=顶 Then
                          Begin                           
                        今笔高点位置=i;
                                前笔高点位置=i;
                                笔计数=旧笔;
//                                Tl_Delete(TL_ID[前笔高点位置]);
                          End;
                  End Else Begin
                        i=前笔高点位置;
                        找到符合K线=True;
                    K线类型[前笔低点位置]=废弃的底;
                        笔尖[前笔低点位置]=Invalid;
                        笔[前笔低点位置]=Invalid;
//                        If TL_ID[前笔高点位置]<>-1 Then
//                          Tl_Delete(TL_ID[前笔高点位置]);
                        今笔高点位置=前笔高点位置;
                        笔计数=旧笔;
                  End;                 
                  //查找前笔低点
                  If 找到符合K线=True And K线类型[i]=顶 Then
                  Begin
                    i++;
                    While i<DataCount Do
                    Begin
                      If 找到符合K线=True And K线类型[i]=底 Then
                          Begin
                            前笔低点位置=i;
                    Break;
                          End;
                          i++;
                End;
                  End;
                  今笔低点位置=最新完成K线位置;
                End;
          End;
    End
  End;
End;

//3.3 上涨K线
If K线方向[最新完成K线位置]=上涨 Then
Begin
  Switch(笔状态[最新完成K线位置+1]) Begin
    Case 向下笔分型构造:
      Begin       
          If 新高[最新完成K线位置]>分型区间上沿[前笔低点位置] Then
          Begin
            笔状态[最新完成K线位置]=向上笔延伸;
                今笔高点位置=最新完成K线位置;
          End Else begin
            If High[最新完成K线位置]=分型区间上沿[前笔低点位置] Then
                  今笔高点位置=最新完成K线位置;
                end;
          End
         
        Case 向上笔延伸:
          If High[最新完成K线位置]>=新高[今笔高点位置] Then
            今笔高点位置=最新完成K线位置;
               
        Default: Begin
          //向下笔完成
          If K线方向[最新完成K线位置+1]=下跌 And
             笔状态[最新完成K线位置+1]=向下笔延伸 And
             新低[最新完成K线位置+1]=新低[今笔低点位置] And
                 ((笔计数>新笔 And 新笔标准=True And
                   (今笔高点位置-今笔低点位置)>新笔周期) Or
                   (笔计数>旧笔)) Then
          Begin                 
                  K线类型[今笔低点位置]=底;
                  笔状态[最新完成K线位置]=向下笔分型构造;
                  笔计数=1;
                  笔尖[今笔低点位置]=新低[今笔低点位置];
                  笔[今笔低点位置]=新低[今笔低点位置];
                  前笔低点位置=今笔低点位置;
                  今笔高点位置=最新完成K线位置;
//                  TL_ID[前笔高点位置]=Tl_New(Date[前笔高点位置],Time[前笔高点位置],新高[前笔高点位置],
//                                             Date[前笔低点位置],Time[前笔低点位置],笔尖[前笔低点位置]);
//              Tl_SetColor(TL_ID[前笔高点位置],COLORYELLOW);
//                  Tl_SetStyle(TL_ID[前笔高点位置],3);
          End Else Begin
            找到符合K线=False;
            If 新高[最新完成K线位置]>新高[前笔高点位置] Then
                Begin
                  笔状态[最新完成K线位置]=向上笔延伸;
                  //向下笔区间大于向上笔区间的特殊情况
                  If 新低[今笔低点位置]<新低[前笔低点位置] Then
                  Begin
                    K线类型[最新完成K线位置]=上破;
                        K线类型[前笔低点位置]=废弃的底;
                        K线类型[前笔高点位置]=废弃的顶;
                        笔尖[前笔低点位置]=Invalid;
                        笔尖[前笔高点位置]=Invalid;
                        笔[前笔低点位置]=Invalid;
                        笔[前笔高点位置]=Invalid;
//                        If TL_ID[前笔低点位置]<>-1 Then
//                          Tl_Delete(TL_ID[前笔低点位置]);
                        //查找合适的笔尖
                        i=前笔低点位置+1;
                        While i<DataCount Do
                        Begin
                          //查找符合的顶或底
                          If K线类型[i]=顶 Then
                          Begin
                            前笔高点位置=i;
                            If 笔尖[i]>=新高[今笔高点位置] Then
                                Begin
                                  找到符合K线=True;
                                  Break;
                                End Else Begin
                                  K线类型[i]=废弃的顶;
                                  笔尖[i]=Invalid;
                                  笔[i]=Invalid;
//                                  Tl_Delete(TL_ID[i]);
                                End;
                          End Else Begin
                            If K线类型[i]=底 Then
                                Begin
                                  If 笔尖[i]<=新低[今笔低点位置] Then
                                  Begin
                                    找到符合K线=True;
                                        Break;
                                  End Else Begin
                                    K线类型[i]=废弃的底;
                                        笔尖[i]=Invalid;
                                        笔[i]=Invalid;
//                                        Tl_Delete(TL_ID[i]);
                                  End;
                                End;
                          End;
                          i++;
                        End;                       
                        //找到向上笔或找不到符合的笔
                        If (找到符合K线=True And K线类型[i]=顶) Or 找到符合K线=False Then
                        Begin                                               
                          前笔低点位置=今笔低点位置;
                          K线类型[今笔低点位置]=底;
                          笔尖[今笔低点位置]=新低[今笔低点位置];
                          笔[今笔低点位置]=新低[今笔低点位置];
                          笔计数=0;
//                          If 找到符合K线=True Then
//                            Tl_SetEnd(TL_ID[i],Date[前笔低点位置],Time[前笔低点位置],笔尖[前笔低点位置]);
                          i=今笔低点位置-1;
                          While i>=最新完成K线位置 Do
                          Begin
                            If (High[i]>新高[i+1] And Low[i]>新低[i+1]) Or
                                   (High[i]<新高[i+1] And Low[i]<新低[i+1]) Then
                                  笔计数++;
                                  i--;
                          End;
                         
                          If 笔计数<2 Or (笔计数>1 And 新高[最新完成K线位置]<=分型区间上沿[今笔低点位置]) Then
                            笔状态[最新完成K线位置]=向下笔分型构造;
                         
                        End Else
                          If 找到符合K线=True And K线类型[i]=底 Then
                          Begin
                        今笔低点位置=i;
                                前笔低点位置=i;
                                笔计数=旧笔;
//                                Tl_Delete(TL_ID[前笔低点位置]);
                          End;
                  End Else Begin
                        i=前笔低点位置;
                        找到符合K线=True;
                    K线类型[前笔高点位置]=废弃的顶;
                        笔尖[前笔高点位置]=Invalid;
                        笔[前笔高点位置]=Invalid;
//                        If TL_ID[前笔低点位置]<>-1 Then
//                          Tl_Delete(TL_ID[前笔低点位置]);
                        今笔低点位置=前笔低点位置;
                        笔计数=旧笔;
                  End;                 
                  //查找前笔高点
                  If 找到符合K线=True And K线类型[i]=底 Then
                  Begin
                    i++;
                    While i<DataCount Do
                    Begin
                      If 找到符合K线=True And K线类型[i]=顶 Then
                          Begin
                            前笔高点位置=i;
                    Break;
                          End;
                          i++;
                End;
                  End;
                  今笔高点位置=最新完成K线位置;
                End;
          End;
        End
  End;
End;


 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2017/11/9 8:41:11    Post IP:180.169.30.6[只看该作者]

这个工作人员和您一样也要一行行来看,并没有什么捷径,所以还请理解


 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/11/9 8:48:28    Post IP:180.169.30.6[只看该作者]

#define 上涨             1

这种语法结构不是金字塔的,你要是定义变量需要用:或者:=

 

另外写代码建议你迭代是处理,写一段调试一段,



编程无捷径,技巧靠积累。
 回到顶部