怎麼改成XS語言

  •   409 
  • 最後發表   菜菜  2025 二月 13
菜菜 發文於   2025/02/08

以下怎麼改成XS語言...

 

VAR early_high : FLOAT = HHV(H, 20);  // 取最近 20 根 K 棒內的最高點

VAR early_low : FLOAT = LLV(L, 20);   // 取最近 20 根 K 棒內的最低點

VAR pullback_confirmed : INTEGER = 0;

VAR current_price : FLOAT = CLOSE;

 

// 回踩確認條件(3 分鐘 K 線確認)

IF (current_price > early_high) THEN

    IF (REF(CLOSE, 1) < early_high AND current_price >= early_high) THEN

        pullback_confirmed = 1;

    ENDIF

ENDIF

 

IF (current_price < early_low) THEN

    IF (REF(CLOSE, 1) > early_low AND current_price <= early_low) THEN

        pullback_confirmed = -1;

    ENDIF

ENDIF

 

// 進場條件(多單)

IF (pullback_confirmed = 1) THEN

    BUY('OTM Call', CLOSE, 1);

ENDIF

 

// 進場條件(空單)

IF (pullback_confirmed = -1) THEN

    BUY('OTM Put', CLOSE, 1);

ENDIF

 

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

//這個程式需要同時監控CALL及PUT,亦即執行商品至少要有一個CALL且有一個PUT

VAR: early_high(0); 
VAR: early_low(0);
VAR: pullback_confirmed(0);
VAR: current_price(0);
early_high=highest(H,20);
early_low=lowest(L,20); 
pullback_confirmed=0;
current_price=close;
// 回踩確認條件(3 分鐘 K 線確認)
IF current_price > early_high THEN
    IF CLOSE[1] < early_high AND current_price >= early_high THEN
        pullback_confirmed = 1;
IF current_price < early_low THEN
    IF CLOSE[1] > early_low AND current_price <= early_low THEN
        pullback_confirmed = -1;
// 進場條件(多單)
IF pullback_confirmed = 1 AND GetSymbolInfo("買賣權")= "CALL" THEN
    BUY(1,CLOSE,label:="OTM Call");
// 進場條件(空單)
IF pullback_confirmed = -1 AND GetSymbolInfo("買賣權")= "PUT" THEN 
    BUY(1, CLOSE, label:="OTM Put");

XQ小幫手 發文於   2025/02/12

Hi 菜菜,

您好,小幫手這邊提供 SetPosition 語法版本,供您參考

Vars: early_high(0), early_low(0), pullback_confirmed(0), current_price(0);

SetTotalBar(20);  // 設定資料讀取範圍為20根K棒

early_high = Highest(GetField("最高價"), 20);  // 取最近20根K棒的最高點
early_low = Lowest(GetField("最低價"), 20);    // 取最近20根K棒的最低點
current_price = GetField("收盤價");             // 當前收盤價

// 確認多單回踩
If current_price > early_high Then
Begin
    If GetField("收盤價")[1] < early_high And current_price >= early_high Then
        pullback_confirmed = 1;  // 多單確認
End;

// 確認空單回踩
If current_price < early_low Then
Begin
    If GetField("收盤價")[1] > early_low And current_price <= early_low Then
        pullback_confirmed = -1;  // 空單確認
End;

// 進場條件(多單)
If pullback_confirmed = 1 Then
    SetPosition(1);  // 做多

// 進場條件(空單)
If pullback_confirmed = -1 Then
    SetPosition(-1);  // 做空

 

不過,小幫手用回測執行頻率3分鐘,回測區間一年,執行商品範圍是上市櫃普通股全部,沒有任何觸發,

建議您再檢視一下您的程式碼是否符合您的交易策略期待,謝謝。

XQ小幫手 發文於   2025/02/13

Hi 菜菜

您好,我們後來討論後,發現應該是 pullback_confirmed 變數無初始化導致出現交易次數為 0 的狀況。

將完整程式碼調整成以下範例後,小幫手回測就有交易次數出現了,供您參考,謝謝:

Vars: early_high(0), early_low(0), pullback_confirmed(0), current_price(0);
SetTotalBar(20);  // 設定資料讀取範圍為20根K棒
early_high = Highest(GetField("最高價"), 20);  // 取最近20根K棒的最高點
early_low = Lowest(GetField("最低價"), 20);    // 取最近20根K棒的最低點
current_price = GetField("收盤價");             // 當前收盤價
If GetField("收盤價")[1] < early_high And current_price >= early_high Then begin
pullback_confirmed = 1;  // 多單確認
end Else If GetField("收盤價")[1] > early_low And current_price <= early_low Then begin
pullback_confirmed = -1;  // 空單確認
end else
pullback_confirmed = 0; //無訊號
// 進場條件(多單)
If pullback_confirmed = 1 Then
SetPosition(1);  // 做多
// 進場條件(空單)
If pullback_confirmed = -1 Then
SetPosition(-1);  // 做空

 

  • 按讚來自於
  • hyanwu
發表回覆
Close