您现在的位置: 比特财富网 >> 财经 >  >> 外匯
外匯交易輔助EA(編寫)
外_匯_邦 WaiHuiBang.com

//=============== VARS external
extern int 第一目標點數 = 20;
extern int 第二目標與第一目標距離 = 20;
extern double 分批平倉手數 = 0.2;
//=======================================
extern bool 使用移動止損功能 = true;
extern int 第一次盈利點數 = 10;
extern int 第一次移止損距離開倉價點數 = 0;
extern int 第二次盈利點數 = 30;
extern int 第二次移止損距離開倉價點數 = 10;
//======================================
extern bool 使用最大允許虧損功能 = true;
extern int 最大虧損點數 = 20;
extern int Magic_Number=0;

//=============== VARS internal
int nextTP;
bool sl;
int range = 5;
int multiplier;
// OrderType == 1 is OP_SELL

 


//=============== FUNCTION init
int init()
  {
   sl=0;
   nextTP = 第一目標點數;
   getMaxLoss();
  }
//== end function


//=============== FUNCTION deinit
int deinit()
  {
//----
   sl=0;
   nextTP = 第一目標點數;
//----
   return(0);
  }
//== end function

//========== FUNCTION Start
int start()
  {
//----
   getOpenOrders();
   getSpread();
   //Comment(sl);
//----
   return(0);
  }
//== end function

//========== FUNCTION getPipValue
double type_order_profit(double order_openprice,int ordertype)
{
   double val;
   RefreshRates();
   if(ordertype == 1) val=(NormalizeDouble(order_openprice,Digits) - NormalizeDouble(Ask,Digits));
   else val=(NormalizeDouble(Bid,Digits) - NormalizeDouble(order_openprice,Digits));
   val = val/Point;
   return(val);  
}
//== end function

int getSpread()
{
   int spread=MarketInfo(Symbol(),MODE_SPREAD);
   return(spread);
}


int getMaxLoss()
{
   int calcMaxLoss;
   calcMaxLoss = 最大虧損點數;
   return(calcMaxLoss);
}
//========== FUNCTION getOpenOrders
void getOpenOrders()
{
   int nsl, nsd;
   string mngMagic;
   int totalorders = OrdersTotal();
   for(int j=0; j<totalorders;j++)
     { 
         OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
         if((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol()&&(Magic_Number==0 || Magic_Number == OrderMagicNumber()))
         {

            double order_profit=type_order_profit(OrderOpenPrice(),OrderType());
            //int val = OrderProfit()/(OrderLots()*10);
            if(使用最大允許虧損功能 && 最大虧損點數 > 0) killTrade(order_profit,OrderTicket());
            if(使用移動止損功能) checkStops(order_profit,OrderTicket());
            Close_at_Profit(order_profit,OrderTicket());           
           
         }
        
         if(Magic_Number == 0)
         mngMagic = "All "+Symbol()+" trades.";
         else
         mngMagic = "Trades with magic number = "+Magic_Number;
        
        
         if(sl==0)
            {
               nsl = 第一次盈利點數;
               nsd = 第一次移止損距離開倉價點數;
            }
          else
            {
               nsl = 第二次盈利點數;
               nsd = 第二次移止損距離開倉價點數;
            }
         //RefreshRates();
         Comment("Order Open: ",OrderOpenPrice(),
         "/nPip Count: ", order_profit,
         "/nNext Stop Target: ",nsl,
         "/nNext Stop Differential: ", nsd,
         "/nNext TP: ", nextTP,
         "/nSL: ",sl,
         "/nMax Loss: ", getMaxLoss(),
         "/nManaging: ",mngMagic);
        

     } 
}

//========== FUNCTION takeProfit
void Close_at_Profit(int orderprofit, int orderticket)
{
   if(OrderSelect(orderticket, SELECT_BY_TICKET)==true)
   {

      if(orderprofit >= nextTP && orderprofit < (nextTP + 第二目標與第一目標距離))
      {
         if(OrderType()==1)
         {
            if(OrderClose(orderticket, 分批平倉手數, Ask, 3, YellowGreen))
            nextTP+=第二目標與第一目標距離;
            else
            Print("Error closing order : ",GetLastError());
         }
         else
         {
            if(OrderClose(orderticket, 分批平倉手數, Bid, 3, YellowGreen))
            nextTP+=第二目標與第一目標距離;
            else
            Print("Error closing order : ",GetLastError());
         }
             
      }

   }
}

//== end function

 

//========== FUNCTION moveStops
void checkStops(int Orderprofit,int ticket)
{
   if(sl==0 && Orderprofit < 第二次盈利點數)
   {
      if(Orderprofit >= 第一次盈利點數 && Orderprofit < (第二次盈利點數))
      {
         moveStops(ticket, 第一次移止損距離開倉價點數);
      }
   }
   else if(sl==1 || Orderprofit >= 第二次盈利點數)
   {
      if(Orderprofit >= 第二次盈利點數)
      {
         moveStops(ticket,第二次移止損距離開倉價點數);
      }
   }


}

//== end function

//========== FUNCTION moveStops
void moveStops(int orderticket,int TrainingStop)
{
   if(OrderSelect(orderticket, SELECT_BY_TICKET)==true)
   {
      Print("moveStops called ",orderticket, " ",TrainingStop);
      if(OrderType()==1)
      {
      OrderModify(orderticket,OrderOpenPrice(),OrderOpenPrice()-TrainingStop*Point, OrderTakeProfit(),0,Plum);
      sl=1;
      }
      else
      {
      OrderModify(orderticket,OrderOpenPrice(),OrderOpenPrice()+TrainingStop*Point, OrderTakeProfit(),0,Plum);
      sl=1;
      }
   }
  

  
}

//== end function

//========== FUNCTION killTrades
void killTrade(int pips, int ticket)
{
   if(OrderSelect(ticket, SELECT_BY_TICKET)==true)
   {
      if(pips <= -1*getMaxLoss())
      {
         if(OrderType()==1) OrderClose(ticket,OrderLots(),Ask,3,Red);    
         else OrderClose(ticket,OrderLots(),Bid,3,Red);
      }     
   }
}

 

外_匯_邦 WaiHuiBang.com
  • 下一个财经:
    • 區塊鏈制度經濟學:從歷史到未來

      實干探索未來區塊鏈不僅僅是一種新的記賬技術,或者是密碼學技術,它本質上對應了人類向更高層級社會組織躍遷的需求。正如層級機構(如“公司”這一

    • 物流運輸--區塊鏈保障公開透明

            從經濟參考報中我們得知,此次疫情防控期間,京東與湖北省政府展開合作,承建其應急物資供應鏈管理平台

    • 使用區塊鏈技術有什麼好處?

      我們已經確定區塊鏈相對於中心化數據庫成本非常高。所以使用區塊鏈的唯一原因是去中心化,也就是說,去掉單點故障或控制。這自然意味著軟件或數據庫

    • 區塊鏈技術概述:區塊鏈系統的三層機制

      區塊鏈的系統包含三層機制:第一個最基本的,是技術架構。第二個是激勵機制。在這個生態裡面如何去激勵這個生態,可以說是經濟機制。第三個是治理機

    • Capital One應用區塊鏈協同認證系統專利

      根據美國專利商標局(USPTO)8月16日發布的一份文件,美國銀行控股公司Capital One提交了一項專利申請,在用戶認證中實施區塊鏈

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