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

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

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

脚本

在锁仓账户中用单边模式计算多个订单的价格 - MetaTrader 4脚本

Wujun Chen

显示:
2277
等级:
已发布:
2020.03.31 18:53
已更新:
2020.04.07 04:36

输入的时候,‘计算价格利润’选项填当前交易的商品目标价,0代表不计算。如图:


首先选择当前图表货币的订单,并累计价格,找到最大最小价格,数订单的数量和仓位等。

   int total=OrdersTotal();
   int num = 0;
   double diffs[][2];
   ArrayResize(diffs,total);
   ArrayInitialize(diffs,0.0);
//------
   for(int i = total - 1; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol)
           {
            double price=OrderOpenPrice();
            if(OrderType() == OP_BUY)
              {
               if(calcoutprice>0 && OrderProfit())
                  calc_profit_sum+=OrderSwap()+OrderProfit()*(calcoutprice-price)/(Bid - price);
               if(calcswap)
                 {
                  diffs[num][0] = OrderProfit() ? OrderSwap() * (Bid - price) /OrderProfit() : Ask - Bid;
                  diffs[num][1] = (int)(now-OrderOpenTime())/PeriodSeconds(PERIOD_D1);//iBarShift(_Symbol,PERIOD_D1,(datetime)OrderOpenTime());
                 }
               buy_lots +=OrderLots();
               value_sum +=OrderLots()*(price-diffs[num][0]);
              }
            if(OrderType() == OP_SELL)
              {
               if(calcoutprice>0 && OrderProfit())
                  calc_profit_sum+=OrderSwap()+OrderProfit()*(calcoutprice-price)/(Ask - price);
               if(calcswap)
                 {
                  diffs[num][0]  = OrderProfit() ? OrderSwap() * (Ask - price) /OrderProfit() :  Bid-Ask;
                  diffs[num][1] = (int)(now-OrderOpenTime())/PeriodSeconds(PERIOD_D1);
                 }
               sell_lots +=OrderLots();
               value_sum -=OrderLots()*(price-diffs[num][0]);
              }
            if(OrderType()<2 && price!=0)
              {
               max = MathMax(max,price);
               min = MathMin(min,price);
               price_sum += price;
               comiss_sum += OrderCommission();
               num++;
              }
           }
     }
   for(int i=num-1; i>=0; i--)
      printf("[%d],%.0f,%f",i,diffs[i][1],diffs[i][0]/_Point);

然后在图表上创建价格对象,用横线显示:

 string name_0=_Symbol+"_weight";
   string name_1=_Symbol+"_avgp";
   string name_2=_Symbol+"_mean";
   if(buy_lots!=sell_lots)
     {
      double quantity=buy_lots-sell_lots;
      double avgp=NormalizeDouble(value_sum /quantity,_Digits);// total_lots
      printf("1:%f,%f,%f",quantity,avgp,comiss_sum/(buy_lots+sell_lots));

      if(ObjectFind(0,name_0)<0)
        {
         ObjectCreate(0,name_0,OBJ_HLINE,0,0,avgp);
         ObjectSetInteger(0,name_0,OBJPROP_COLOR,clrGold);
         ObjectSetInteger(0,name_0,OBJPROP_STYLE,DRAW_SECTION);
        }
      else
         ObjectMove(name_0,0,0,avgp);
     }
   else
      ObjectDelete(0,name_0);
   if(calc_profit_sum!=0)
      printf("price %f %s's profit:%f",calcoutprice,_Symbol,calc_profit_sum);

上面(订单量和价格累积)需要考虑到并非完全锁仓的情况,即(buy_lots!=sell_lots)。

一般当价格在这条线上(空单在下)你当前交易的货币就是盈利了。

当前原油的保本价格就是黄色的那条虚线,并考虑到了仓息(由于我只开了一单,这里没显示其他订单),显示如下:


“calc_profit_sum ”这个通过当前订单的利润和价差来累加到目标价的利润或者亏损。

信息打印在"EA"选项中,如下图:

首先显示的是:1:综合仓位,累积仓位的平均价格(保本价格),平均的手续费。(RETAIL_NETTING_MONEY WTI,M5: 1:0.100000,21.620000,0.000000)

然后显示了当价格在25时,当前symbol的盈利。(RETAIL_NETTING_MONEY WTI,M5: price 25.000000 WTI's profit:338.000000)
当然你也可以在‘计算价格利润’填15,显示那时的亏损。


最后显示的是:2:订单数,价格平均值,价格中值。( RETAIL_NETTING_MONEY WTI,M5: 2:1,21.580000,21.580000)


然后创建开单价格中值和平均值对象,分别显示绿线和白线:

  if(num > 0)
     {
      double avgp=NormalizeDouble(price_sum / num,_Digits);
      double mean=NormalizeDouble((max + min) / 2.0,_Digits);
      printf("2:%d,%f,%f,",num,avgp,mean);

      if(ObjectFind(0,name_1)<0)
        {
         ObjectCreate(0,name_1,OBJ_HLINE,0,0,avgp);
         ObjectSetInteger(0,name_1,OBJPROP_COLOR,clrLime);
         ObjectSetInteger(0,name_1,OBJPROP_STYLE,DRAW_SECTION);
        }
      else
         ObjectMove(name_1,0,0,avgp);

      if(ObjectFind(0,name_2)<0)
        {
         ObjectCreate(0,name_2,OBJ_HLINE,0,0,mean);
         ObjectSetInteger(0,name_2,OBJPROP_COLOR,clrSnow);
         ObjectSetInteger(0,name_2,OBJPROP_STYLE,DRAW_SECTION);
        }
      else
         ObjectMove(name_2,0,0,mean);
     }
   else
     {
      ObjectDelete(0,name_1);
      ObjectDelete(0,name_2);
     }


趋势追踪型EA 趋势追踪型EA

它不会频繁建仓,他只会根据固定形态建仓。

标识交易时间指标 标识交易时间指标

该指标用于自定义标识交易品种标准的交易时间段,以此来区分分析标准交易时间段与非标准时间段的行情演变。比如看CHINAA50或者SPX500,分别将其在中国或者美国交易时间段标识出来,以便盘后分析。

在副图上显示最近的点差图和其平均值-MT4指标 在副图上显示最近的点差图和其平均值-MT4指标

最近由于各种因素浮动点差有些扩大,该指标可以显示当前价格最近的点差变化,你可以在点差较小的时候进行交易以减少交易成本。

MACD 样本 MACD 样本

经典 MACD 样本。