Board logo

标题: [MetaStock] 网格交易策略源码(MT4.0源码) [打印本页]

作者: 龙听    时间: 2018-3-9 12:58     标题: 网格交易策略源码(MT4.0源码)

MT4的网格交易法源码

  1. //+------------------------------------------------------------------+

  2. //|                                                      Grid1.1.mq4 |

  3. //|                                          Copy* 顺势加码 2006 |

  4. //|                                                |

  5. //+------------------------------------------------------------------+

  6. #property copy* "Copy* 顺势加码 2006"

  7. #property link      "bonnyshi@gmail.com"

  8. #include



  9. extern double GridStep=50;        //格幅

  10. extern double GridLength=100;   //格长

  11. double PivotPr, Multiple, i, Lots=0.1, STOPLEVEL, TP, ST;

  12. string Text="Grid";

  13. int Magic, j, BuyCount, SellCount, DTS, Ticket;

  14. //+------------------------------------------------------------------+

  15. int init()    //初始化部分将定义参数赋值: 每次在start里面都可能被赋值一次,消耗时间

  16.    

  17.     if (DTS==4)  DTS=2;

  18.        else  DTS=0;

  19.     Magic =105;

  20.     GridStep =GridStep*Point;

  21.     GridLength =GridLength*Point;

  22.     STOPLEVEL =MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

  23.     return(0);

  24.    



  25. //+------------------------------------------------------------------+

  26. int start()

  27. {

  28.     Multiple =NormalizeDouble((Bid-NormalizeDouble(Bid,DTS))/GridStep, 0); // 评rint 检查这地方出值为0  

  29.     PivotPr =NormalizeDouble(Bid,DTS) +GridStep*Multiple;

  30.     // 下网格布网

  31.     for(i=PivotPr; i>=PivotPr-GridLength; i=i-GridStep)

  32.        {

  33.         BuyCount=0; SellCount=0;

  34.         for(j=0; j

  35.            {

  36.             if(OrderSelect(j,SELECT_BY_POS)==false) return(0);

  37.   

  38.             if(OrderMagicNumber()==Magic && NormalizeDouble(OrderOpenPr(),DTS)==NormalizeDouble(i,DTS) )

  39.               {

  40.                if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT )    BuyCount++;

  41.                if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP )     SellCount++;

  42.               }

  43.            }

  44.         if(BuyCount==0)

  45.            {

  46.             TP =i+GridStep; ST=0;

  47.             if(Ask-i>=STOPLEVEL)

  48.               {

  49.               Ticket =OrderSend(Symbol(),OP_BUYLIMIT,Lots,i,0,ST,TP,"Grid - BuyLimit",Magic,0,0);

  50.               if (Ticket>0) Alert(Symbol()," ",Ticket,"Grid -   BuyLimit=",i," 开仓成功");

  51.                 else Alert( Symbol(),"Grid - BuyLimit=",i," 开仓失败:",ErrorDescription(GetLastError()));

  52.               Sleep(10000);

  53.               }

  54.            if(Ask==i)

  55.               {

  56.                Ticket=OrderSend(Symbol(),OP_BUY,Lots,i,0,ST,TP,"Grid - Buy",Magic,0,0);

  57.                if (Ticket>0) Alert(Symbol()," ",Ticket,"Grid -   Buy=",i," 开仓成功");

  58.                else Alert( Symbol(),"Grid - Buy=",i," 开仓失败:",ErrorDescription(GetLastError()));

  59.                Sleep(10000);

  60.              }

  61.           }

  62.        if(SellCount==0)

  63.           {

  64.            TP=i-GridStep;ST=0;

  65.            if(Bid-i>=STOPLEVEL)

  66.              {

  67.               Ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,i,0,ST,TP,"Grid - SellStop",Magic,0,0);

  68.               if (Ticket>0) Alert(Symbol()," ",Ticket,"Grid -   SellStop=",i," 开仓成功");

  69.               else Alert( Symbol(),"Grid - SellStop=",i," 开仓失败:",ErrorDescription(GetLastError()));

  70.               Sleep(10000);

  71.              }

  72.            if(Bid==i)

  73.              {

  74.               Ticket=OrderSend(Symbol(),OP_SELL,Lots,i,0,ST,TP,"Grid - Sell",Magic,0,0);

  75.               if (Ticket>0) Alert(Symbol()," ",Ticket,"Grid -   BuyLimit=",i," 开仓成功");

  76.               else Alert( Symbol(),"Grid - BuyLimit=",i," 开仓失败:",ErrorDescription(GetLastError()));

  77.               Sleep(10000);

  78.              }

  79.           }

  80.       }   

  81.   

  82.    // 上网格布网

  83.    for(i=PivotPr+GridStep;i<=PivotPr+GridLength;i=i+GridStep)

  84.       {

  85.   

  86.        BuyCount=0;SellCount=0;

  87.        for(j=0;j

  88.           {

  89.            if(OrderSelect(j,SELECT_BY_POS)==false) return(0);

  90.            if(OrderMagicNumber()==Magic && NormalizeDouble(OrderOpenPrice(),DTS)==NormalizeDouble(i,DTS) )

  91.              {

  92.               if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)    BuyCount++;   

  93.               if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT)  SellCount++;

  94.              }

  95.           }

  96.        if(BuyCount==0)

  97.           {

  98.            TP=i+GridStep;ST=0;

  99.            if(i-Ask>=STOPLEVEL)

  100.              {Ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,i,0,ST,TP,"Grid +  BuyStop",Magic,0,0);

  101.               if (Ticket>0) Alert(Symbol()," ",Ticket,"Grid +    BuyStop=",i," 开仓成功");

  102.               else Alert( Symbol(),"Grid +  BuyStop=",i," 开仓失败:",ErrorDescription(GetLastError()));

  103.               Sleep(10000);

  104.              }

  105.            if(i==Ask)

  106.              {

  107.              Ticket=OrderSend(Symbol(),OP_BUY,Lots,i,0,ST,TP,"Grid +  Buy",Magic,0,0);

  108.              if(Ticket>0) Alert(Symbol(),"  ",Ticket,"Grid +   Buy=",i," 开仓成功");

  109.              else Alert( Symbol(),"Grid +  Buy=",i," 开仓失败:",ErrorDescription(GetLastError()));

  110.              Sleep(10000);

  111.             }

  112.          }

  113.      if(SellCount==0)

  114.          {

  115.           TP=i-GridStep;ST=0;

  116.           if(i-Bid>=STOPLEVEL)

  117.             {

  118.             Ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,i,0,ST,TP,"Grid +  SellLimit",Magic,0,0);

  119.             if (Ticket>0) Alert(Symbol()," ",Ticket,"Grid +    SellLimit=",i," 开仓成功");

  120.             else Alert( Symbol(),"Grid +  SellLimit=",i," 开仓失败:",ErrorDescription(GetLastError()));

  121.             Sleep(10000);

  122.             }  

  123.           if(i==Bid)

  124.             {

  125.             Ticket=OrderSend(Symbol(),OP_SELL,Lots,i,0,ST,TP,"Grid + Sell",Magic,0,0);

  126.             if(Ticket>0) Alert(Symbol(),"  ",Ticket,"Grid +    Sell=",i," 开仓成功");

  127.             else Alert( Symbol(),"Grid +  Sell=",i," 开仓失败:",ErrorDescription(GetLastError()));

  128.             Sleep(10000);

  129.             }

  130.          }

  131.     }

  132.    

  133. //----

  134.    return(0);

  135. }

  136. //+------------------------------------------------------------------+
复制代码





欢迎光临 龙听期货论坛 (http://www.qhlt.cn/) Powered by Discuz! 7.2