全栈乱我心 2024-04-28 17:01 采纳率: 0%
浏览 56
已结题

缠论自动画笔麦语言代码

有人可以分享一下缠论自动画笔中枢的代码吗?文华财经的麦语言就可以,真心真心感谢你

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-28 17:01
    关注

    引自免费微信小程序:皆我百晓生

    在文华财经的麦语言中,编写缠论自动画笔中枢的代码涉及到多个步骤,包括定义趋势、笔的识别、以及中枢的构建。这里我会提供一个基础的示例,这个示例仅包含一些核心逻辑,实际应用可能需要根据具体需求进行调整和优化。

    首先,确保你已经理解了缠论的基本概念,比如上涨趋势、下跌趋势、笔(由三段重叠的线段构成)和中枢(至少三个重叠的笔构成)。

    以下是一个基本的中枢识别的麦语言代码片段:

    // 定义变量
    var upTrend = 0; // 上涨趋势标记
    var downTrend = 0; // 下跌趋势标记
    var trend = 0; // 当前趋势
    var lastHigh = 0; // 上一高点
    var lastLow = 0; // 上一低点
    var startBar = 0; // 笔起始bar
    var endBar = 0; // 笔结束bar
    var startCZBar = 0; // 中枢起始bar
    var endCZBar = 0; // 中枢结束bar
    
    // 计算高点和低点
    if (Close > High) then
        lastHigh := Close;
    else if (Close < Low) then
        lastLow := Close;
    
    // 判断趋势
    if (lastHigh > lastHigh[1]) and (trend != 1) then
    {
        trend := 1;
        upTrend := 1;
        downTrend := 0;
    }
    else if (lastLow < lastLow[1]) and (trend != -1) then
    {
        trend := -1;
        upTrend := 0;
        downTrend := 1;
    }
    
    // 判断笔的开始和结束
    if (trend == 1) and (Close < lastHigh[1]) then
    {
        if (upTrend == 1) then
            startBar := BarIndex;
        else
        {
            trend := 0;
            upTrend := 0;
            downTrend := 0;
        }
    }
    else if (trend == -1) and (Close > lastLow[1]) then
    {
        if (downTrend == 1) then
            startBar := BarIndex;
        else
        {
            trend := 0;
            upTrend := 0;
            downTrend := 0;
        }
    }
    
    // 如果趋势改变,则结束当前笔
    if (trend != trend[1]) then
    {
        endBar := BarIndex - 1;
        if (startBar != 0)
        {
            Print("Start Bar: " + startBar);
            Print("End Bar: " + endBar);
            
            // 检查是否形成中枢
            CheckCentral(startBar, endBar);
            
            // 重置笔状态
            startBar := 0;
        }
    }
    
    // 检查并标记中枢
    Procedure CheckCentral(int start, int end)
    {
        var i = start + 1;
        
        while (i <= end)
        {
            if ((High[i] >= High[start]) and (Low[i] <= Low[start])) or 
               ((High[i] <= High[start]) and (Low[i] >= Low[start]))
            {
                // 找到中枢的第一个符合条件的bar
                if (startCZBar == 0) then
                    startCZBar := i;
                    
                // 更新中枢的结束bar
                endCZBar := i;
            }
            else
            {
                // 如果不符合条件,退出循环
                break;
            }
            
            i++;
        }
    
        if (startCZBar != 0)
        {
            Print("Start CZ Bar: " + startCZBar);
            Print("End CZ Bar: " + endCZBar);
        }
    }
    

    这段代码会输出每个笔的开始和结束位置,并尝试找到满足条件的中枢。注意,这只是一个基础版本,实际应用中可能需要处理更多边界情况,例如笔的合并、延伸等。

    由于麦语言不支持图形绘制,你需要在交易软件中手动设置画线规则,以便将这些数据可视化。你可以在每个笔的开始和结束位置画出横线,在中枢的范围内画矩形或者其他形状,以此表示中枢。

    如果你需要完整的代码或者有更复杂的需求,请告知我,我可以进一步帮助你。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月2日
  • 创建了问题 4月28日