请选择 进入手机版 | 继续访问电脑版
外汇ea之家 首页  注册  登录
现在注册
已注册用户请  登录
外汇ea之家    EA发布区

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

  •   lwb731215 · 2017-8-12 00:25:21 · 831 次点击 ·阅读模式     

    马上注册,结交更多好友,下载更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    #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);
    }

    831 次点击  
    收藏  加入淘专辑0
      Reply  
    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);
               }
           }
        }
      }
    }
    //+------------------------------------------------------------------+


      Reply  
    wubo1983  2017-8-12 20:06:24 
    我愿意可以和你一起学习一下   微信 135 1523 9593
      Reply  
    lwb731215  2017-8-16 04:02:59 
    没有大神吗
    添加一条新回复
    您需要登录后才可以回帖 登录 | 注册

    本节点积分规则
    DigitalOcean  DigitalOcean  DigitalOcean
    关于我们   广告投放   我们的愿景   帮助中心   感谢   友站   外汇交易平台大全  
      最大的外汇智能交易社区!
    外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!
    快速回复 返回顶部 返回列表
    在线客服 意见反馈 常见问题 回到顶部