交易原理:
Long (BUY) entry – MACD指標在零以下, 從下至上並且穿過低端的信號線。www.emoneybtc.com
Short (SELL) entry – MACD 指標在零以上,從上至下並且穿過頂端的信號線
贏利上限的執行,追蹤止損的執行或當穿過 MACD 的信號線 (MACD 指標在零以上,從上至下並且穿過頂端的信號線)。
贏利上限的執行,追蹤止損的執行或當穿過 MACD 的信號線 (MACD指標在零以下, 從下至上並且穿過低端的信號線)。
重要提示:從我們的分析上排除一些 MACD 指標微不足道的變化 (圖表上的小 ‘山丘’),
我們介紹一種補充檢測‘山丘’大小的辦法如下:指標的大小應該在最低價的最後5個單元
(5*Point,對於 USD/CHF = 0.0005 和 USD/JPY = 0.05).
測試智能交易的源代碼將只占據一點位置,但是還是有些量經常很難抓住,特別是我們不是專業的編成工作者 – 另外,我們不需要這些描述,不是嗎?
一個標准智能交易的結構構想,讓我們看看以下部分的描述:
1、初始變量
所有使用在智能交易程序中的變量必須按照
extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26;
MetaQuotes語言4 是需要“外部變量”輔助的。外部變量可以從外部設定,在智能交易程序源代碼設定之後不可以修改。
提供一個額外的靈活性。在我們的程序中,MATrendPeriod 變量作為外部變量指定。 在程序開始我們插入這個變量。
extern double MATrendPeriod=26;
2、初始數據檢測
檢測圖表,圖表中的柱數
檢測外部變量值:標准手, S/L, T/P, T/S
3、對於快速數據通道設置內部變量
4、檢測交易終端 – 是無效的嗎?如果是:
檢測: 賬戶上的可用保證金…
可能是看漲倉位 (BUY)?
開設看漲倉位並退出
可能是賣空倉位 (SELL)?
開設賣空倉位並退出
退出智能交易····
5、周期循環檢驗先前開倉
如果是看漲倉位
應該平倉?
應該重新設定追蹤止損?
如果是賣空倉位
應該平倉?
應該重新設定追蹤止損?
返回的結果很簡單,只有4種。
現在讓我們嘗試一步一步地區完成列出的計劃:
這樣一步一步地編寫我們的智能交易…
初始變量
所有使用在智能交易程序中的變量必須按照MetaQuotes Language 4 要求的指定。這就是為什麼我們在程序的開始插入初始變量的原因extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; MetaQuotes語言4 是需要“外部變量”輔助的。外部變量可以從外部設定,在智能交易程序源代碼設定之後不可以修改。提供一個額外的靈活性。在我們的程序中,MATrendPeriod 變量作為外部變量指定。 在程序開始我們插入這個變量。extern double MATrendPeriod=26;檢測初始數據該代碼部分通常使用在所有的智能交易中。因為是一個標准的檢測:// 初始數據檢測 // 確認智能交易運行正常非常重要 //圖表和用戶設置不能出現任何錯誤 // 變量(Lots, StopLoss, TakeProfit, // TrailingStop) 我們的情況需要檢測TakeProfit // 圖表中少於100 柱 if(Bars<100) { Print("少於 100柱"); return(0); } if(TakeProfit<10) { Print("贏利少於10"); return(0); // 檢測TakeProfit }對於數據的快速通道設置內部變量在源代碼中經常需要注意指標值或計算值。簡化代碼和數據放置在內部變量中。int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total; // 簡化代碼 //數據放置在內部變量中 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);現在,用iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)代替,您可以在源代碼中使用 MacdCurrent。 檢測交易終端 –是空的嗎?如果是:在我們的智能交易中,我們僅使用開單和操作掛單。不過,使更安全,我們來認識一種 對於先前定單交易終端檢測:total=OrdersTotal(); if(total<1) {return(0); }檢測: 賬戶上的可用保證金…在分析市場狀況之前,檢測你的賬戶上可用的自由保證金可以開倉。if(AccountFreeMargin()<(1000*Lots)) { Print("沒有資金.自由保證金 = ", AccountFreeMargin()); return(0); }可能是看漲倉位 (BUY)?進入看漲倉位的條件: MACD 低於零, 向上並且穿過信號線向下。這就是我們在 MQL4中描述的 (注意我們在指標上的業務值保存在先前的變量中):// 盡可能檢測看漲倉位 (BUY) if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY 開單 : ",OrderOpenPrice()); } else Print("錯誤 opening BUY order : ",GetLastError()); return(0); }附加的檢驗‘山丘’的大小上面已經給出了描述。 MACDOpenLevel變量是一個用戶指定變量它不可能改變程序文本,但是卻有很大的靈活性。在程序開始我們插入這個變量的描述。可能是賣空倉位(SELL)?進入賣空倉位的條件: MACD高於零,向上並且穿過信號線向下。注解如下:// 盡可能的檢測賣空倉位(SELL) if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevel*Point)&& MaCurrent { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL 開單 : ",OrderOpenPrice()); } else Print("錯誤SELL定單開倉 : ",GetLastError()); return(0); } 周期循環檢驗先前開倉//進入市場的正確性非常重要 // 但是更重要的是安全退出... for(cnt=0;cnt { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // 檢驗開倉 OrderSymbol()==Symbol()) // 檢驗貨幣對 {“cnt” – ” 是一個循環的變量必須在程序開始指定如下:int cnt = 0;如果是看漲倉位if(OrderType()==OP_BUY) // 打開看張倉位 {我們停止操作符。}應該平倉嗎?退出看漲倉位的條件: MACD 穿過信號線, MACD 高於零,向上並穿過信號線向下。if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //平倉 return(0); //退出 }應該重設追蹤止損馬?我們設定追蹤止損只有在倉位盈利已經超過追蹤水平點,並且新的止損水平點好於先前的水平。// 檢測追蹤止損 if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss() { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop, OrderTakeProfit(),0,Green); return(0); } } } 如果是賣空倉位else //賣空倉位 {關閉所有殘留開倉。} } } return(0); }應該平倉嗎?退出賣空倉位的條件: MACD穿過信號線,MACD低於零,向上並且穿過信號線向下。if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //平倉 return(0); // 退出 }應該重設追蹤止損嗎?我們設定追蹤止損只有在倉位盈利已經超過追蹤水平點,並且新的止損水平點好於先前的水平。// 檢測追蹤止損 if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop, OrderTakeProfit(),0,Red); return(0); } } }這樣一步一步地編寫我們的智能交易…
讓我們打開智能交易的設定:使用按鈕打開”屬性…”菜單。在窗口內指定運行參量的外部設定:
從先前部分集中全部代碼:
//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.funion.com | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total; // 檢測初始化數據 // 確定智能交易在圖表中運行正常非常重要 // 用戶在外部變量交易中不會產生任何錯誤 // 外部變量 (標准手數, 止損,贏利, // 追蹤止損) 在這種情況下,我們檢測圖表中贏利水平要小於100 柱 if(Bars<100) { Print("少於 100柱"); return(0); } if(TakeProfit<10) { Print("贏利少於10"); return(0); // 檢測贏利水平 } // 簡化代碼和加速通道 // 數據被放置在內部變量中 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); total=OrdersTotal(); if(total<1) { // 沒有指定開單 if(AccountFreeMargin()<(1000*Lots)) { Print("沒有資金. 自由保證金 = ", AccountFreeMargin()); return(0); } // 盡可能檢測看漲倉位 (BUY)
對於最後智能交易的確認,只需要指定外部變量值 “Lots = 1″, “Stop Loss (S/L) = 0″ (not used), “Take Profit (T/P) = 120″ (appropriate for one-hour intervals), “Trailing Stop (T/S) = 30″. 當然,你可以使用自己的值。按 “編寫”按鈕,如果沒有任何錯誤信息出現 (你可以從 MetaEditor的列表中復制), 按 “保存”鍵保存智能交易。
外_匯_邦 WaiHuiBang.com2018年8月21日晚,讓一些區塊鏈幣圈媒體人凌晨三點鐘徹夜難眠。包括金色財經、火幣資訊、大炮評級、幣世界快訊服務、深鏈財經、每日幣讀、t
據美國東北大學和馬裡蘭大學分析師10月31日發布的研究報告顯示,以太坊(ETH)智能合約多樣性的缺乏對以太坊區塊鏈生態系統構成了威脅。
目前,追求零售支付系統方便性、快捷性、低成本、安全性和隱私保護的央行數字貨幣整體進程已在穩步推進中。已有一定實踐經驗的區塊鏈技術,具有
區塊鏈技術在大約十年前首次向公眾發布,但它直到去年左右才正式進入公眾意識。隨著這種意
物聯網(IoT)蓬勃發展的今天,它不僅給個人消費帶來變化,還給整個社會發展帶來了深刻變化。目前,大型的物聯網平台依靠中心化模型控制各個電子
非抵補套利(Uncovered Arbitrage)又稱不抵補套利(uncovered interest arbitrage) 非
什麼是主力大單,主力大單應該怎樣識別 一、委托大賣單解讀 一般來講這些大單賣是人為放上去的,目的就是為了壓住股價的上漲,從大賣單出現的操
外_匯_邦 WaiHuiBang.com 很多人對於量化交易和高頻交易分不清,經常混淆,下面簡單說說他們的區別。量化交易是指投資者利用計算機
最佳答案: 天貓商城的具體積分規則為:1、積分可以累積,有效期至少為1年,即從獲得開始至次年年底,逾
最佳答案: 便宜又好穿的鞋,可以這樣買:1、淘寶淘寶上每次做活動的時候一些牌子的鞋都會降價,這個可以