您现在的位置: 比特财富网 >> 财经 >  >> 外匯
外匯EA智能交易使用方法
外_匯_邦 WaiHuiBang.com

交易原理:

  • Long (BUY) entry – MACD指標在零以下, 從下至上並且穿過低端的信號線。www.emoneybtc.com

 

Short (SELL) entry – MACD 指標在零以上,從上至下並且穿過頂端的信號線。

  • Long exit – 贏利上限的執行,追蹤止損的執行或當穿過 MACD 的信號線 (MACD 指標在零以上,從上至下並且穿過頂端的信號線)。
  • Short exit – 贏利上限的執行,追蹤止損的執行或當穿過 MACD 的信號線 (MACD指標在零以下, 從下至上並且穿過低端的信號線)。

    重要提示:從我們的分析上排除一些 MACD 指標微不足道的變化 (圖表上的小 ‘山丘’),我們介紹一種補充檢測‘山丘’大小的辦法如下:指標的大小應該在最低價的最後5個單元(5*Point,對於 USD/CHF = 0.0005 和 USD/JPY = 0.05).

    步驟 1 – 編寫智能交易的描述

在智能交易的導航窗口處,點擊鼠標右鍵並且選擇在菜單中的“創建新智能交易”。創建智能交易的初始提醒將會詢問你進入數據中心。在顯示窗口,填寫智能交易的名稱(名稱) – MACD Sample,作者(作者) -指出你的名字, 鏈接 (連接) -你網頁的鏈接,注解 (注解) – MACD-基本智能交易的測試范例。

  • 步驟 2 –創建程序的基本結構

    測試智能交易的源代碼將只占據一點位置,但是還是有些量經常很難抓住,特別是我們不是專業的編成工作者 – 另外,我們不需要這些描述,不是嗎? 

    一個標准智能交易的結構構想,讓我們看看以下部分的描述:

    1. 初始變量
    2. 初始數據檢測
      • 檢測圖表,圖表中的柱數
      • 檢測外部變量值:標准手, S/L, T/P, T/S
    3. 對於快速數據通道設置內部變量
    4. 檢測交易終端 – 是無效的嗎?如果是:
      • 檢測: 賬戶上的可用保證金…
      • 可能是看漲倉位 (BUY)?
        • 開設看漲倉位並退出
      • 可能是賣空倉位 (SELL)?
        • 開設賣空倉位並退出

    退出智能交易…

  • 周期循環檢驗先前開倉
    • 如果是看漲倉位
      • 應該平倉?
      • 應該重新設定追蹤止損?
    • 如果是賣空倉位
      • 應該平倉?
      • 應該重新設定追蹤止損?

    返回的結果很簡單,只有4種。

    現在讓我們嘗試一步一步地區完成列出的計劃:

    1. 初始變量
      所有使用在智能交易程序中的變量必須按照 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;
    2. 檢測初始數據
      該代碼部分通常使用在所有的智能交易中。因為是一個標准的檢測:

       

      // 初始數據檢測// 確認智能交易運行正常非常重要//圖表和用戶設置不能出現任何錯誤// 變量(Lots, StopLoss, TakeProfit,// TrailingStop) 我們的情況需要檢測TakeProfit// 圖表中少於100 柱   if(Bars<100)     {      Print("少於 100柱");      return(0);     }   if(TakeProfit<10)     {      Print("贏利少於10");      return(0);  // 檢測TakeProfit     }
    3. 對於數據的快速通道設置內部變量
      在源代碼中經常需要注意指標值或計算值。簡化代碼和數據放置在內部變量中。

       

      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。

    4. 檢測交易終端 –是空的嗎?如果是:
      在我們的智能交易中,我們僅使用開單和操作掛單。不過,使更安全,我們來認識一種 對於先前定單交易終端檢測:

       

         total=OrdersTotal();   if(total<1)     {
      • 檢測: 賬戶上的可用保證金…
        在分析市場狀況之前,檢測你的賬戶上可用的自由保證金可以開倉。

         

              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);        }
        return(0); }
    5. 周期循環檢驗先前開倉
      //進入市場的正確性非常重要// 但是更重要的是安全退出...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 //賣空倉位  {
        • 應該平倉嗎?
          退出賣空倉位的條件: 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);        }     }  }

        關閉所有殘留開倉。

                 }      }   } return(0);}

這樣一步一步地編寫我們的智能交易…

步驟3 – 集中程序的結果代碼

讓我們打開智能交易的設定:使用按鈕打開”屬性…”菜單。在窗口內指定運行參量的外部設定:

從先前部分集中全部代碼:

 

//+------------------------------------------------------------------+//|                                                  MACD Sample.mq4 |//|                      Copyright © 2005, MetaQuotes Software Corp. |//|                                       http://www.metaquotes.net/ |//+------------------------------------------------------------------+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) if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&         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("錯誤BUY定單開倉 : ",GetLastError());         return(0);        }      // 盡可能檢測賣空倉位(SELL)      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&         MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)        {         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);        }      return(0);     }   // 正確進入市場很重要,   // 但正確退出市場更重要...   for(cnt=0;cnt<total;cnt++)     {      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);      if(OrderType()<=OP_SELL &&   // 檢測開倉         OrderSymbol()==Symbol())  // 檢測貨幣對        {         if(OrderType()==OP_BUY)   // 看漲倉位開倉           {            // 需要平倉嗎?            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&               MacdCurrent>(MACDCloseLevel*Point))                {                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //平倉                 return(0); // 退出                }            // 檢測追蹤止損            if(TrailingStop>0)              {               if(Bid-OrderOpenPrice()>Point*TrailingStop)                 {                  if(OrderStopLoss()<Bid-Point*TrailingStop)                    {                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);                     return(0);                    }                 }              }           }         else // 去賣空倉位           {            // 需要平倉嗎?            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(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);                    }                 }              }           }        }     }   return(0);  }// 結束

對於最後智能交易的確認,只需要指定外部變量值 “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.com
  • 香港黃金期貨一手是多少克

        香港黃金期貨就是國際黃金期貨,它與芝加哥商業交易所/紐約黃金期貨11年2月份的黃金期貨合約價格是一樣的,一手是

  • 期貨黃金漲停賺多少

        在全倉單一品種單一合約單邊的情況下,如果不做pz且不做日內操作的情況下是不能翻倍的,因期貨交易所要求的保證金比

  • 外匯新手對外匯交易系統有哪些誤區?

      外匯交易系統是炒外匯需要的完整的交易規則和體系,缺少外匯交易系統的外匯交易是無法進行穩定長久的獲利的。一些炒外匯新手入門學習外匯

  • 抖音小店在哪裡進入?

    最佳答案: 抖音小店可以在商家後台進入,可以選擇今日頭條、郵箱/手機、抖音賬號、火山賬號等任何一種渠

  • 抖音小店需要對公賬戶嗎?

    最佳答案: 抖音小店的申請主體可以是個人、個體工商戶、企業等,不同的申請主體需要的申請條件不同,其中

  風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
比特財富網 版權所有 © www.emoneybtc.com