逐筆洗價的間隔下單時間與多單停利後暫時休息N分鐘

  •   404 
  • 最後發表   無情卻慈悲  2022 四月 19
無情卻慈悲 發文於   2022/03/15

你好,我有一個問題一直寫不出來。

假如 

if  close > oepn then setpostion(1);

if close < open then  setpostion(-1);

以此為例,用逐筆洗價的話,它有時候剛好點位一直在反覆發生時,

就會在同一秒內快覆反覆下單,

而我想寫一個功能,就是在下單成功後,至少要隔1分鐘才能觸發反向單,

原本思路是 :

var:_do_again_time(0);

在下單成功後 →  _do_again_time = TimeAdd( time , "M", 1) ;

可是我後面怎麼寫就一樣無法做出間隔一分鐘,

同時也是要寫一個多單停利後暫時休息N分鐘,也是用此理,也是寫不出效果,

我把腳本寄到貴司信箱了喔,請收信,謝。

感謝不盡!

 

 

 

 

 

排序方式: 標準 | 最新
無情卻慈悲 發文於   2022/03/16

補充,

在討論區找到久遠前小幫手所給某發問人的範例,如下 :

if FilledRecordCount <> 0 and filled = 0 then condition1 = timeadd(FilledRecordTime(FilledRecordCount), "M", 10) <= time
    else condition1 = True;
// 距離上次出場至少隔10分鐘
condition2 = True; //進場條件,測試時直接放True

if position = 0 and filled = 0 and condition1 and condition2 then setposition(1, market);

condition3 = True; //出場條件,測試時直接放true
if position = 1 and filled = 1 and condition3 then setposition(0, market);

 

想請問,上述語法中的「else condition1 = True;」,我覺得應該不是要等於false嗎?還是我沒有理解正確?

 

無情卻慈悲 發文於   2022/03/18

另我參考這語法,它並沒有間隔一段時間才重新下單,可否一併指教呢

 

補充,

在討論區找到久遠前小幫手所給某發問人的範例,如下 :

if FilledRecordCount <> 0 and filled = 0 then condition1 = timeadd(FilledRecordTime(FilledRecordCount), "M", 10) <= time
    else condition1 = True;
// 距離上次出場至少隔10分鐘
condition2 = True; //進場條件,測試時直接放True

if position = 0 and filled = 0 and condition1 and condition2 then setposition(1, market);

condition3 = True; //出場條件,測試時直接放true
if position = 1 and filled = 1 and condition3 then setposition(0, market);

 

想請問,上述語法中的「else condition1 = True;」,我覺得應該不是要等於false嗎?還是我沒有理解正確?

 

 

 

 

 

無情卻慈悲 發文於   2022/03/21

可否協助一下?謝

無情卻慈悲 發文於   2022/03/23

有人在嗎?這篇已發問第8日了囉

 

無情卻慈悲 發文於   2022/03/27

有人在嗎?能否幫我解答一下?

 

XQ小幫手 發文於   2022/04/01

Hello 無情卻慈悲,

 

小幫手提供給其他用戶的範例,是要成交後才會去做時間間隔判斷,且進出場時有用position和filled控制。

後面的 else condition1 = True 是針對 if FilledRecordCount <> 0 所寫,如果還沒有任何成交的話,condition1也會是True。

如果是下單後就要作時間間隔的話,那麼就不能用FilledRecordTime來作,而是在條件符合時紀錄當下的時間。

附上交易中心匯出檔供您參考。

 

另外補充,小幫手在回覆問題時是從討論區後方向前回覆。(優先回覆先發問的用戶)

所以若您發問後在同一篇文章推文的話,會讓文章向前移,導致延後小幫手看到問題的時間。

由於近來問題數量不少,請您發問後多等待一陣子。

感謝。

 

附加文件

無情卻慈悲 發文於   2022/04/06

好的,我能體會您的工作量繁大 ,以後就靜等。您的回覆我先參考一下,感謝。

無情卻慈悲 發文於   2022/04/12

您好 ,

我來發問了,

1.研究一下小幫手提供的範例,我主要是想再改成寫停利後想暫時交易10分鐘,

我想請教一下,在內建的交易函數中是否有可以那種記錄一筆是停利或停損的函數嗎?

2.

您的範例中加上了 getinfo("TradeMode") = 1 ,

 getinfo("TradeMode") = 1 →回傳值為1表示目前執行的K棒處理策略部位計算區間或是即時區間,交易指令將會執行。

請問加上這一句是有什麼用意嗎?不管有沒有加,不都是在「即時區間」嗎?

 3、

雖然您之前回覆過了,但我仍不是很懂。

請問下句『else condition1 = True;』,為何else仍要等於true呢?

if _time <> 0 then condition1 = timeadd(_time, "M", _limit) <= currenttime else condition1 = True;

這樣在下單指令的語法時,不就永遠condition1沒有是false的機會嗎嗎?

if close > open and condition1 and getinfo("TradeMode") = 1 then begin

    _time = currenttime;

setposition(1);

end;

XQ小幫手 發文於   2022/04/19

Hello 無情卻慈悲,

 

1.沒有。但您可以自行設定變數來記錄最近一筆出場交易是停利還停損。

舉例來說:

var:stop_type(0);

if 停利條件 then begin

    停利;

    stop_type = 1;

    end

else if 停損條件 then begin

    停損;

    stop_type = -1;

    end;

這樣就可以用stop_type判斷最近一次出場是停利還是停損。

 

2.getinfo("TradeMode") = 1 有加的話,就不會在資料讀取筆數時運算。

 

3.if _time <> 0 then condition1 = timeadd(_time, "M", _limit) <= currenttime else condition1 = True;

這句腳本應該這樣看:

如果 _time <> 0 的話 condition1 就是判斷 timeadd(_time, "M", _limit) <= currenttime,但如果 _time = 0 的時候 condition1 = True。

也就是說,在沒有任何交易的時候 (_time = 0) condition1一定會是True,只有在有交易過 (_time <> 0 ),condition1 才會去確認之前的交易是否有經過一定時間。

發表回覆
Close