初学者的问题 MQL5 MT5 MetaTrader 5 - 页 271

 
soroko:
所以只有第一个值被填入索引[0]。
//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"

double Pr[5];                 // обявление 5-мерного статического массива
double PriceOld;              // переменная для сравнения цены
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double temp_prace=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   if(NormalizeDouble(PriceOld-temp_prace,5)!=0)
     {
      Pr[4]=Pr[3];
      Pr[3]=Pr[2];
      Pr[2]=Pr[1];
      Pr[1]=Pr[0];
      Pr[0]=temp_prace;
      PriceOld=Pr[0];
     }
  }
//+------------------------------------------------------------------+
 
soroko:

谢谢你。拯救了我一个不眠的周末)。

vicmos 谢谢你。
 
barabashkakvn:
vicmos 谢谢你。
它用一个值填满所有的东西,就像ArrayFill(...)/函数一样。
 
soroko:
它用一个值填满所有的东西,就像ArrayFill(...)/函数一样。
对不起,只有较少的数字!非常感谢你!"。
 

大家好!这样一个问题--编译器给出了一个警告。我不想置之不理,你能帮我找到一条出路吗?

   double aHigh[ 12 ], aLow[ 12 ];
   double dVolatility = 0.0;
   
   CopyHigh(sSymbol, PERIOD_MN1, 0, 12, aHigh);
   CopyLow(sSymbol, PERIOD_MN1, 0, 12, aLow);
   
   dVolatility = ArrayMaximum(aHigh) - ArrayMinimum(aLow);
   dVolatility = NormalizeDouble(dVolatility, SymbolInfoInteger(sSymbol, SYMBOL_DIGITS));

它专门在最后一行骂人,说:" 由于类型转换,可能会丢失数据"。在这种情况下,如何正确地对实数类型进行规范化?

 
jommerbot:

大家好!这样一个问题--编译器给出了一个警告。我不想置之不理,你能帮我找到一条出路吗?

它专门在最后一行骂人,说:" 由于类型转换,可能会丢失数据"。在这种情况下,如何正确地对实数类型进行规范化?

   dVolatility = NormalizeDouble(dVolatility, (int)SymbolInfoInteger(sSymbol, SYMBOL_DIGITS));
 
barabashkakvn:
谢谢你
 
jommerbot:

大家好!这样一个问题--编译器给出了一个警告。我不想置之不理,你能帮我找到一条出路吗?

它专门在最后一行骂人,说:" 由于类型转换,可能会丢失数据"。在这种情况下,如何正确地对实数类型进行规范化?

还有一件事:ArrayMaximum和ArrayMinimum返回找到的元素的索引所以正确的方法是这样的。

   dVolatility = aHigh[ArrayMaximum(aHigh)] - aLow[ArrayMinimum(aLow)];
 
MigVRN:

还有:ArrayMaximum和ArrayMinimum返回找到的元素的索引所以正确的方法是这样的。

非常感谢你。在调试代码时发现了同样的问题。
 

它不能根据平仓订单的损失金额正确地计算出获利水平。事实证明,第一阶=1;第二阶=2;第三阶=3;第四阶=4。我们需要计算出弥补之前所有订单损失的点数,并获得总损失的10%。

实际上,专家顾问只是认为每个平仓订单的金额等于所谓的挂单,也就是说,它的计算结果显示,如果第5个挂单等于5手,那么以前所有的亏损订单都等于5手,因此,亏损的计算结果是相应的错误利润水平。也就是说,如果4个订单的总成交量实际等于10手,那么专家顾问将简单地用4个订单乘以第5个挂单的成交量,得到总成交量为20手......,我们应该在代码中纠正什么?

// 根据已结束的交易的亏损水平来计算取舍水平的函数。

//=================================================================================================

double TakeProfitCalculate(double lot,int type)

{

int n,i;

双重prf,ttp。


prf=MathAbs(BuyLevel-SellLevel)/Point*LOT*MarketInfo(Symbol(), MODE_TICKVALUE);//

if(No!=0) for(i=OrdersHistoryTotal()-1;i>=0;i-)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 继续。

如果(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC || OrderMagicNumber()>MAGIC+200 || OrderType()>OP_SELL) 继续。

n=OrderMagicNumber()-MAGIC。

prf+=(OrderProfit()+OrderSwap()+OrderCommission())。

if(n==0) break;

}

prf=MathAbs(prf*(100+ProfitPercent)/100)。

ttp=prf*Point/(LOT*MarketInfo(Symbol(),MODE_TICKVALUE))

if(type==OP_BUY) return(NRu(BuyLevel+ttp)); else return(NRd(SellLevel-ttp)

}

原因: