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

量化交易入门--写第一个量化程序

| 发表于 2023-1-4 09:58:19 | 显示全部楼层 |复制链接

我们写一个自动交易程序,逻辑如下

· 下一个多单

· 检查当前盈利情况

· 盈利大于1美金止盈平仓,或者亏损大于1美金止损平仓

· 退出程序

//+------------------------------------------------------------------+

//|                                                  QuantSample.mq4 |

//|                        Copyright 2020, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property strict

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

//---

   

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//---

    int ticket = 0;

    if(OrdersTotal() == 0) {//检查当前是否有订单,没有则下单

      //send order

      ticket = OrderSend(Symbol(), OP_BUY, 0.01, MarketInfo(Symbol(), MODE_ASK), 100, 0.0, 0.0, "comment", 1024, 0,0xFFFFFFFF);

    }


    double profit = 0;

    for(int i = 0; i < OrdersTotal(); i++){ //计算当前盈亏

      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) break;

      profit = OrderProfit();

    }


    if(profit > 1.0 || profit < -1.0) { //当前盈亏满足条件则平仓退出

      //close order

      for (int index = OrdersTotal() - 1 ; index >= 0 ; index = index - 1) {

          if(!OrderSelect(index, SELECT_BY_POS, MODE_TRADES)){ //选择订单

            PrintFormat(">>> select failed closing trade <%s> at index %d", Symbol(), index);

            continue;

          }


          bool close_result = true ;

          switch(OrderType()) {

              case OP_BUY :

                    close_result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),100,0xFFFFFFFF) ; //关闭订单

                  break;

              case OP_SELL :

                    close_result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100,0xFFFFFFFF) ;

                    break;

          }

      }

      ExpertRemove();//退出EA

    }

  }

//+------------------------------------------------------------------+

如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论1

小春哥
未及格
| 发表于 2023-2-11 15:15:13 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

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

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