Re: [問題] 想問一下一些語法怎麼寫
嗨!很高興你能提出問題。
考慮你提出的問題背後,你可能本身的背景
所以在此分享一些簡易解決辦法,應該可以暫時解決問題
(一)使用全局變數做為延遲計數
假設你的狀態變數 1 = 震盪, 2 = 上, 3 = 下
然後你現在想要當「上」發生後 10 個 Bar 再做個檢查
但是那時候可能已經不是「上」了
你可以先建立一個延遲計數的參數
int g_state_2_check_count = -1; // 這是狀態2也就是「上」的計數
這個參數預設是 -1 ,但是當它設定成 0 的時候,會開始累加
然後你可能某個時刻條件 A, B, C 達成的時候
例如:
if(condi_A == true && condi_B == true && condi_C == false)
{
g_state_2_check_count = 0; // 原本是 -1 變成 0 開始累加
}
接著你在每一個時間間隔發生時, 累加:
if(g_state_2_check_count >= 0)
{
g_state_2_check_count = g_state_2_check_count + 1;
}
所以只要沒有變成 0 ,維持在 -1 就不會累加
接著在你指定的延遲時間發生時,採取相應動作,並把記數恢復預設 -1
if(g_state_2_check_count >= 30)
{
// 在狀態 2 發生後 30 個 bar 要做的事情
// ...
// ...
g_state_2_check_count = -1 ; // 恢復 -1 不再記數
}
這個方法有許多缺點,但考量你的需求可以解決,也容易理解~
(二)使用陣列(Array)
嗯... 這部分你就要使用陣列了哦
你可以在全局變數建立一個你覺得足夠長的陣列,例如:
int g_state_buffer[10]; // buffer意思是緩衝區, 就是暫存的意思
除非你是要把數值寫檔案出來,否則盡量還是根據往回看的最大需求設定大小
接著在對應時刻把 1, 2, 3 放到陣列的第一個
if(condi_A == true ... )
{
g_state_buffer[0] = 1;
}
接著你回到整個時間開始處,在每次開始就將所有狀態往後挪一格:
for(int i = 9; i >= 0; i--)
{
g_state_buffer[i] = g_state_buffer[i-1];
}
這樣就能在每個時間都知道過去一段時間的指標變化囉~
希望對你有幫助~
※ 這個方法有較多複雜的副作用,無特別需求朋友就不要這樣做啦
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.177.141 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Trading/M.1563377759.A.87D.html
推
07/18 07:22,
5年前
, 1F
07/18 07:22, 1F
推
07/18 08:47,
5年前
, 2F
07/18 08:47, 2F
推
07/20 09:32,
5年前
, 3F
07/20 09:32, 3F
推
07/22 00:18,
5年前
, 4F
07/22 00:18, 4F
噓
09/29 22:01,
5年前
, 5F
09/29 22:01, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
Trading 近期熱門文章
PTT職涯區 即時熱門文章