ea6922 发表于 2021-5-31 13:45:28

【MQL4函数】开仓模块

要实现开仓当然非常简单,只要一个开仓函数就可以了,但是实际交易的时候可没有这么容易,我们会碰到两个问题。第一个问题就是手数的问题,我们的EA计算出来的手数有可能会小于最小手数,也有可能会大于最大手数,当小于最小手数时,我们不做单,当大于最大手数时我们把单子拆开来分成几单来做,这一部分内容可以参考第五节课。第二个问题就是开仓遇到的问题,比如说由于卡顿导致订单没有成交等等,此时我们需要立即再发送开单命令,直到成交为止。根据以上问题我们把程序写出来,代码如下:int orderopen(string sym,string direction,double lot,double sl,double tp,int mag,string comment)
{
   int check;
   double lot_min=MarketInfo(sym,MODE_MINLOT);
   double lot_max=MarketInfo(sym,MODE_MAXLOT);
   double lot_last=0;
   int err=0;
   int huadian=10;
   double amount;
   int i;
   if(lot<lot_min)
   {
      Print("lot is too small");
      return(1);
   }
   else if(lot>lot_max)
   {
      amount=MathCeil(lot/lot_max);
      lot_last=lot-(amount-1)*lot_max;
      for(i=(int)amount;i>0;i--)
                {
            if (i!=1)
            {
               if(direction=="BUY")
               {
                  do
                  {
check=OrderSend(sym,OP_BUY,lot_max,MarketInfo(sym,
MODE_ASK),huadian,sl,tp,comment,mag,0,clrBlue);
                  if(check==-1)
                  {
                     err=GetLastError();
                  }
                  else
                  {
                     break;
                  }
               }while(err==146 || err==135);
            }
            else if(direction=="SELL")
            {
                  do
                  {
check=OrderSend(sym,OP_SELL,lot_max,MarketInfo(sym,
MODE_BID),huadian,sl,tp,comment,mag,0,clrRed);
                  if(check==-1)
                  {
                     err=GetLastError();
                  }
                  else
                  {
                     break;
                  }
               }while(err==146 || err==135);
            }
            }
            else
            {
               if(direction=="BUY")
               {
                  do
                  {
check=OrderSend(sym,OP_BUY,lot_last,MarketInfo(sym,
MODE_ASK),huadian,sl,tp,comment,mag,0,clrBlue);
                  if(check==-1)
                  {
                     err=GetLastError();
                  }
                  else
                  {
                     break;
                  }
               }while(err==146 || err==135);
            }
            else if(direction=="SELL")
            {
                  do
                  {
check=OrderSend(sym,OP_SELL,lot_last,MarketInfo(sym,
MODE_BID),huadian,sl,tp,comment,mag,0,clrRed);
                  if(check==-1)
                  {
                     err=GetLastError();
                  }
                  else
                  {
                     break;
                  }
               }while(err==146 || err==135);
            }
            }
      }
   }
   else
   {
      if(direction=="BUY")
      {
            do
            {
check=OrderSend(sym,OP_BUY,lot,MarketInfo(sym,
MODE_BID),huadian,sl,tp,comment,mag,0,clrBlue);
            if(check==-1)
            {
               err=GetLastError();
            }
            else
            {
               break;
            }
         }while(err==146 || err==135);
      }
      if(direction=="SELL")
      {
            do
            {
check=OrderSend(sym,OP_SELL,lot,MarketInfo(sym,
MODE_BID),huadian,sl,tp,comment,mag,0,clrRed);
            if(check==-1)
            {
               err=GetLastError();
            }
            else
            {
               break;
            }
         }while(err==146 || err==135);
      }
   }
   return(0);
}      

海胆战士 发表于 2021-5-31 16:54:21

感谢分享!

daerwushen 发表于 2021-5-31 19:08:48

感谢分享

ajax9999 发表于 2021-5-31 19:58:20

谢谢分享

Leonjo 发表于 2021-6-1 04:30:40

感謝分享資訊

mcwong 发表于 2021-6-16 21:33:41

谢谢分享

hao 发表于 2021-6-20 10:06:35

谢分享

ajax9999 发表于 2021-6-20 10:18:05

谢谢分享

tianping 发表于 2021-6-20 11:05:57

谢谢分享

巴比伦雄鹰 发表于 2021-6-20 14:36:06

关注

漢聲山峰 发表于 2021-6-21 13:51:57

這個確實蠻不錯的

wangddtt 发表于 2021-6-21 23:52:26

这个真的很不错

hillcloud 发表于 2021-8-17 17:27:45

学习了~

手艺人 发表于 2022-1-8 19:03:44

感谢分享

ea123ea 发表于 2022-1-31 21:04:29

谢谢分享

anson1979 发表于 2022-2-1 19:55:35

学习一下

nanaliu 发表于 2022-5-25 08:25:04

看看。。感谢分享。。。。

lihua22 发表于 2022-5-25 11:28:55

谢谢分享

甘草糖 发表于 2022-5-25 11:42:37

谢谢楼主的分享。

Cheetah 发表于 2022-7-4 20:18:09

非常不错
页: [1] 2 3
查看完整版本: 【MQL4函数】开仓模块