16评论

3收藏

一款多货币对EA,请高手给上中文详细注释,附上源码

avatar lwb731215 | 3369 人阅读 | 16 人评论 | 2017-08-12

#property copyright "5美金炒外汇黄金,白送的http://goo.gl/sGDvh"
#property link      "http://www.forex4you.cn/?affid=491fbb3"




#import "stdlib.ex4"
   string ErrorDescription(int a0);
#import
extern string HeadLine = "外汇投资开户qq63511088";
extern string BuyBlock = "无交易员美分账户开户http://www.forex4you.cn/?affid=491fbb3群84446947";


extern bool Trade_on_all_currencies = TRUE;
extern int Trade_on_TimeFrame = 60;
extern double LotSize = 0.1;
extern int Max_Spread_pips = 10;
extern int Max_StopLevel_pips = 30;
extern bool UseTrailingStop = TRUE;
extern int Trailing_Step = 15;
extern int Manual_Stop_Loss = 50;
extern int Take_Profit = 0;
extern int Slip_page = 2;
extern int MagicNumber = 19881;
extern int ADX.Period = 14;
extern int BB.Period = 20;
extern int BB.Deviation = 2;
extern int MA.Period = 20;
extern int MA.Method = 0;
extern int MA.Price = 0;
extern double SAR.Step = 0.02;
extern double SAR.Max = 0.2;
extern int SignalBar = 1;
string gsa_168[];
int gia_172[];
int g_slippage_176 = 0;
int gi_180 = 0;
int gi_184 = 0;
int gi_unused_188 = -1;
string gs_200;
int g_datetime_208 = 0;


int init() {
   int li_0;
   int li_4;
   if (Trade_on_all_currencies) {
      li_0 = f0_2();
      li_4 = f0_6();
      gs_200 = gs_200 + "H1 Multitrader EA Loaded on " + li_4 + " of " + li_0 + " currency pairs.\n";
   } else {
      ArrayResize(gsa_168, 1);
      gsa_168[0] = Symbol();
      gs_200 = gs_200 + "H1 Multitrader EA Loaded only on " + gsa_168[0]
      + "\n";
   }
   gs_200 = gs_200 + "H1 Multitrader EA Loaded on " + Trade_on_TimeFrame + "m. time frame.\n";
   if (IsTradeAllowed()) gs_200 = gs_200 + " @ Live Trading Enabled @";
   if (!IsTradeAllowed()) gs_200 = gs_200 + " @ Alerts Mode Only @";
   ArrayResize(gia_172, ArraySize(gsa_168));
   return (0);
}


int deinit() {
   Comment("");
   gs_200 = "";
   return (0);
}


int start() {
ads();
   string ls_unused_0;
   double icustom_12;
   double icustom_20;
   if (f0_0(10)) {
      for (int index_8 = 0; index_8 < ArraySize(gsa_168); index_8++) {
         if (MarketInfo(gsa_168[index_8], MODE_DIGITS) == 5.0 || MarketInfo(gsa_168[index_8], MODE_DIGITS) == 3.0) {
            g_slippage_176 = 10 * Slip_page;
            gi_180 = 10 * Manual_Stop_Loss;
            gi_184 = 10 * Take_Profit;
         } else {
            g_slippage_176 = Slip_page;
            gi_180 = Manual_Stop_Loss;
            gi_184 = Take_Profit;
         }
         Comment(gs_200
         + "\n Scanning " + gsa_168[index_8] + " , period: " + Trade_on_TimeFrame + " min.");
         icustom_12 = iCustom(gsa_168[index_8], Trade_on_TimeFrame, "Momentum Indicator", ADX.Period, BB.Period, BB.Deviation, MA.Period, MA.Method, MA.Price, SAR.Step, SAR.Max,
            0, SignalBar);
         icustom_20 = iCustom(gsa_168[index_8], Trade_on_TimeFrame, "Momentum Indicator", ADX.Period, BB.Period, BB.Deviation, MA.Period, MA.Method, MA.Price, SAR.Step, SAR.Max,
            1, SignalBar);
         if (icustom_12 > 0.0 && icustom_12 != EMPTY_VALUE) {
            f0_7(OP_SELL, gsa_168[index_8]);
            if (!f0_3(-1, gsa_168[index_8])) f0_4("外汇投资qq63511088", gsa_168[index_8]);
            if (gia_172[index_8] != 0) {
               Alert(gsa_168[index_8] + "  BUY Signal @ " + DoubleToStr(MarketInfo(gsa_168[index_8], MODE_ASK), MarketInfo(gsa_168[index_8], MODE_DIGITS)));
               gia_172[index_8] = 0;
            }
         }
         if (icustom_20 > 0.0 && icustom_20 != EMPTY_VALUE) {
            f0_7(OP_BUY, gsa_168[index_8]);
            if (!f0_3(-1, gsa_168[index_8])) f0_5("外汇投资qq63511088", gsa_168[index_8]);
            if (gia_172[index_8] != 1) {
               Alert(gsa_168[index_8] + "  SELL Signal @ " + DoubleToStr(MarketInfo(gsa_168[index_8], MODE_BID), MarketInfo(gsa_168[index_8], MODE_DIGITS)));
               gia_172[index_8] = 1;
            }
         }
      }
   }
   f0_1();
   Comment(gs_200);
   return (0);
}


int f0_6() {
   string lsa_0[];
   int li_4;
   int li_8;
   for (int index_12 = 0; index_12 < ArraySize(gsa_168); index_12++) {
      if (MarketInfo(gsa_168[index_12], MODE_DIGITS) == 3.0 || MarketInfo(gsa_168[index_12], MODE_DIGITS) == 5.0) {
         li_4 = 10 * Max_Spread_pips;
         li_8 = 10 * Max_StopLevel_pips;
      } else {
         li_4 = Max_Spread_pips;
         li_8 = Max_StopLevel_pips;
      }
      if (MarketInfo(gsa_168[index_12], MODE_SPREAD) <= li_4 && MarketInfo(gsa_168[index_12], MODE_STOPLEVEL) <= li_8 && MarketInfo(gsa_168[index_12], MODE_PROFITCALCMODE) == 0.0 &&
         StringFind(gsa_168[index_12], "XAU") < 0 && StringFind(gsa_168[index_12], "XAG") < 0) {
         ArrayResize(lsa_0, ArraySize(lsa_0) + 1);
         lsa_0[ArraySize(lsa_0) - 1] = gsa_168[index_12];
      }
   }
   ArrayResize(gsa_168, ArraySize(lsa_0));
   for (int index_16 = 0; index_16 < ArraySize(lsa_0); index_16++) gsa_168[index_16] = lsa_0[index_16];
   ArrayResize(lsa_0, 0);
   return (ArraySize(gsa_168));
}


void f0_1() {
   int li_0;
   if (Trailing_Step <= 0 || UseTrailingStop == FALSE) return;
   for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
      if (OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber) {
         if (MarketInfo(OrderSymbol(), MODE_DIGITS) == 5.0 || MarketInfo(OrderSymbol(), MODE_DIGITS) == 3.0) li_0 = 10 * Trailing_Step;
         else li_0 = Trailing_Step;
         if (MarketInfo(OrderSymbol(), MODE_STOPLEVEL) > li_0) li_0 = MarketInfo(OrderSymbol(), MODE_STOPLEVEL);
         if (OrderType() == OP_BUY && MarketInfo(OrderSymbol(), MODE_BID) > OrderOpenPrice() + li_0 * MarketInfo(OrderSymbol(), MODE_POINT)) {
            if (OrderStopLoss() < OrderOpenPrice()) {
               if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Yellow))) break;
               Print(OrderSymbol(), " Error modifying buy trade ", OrderTicket(), ". Error: ", ErrorDescription(GetLastError()));
               return;
            }
            if (MarketInfo(OrderSymbol(), MODE_BID) - OrderStopLoss() > 2.0 * (MarketInfo(OrderSymbol(), MODE_POINT) * li_0))
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss() + MarketInfo(OrderSymbol(), MODE_POINT) * li_0, OrderTakeProfit(), 0, Yellow)) Print(OrderSymbol(), " Error modifying buy trade ", OrderTicket(), ". Error: ", ErrorDescription(GetLastError()));
         }
         if (OrderType() == OP_SELL && MarketInfo(OrderSymbol(), MODE_ASK) < OrderOpenPrice() - li_0 * MarketInfo(OrderSymbol(), MODE_POINT)) {
            if (OrderStopLoss() > OrderOpenPrice() || OrderStopLoss() < MarketInfo(OrderSymbol(), MODE_POINT)) {
               if (!(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Yellow))) break;
               Print(OrderSymbol(), " Error modifying sell trade ", OrderTicket(), ". Error: ", ErrorDescription(GetLastError()));
               return;
            }
            if (OrderStopLoss() - MarketInfo(OrderSymbol(), MODE_ASK) > 2.0 * (MarketInfo(OrderSymbol(), MODE_POINT) * li_0))
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss() - MarketInfo(OrderSymbol(), MODE_POINT) * li_0, OrderTakeProfit(), 0, Yellow)) Print(OrderSymbol(), " Error modifying sell trade ", OrderTicket(), ". Error: ", ErrorDescription(GetLastError()));
         }
      }
   }
}


int f0_4(string a_comment_0, string a_symbol_8) {
   double price_24;
   double price_32;
   int ticket_16 = -1;
   int count_20 = 0;
   if (IsTradeContextBusy()) {
      Print("Warning: Trade Context Busy!\nOrders can not be executed");
      return (0);
   }
   while (ticket_16 <= 0 && count_20 < 5) {
      RefreshRates();
      price_32 = MarketInfo(a_symbol_8, MODE_ASK) + gi_184 * MarketInfo(a_symbol_8, MODE_POINT);
      if (price_32 < MarketInfo(a_symbol_8, MODE_BID) + MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT)) price_32 = MarketInfo(a_symbol_8, MODE_BID) + MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT);
      if (gi_184 < MarketInfo(a_symbol_8, MODE_POINT)) price_32 = 0;
      price_24 = iLow(a_symbol_8, Trade_on_TimeFrame, SignalBar);
      if (MarketInfo(a_symbol_8, MODE_ASK) - price_24 < gi_180 * MarketInfo(a_symbol_8, MODE_POINT)) price_24 = MarketInfo(a_symbol_8, MODE_ASK) - gi_180 * MarketInfo(a_symbol_8, MODE_POINT);
      if (price_24 > MarketInfo(a_symbol_8, MODE_BID) - MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT)) price_24 = MarketInfo(a_symbol_8, MODE_BID) - MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT);
      if (!IsTradeAllowed()) return (0);
      ticket_16 = OrderSend(a_symbol_8, OP_BUY, LotSize, MarketInfo(a_symbol_8, MODE_ASK), g_slippage_176, 0, 0, a_comment_0, MagicNumber, 0, Blue);
      if (GetLastError() == 132/* MARKET_CLOSED */) {
         Print(a_symbol_8, " Unable to open buy trade! Market is CLOSED!");
         return (0);
      }
      if (ticket_16 <= 0) Sleep(500);
      count_20++;
   }
   if (ticket_16 > 0 && OrderSelect(ticket_16, SELECT_BY_TICKET)) {
      if (!(price_24 > 0.0 || price_32 > 0.0)) return (1);
      while (!OrderModify(OrderTicket(), OrderOpenPrice(), price_24, price_32, 0, CLR_NONE) && count_20 < 10) {
         Print(a_symbol_8, " Unable to set SL/TP! Error: ", ErrorDescription(GetLastError()));
         Print("Ask: " + MarketInfo(a_symbol_8, MODE_ASK), " SL: ", price_24, " TP: ", price_32);
         count_20++;
         Sleep(500);
      }
      return (1);
   }
   Print(a_symbol_8, " Unable to open buy trade! Error: ", ErrorDescription(GetLastError()));
   return (0);
}


int f0_5(string a_comment_0, string a_symbol_8) {
   double price_24;
   double price_32;
   int ticket_16 = -1;
   int count_20 = 0;
   if (IsTradeContextBusy()) {
      Print("Warning: Trade Context Busy!\nOrders can not be executed");
      return (0);
   }
   while (ticket_16 <= 0 && count_20 < 5) {
      RefreshRates();
      price_32 = MarketInfo(a_symbol_8, MODE_BID) - gi_184 * MarketInfo(a_symbol_8, MODE_POINT);
      if (price_32 > MarketInfo(a_symbol_8, MODE_ASK) - MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT)) price_32 = MarketInfo(a_symbol_8, MODE_ASK) - MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT);
      if (gi_184 < MarketInfo(a_symbol_8, MODE_POINT)) price_32 = 0;
      price_24 = iHigh(a_symbol_8, Trade_on_TimeFrame, SignalBar);
      if (price_24 - MarketInfo(a_symbol_8, MODE_BID) < gi_180 * MarketInfo(a_symbol_8, MODE_POINT)) price_24 = MarketInfo(a_symbol_8, MODE_BID) + gi_180 * MarketInfo(a_symbol_8, MODE_POINT);
      if (price_24 > 0.0 && price_24 < MarketInfo(a_symbol_8, MODE_ASK) + MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT)) price_24 = MarketInfo(a_symbol_8, MODE_ASK) + MarketInfo(a_symbol_8, MODE_STOPLEVEL) * MarketInfo(a_symbol_8, MODE_POINT);
      if (!IsTradeAllowed()) return (0);
      ticket_16 = OrderSend(a_symbol_8, OP_SELL, LotSize, MarketInfo(a_symbol_8, MODE_BID), g_slippage_176, 0, 0, a_comment_0, MagicNumber, 0, Red);
      if (GetLastError() == 132/* MARKET_CLOSED */) {
         Print(a_symbol_8, " Unable to open sell trade! Market is CLOSED!");
         return (0);
      }
      if (ticket_16 <= 0) Sleep(500);
      count_20++;
   }
   if (ticket_16 > 0 && OrderSelect(ticket_16, SELECT_BY_TICKET)) {
      if (!(price_24 > 0.0 || price_32 > 0.0)) return (1);
      while (!OrderModify(OrderTicket(), OrderOpenPrice(), price_24, price_32, 0, CLR_NONE) && count_20 < 10) {
         Print(a_symbol_8, " Unable to set SL/TP! Error: ", ErrorDescription(GetLastError()));
         Print("Bid: ", MarketInfo(a_symbol_8, MODE_BID), " SL: ", price_24, " TP: ", price_32);
         count_20++;
         Sleep(500);
      }
      return (1);
   }
   Print(a_symbol_8, " Unable to open sell trade! Error: ", ErrorDescription(GetLastError()));
   return (0);
}


void f0_7(int a_cmd_0, string a_symbol_4) {
   int li_12;
   bool is_closed_16 = FALSE;
   for (int pos_20 = OrdersTotal() - 1; pos_20 >= 0; pos_20--) {
      if (OrderSelect(pos_20, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == a_symbol_4 && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == a_cmd_0) {
            while (!IsTradeAllowed()) Sleep(100);
            while (IsTradeContextBusy()) Sleep(100);
            while (!is_closed_16 && li_12 < 5) {
               RefreshRates();
               is_closed_16 = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), g_slippage_176, White);
               li_12++;
               Sleep(500);
            }
         }
      }
   }
}


int f0_2() {
   string name_8 = "symbols.sel";
   int file_16 = FileOpenHistory(name_8, FILE_BIN|FILE_READ);
   if (file_16 < 0) return (-1);
   int li_ret_4 = (FileSize(file_16) - 4) / 128;
   int li_0 = 116;
   ArrayResize(gsa_168, li_ret_4);
   FileSeek(file_16, 4, SEEK_SET);
   for (int index_20 = 0; index_20 < li_ret_4; index_20++) {
      gsa_168[index_20] = FileReadString(file_16, 12);
      FileSeek(file_16, li_0, SEEK_CUR);
   }
   FileClose(file_16);
   return (li_ret_4);
}


int f0_0(int ai_0) {
   int datetime_4 = TimeCurrent();
   if (datetime_4 - g_datetime_208 > ai_0) {
      g_datetime_208 = datetime_4;
      return (1);
   }
   return (0);
}


bool f0_3(int a_cmd_0, string a_symbol_4) {
   for (int pos_12 = OrdersTotal() - 1; pos_12 >= 0; pos_12--) {
      if (OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == a_symbol_4 && OrderMagicNumber() == MagicNumber)
         if (OrderType() == a_cmd_0 || a_cmd_0 == -1) return (TRUE);
   }
   for (pos_12 = OrdersHistoryTotal() - 1; pos_12 >= 0; pos_12--) {
      if (OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == a_symbol_4 && OrderMagicNumber() == MagicNumber)
         if (OrderType() == a_cmd_0 || a_cmd_0 == -1 && iBarShift(a_symbol_4, Trade_on_TimeFrame, OrderOpenTime(), TRUE) == 0) return (TRUE);
   }
   return (FALSE);
}


void SetLab(string name, int x, int y, int corner, string text, int fontsize, string fontname, color clr = -1) {
   ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name, OBJPROP_XDISTANCE, x);
   ObjectSet(name, OBJPROP_YDISTANCE, y);
   ObjectSet(name, OBJPROP_CORNER, corner);
   ObjectSetText(name, text, fontsize, fontname, clr);
}


void ads() {
   SetLab("ads03", 20, 15, 2,  "外汇投资开户qq63511088", 14, "Arial", Aqua);
}

""
还没有人打赏,支持一下

评论|共 16 个

lwb731215

发表于 2017-8-12 00:31:17 | 显示全部楼层

或者有高手能帮我把我在用的这个EA改成多货币对吗?源码如下:

//[EA]MA经修改可赢利的
//写法很标准,多处可借签.

#define MAGICMA 20100604
//+------------------------------------------------------------------+

extern int    检查均线模式     = 4;                                                                      //1~4 种下单方式  1 仅开仓, 2 有止损无止赢, 3 有止赢无止损, 4 有止赢也有止损
extern double 赢利目标         = 350;                                                                    //
extern double 止损             = 130;                                                                     //
extern double 最大风险         = 0.3;                                                                    //资金控制,控制下单量
extern double 跟踪止损         = 100;                                                                     //
extern int    最大开仓次数     = 3;                                                                      //最多开仓次数限制
extern double 最大手数         = 0.1;                                                                    //最多单仓持仓量限制
extern int    是否允许跟踪止赢 = 1;                                                                      //非零就允许跟踪止赢
extern int    小均线周期=7;
extern int    中均线周期=23;
extern int    大均线周期=55;

int i,
    p2,
    xxx,
    p1,
    res;
double 手数;
datetime 最后时间;                                                                                       //时间控制, 仅当一个时间周期完成才检查条件

//+----------------------初始化-------------------------------------+

int init()      
  {
   手数 = 1;
   最后时间 = NULL;
   return(0);
  }

//+---------------------反初始化-------------------------------------+

int deinit() { return(0); }

//+---------------------主程序---------------------------------------+


int start()
  {
   开仓前检查子();                                                                                       //开仓 平仓 条件检查 和操作

   if (是否允许跟踪止赢>0)   跟踪止损设置子();                                                                      //跟踪止赢
   return(0);
   }

//+-------确定下单量 子函数()----------------------------------------+

double 手数最佳化子()
{
double lot =手数;

//MarketInfo(Symbol(),MODE_MINLOT);     相关信息
//MarketInfo(Symbol(),MODE_MAXLOT);
//MarketInfo(Symbol(),MODE_LOTSTEP);
lot=NormalizeDouble(最大风险 * AccountBalance()/AccountLeverage(),1);                                    //开仓量计算
if(lot<0.1)  lot=0.1;
if(lot>最大手数)  lot=最大手数;
return(lot);
}

//----------平买 单子函数()------------------------------------------+

void 平买子()
{
if (OrdersTotal() > 0 )   
  {
  for(i=OrdersTotal()-1; i>=0; i--)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
    if(OrderType()==OP_BUY)
      {
      OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
      Sleep(5000);
      }
    }
  }
}
//------------平卖 子函数()-------------------------------------------+

void 平卖子()
{
if (OrdersTotal( ) > 0 )   
{
  for(i=OrdersTotal()-1;i>=0;i--)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
  if(OrderType()==OP_SELL)
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
    Sleep(5000);
    }
  }
}
}

//-----------------买卖平条件 子函数()------------------------------------------------+

int 买卖平条件子()                                                                                        // 在这个函数时可以更改设置你的交易信号 ( 这里使用MACD 和MA 做例子)
   {
    double 小均线1, 小均线2, 中均线, 大均线;

             小均线1= iMA(NULL,0,小均线周期, 0,MODE_SMA,PRICE_MEDIAN,0);
             小均线2= iMA(NULL,0,小均线周期, 0,MODE_SMA,PRICE_MEDIAN,1);
             中均线= iMA(NULL,0,中均线周期, 0,MODE_SMA,PRICE_MEDIAN,0);
             大均线= iMA(NULL,0,大均线周期,0,MODE_SMA,PRICE_MEDIAN,0);


   if((小均线1>小均线2  &&Open[0]<中均线  &&Close[0]>=中均线) || (小均线1>小均线2  &&Close[1]<小均线2  &&Close[1]>中均线 &&Close[0]>=小均线1))        // 买条件 大周期时间Ma在上升,小周期均线向上转折
       return (1);                                                                                        // 返回信号值为1

   if((小均线1<小均线2  &&Open[0]>中均线  &&Close[0]<=中均线) || (小均线1<小均线2  &&Close[1]>小均线2  &&Close[1]<中均线 &&Close[0]<=小均线1))         // 卖条件
       return (-1);                                                                                       // 卖信号
return (0);                                                                                               // 若上述信号值没有,则返回不交易信号0
}

//+---------------开仓前内容的检查 子函数()-------------------------+

int 现在买卖 = 0;

void 开仓前检查子()
{
if (Time[0] == 最后时间 ) return;                                                                         // 如果现在开盘时间与最后时间不同,则将现在的开盘时间赋给最后时间
最后时间 = Time[0];
现在买卖 = 买卖平条件子();                                                                                //将变量赋为 获取买卖条件子函数的信号值

if (现在买卖 == 1)                                                                                        //买 先结束已卖的
    平卖子();
if (现在买卖 == -1)                                                                                       //卖 先结束已买的
    平买子();

if (TimeDayOfWeek( TimeCurrent() )==1)                                                                    //如果 服务器时间的星期数为周一
  {
  if (TimeHour( TimeCurrent() ) <3 ) return;                                                              //且服务器的时间小时数在3点前,则不进行交易
  }
if (TimeDayOfWeek( TimeCurrent() )==5)
  {
  if (TimeHour( TimeCurrent() )>19 ) return;                                                              //周五晚19点后不做(服务器时间)
  }

if (OrdersTotal() >= 最大开仓次数) return ;                                                               //如果已持有开仓次数达到最大,不做  

if (现在买卖==0) return;                                                                                  //如果交易信号值为0,不交易

TradeOK();                                                                                                //去下单交易
}

//+------------------去下单交易 子函数()------------------------------+

void TradeOK()
{
int 错误 ;
if (现在买卖 == 1)                                                                                        //买信号
  {
    switch (检查均线模式)
    {
    case 1:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, 0,              0,                  "",MAGICMA,0,Blue);break;
    case 2:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, Ask-止损*Point, 0,                  "",MAGICMA,0,Blue);break;
    case 3:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, 0,              Ask+赢利目标*Point, "",MAGICMA,0,Blue);break;
    case 4:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, Ask-止损*Point, Ask+赢利目标*Point, "",MAGICMA,0,Blue);break;

    default : res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, 0,              0,                  "",MAGICMA,0,Blue);break;
    }
    if (res <=0)
    {
    错误=GetLastError();
    if(错误==134) Print("错误134 :没钱了!! ");
    if(错误==135) RefreshRates();   // 价格已发生变化
    }
    Sleep(5000);
    return ;   
  }
if (现在买卖 == -1)                                                                                       //卖信号出现
  {
    switch (检查均线模式)
    {
    case 1:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, 0,              0,                 "",MAGICMA,0,Red); break;
    case 2:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, Bid+止损*Point, 0,                 "",MAGICMA,0,Red); break;
    case 3:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, 0,              Bid-赢利目标*Point,"",MAGICMA,0,Red); break;
    case 4:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, Bid+止损*Point, Bid-赢利目标*Point,"",MAGICMA,0,Red); break;

    default : res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, 0,              0,                 "",MAGICMA,0,Red); break;
    }
    if (res <=0)
    {
    错误=GetLastError();
    if(错误==134) Print("错误134 :没钱了!!!! ");
    if(错误==135) RefreshRates();                                                                         // 价格已发生变化,再刷新一下数据
    }
    Sleep(5000);                                                                                          //等待5秒                  
    return ;   
  }
}

//+---------------------//跟踪止损 子函数---------------------------------------------+

void 跟踪止损设置子()   
{
bool 修改 = false;
for (int i=0; i<OrdersTotal(); i++)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
  if (OrderType()==OP_BUY)
    {
    if ((Bid -OrderOpenPrice()) > (跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)))                       //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
       {
      if (OrderStopLoss() < Bid -跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT))
         {
          修改 = OrderModify(OrderTicket(),
                           OrderOpenPrice(),
                           Bid - 跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT),
                           OrderTakeProfit(),
                           0,
                           Green);
         }
       }
    }
  else if (OrderType()==OP_SELL)
    {
    if ((OrderOpenPrice() -Ask) > (跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)))                       //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
       {
        if ((OrderStopLoss()) > (Ask + 跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)))
           {     
            修改 = OrderModify(OrderTicket(),
                             OrderOpenPrice(),
                             Ask + 跟踪止损*MarketInfo(OrderSymbol(),MODE_POINT),
                             OrderTakeProfit(),
                             0,
                             Tan);
           }
       }
    }
  }
}
//+------------------------------------------------------------------+


wubo1983

发表于 2017-8-12 20:06:24 | 显示全部楼层

我愿意可以和你一起学习一下   微信 135 1523 9593

lwb731215

发表于 2017-8-16 04:02:59 | 显示全部楼层

没有大神吗

jlgke48774

发表于 2020-6-7 18:42:03 | 显示全部楼层

我是来刷分的,嘿嘿

xifezhji

发表于 2020-6-7 20:28:12 | 显示全部楼层

这个很好啊,对小白来说

郁闷小甜甜

发表于 2020-6-17 21:23:23 | 显示全部楼层

我抢、我抢、我抢沙发~

月芽儿

发表于 2020-6-24 17:10:02 | 显示全部楼层

我是个凑数的。。。

169gold

发表于 2020-7-7 10:00:50 | 显示全部楼层

学习了,不错

cfxgroup

发表于 2020-8-2 18:27:33 | 显示全部楼层

谢谢楼主分享

12下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则