請小編及教授幫幫忙 謝謝

  •   326 
  • 最後發表   鄧鄧  2025 二月 07
鄧鄧 發文於   2025/02/06

請問我將第一根K棒標記後 依據這根K棒的條件做完交易後,就不想要再依據這根K棒的條件,等到出現下一根符合條件的K棒出現,請問這樣該怎麼修改 謝謝



變數:

    previous_green(false), // 前一根K棒是否為綠色

    previous_red(false),   // 前一根K棒是否為紅色

    green_high(0),         // 前一根綠K棒的最高點

    green_low(0),          // 前一根綠K棒的最低點

    red_high(0),           // 前一根紅K棒的最高點

    red_low(0);            // 前一根紅K棒的最低點

 

    // 當前為紅K棒且成交量大於1500

    if Close[1] > Open[1] and Volume[1] > 1500 then begin

        previous_red = true;  // 收盤價 > 開盤價 -> 紅K棒

        red_high = High[1];

        red_low = Low[1];

        previous_green = false; // 重置綠K棒標記

    end;

 

    // 當前為綠K棒且成交量大於1500

    if Close[1] < Open[1] and Volume[1] > 1500 then begin

        previous_green = true;  // 收盤價 < 開盤價 -> 綠K棒

        green_high = High[1];

        green_low = Low[1];

        previous_red = false; // 重置紅K棒標記

    end;

 

    // 多單進場條件:當前價格大於綠K棒的最高點+1

    if previous_green and Position = 0  then begin

        if Close > green_high + 1 then  // 確保當前價格大於綠K棒的最高點+1

            SetPosition(2, green_high + 1);  // 進場價格:標記綠K棒的最高點+1

    end;

 

    // 空單進場條件:當前價格小於紅K棒的最低點-1

    if previous_red and Position = 0  then begin

        if Close < red_low - 1 then

            SetPosition(-2, red_low - 1);  // 進場價格:標記紅K棒的最低點-1

    end;

 

    // 多單出場條件

    if Position = 2 then begin

        if Close >= green_high + 1 + (green_high - green_low) then begin

            SetPosition(0);  // 平倉

        end;

        

        // 停損條件:當前價格跌破綠K棒的最低點

        if Close < green_low then begin

            SetPosition(0);  // 平倉

        end;

 

        // 從多單轉空單:若已平倉且符合空單進場條件

        if Position = 2 and previous_red then begin

            SetPosition(0);  // 先平倉多單

            if Close < red_low - 1 then

                SetPosition(-2, red_low - 1);  // 進場空單

        end;

    end;

 

    // 空單出場條件

    if Position = -2 then begin

        if Close <= red_low - 1 - (red_high - red_low) then begin

            SetPosition(0);  // 平倉

        end;

 

        // 停損條件:當前價格漲破紅K棒的最高點

        if Close > red_high then begin

            SetPosition(0);  // 平倉

        end;

 

        // 從空單轉多單:若已平倉且符合多單進場條件

        if Position = -2 and previous_green then begin

            SetPosition(0);  // 先平倉空單

            if Close > green_high + 1 then

                SetPosition(2, green_high + 1);  // 進場多單

        end;

    end;

 

end;



排序方式: 標準 | 最新
虎科大許教授 發文於   2025/02/07

試試看這樣是否符合需求。

var:
previous_green(false), // 前一根K棒是否為綠色
previous_red(false),   // 前一根K棒是否為紅色
green_high(999999),         // 前一根綠K棒的最高點
green_low(0),     // 前一根綠K棒的最低點
red_high(999999),           // 前一根紅K棒的最高點
red_low(0);       // 前一根紅K棒的最低點
//每根K棒第一次洗價恢復變數為預設值
if isFirstCall("Bar") then
    begin
        previous_red = false;  // 收盤價 > 開盤價 -> 紅K棒
        red_high = 999999;
        red_low = 0;
        previous_green = false; // 重置綠K棒標記
        green_high = 999999;
        green_low = 0;
    end;
// 當前為紅K棒且成交量大於1500
if Close[1] > Open[1] and Volume[1] > 1500 then 
    begin
        previous_red = true;  // 收盤價 > 開盤價 -> 紅K棒
        red_high = High[1];
        red_low = Low[1];
        previous_green = false; // 重置綠K棒標記
    end;
// 當前為綠K棒且成交量大於1500
if Close[1] < Open[1] and Volume[1] > 1500 then 
    begin
        previous_green = true;  // 收盤價 < 開盤價 -> 綠K棒
        green_high = High[1];
        green_low = Low[1];
        previous_red = false; // 重置紅K棒標記
    end;
// 多單進場條件:當前價格大於綠K棒的最高點+1
if previous_green and Position = 0  then 
    begin
        if Close > green_high + 1 then  // 確保當前價格大於綠K棒的最高點+1
            SetPosition(2, green_high + 1);  // 進場價格:標記綠K棒的最高點+1
    end;
// 空單進場條件:當前價格小於紅K棒的最低點-1
if previous_red and Position = 0 then
    begin
        if Close < red_low - 1 then
            SetPosition(-2, red_low - 1);  // 進場價格:標記紅K棒的最低點-1
    end;
// 多單出場條件
if Position = 2 then 
    begin
        if Close >= green_high + 1 + (green_high - green_low) then 
            begin
                SetPosition(0);  // 平倉
            end;
        // 停損條件:當前價格跌破綠K棒的最低點
        if Close < green_low then 
            begin
                SetPosition(0);  // 平倉
            end;
        // 從多單轉空單:若已平倉且符合空單進場條件
        if Position = 2 and previous_red then 
            begin
                SetPosition(0);  // 先平倉多單
                if Close < red_low - 1 then
                    SetPosition(-2, red_low - 1);  // 進場空單
            end;

    end;
// 空單出場條件
if Position = -2 then 
    begin
        if Close <= red_low - 1 - (red_high - red_low) then 
            begin
                SetPosition(0);  // 平倉
            end;
        // 停損條件:當前價格漲破紅K棒的最高點
        if Close > red_high then 
            begin
                SetPosition(0);  // 平倉
            end;
        // 從空單轉多單:若已平倉且符合多單進場條件
        if Position = -2 and previous_green then 
            begin
                SetPosition(0);  // 先平倉空單
                if Close > green_high + 1 then
                    SetPosition(2, green_high + 1);  // 進場多單
            end;
    end;

鄧鄧 發文於   2025/02/07

教授您好 請問這樣是否會造成標記完k棒數據後

還沒碰到進場的價位就已經恢復為預設值了呢?

謝謝教授

虎科大許教授 發文於   2025/02/07

只是在分K的第一個Tick恢復預設值,而進場的程式碼在恢復預設值的後面,不受影響。

發表回覆
Close