如何取得第一次觸發進場價格做計算?

  •   418 
  • 最後發表   XQYi  2024 七月 10
XQYi 發文於   2024/07/09

以下程式碼第一次觸發時有紀錄,但第二次進場價在平倉前又觸發了,

結果平倉價以第二次觸發價做計算,如何避免?

因為用於當沖,如何讓觸發訊號僅在當日有作用?

 

var: intrabarpersist SBT1(0),intrabarpersist FRC1(0);

condition1= currentTime >090000 and currentTime <130000;

if condition1 and value3 cross Under value48 then begin

FRC1=getField("當日序號", "Tick");//紀錄序號

SBT1=getField("收盤價", "Tick");

plot14(SBT1,"進");

end;

if close < SBT1*(1-0.02) then plot15 (getField("收盤價", "Tick"),"平");

排序方式: 標準 | 最新
鍵盤上的小白兔 發文於   2024/07/09

一天只想入場一次 , 要避免第二次入場是嗎?

XQYi 發文於   2024/07/09

不是喔,是第一次入場後要等平倉再入場,

平倉之前若有第二次入場訊號,不可以用第二次的入場訊號價格計算(必須忽略)

 

虎科大許教授 發文於   2024/07/09

用Position控制即可。

XQYi 發文於   2024/07/09

指標腳本 無法使用 Position !

鍵盤上的小白兔 發文於   2024/07/09

加個hasorder(false);  

避免未平倉時,再度入場

XQYi 發文於   2024/07/09

不懂!不會編寫

鍵盤上的小白兔 發文於   2024/07/09

用法如下 , 可以試看看

不過程式看起來 , 只有停損出場 

時間到出場或停利出場並沒有

還是要將hasorder加到其他出場條件中

 

var: intrabarpersist SBT1(0),intrabarpersist FRC1(0);

var: intrabarpersist hasorder(false),

condition1= currentTime >090000 and currentTime <130000;

if condition1 and value3 cross Under value48 and hasorder=false then

  begin

      FRC1=getField("當日序號", "Tick");//紀錄序號

      SBT1=getField("收盤價", "Tick");

      hasorder=true;

      plot14(SBT1,"進");

end;

if close < SBT1*(1-0.02) and hasorder=true then

  begin

      hasorder=false;

      plot15 (getField("收盤價", "Tick"),"平");

  end;

XQYi 發文於   2024/07/10

感謝,

因為這是用指標先模擬交易的,先買進後賣出時間點的觀察,後面還想加入進行先賣出後買進的標示

確定可行後再轉為交易程式。

因為交易程式的回測,與實際差異蠻多

 

XQYi 發文於   2024/07/10

以下是將指標改為交易程式碼腳本,不知正不正確!

setBackBar(1650);

value3 = ((getField("收盤價", "Tick") - getField("開盤價", "D")) / getField("開盤價", "D"));

//plot3(value3, "振幅3 c-O /O");


// ATR

input: ATRL(5, "天數+1"), ATRS(2, "除數"),X1(1.25,"有%停利");

value46 =( ATR(atrl + 1))/ATRS;

value47 = value46 / opend(0);

value48 = -value46 / opend(0);


var: intrabarpersist longEntryPrice(0), intrabarpersist shortEntryPrice(0),

     intrabarpersist longTrigger(true), intrabarpersist shortTrigger(true),

     intrabarpersist lastTriggerDate(0), intrabarpersist longEntryDate(0), intrabarpersist shortEntryDate(0),

     intrabarpersist longExitTriggered(false), intrabarpersist shortExitTriggered(false);


if Date > lastTriggerDate then begin

    longTrigger = true; // 重置買入觸發狀態

    shortTrigger = true; // 重置賣出觸發狀態

    longExitTriggered = false; // 重置買入平倉狀態

    shortExitTriggered = false; // 重置賣出平倉狀態

    lastTriggerDate = Date; // 更新日期

end;

condition3=currentTime >090100 and currentTime < 130000;

//------------------買改賣

condition1=getField("內盤量") > getField("外盤量");//判斷買賣方向

if value3 cross under value48 and condition1 then begin

    if longTrigger then begin

        longEntryPrice = getField("收盤價", "Tick");

        longEntryDate = Date; // 紀錄進場日期

        setposition(maxList(position-1,0),longEntryPrice,label:="賣1"); //plot14(longEntryPrice, "B");

        longTrigger = false; // 設置為已觸發

    end;

end;

// 平倉條件(買入)

if Date = longEntryDate and not longExitTriggered then begin // 確保平倉條件僅在進場當日有效,且僅執行一次

    if close > addSpread(longEntryPrice * (1 - X1/100),0) then begin

        setposition(minList(position+1,1),addSpread(longEntryPrice * (1 - X1/100),0),label:="買1"); //plot15(addSpread(longEntryPrice * (1 - X1/100),0), "B-S$");

        longExitTriggered = true; // 設置為已觸發

        longTrigger = true; // 重置觸發狀態

    end;

end;


//----------------賣

condition2= getField("外盤量") > getField("內盤量") ;//判斷買賣方向

if value3 cross over value47 and condition2 then begin

    if shortTrigger then begin

        shortEntryPrice = getField("收盤價", "Tick");

        shortEntryDate = Date; // 紀錄進場日期

        setposition(maxList(position-1,0),shortEntryPrice,label:="賣2"); //plot16(shortEntryPrice, "S");

        shortTrigger = false; // 設置為已觸發

    end;

end;


// 平倉條件(賣出)

if Date = shortEntryDate and not shortExitTriggered then begin // 確保平倉條件僅在進場當日有效,且僅執行一次

    if close < addSpread(shortEntryPrice * (1 + X1/100),0) then begin

        setposition(minList(position+1,1),addSpread(shortEntryPrice * (1 + X1/100),0), label:="買2");//plot17(addSpread(shortEntryPrice * (1 + X1/100),0), "S-B$");

        shortExitTriggered = true; // 設置為已觸發

        shortTrigger = true; // 重置觸發狀態

    end;

end;

發表回覆
Close