Open fatfingererr opened 5 years ago
我今天整理了一下 舊的 code, 整理出一個非侵入式的 MQL5 版本 只要跑出交易列表 (Trade List), 換一個 EA 再跑一次就能跑出所有 mae mfe (可以多個交易列表)
我會為這個版本錄個影片, 預計明天(7.22) 或後天 (7.23) 會放上 Youtube 到時候可以參考看看影片內容和我的 mql5 codebase (影片同時會丟出 codebase)
或許目前你心裡想的版本和我的 mql5 codebase 版本不同 其實我自己 cpp 的 code 是嵌在 trading code 裡面, 有一個 framework, 只是 enable 與否 也和我這次整理出來的 MQL5 的寫法不同, 我主要是想給不懂寫 EA 的人容易使用
我覺得最主要大概是 update 的邏輯那個區塊蠻複雜的, 誰 Updated 完要換誰 Update, 這部分至少我有 valid 過. 類似這樣 : ( 我想至少可以作為之後 Unit Test 的 Case 參考)
void TrackBuyOrderMAEMFE(const double now_entry,const double now_exit, int i) { const datetime now=TimeCurrent(); if(AStrictlyLessThanB(now_entry,g_trade_list_open_price[i])) { if(AStrictlyLessThanB(now_entry,g_entry_mae_price[i])) UpdateEntryMAEPrice(now_entry,now,i); if(AStrictlyLessThanB(now_entry,g_entry_mae_after_mfe_price[i])) UpdateEntryMAEAfterMFEPrice(now_entry,now,i); } if(AStrictlyMoreThanB(now_exit,g_exit_mfe_price[i])) { UpdateExitMFEPrice(now_exit,now,i); ResetExitMAEAfterMFEPrice(i); UpdateExitMAEBeforeMFEPrice(i); UpdateExitMFEBeforeMAEBeforeMFEPrice(i); ResetEntryMAEAfterMFEPrice(i); UpdateEntryMAEBeforeMFEPrice(i); } else if(AStrictlyLessThanB(now_exit,g_trade_list_open_price[i])) { if(AStrictlyLessThanB(now_exit,g_exit_mae_price[i])) { UpdateExitMAEPrice(now_exit,now,i); UpdateExitMFEBeforeMAEPrice(i); } if(AStrictlyLessThanB(now_exit,g_exit_mae_after_mfe_price[i])) UpdateExitMAEAfterMFEPrice(now_exit,now,i); } if(AStrictlyMoreThanB(g_exit_mfe_price[i]-now_exit,g_exit_mhl_value[i])) UpdateExitMHLPrice(now_exit,now,i); if(AStrictlyMoreThanB(now_entry,g_trade_list_open_price[i])) { if(AStrictlyMoreThanB(now_entry,g_entry_mfe_price[i])) { UpdateEntryMFEPrice(now_entry,now,i); ResetEntryMAEAfterMFEPrice(i); UpdateEntryMAEBeforeMFEPrice(i); UpdateEntryMFEBeforeMAEBeforeMFE(i); } }else if(AStrictlyLessThanB(now_entry,g_entry_mae_price[i])) { UpdateEntryMAEPrice(now_entry,now,i); UpdateEntryMFEBeforeMAEPrice(i); } if(AStrictlyMoreThanB(g_entry_mfe_price[i]-now_entry,g_entry_mhl_value[i])) UpdateEntryMHLPrice(now_entry,now,i); }
上面 entry 和 exit 的 prefix 差別是, exit 是出場用的, 是正常的 entry 是用和 entry 時的價格一樣的報價 例如 long entry 是在 ask 進場, 計算 MAEMFE 應該在 bid price, 這就是 exit prefix 反之 long entry 在 ask 但我還是用 ask 算 MAEME 這就是 entry prefix 正常的 MAEMFE 應該是用 exit 只是我多算 entry 是因為要看亞洲時間報價 ask bid spread 的影響
entry
exit
沒錯,我目前是在做離線的版本...因為我以為是order close掉之後才會計算MAE/MFE (但看起來Ricky的code是直接同步計算?)
我這邊先記錄一下還沒看影片之前的一些問題:
MAEBeforeMFE
MHL
然後我大概知道 g_ prefix應該是 global variable的意思 ~
g_
我今天整理了一下 舊的 code, 整理出一個非侵入式的 MQL5 版本 只要跑出交易列表 (Trade List), 換一個 EA 再跑一次就能跑出所有 mae mfe (可以多個交易列表)
我會為這個版本錄個影片, 預計明天(7.22) 或後天 (7.23) 會放上 Youtube 到時候可以參考看看影片內容和我的 mql5 codebase (影片同時會丟出 codebase)
或許目前你心裡想的版本和我的 mql5 codebase 版本不同 其實我自己 cpp 的 code 是嵌在 trading code 裡面, 有一個 framework, 只是 enable 與否 也和我這次整理出來的 MQL5 的寫法不同, 我主要是想給不懂寫 EA 的人容易使用
我覺得最主要大概是 update 的邏輯那個區塊蠻複雜的, 誰 Updated 完要換誰 Update, 這部分至少我有 valid 過. 類似這樣 : ( 我想至少可以作為之後 Unit Test 的 Case 參考)
上面
entry
和exit
的 prefix 差別是, exit 是出場用的, 是正常的 entry 是用和 entry 時的價格一樣的報價 例如 long entry 是在 ask 進場, 計算 MAEMFE 應該在 bid price, 這就是exit
prefix 反之 long entry 在 ask 但我還是用 ask 算 MAEME 這就是entry
prefix 正常的 MAEMFE 應該是用exit
只是我多算entry
是因為要看亞洲時間報價 ask bid spread 的影響