簡介
所有的外匯交易者或多或少都接觸過價格行為. 它不僅僅是一項圖表分析技術, 而是包含了定義未來價格可能走向的整個系統. 在本文中, 我們將詳細研究內含柱模式, 並且會基於該模式開發一個EA交易以跟蹤內含柱信息及進行交易.
關於價格行為
價格行為是一種非指標的價格移動偵測方法, 它可以使用簡單或者複雜的模式, 也可以使用輔助的圖表元件(例如水平線, 垂直線, 趨勢線, 斐波那契水平, 支撐/阻力水平等等).
乍一看來, 此方法貌似複雜, 但事實上並非如此. 這種方法現已日益流行, 因為和使用技術指標的方法相比較, 它的優勢顯而易見.
內含柱
內含柱也就是某個柱的柱體以及引線都包含在其前一個柱(母柱)的範圍之內. 內含柱的最高價比其母柱的最高價要低, 而最低價比其母柱最低價要高. 母柱和內柱構成了潛在的進入市場的模式.
這是一個兩面性的模式, 因為它可能指出趨勢的反轉或者持續.
圖 1. 內含柱
圖 2. 內含柱模式布局
內含柱規則:
內含柱模式在更高時間框架內更有意義, 例如 H4 或 D1.
此模式可能暗示趨勢的反轉, 也可能暗示趨勢的持續.
使用額外的圖形分析工具, 包括趨勢線, 支撐/阻力水平, 斐波那契水平以及其他的價格行為模式等等, 可以獲得更加清晰的進場信號.
使用掛單來避免過早或者錯誤地進入市場.
不要在平緩的市場中重複使用內含柱作為進場信號.
圖 3. 在 GBPUSD D1 圖表上定義真正的內含柱
把這些都記住後, 讓我們嘗試定義一個真正的內含柱. 在上圖中, 我們可以看到在價格陡然下降之後出現一個牛勢柱形. 但是, 這個柱整個位於前一個柱範圍之內. 另外, 此柱也位於支撐水平之上, 進一步確認了該模式. 第三點確認是這並非平緩的市場環境. 因為此模式滿足了這些規則, 它可以被確認為真實.
定義入場點並設置止損單
就這樣, 我們已經在圖表上發現了一個真正的內含柱 (圖 3). 我們應該怎樣進入市場?還有我們在哪里設置訂單的止損位呢?讓我們看圖4.
圖 4. 設置止損買入 訂單並設置止損
首先, 我們應該使用上面的例子來考慮止損水平的設置:
設置一個比母柱最高價略高的止損買入掛單(只需要高幾個點, 用於確認).
設置一個比支撐位, 也就是母柱的最低價略低的一個止損水平. 這是一個額外的保護, 以防掛單被觸發以後, 價格又回到支撐水平而反彈後再向正確方向移動.
再在略低於阻力位的地方設置獲利水平.
別忘了, 內含柱可能跟隨着趨勢的反轉或者持續, 所以我們還要設置一個止損賣出訂單.
圖 5. 設置止損賣出訂單及止損
首先, 我們應該使用上面的例子來考慮止損水平的設置:
設置一個比母柱最低價略低的止損賣出訂單(只要低幾個點, 以作確認).
在母柱最高價上方設置止損水平.
在最近的支撐水平略高處設置獲利水平.
基於內含柱交易開發一個EA交易
現在我們已經了解了定義內含柱的所有規則, 進入市場及設置止損單, 我們最終可以使用內含柱模式來實現對應的EA交易了.
從MetaTrader 4終端開啟 MetaEditor 並創建一個新的 EA 交易 (相信我不必在此方面涉及過多, 網站上已經有了很多如何創建EA交易的信息了). 在這個階段把所有的參數設置成空. 您可以按照您的喜好對它們進行命名. 結果代碼看起來如下:
//++ //| InsideBar.mq4 | //| Copyright 2015, Iglakov Dmitry. | //| cjdmitri@gmail.com | //++ #property copyright "Copyright 2015, Iglakov Dmitry." #property link "cjdmitri@gmail.com" #property version "1.00" #property strict //++ //| EA 初始化函數 | //++ int OnInit() { //- //- return(INIT_SUCCEEDED); } //++ //| EA 終止化函數 | //++ void OnDeinit(const int reason) { //- } //++ //| EA 訂單處理函數 | //++ void OnTick() { //- } //++
把模式轉換為MQL4算法
當我們創建了EA之後, 我們需要在柱關閉後定義一個內含柱. 為此, 我們會引入新的變量並為它們賦值. 參照以下代碼:
//++ //| InsideBar.mq4 | //| Copyright 2015, Iglakov Dmitry. | //| cjdmitri@gmail.com | //++ #property copyright "Copyright 2015, Iglakov Dmitry." #property link "cjdmitri@gmail.com" #property version "1.00" #property strict double open1,//第一個柱的開盤價 open2, //第二個柱的開盤價 close1, //第一個柱的收盤價 close2, //第二個柱的收盤價 low1, //第一個柱的最低價 low2, //第二個柱的最低價 high1, //第一個柱的最高價 high2; //第二個柱的最高價 //++ //| EA 初始化函數 | //++ int OnInit() { return(INIT_SUCCEEDED); } //++ //| EA 終止化函數 | //++ void OnDeinit(const int reason) { } //++ //| EA 訂單處理函數 | //++ void OnTick() { //- 定義所需的柱的價格 open1 = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits); open2 = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits); close1 = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits); close2 = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits); low1 = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits); low2 = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits); high1 = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits); high2 = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits); } //++
作為例子, 讓我們考慮母柱是熊勢柱 (柱 2), 而內含柱為牛勢柱 (柱 1)的狀況. 讓我們在 OnTick()函數體中增加一系列條件:
void OnTick() { //- 定義所需的柱的價格 open1 = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits); open2 = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits); close1 = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits); close2 = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits); low1 = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits); low2 = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits); high1 = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits); high2 = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits); //- 如果第二個柱為熊勢而第一個柱為牛勢 if(open2>close2 && //第二個柱為牛勢 close1>open1 && //第一個柱是熊勢 high2>high1 && //第二柱的最高價高於第一個柱的最高價 open2>close1 && //第二柱的開盤價高於第一柱的收盤價 low2<low1) //第二柱的最低價低於第一柱的收盤價 { //- 我們已經列出了第一柱內含於第二柱的所有條件 } }
創建可定制的變量: 止損單, 點差, 訂單過期時間, EA 幻數, 交易手數. 止損值可以不用, 因為它決定於內含柱的原則.
為這些變量增加代碼中的局部變量.
止損訂單由距離柱價位的某個距離設置. 為了實現這一點, 增加Interval變量, 作為止損訂單和最高/最低價的距離以及掛單的水平.
增加timeBarInside變量以避免在此模式上重複開啟訂單.
增加bar2size變量以確認母柱足夠大, 是當前市場並不平緩的很好的標記.
結果我們可以獲得如下代碼:
//++ //| InsideBar.mq4 | //| Copyright 2015, Iglakov Dmitry. | //| cjdmitri@gmail.com | //++ #property copyright "Copyright 2015, Iglakov Dmitry." #property link "cjdmitri@gmail.com" #property version "1.00" #property strict extern int interval = 20; //距離 extern double lot = 0.1; //手數 extern int TP = 300; //獲利 extern int magic = 555124; //幻數 extern int slippage = 2; //點差 extern int ExpDate = 48; //訂單過期小時數 extern int bar2size = 800; //柱 2 的大小 double buyPrice,//定義止損買入價位 buyTP, //止損買入單的獲利價位 buySL, //止損買入單的止損價位 sellPrice, //定義止損賣出價位 sellTP, //止損賣出單的獲利價位 sellSL; //止損賣出單的止損價位 double open1,//第一個柱的開盤價 open2, //第二個柱的開盤價 close1, //第一個柱的收盤價 close2, //第二個柱的收盤價 low1, //第一個柱的最低價 low2, //第二個柱的最低價 high1, //第一個柱的最高價 high2; //第二個柱的最高價 datetime _ExpDate=0; //定義訂單過期時間的局部變量 double _bar2size; datetime timeBarInside; //內含柱開啟的時間, 用於防止重複開單 //++ //| EA 初始化函數 | //++ int OnInit() { return(INIT_SUCCEEDED); } //++ //| EA 終止化函數 | //++ void OnDeinit(const int reason) { } //++ //| EA 訂單處理函數 | //++ void OnTick() { double _bid = NormalizeDouble(MarketInfo(Symbol(), MODE_BID), Digits); //定義低價 double _ask = NormalizeDouble(MarketInfo(Symbol(), MODE_ASK), Digits); //定義高價 double _point = MarketInfo(Symbol(), MODE_POINT); //- 定義所需的柱的價格 open1 = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits); open2 = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits); close1 = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits); close2 = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits); low1 = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits); low2 = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits); high1 = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits); high2 = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits); //- _bar2size=NormalizeDouble(((high2-low2)/_point),0); //- 如果第二個柱為熊勢而第一個柱為牛勢 if(timeBarInside!=iTime(Symbol(),Period(),1) && //此模式尚未開啟訂單 _bar2size>bar2size && //第二個柱足夠大, 說明市場並不平緩 open2>close2 && //第二個柱為牛勢 close1>open1 && //第一個柱是熊勢 high2>high1 && //第二柱的最高價高於第一個柱的最高價 open2>close1 && //第二個柱的開盤價高於第一個柱的收盤價 low2<low1) //第二個柱的最低價低於第一個柱的最低價 { //- 我們已經列出了第一柱內含於第二柱的所有條件 timeBarInside=iTime(Symbol(),Period(),1); //表明已經為此模式開啟訂單 } } //++
定義止損訂單水平
現在所有的準備工作都已完成, 我們只需要定義止損訂單水平和訂單價格了. 並且, 別忘了訂單過期時間的計算.
讓我們把以下代碼加入OnTick()函數體:
buyPrice=NormalizeDouble(high2+interval*_point,Digits); //根據距離定義訂單價格 buySL=NormalizeDouble(low2-interval*_point,Digits); //根據距離定義止損 buyTP=NormalizeDouble(buyPrice+TP*_point,Digits); //定義獲利價位 _ExpDate=TimeCurrent()+ExpDate*60*60; //計算掛單過期時間 sellPrice=NormalizeDouble(low2-interval*_point,Digits); sellSL=NormalizeDouble(high2+interval*_point,Digits); sellTP=NormalizeDouble(sellPrice-TP*_point,Digits);
執行錯誤的修正
如果您開發過EA交易, 您也許知道當關閉訂單, 設置訂單, 包括等待時間, 不正確的止損值等等經常可能引發錯誤. 為了消除此類錯誤, 我們應該使用簡單的內部基本錯誤處理寫一個獨立的函數.
//++ //| 開啟和設置訂單的函數 | //| symbol - 訂單的交易品種 | //| cmd - 交易類型 (可能等於任何交易類型值). | //| volume - 手數. | //| price - 開單價格. | //| slippage - 市場買入或者賣出訂單的最大點差. | //| stoploss - 當虧損達到某種水平關閉倉位的價位 (如果不設止損則為0). | //| takeprofit - 當獲利達到某種水平關閉倉位的價位 (如果不設獲利則為0). | //| comment - 訂單注釋. 注釋的最後部分可能被交易服務器修改. | //| magic - 訂單幻數. 可以使用用戶自定義的ID. | //| expiration - 掛單的過期時間. | //| arrow_color - 圖表上開啟訂單的箭頭顏色. 如果此參數空缺或者等於CLR_NONE, | //| 開單的箭頭在圖表上則不做顯示. | //++ int OrderOpenF(string OO_symbol, int OO_cmd, double OO_volume, double OO_price, int OO_slippage, double OO_stoploss, double OO_takeprofit, string OO_comment, int OO_magic, datetime OO_expiration, color OO_arrow_color) { int result = -1; //開啟訂單的結果 int Error = 0; //開啟訂單出錯編號 int attempt = 0; //已經進行的嘗試次數 int attemptMax = 3; //最大嘗試次數 bool exit_loop = false; //退出循環 string lang=TerminalInfoString(TERMINAL_LANGUAGE); //交易終端語言, 為了定義消息的語言 和double stopllvl=NormalizeDouble(MarketInfo(OO_symbol,MODE_STOPLEVEL)*MarketInfo(OO_symbol,MODE_POINT),Digits); //最小止損/獲利水平點數 //本模塊提供了安全的訂單開啟功能. //- 檢查買入訂單 if(OO_cmd==OP_BUY || OO_cmd==OP_BUYLIMIT || OO_cmd==OP_BUYSTOP) { double tp = (OO_takeprofit - OO_price)/MarketInfo(OO_symbol, MODE_POINT); double sl = (OO_price - OO_stoploss)/MarketInfo(OO_symbol, MODE_POINT); if(tp>0 && tp<=stopllvl) { OO_takeprofit=OO_price+stopllvl+2*MarketInfo(OO_symbol,MODE_POINT); } if(sl>0 && sl<=stopllvl) { OO_stoploss=OO_price -(stopllvl+2*MarketInfo(OO_symbol,MODE_POINT)); } } //- 檢查賣出訂單 if(OO_cmd==OP_SELL || OO_cmd==OP_SELLLIMIT || OO_cmd==OP_SELLSTOP) { double tp = (OO_price - OO_takeprofit)/MarketInfo(OO_symbol, MODE_POINT); double sl = (OO_stoploss - OO_price)/MarketInfo(OO_symbol, MODE_POINT); if(tp>0 && tp<=stopllvl) { OO_takeprofit=OO_price -(stopllvl+2*MarketInfo(OO_symbol,MODE_POINT)); } if(sl>0 && sl<=stopllvl) { OO_stoploss=OO_price+stopllvl+2*MarketInfo(OO_symbol,MODE_POINT); } } //- while 循環 while(!exit_loop) { result=OrderSend(OO_symbol,OO_cmd,OO_volume,OO_price,OO_slippage,OO_stoploss,OO_takeprofit,OO_comment,OO_magic,OO_expiration,OO_arrow_color); //嘗試使用指定的參數下單 //- 如果開啟訂單出錯 if(result<0) { Error = GetLastError(); //給錯誤碼賦值 switch(Error) //枚舉錯誤 { //關閉訂單出錯的枚舉, 並嘗試修複錯誤 case 2: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 Sleep(3000); //延遲3秒 RefreshRates(); break; //退出 switch } if(attempt==attemptMax) { attempt=0; //把嘗試次數重設為0 exit_loop = true; //退出 while break; //退出 switch } case 3: RefreshRates(); exit_loop = true; //退出 while break; //退出 switch case 4: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 Sleep(3000); //延遲3秒 RefreshRates(); break; //退出 switch } if(attempt==attemptMax) { attempt = 0; //把嘗試次數重設為0 exit_loop = true; //退出 while break; //退出 switch } case 5: exit_loop = true; //退出 while break; //退出 switch case 6: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 Sleep(5000); //延遲5秒 break; //退出 switch } if(attempt==attemptMax) { attempt = 0; //把嘗試次數重設為0 exit_loop = true; //退出 while break; //退出 switch } case 8: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 Sleep(7000); //延遲7秒 break; //退出 switch } if(attempt==attemptMax) { attempt = 0; //把嘗試次數重設為0 exit_loop = true; //退出 while break; //退出 switch } case 64: exit_loop = true; //退出 while break; //退出 switch case 65: exit_loop = true; //退出 while break; //退出 switch case 128: Sleep(3000); RefreshRates(); continue; //退出 switch case 129: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 Sleep(3000); //延遲3秒 RefreshRates(); break; //退出 switch } if(attempt==attemptMax) { attempt = 0; //把嘗試次數重設為0 exit_loop = true; //退出 while break; //退出 switch } case 130: exit_loop=true; //退出 while break; case 131: exit_loop = true; //退出 while break; //退出 switch case 132: Sleep(10000); //延遲10秒 RefreshRates(); //更新數據 //exit_loop = true; //退出 while break; //退出 switch case 133: exit_loop=true; //退出 while break; //退出 switch case 134: exit_loop=true; //退出 while break; //退出 switch case 135: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 RefreshRates(); break; //退出 switch } if(attempt==attemptMax) { attempt = 0; //把嘗試次數設為0 exit_loop = true; //退出 while break; //退出 switch } case 136: if(attempt<attemptMax) { attempt=attempt+1; //再多嘗試一次 RefreshRates(); break; //退出 switch } if(attempt==attemptMax) { attempt = 0; //把嘗試次數設為0 exit_loop = true; //退出 while break; //退出 switch } case 137: if(attempt<attemptMax) { attempt=attempt+1; Sleep(2000); RefreshRates(); break; } if(attempt==attemptMax) { attempt=0; exit_loop=true; break; } case 138: if(attempt<attemptMax) { attempt=attempt+1; Sleep(1000); RefreshRates(); break; } if(attempt==attemptMax) { attempt=0; exit_loop=true; break; } case 139: exit_loop=true; break; case 141: Sleep(5000); exit_loop=true; break; case 145: exit_loop=true; break; case 146: if(attempt<attemptMax) { attempt=attempt+1; Sleep(2000); RefreshRates(); break; } if(attempt==attemptMax) { attempt=0; exit_loop=true; break; } case 147: if(attempt<attemptMax) { attempt=attempt+1; OO_expiration=0; break; } if(attempt==attemptMax) { attempt=0; exit_loop=true; break; } case 148: exit_loop=true; break; default: Print("錯誤: ",Error); exit_loop=true; //退出 while break; //其他選項 } } //- 如果沒有發現出錯 else { if(lang == "Russian") {Print("Ордер успешно открыт. ", result);} if(lang == "English") {Print("The order is successfully opened.", result);} Error = 0; //把錯誤碼重設為0 break; //退出 while //errorCount =0; //把嘗試次數設為0 } } return(result); } //++
結果我們可以獲得如下代碼:
//++ //| InsideBar.mq4 | //| Copyright 2015, Iglakov Dmitry. | //| cjdmitri@gmail.com | //++ #property copyright "Copyright 2015, Iglakov Dmitry." #property link "cjdmitri@gmail.com" #property version "1.00" #property strict extern int interval = 20; //距離 extern double lot = 0.1; //手數 extern int TP = 300; //獲利 extern int magic = 555124; //幻數 extern int slippage = 2; //點差 extern int ExpDate = 48; //訂單過期小時數 extern int bar2size = 800; //柱 2 的大小 double buyPrice,//定義止損買入價位 buyTP, //止損買入單的獲利價位 buySL, //止損買入單的止損價位 sellPrice, //定義止損賣出價位 sellTP, //止損賣出單的獲利價位 sellSL; //止損賣出單的止損價位 double open1,//第一個柱的開盤價 open2, //第二個柱的開盤價 close1, //第一個柱的收盤價 close2, //第二個柱的收盤價 low1, //第一個柱的最低價 low2, //第二個柱的最低價 high1, //第一個柱的最高價 high2; //第二個柱的最高價 datetime _ExpDate=0; //定義訂單過期時間的局部變量 double _bar2size; datetime timeBarInside; //內含柱訂單開啟的柱的時間, 防止重複下單 //++ //| EA 初始化函數 | //++ int OnInit() { return(INIT_SUCCEEDED); } //++ //| EA 終止化函數 | //++ void OnDeinit(const int reason) { } //++ //| EA 訂單處理函數 | //++ void OnTick() { double _bid = NormalizeDouble(MarketInfo(Symbol(), MODE_BID), Digits); //定義低價 double _ask = NormalizeDouble(MarketInfo(Symbol(), MODE_ASK), Digits); //定義高價 double _point = MarketInfo(Symbol(), MODE_POINT); //- 定義所需的柱的價格 open1 = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits); open2 = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits); close1 = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits); close2 = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits); low1 = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits); low2 = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits); high1 = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits); high2 = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits); //- _bar2size=NormalizeDouble(((high2-low2)/_point),0); //- 如果第二個柱為熊勢而第一個柱為牛勢 if(timeBarInside!=iTime(Symbol(),Period(),1) && //此模式尚未開啟訂單 _bar2size>bar2size && //第二個柱足夠大, 說明市場並不平緩 open2>close2 && //第二個柱為牛勢 close1>open1 && //第一個柱是熊勢 high2>high1 && //第二柱的最高價高於第一個柱的最高價 open2>close1 && //第二個柱的開盤價高於第一個柱的收盤價 low2<low1) //第二個柱的最低價低於第一個柱的最低價 { buyPrice=NormalizeDouble(high2+interval*_point,Digits); //根據間隔定義的訂單價格 buySL=NormalizeDouble(low2-interval*_point,Digits); //根據間隔定義的止損價格 buyTP=NormalizeDouble(buyPrice+TP*_point,Digits); //定義獲利價位 _ExpDate=TimeCurrent()+ExpDate*60*60; //掛單過期時間的計算 sellPrice=NormalizeDouble(low2-interval*_point,Digits); sellSL=NormalizeDouble(high2+interval*_point,Digits); sellTP=NormalizeDouble(sellPrice-TP*_point,Digits); OrderOpenF(Symbol(),OP_BUYSTOP,lot,buyPrice,slippage,buySL,buyTP,NULL,magic,_ExpDate,Blue); OrderOpenF(Symbol(),OP_SELLSTOP,lot,sellPrice,slippage,sellSL,sellTP,NULL,magic,_ExpDate,Blue); //- we h*e listed all the conditions defining that the first bar is completely within the second one timeBarInside=iTime(Symbol(),Period(),1); //指出此模式已經下單 } } //++
現在讓我們進行編譯並在記錄中檢查錯誤信息.
測試EA交易
現在是時候測試我們的EA交易了. 讓我們運行策略測試期並設置輸入參數. 我設置了如下的參數:
圖 6. 測試的輸入參數
選擇一個交易品種 (在我的例子中是 CADJPY ).
請確認使用"每一訂單(Every tick)"模式, 並且定義測試將在曆史數據上進行. 我已經選擇了2014年整年的數據.
設置的時間框架是D1.
運行測試.
測試結束後檢查記錄. 我們可以看到, 過程中沒有錯誤.
以下是EA交易測試的日誌:
圖 7. EA 交易測試日誌
確認沒有出錯後優化EA交易.
優化
我選擇了如下的參數進行優化:
圖 8. 優化參數
圖 9. 優化設置
就這樣, 我們就擁有了可以使用的EA交易.
優化和測試結果
圖 10. 測試結果
圖 11. 測試結果圖
結論
我們已經開發了可用的基於內含柱交易的 EA 交易.
我們已經確認, 即使不使用額外的進場過濾器價格行為模式也是可行的.
沒有使用特殊的技巧(例如馬丁格爾或者平均).
通過止損單的正確設置, 回撤已經被減到最小.
沒有使用技術指標. 此交易機器人僅僅依賴於讀取基本圖表.
感謝您的閱讀!我希望本文會有所幫助.