设为首页 收藏本站 切换语言

趋势交易系统

| 发表于 2022-12-8 14:24:55 | 显示全部楼层 |复制链接
  1. //+------------------------------------------------------------------+
  2. //|                                                           ma.mq4 |
  3. //|                                                             dzsq |
  4. //|                                             https://www.mql5.com |
  5. //+------------------------------------------------------------------+
  6. #property copyright "dzsq"
  7. #property link      "https://www.mql5.com"
  8. #property version   "1.00"
  9. #property strict
  10. extern int longMa=20;   //长均线
  11. extern int shortMa=10;  //短均线
  12. extern int callBachMa=30;
  13. extern int stop = 300; //止损
  14. extern int limit = 900; //止盈
  15. extern double lots=1;  //手数
  16. extern double movestop = 500; //移动止损
  17. extern int magic = 12345;
  18. bool isCrossBuy = false; //是否交叉
  19. bool isCrossSell = false;
  20. //是否会调到支撑线
  21. bool isSellCallback = false;
  22. bool isBuyCallback = false;
  23. //是否开仓
  24. bool isBuyOpened=false;
  25. bool isSellOpened=false;
  26. datetime buytime=0;
  27. datetime selltime=0;
  28. //+------------------------------------------------------------------+
  29. //| Expert initialization function                                   |
  30. //+------------------------------------------------------------------+
  31. int OnInit()
  32.   {
  33. //---
  34. //---
  35.    return(INIT_SUCCEEDED);
  36.   }
  37. //+------------------------------------------------------------------+
  38. //| Expert deinitialization function                                 |
  39. //+------------------------------------------------------------------+
  40. void OnDeinit(const int reason)
  41.   {
  42. //---
  43.   }
  44. //+------------------------------------------------------------------+
  45. //| Expert tick function                                             |
  46. //+------------------------------------------------------------------+
  47. void OnTick()
  48.   {   
  49.      //向下取整
  50.      //lots = MathFloor(AccountBalance()/10000);
  51.      //获取所有的均线价格,长期,短期,回调
  52.      double longmaPrice1 = iMA(NULL,0,longMa,0,MODE_SMA,PRICE_CLOSE,1);
  53.      double longmaPrice2 = iMA(NULL,0,longMa,0,MODE_SMA,PRICE_CLOSE,2);
  54.      double shortmaPrice1 = iMA(NULL,0,shortMa,0,MODE_SMA,PRICE_CLOSE,1);
  55.      double shortmaPrice2 = iMA(NULL,0,shortMa,0,MODE_SMA,PRICE_CLOSE,2);
  56.      double  callBackPrice = iMA(NULL,0,callBachMa,0,MODE_SMA,PRICE_CLOSE,0);
  57.      //均线交叉多头
  58.      if (shortmaPrice1>longmaPrice1 && shortmaPrice2<longmaPrice2){
  59.         isCrossBuy = true;
  60.         isCrossSell = false;
  61.         isSellOpened = false;
  62.         isSellCallback = false;
  63.         closesell(Symbol()+"sell",magic);
  64.      }
  65.      //均线交叉空头
  66.      if (shortmaPrice1<longmaPrice1 && shortmaPrice2>longmaPrice2){
  67.         isCrossBuy = false;
  68.         isCrossSell = true;
  69.         isBuyOpened = false;
  70.         isBuyCallback = false;
  71.         closebuy(Symbol()+"buy",magic);
  72.      }
  73.      double lowPrice = Low[0];
  74.      double highPrice = High[0];
  75.      double openPrice = Open[0];
  76.      double closePrice = Close[0];
  77.      //符合做多的条件
  78.      if(!isBuyOpened && isCrossBuy && lowPrice < callBackPrice){
  79.          //time[0]  表示当前时间
  80.         if (buytime!=Time[0]){   //解决当前K线重复下单的问题
  81.           if ( buy(lots,stop,limit,Symbol()+"buy",magic)){
  82.             buytime=Time[0];
  83.             isBuyOpened = true;
  84.           }
  85.         }
  86.      }
  87.      //符合做空的条件
  88.      if(!isSellOpened && isCrossSell && highPrice > callBackPrice){
  89.          //time[0]  表示当前时间
  90.         if (selltime!=Time[0]){   //解决当前K线重复下单的问题
  91.            if (sell(lots,stop,limit,Symbol()+"sell",magic)){
  92.               selltime=Time[0];
  93.               isSellOpened = true;
  94.            }
  95.         }
  96.      }
  97.      yidongzhisun();
  98.   }
  99.   //下单函数 针对一个单子
  100.   int buy(double lots,double stop , double limit,string comm,int buymagic){  //手数,止损,止盈,注释,magic
  101.       int ticket=0;   //订单号
  102.       bool zhaodan = false;  //判断有没有重复下单,其实上面已经写过了,这里不写也没关系
  103.       for (int i=0; i < OrdersTotal(); i++){
  104.          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
  105.            string zhushi = OrderComment();
  106.            int magicNumber = OrderMagicNumber();
  107.            if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && zhushi==comm && magicNumber==buymagic){
  108.              zhaodan = true;
  109.              break;
  110.            }
  111.          }
  112.       }
  113.       if (zhaodan==false){
  114.          if (stop!=0 && limit==0){
  115.             ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-stop*Point,0,comm,buymagic,0,White);
  116.          }
  117.          if (stop==0 &&limit!=0)
  118.              ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,Ask+limit*Point,comm,buymagic,0,White);
  119.          if (stop==0 &&limit==0)
  120.              ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,0,comm,buymagic,0,White);
  121.          if (stop!=0 &&limit!=0)
  122.              ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-stop*Point,Ask+limit*Point,comm,buymagic,0,White);
  123.       }
  124.       return (ticket);
  125.   }
  126.   //下单函数 针对一个单子
  127.   int sell(double lots,double stop , double limit,string comm,int sellmagic){  //手数,止损,止盈,注释,magic
  128.       int ticket=0;   //订单号
  129.       bool zhaodan = false;  //判断有没有重复下单,其实上面已经写过了,这里不写也没关系
  130.       for (int i=0; i < OrdersTotal(); i++){
  131.          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
  132.            string zhushi = OrderComment();
  133.            int magicNumber = OrderMagicNumber();
  134.            if (OrderSymbol()==Symbol() && OrderType()==OP_SELL && zhushi==comm && magicNumber==sellmagic){
  135.              zhaodan = true;
  136.              break;
  137.            }
  138.          }
  139.       }
  140.       if (zhaodan==false){
  141.          if (stop!=0 && limit==0){
  142.             ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+stop*Point,0,comm,sellmagic,0,White);
  143.          }
  144.          if (stop==0 &&limit!=0)
  145.              ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,Bid-limit*Point,comm,sellmagic,0,White);
  146.          if (stop==0 &&limit==0)
  147.              ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,0,comm,sellmagic,0,White);
  148.          if (stop!=0 &&limit!=0)
  149.              ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+stop*Point,Bid-limit*Point,comm,sellmagic,0,White);
  150.       }
  151.       return (ticket);
  152.   }
  153.   // 平货币
  154.   void closebuy(string comm,int magic){
  155.      for (int i=OrdersTotal()-1; i >=0; i--){
  156.          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
  157.            if (OrderSymbol()==Symbol() && OrderType() == OP_BUY && OrderComment() == comm && OrderMagicNumber() == magic){
  158.              OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);  
  159.            }
  160.          }
  161.        }
  162.   }
  163.   // 平货币
  164.   void closesell(string comm,int magic){
  165.      for (int i=OrdersTotal()-1; i >=0; i--){
  166.          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
  167.            if (OrderSymbol()==Symbol() && OrderType()== OP_SELL && OrderComment() == comm && OrderMagicNumber() == magic){
  168.              OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);  
  169.            }
  170.          }
  171.        }
  172.   }
  173. //设置移动止损
  174. void yidongzhisun(){
  175.   for (int i=0; i<OrdersTotal();i++)
  176.   {
  177.      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
  178.       if (OrderSymbol()==Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == magic){
  179.          if ((Bid-OrderOpenPrice())>=Point*movestop){
  180.             if (OrderStopLoss() <(Bid-Point*movestop) || OrderStopLoss()==0){
  181.               OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*movestop,OrderTakeProfit(),0,Green);
  182.             }
  183.          }
  184.       }
  185.       if (OrderSymbol()==Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == magic){
  186.          if ((OrderOpenPrice()-Ask)>=Point*movestop){
  187.             if (OrderStopLoss() <(Ask + Point*movestop) || OrderStopLoss()==0){
  188.               OrderModify(OrderTicket(),OrderOpenPrice(),Ask + Point*movestop,OrderTakeProfit(),0,Green);
  189.             }
  190.          }
  191.       }
  192.       }
  193.   }
  194. }
  195. //+------------------------------------------------------------------+
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论5

qwe11
CCC
| 发表于 2022-12-8 20:32:03 | 显示全部楼层
显示什么
举报

点赞 评论 使用道具

ken138888
B
| 发表于 2022-12-8 20:50:40 | 显示全部楼层
怎样学代码?
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2022-12-9 08:42:07 | 显示全部楼层
注释详细些就好了
举报

点赞 评论 使用道具

dongxu64
DDD
| 发表于 2022-12-9 19:31:53 | 显示全部楼层
还看不懂,努力
举报

点赞 评论 使用道具

EA03157264
D
| 发表于 2022-12-10 23:10:27 | 显示全部楼层
均线的趋势交易吗
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)