请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

脚本

针对等量等间隔网格刷单最大风险和间隔的计算 - MetaTrader 5脚本

Wujun Chen

显示:
517
等级:
投票: 1
已发布:
2020.03.31 17:25
已更新:
2020.03.31 18:54

在输入时,如图:

‘maxrange’代表你要承受的最大波动,比如当前原油的价格在22美元,输入1000代表你抄底的最大范围在12美元(22-1000*0.01)

‘equityrate’代表当价格去往最大波动时你需要多少当前资金百分比去承受亏损,输入0.9就是90%的净值,请输入<=1.0的数。

‘volume’代表你每次下多少手。

‘calcmargin’是个选择,代表计算时是否需要考虑保证金,默认是‘true’。

‘type’也是选择,‘ORDER_TYPE_BUY’代表你想做多头,计算最大亏损时是按当前价格向下计算;另外‘ORDER_TYPE_SELL’代表空。

计算后消息显示在‘专家’里,在‘WTI’里运行脚本,参数同上,如图:

脚本里面包含两种算法。

第一种:

   ResetLastError() ;
   double Ex = AccountInfoDouble(ACCOUNT_EQUITY) * equityrate;
   double price = SymbolInfoDouble(_Symbol,(type == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID);
   double maxlossn;
   if(!OrderCalcProfit(type,_Symbol,volume,price,(type == ORDER_TYPE_BUY) ? price + maxrange * _Point : price - maxrange * _Point,maxlossn) || maxlossn <= 0)
     {
      Print(__FUNCTION__,_LastError);
      return;
     }

   double perm = 0.0;
   if(calcmargin)
      if(!OrderCalcMargin(type,_Symbol,volume,price,perm))
        {
         Print(_LastError);
         return;
        }

   int maxn = int((2.0 * Ex - maxlossn) / (2.0 * perm + maxlossn)); //maxn=int(2*Ex/maxlossn)-1;
   if(maxn <= 0)
     {
      Print(maxn);
      return;
     }
//-----------
   int perpip = maxrange / maxn;
   double perpa;
   if(!OrderCalcProfit(type,_Symbol,volume,price,(type == ORDER_TYPE_BUY) ? price + perpip*_Point : price - perpip * _Point,perpa))
     {
      Print(_LastError);
      return;
     }
   double maxvol = volume * maxn; //*(1+maxn)/2.0,非堆仓
   double maxmargin;
   if(!OrderCalcMargin(type,_Symbol,maxvol,price,maxmargin))
     {
      Print(_LastError);
      return;
     }
   printf("per:%f,pip:%d,n:%d,ex:%f,maxlossn:%f,maxvol:%f,maxmargin:%f",perpa,perpip,maxn,Ex,maxlossn,maxvol,maxmargin);

GridCalc (WTI,H1)    per:5.020000,pip:55,n:18,ex:876.177000,maxlossn:91.200000,maxvol:0.180000,maxmargin:1.240000


'per'代表每一次的盈亏,'per'代表每一次间隔点;

‘n’代表假设价格一次性到达你定义的最大限度,你需要开几次,‘ex’代表那时亏损的金额,‘maxlossn’代表那时第一单亏损的金额,‘maxvol’代表累积的仓位,‘maxmargin’代表累积的保证金;

考虑到我当前的账户资金为1000,杠杆是3000倍,所以保证金比较少。


第二种方式:

   int n = 1;
   double pms[][3];//iprice,imargin,iloss
   while(!IsStopped())
     {
      ArrayResize(pms,n);
      perpip = maxrange / n;
      double out = (type == ORDER_TYPE_BUY) ? price - maxrange *  _Point : price + maxrange *  _Point;
      double sumargin = 0,sumloss = 0;
      for(int i = 0; i < n; i++)
        {
         pms[i][0] = (type == ORDER_TYPE_BUY) ? price - i * perpip * _Point : price + i * perpip * _Point;
         if(!OrderCalcMargin(type,_Symbol,volume,pms[i][0],pms[i][1]) || pms[i][1] <= 0)
           {
            Print(__FUNCTION__,_LastError);
            return;
           }
         if(!OrderCalcProfit(type,_Symbol,volume,out,pms[i][0],pms[i][2]))
           {
            Print(__FUNCTION__,_LastError);
            return;
           }
         if(calcmargin)
            sumargin += pms[i][1];
         sumloss += pms[i][2];
        }
      if(sumargin + sumloss >= Ex)
        {
         printf("margin:%f,loss:%f,out:%f,pip:%d,n:%d",sumargin,sumloss,out,perpip,n);
         break;
        }
      n++;
     }
   ArrayPrint(pms);

继续用前面的参数计算,

GridCalc (WTI,H1)    margin:1.040000,loss:921.860000,out:12.630000,pip:52,n:19

‘margin’代表假设价格到达最大亏损时当前‘symbol’累积的保证金,‘loss’代表累计亏损,‘out’代表到达极限的价格(价格去往12.6);

‘pip’代表每隔多少点开一次(52大概是0.5),‘n’是总开次数;

下面打印出了极限‘maxrange’状态下每一单的开单价格,保证金,和亏损;

举例:   GridCalc (WTI,H1)    [ 8,] 18.47  0.06 53.26


由于当前原油价格比较小,如果保守点你可以把极限调到‘2000’或直接计算到0价格,因为你可以计算到极限。最近波动性又还不错,你可以反复用这种网格,每次上去0.5出掉,下来0.5又接回来;

或者适当的时候你可以间隔大一点再卖出/买入,但是不要少于计算的间隔。

MT5版本三线RSI指标 MT5版本三线RSI指标

MT5版本三线RSI指标,根据通达信公式改编。

三线KDJ 三线KDJ

股票软件通达信中的指标三线KDJ

对两种不同货币K线的比较,用简单的加减乘除来计算(获得金油比,交叉盘价格,期差数据等) -MT5指标 对两种不同货币K线的比较,用简单的加减乘除来计算(获得金油比,交叉盘价格,期差数据等) -MT5指标

该指标可以获取两个不同货币对各个时期的K线价格,然后通过简单的加减乘除显示在副图上,用来分析当前平台上没有的自定义商品走势。

在外汇中显示不同周期级别的加权平均价与结算价-MT5指标 在外汇中显示不同周期级别的加权平均价与结算价-MT5指标

于主图显示,类似于期货日内均线,可以选择更多的结算周期