客服热线:18391752892

求助:修改下单量

   日期:2019-01-12     浏览:325    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 本帖最后由 hwq597 于 2017-7-3 07:51 编辑
如何把固定的下单量改成下面用公式表示的下单量(只用到小数点后2位,附合下单要求)
下单量=(资金*10/100)/(市场价格/500) 
extern double 下单量=0.1;
extern int 止损点数=0;
extern int 止盈点数=0;
extern int 移动止损点数=500;
extern int magic=52142;
datetime buytime=0;
datetime selltime=0;
int onInit()
 {
   return(INIT_SUCCEEDED);
 }
void onDeinit(const int reason)
 {   
 }
void onTick()
{         
   double k0=iCustom(Symbol(),0, KD ,0,0);
   double d0=iCustom(Symbol(),0, KD ,1,0);
   double k1=iCustom(Symbol(),0, KD ,0,1);
   double d1=iCustom(Symbol(),0, KD ,1,1);
                                       
   if(k0 d0 k1 d1)//buy
     {
        closesell(Symbol()+ sell ,magic);
        if(buytime!=Time[0])
       {
       
          if(buy(下单量,止损点数,止盈点数,Symbol()+ buy ,magic) 0)
          {
           buytime=Time[0];
          }
        }
      }     
   if(k0 d0 k1 d1)//sell
      {
       closebuy(Symbol()+ buy ,magic);     
       if(selltime!=Time[0])
        {
         if(sell(下单量,止损点数,止盈点数,Symbol()+ sell ,magic) 0)
         {
            selltime=Time[0];
         }
        }
      }       
     yidong();
 }
void yidong()
 {
   for(int i=0;i OrdersTotal();i++)//移动止损通用代码,次代码会自动检测buy和sell单并对其移动止损
       {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         {
            if(OrderType()==0 OrderSymbol()==Symbol() OrderMagicNumber()==magic)
             {
               if((Bid-OrderOpenPrice()) =Point*移动止损点数)
                {
                  if(OrderStopLoss() (Bid-Point*移动止损点数) || (OrderStopLoss()==0))
                   {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*移动止损点数,OrderTakeProfit(),0,Green);
                   }
                }     
             }
            if(OrderType()==1 OrderSymbol()==Symbol() OrderMagicNumber()==magic)
             {
             if((OrderOpenPrice()-Ask) =(Point*移动止损点数))
                {
                  if((OrderStopLoss() (Ask+Point*移动止损点数)) || (OrderStopLoss()==0))
                   {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*移动止损点数,OrderTakeProfit(),0,Green);
                   }
                }
             }
         }
       }
   }
void closebuy(string com,int magic)
 {
   int t=OrdersTotal();
   for(int i=t-1;i i--)
     {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() OrderType()==OP_BUY OrderComment()==com OrderMagicNumber()==magic)
         {
            OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);
         }
        }
     }
 }
void closesell(string com,int magic)
 {
   int t=OrdersTotal();
   for(int i=t-1;i i--)
     {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() OrderType()==OP_SELL OrderComment()==com OrderMagicNumber()==magic)
         {
            OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);
         }
        }
     }
 }
int buy(double lots,double sl,double tp,string com,int buymagic)
 {
    int a=0;
    bool zhaodan=false;
   for(int i=0;i OrdersTotal();i++)
     {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         string zhushi=OrderComment();
         int ma=OrderMagicNumber();
         if(OrderSymbol()==Symbol() OrderType()==OP_BUY zhushi==com ma==buymagic)
         {
            zhaodan=true;
            break;
         }
        }
     }
    if(zhaodan==false)
     {
     if(sl!=0 tp==0)
       {
        a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-sl*Point,0,com,buymagic,0,White);
       }
     if(sl==0 tp!=0)
       {
        a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,Ask+tp*Point,com,buymagic,0,White);
       }
     if(sl==0 tp==0)
       {
        a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,0,com,buymagic,0,White);
       }
     if(sl!=0 tp!=0)
       {
        a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-sl*Point,Ask+tp*Point,com,buymagic,0,White);
       }
     }
    return(a);
 }
int sell(double lots,double sl,double tp,string com,int sellmagic)
 {
    int a=0;
    bool zhaodan=false;
   for(int i=0;i OrdersTotal();i++)
     {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         string zhushi=OrderComment();
         int ma=OrderMagicNumber();
         if(OrderSymbol()==Symbol() OrderType()==OP_SELL zhushi==com ma==sellmagic)
         {
            zhaodan=true;
            break;
         }
        }
     }
    if(zhaodan==false)
     {
     if(sl==0 tp!=0)
       {
       a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,Bid-tp*Point,com,sellmagic,0,Red);
       }
     if(sl!=0 tp==0)
       {
       a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+sl*Point,0,com,sellmagic,0,Red);
       }
     if(sl==0 tp==0)
       {
       a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,0,com,sellmagic,0,Red);
       }
     if(sl!=0 tp!=0)
       {
       a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+sl*Point,Bid-tp*Point,com,sellmagic,0,Red);
       }
     }
    return(a);
 }
 

这个EA你可以参看下
MT4智能交易系统EA顺势加仓的写法:2个月37000倍的EA

//-------自动加仓(对所有单有效)
void TrailPositions11()
{
int cnt = OrdersTotal();
for (int i=0; i i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
int type = OrderType();
if (type == OP_SELL )
{
if(CalculateSellOrders() 1  CalculateSell() 10    CalculateBuy() 1 Close[0] PJ1)
{
OrderSend(Symbol(),OP_SELLSTOP,LotSize() ,Bid-15*Point,3,Bid+15*Point,Bid-360*Point, 顺向挂STOP卖单 ,MAGICMA33,expire2,Green);
}

else
return (0);
}
}
}

//-------自动加仓(对所有单有效)
void TrailPositions011()
{
int cnt = OrdersTotal();
for (int i=0; i i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
int type = OrderType();
if (type == OP_BUY )

{if (CalculateBuyOrders() 1 CalculateBuy() 10  CalculateSell() 1    Close[0] PJ1)
{
OrderSend(Symbol(),OP_BUYSTOP,LotSize(),Ask+15*Point,3,Ask-15*Point,Ask+360*Point, 顺向挂STOP买单 ,MAGICMA33,expire2,Red);
}
else
return (0);
}
}
}
其中还有子函数限制开仓数:CalculateBuyOrders()买单挂仓单数,CalculateSellOrders()卖单挂仓单数;CalculateBuy()买单数,CalculateSell()卖单数;PJ1是一分钟平均线60;LotSize()按资金量开仓控制;



1、CalculateBuyOrders()买单挂仓单数:


int CalculateBuyOrders()//计算STOP多挂单的张数
{
int buys=0,sells=0;
for(int i=0;i OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderType()==OP_BUYSTOP       OrderSymbol()==Symbol() )    buys++;
}
return(buys);
}

2、CalculateSellOrders()卖单挂仓单数;


int CalculateSellOrders()// 算STOP空挂单的张数
{
int buys=0,sells=0;
for(int i=0;i OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderType()==OP_SELLSTOP       OrderSymbol()==Symbol() ) sells++;
}
return(sells);
}

3、CalculateBuy()买单数;


int CalculateBuy()//计算多单的张数
{
int buys=0,sells=0;
for(int i=0;i OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderType()==OP_BUY     OrderSymbol()==Symbol() )    buys++;
}
return(buys);
}
4、CalculateSell()卖单数;


int CalculateSell()// 算空单的张数
{
int buys=0,sells=0;
for(int i=0;i OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderType()==OP_SELL       OrderSymbol()==Symbol() ) sells++;
}
return(sells);
}

5、LotSize()按资金量开仓控制;


double LotSize() // 下单数量
{ double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//MarketInfo(Symbol(),MODE_MINLOT); 相关信息
//MarketInfo(Symbol(),MODE_MAXLOT);
//MarketInfo(Symbol(),MODE_LOTSTEP);
lot= AccountEquity()/2000; //开仓量计算
if(lot 0.05) lot=0.01;
if(lot =0.05 lot 0.07) lot=0.06;
if(lot =0.07 lot 0.09) lot=0.08;
if(lot =0.09 lot 0.2) lot=0.1;
if(lot =0.2 lot 0.3) lot=0.2;
if(lot =0.3 lot 0.5) lot=0.4;
if(lot =0.5 lot 0.7) lot=0.6;
if(lot =0.7 lot 0.9) lot=0.8;
if(lot =0.9 lot 2) lot=1;
if(lot =2 lot 3) lot=2;
if(lot =3 lot 5) lot=4;
if(lot =5 lot 7) lot=6;
if(lot =7 lot 9) lot=8;
if(lot =9 ) lot=10;
return(lot);
}复制代码

if(MoneyManagement==true){                         //资金管理开关
   double Lot=NormalizeDouble(AccountEquity()*Point/10/100,1);   
// 最大允许开仓比例占资金总量10%,只允许持有一张单,当持有一张单子时,不允许再开新单
???????????????????????????????????????????????????????????????????????????????????????????????????????????
外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行