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

【MQL4函数】开仓模块  

| 发表于 2021-5-31 13:45:28 | 显示全部楼层 |复制链接
要实现开仓当然非常简单,只要一个开仓函数就可以了,但是实际交易的时候可没有这么容易,我们会碰到两个问题。
第一个问题就是手数的问题,我们的EA计算出来的手数有可能会小于最小手数,也有可能会大于最大手数,当小于最小手数时,我们不做单,当大于最大手数时我们把单子拆开来分成几单来做,这一部分内容可以参考第五节课。
第二个问题就是开仓遇到的问题,比如说由于卡顿导致订单没有成交等等,此时我们需要立即再发送开单命令,直到成交为止。
根据以上问题我们把程序写出来,代码如下:
  1. int orderopen(string sym,string direction,double lot,double sl,double tp,int mag,string comment)
  2. {
  3.    int check;
  4.    double lot_min=MarketInfo(sym,MODE_MINLOT);
  5.    double lot_max=MarketInfo(sym,MODE_MAXLOT);
  6.    double lot_last=0;
  7.    int err=0;
  8.    int huadian=10;
  9.    double amount;
  10.    int i;
  11.    if(lot<lot_min)
  12.    {
  13.       Print("lot is too small");
  14.       return(1);
  15.    }
  16.    else if(lot>lot_max)
  17.    {
  18.       amount=MathCeil(lot/lot_max);
  19.       lot_last=lot-(amount-1)*lot_max;
  20.       for(i=(int)amount;i>0;i--)
  21.                 {
  22.               if (i!=1)
  23.               {
  24.                  if(direction=="BUY")
  25.                  {
  26.                     do
  27.                     {
  28. check=OrderSend(sym,OP_BUY,lot_max,MarketInfo(sym,
  29. MODE_ASK),huadian,sl,tp,comment,mag,0,clrBlue);
  30.                   if(check==-1)
  31.                   {
  32.                      err=GetLastError();
  33.                   }
  34.                   else
  35.                   {
  36.                      break;
  37.                   }
  38.                }while(err==146 || err==135);
  39.             }
  40.             else if(direction=="SELL")
  41.             {
  42.                     do
  43.                     {
  44. check=OrderSend(sym,OP_SELL,lot_max,MarketInfo(sym,
  45. MODE_BID),huadian,sl,tp,comment,mag,0,clrRed);
  46.                   if(check==-1)
  47.                   {
  48.                      err=GetLastError();
  49.                   }
  50.                   else
  51.                   {
  52.                      break;
  53.                   }
  54.                }while(err==146 || err==135);
  55.             }
  56.               }
  57.               else
  58.               {
  59.                  if(direction=="BUY")
  60.                  {
  61.                     do
  62.                     {
  63. check=OrderSend(sym,OP_BUY,lot_last,MarketInfo(sym,
  64. MODE_ASK),huadian,sl,tp,comment,mag,0,clrBlue);
  65.                   if(check==-1)
  66.                   {
  67.                      err=GetLastError();
  68.                   }
  69.                   else
  70.                   {
  71.                      break;
  72.                   }
  73.                }while(err==146 || err==135);
  74.             }
  75.             else if(direction=="SELL")
  76.             {
  77.                     do
  78.                     {
  79. check=OrderSend(sym,OP_SELL,lot_last,MarketInfo(sym,
  80. MODE_BID),huadian,sl,tp,comment,mag,0,clrRed);
  81.                   if(check==-1)
  82.                   {
  83.                      err=GetLastError();
  84.                   }
  85.                   else
  86.                   {
  87.                      break;
  88.                   }
  89.                }while(err==146 || err==135);
  90.             }
  91.               }
  92.       }
  93.    }
  94.    else
  95.    {
  96.       if(direction=="BUY")
  97.       {
  98.               do
  99.               {
  100. check=OrderSend(sym,OP_BUY,lot,MarketInfo(sym,
  101. MODE_BID),huadian,sl,tp,comment,mag,0,clrBlue);
  102.             if(check==-1)
  103.             {
  104.                err=GetLastError();
  105.             }
  106.             else
  107.             {
  108.                break;
  109.             }
  110.          }while(err==146 || err==135);
  111.       }
  112.       if(direction=="SELL")
  113.       {
  114.               do
  115.               {
  116. check=OrderSend(sym,OP_SELL,lot,MarketInfo(sym,
  117. MODE_BID),huadian,sl,tp,comment,mag,0,clrRed);
  118.             if(check==-1)
  119.             {
  120.                err=GetLastError();
  121.             }
  122.             else
  123.             {
  124.                break;
  125.             }
  126.          }while(err==146 || err==135);
  127.       }
  128.    }
  129.    return(0);
  130. }      
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

热门主题

精彩评论38

海胆战士
D
| 发表于 2021-5-31 16:54:21 | 显示全部楼层
感谢分享!
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2021-5-31 19:08:48 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

ajax9999
未及格
| 发表于 2021-5-31 19:58:20 来自手机 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

Leonjo
未及格
| 发表于 2021-6-1 04:30:40 来自手机 | 显示全部楼层
感謝分享資訊
举报

点赞 评论 使用道具

mcwong
DDD
| 发表于 2021-6-16 21:33:41 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

hao
D
| 发表于 2021-6-20 10:06:35 来自手机 | 显示全部楼层
谢分享
举报

点赞 评论 使用道具

ajax9999
未及格
| 发表于 2021-6-20 10:18:05 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

tianping
DDD
| 发表于 2021-6-20 11:05:57 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

巴比伦雄鹰
D
| 发表于 2021-6-20 14:36:06 | 显示全部楼层
关注
举报

点赞 评论 使用道具

漢聲山峰
DD
| 发表于 2021-6-21 13:51:57 | 显示全部楼层
這個確實蠻不錯的
举报

点赞 评论 使用道具

wangddtt
CC
| 发表于 2021-6-21 23:52:26 | 显示全部楼层
这个真的很不错
举报

点赞 评论 使用道具

hillcloud
D
| 发表于 2021-8-17 17:27:45 | 显示全部楼层
学习了~
举报

点赞 评论 使用道具

交易者
DDD
| 发表于 2022-1-8 19:03:44 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

ea123ea
DDD
| 发表于 2022-1-31 21:04:29 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

anson1979
DD
| 发表于 2022-2-1 19:55:35 | 显示全部楼层
学习一下
举报

点赞 评论 使用道具

nanaliu
CC
| 发表于 2022-5-25 08:25:04 | 显示全部楼层
看看。。感谢分享。。。。
举报

点赞 评论 使用道具

lihua22
D
| 发表于 2022-5-25 11:28:55 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

甘草糖
DD
| 发表于 2022-5-25 11:42:37 | 显示全部楼层
谢谢楼主的分享。
举报

点赞 评论 使用道具

Cheetah
CCC
| 发表于 2022-7-4 20:18:09 来自手机 | 显示全部楼层
非常不错
举报

点赞 评论 使用道具

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

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