MQL4 - automated forex trading   /  

Forum

zero devide in live trading on all pair but not on gbp/usd

Back to topics list  | 1 2 To post a new topic, please log in or register

avatar
28
bankazubi 2008.08.27 21:27 

hi @ all


Zero devide occurs in live trading on all pair but not on gbp/usd, and not on demo on all pairs.



has anybody an idea?



thanks in advance

article

2 Months of Registration

Two months have passed since registration started. During this time more fifteen hundred people submitted applications for participation. We have received more than 200 Expert Advisors. Less than three weeks are left till the Registration end.


avatar
2462
phy 2008.08.27 21:30 

Show your code.

You have to find a division x/y where y == 0.


avatar
28
bankazubi 2008.08.27 22:11 
hey phy thanks for fast reply, here´s the code. it´s very long and has a few parts which are not needed, i know about, but until now i had no problem with it
Attached files:
  PIPMAKERxHEDGINGjTHEgHEDGE.mq4 (63.42 KB)

avatar
2462
phy 2008.08.28 01:18 

Here are all the lines with divisions:

$ grep -E "/" y.mq4 | grep -Ev "//"
   lot=NormalizeDouble(AccountBalance()/10000/10,lotPrecision)*MaximumRisk;
   if(MicroAccount)lot=NormalizeDouble(lot/10/10,lotPrecision);
ProfitTarget=(iATR(NULL,240,750,1)+iATR(NULL,60,750,1))/Point/1.75/10;
  if(MaxProfit>ProfitTarget)SavedProfit=MaxProfit*((100-MaxRetrace)/100);else SavedProfit=-9999;
  if(MaxBuyProfit>ProfitTarget)SavedBuyProfit=MaxBuyProfit*((100-MaxRetrace)/100);else SavedBuyProfit=-9999;
  if(MaxSellProfit>ProfitTarget)SavedSellProfit=MaxSellProfit*((100-MaxRetrace)/100);else SavedSellProfit=-9999;
   if(BuyOrders>0)BreakEven=(SumBuy()/BuyLots/10000000);
   if(SellOrders>0)BreakEven=(SumSell()/SellLots/10000000);
RecActivation=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/3;
      double MaxLoss2 = AccountBalance()/100*MaxLossPercent2;
      double b=(iATR(Symbol(),PERIOD_H1,750,0))/Point;
      double a=(iATR(Symbol(),PERIOD_M15,750,0))/Point;
      double c=(b/a);
      double small=(b/c);
      double great=(b/e);
      double spacingmin = (a/1.25);
      double stddev1 = iStdDev(Symbol(),StDevTF,StDevPer,0,StDevMode,PRICE_OPEN,0)/Point;
      double stddev2 = iStdDev(Symbol(),StDevTF2,StDevPer2,0,StDevMode2,PRICE_OPEN,0)/Point;
      if ((iATR(Symbol(),15,3,0))/Point > acti || (iATR(Symbol(),15,3,1))/Point > acti ||
          (iATR(Symbol(),15,3,2))/Point > acti || (iATR(Symbol(),15,3,3))/Point > acti ||
          (iATR(Symbol(),15,3,4))/Point > acti || (iATR(Symbol(),15,3,5))/Point > acti) stddev3 = (iATR(Symbol(),15,3,0))*1.5/Point; else stddev3=0;
      if ((iATR(Symbol(),15,3,0))/Point > acti || (iATR(Symbol(),15,3,1))/Point > acti ||
          (iATR(Symbol(),15,3,2))/Point > acti || (iATR(Symbol(),15,3,3))/Point > acti ||
          (iATR(Symbol(),15,3,4))/Point > acti || (iATR(Symbol(),15,3,5))/Point > acti) stddev4 = (iATR(Symbol(),15,3,1))*1.5/Point; else stddev4=0;
      if ((iATR(Symbol(),15,3,0))/Point > acti2 || (iATR(Symbol(),15,3,1))/Point > acti2 ||
          (iATR(Symbol(),15,3,2))/Point > acti2 || (iATR(Symbol(),15,3,3))/Point > acti2 ||
          (iATR(Symbol(),15,3,4))/Point > acti2 || (iATR(Symbol(),15,3,5))/Point > acti2) stddev5 = (iATR(Symbol(),15,3,0))*2.25/Point; else stddev5=0;
      if ((iATR(Symbol(),15,3,0))/Point > acti2 || (iATR(Symbol(),15,3,1))/Point > acti2 ||
          (iATR(Symbol(),15,3,2))/Point > acti2 || (iATR(Symbol(),15,3,3))/Point > acti2 ||
          (iATR(Symbol(),15,3,4))/Point > acti2 || (iATR(Symbol(),15,3,5))/Point > acti2) stddev6 = (iATR(Symbol(),15,3,1))*2.25/Point; else stddev6=0;
      double recb=(iATR(Symbol(),15,3,1))*2.25/Point;
if(-BuyCycleProfit<=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/3||CycleProfit>0)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/3)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/1.5)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2*1.5)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2*2)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-BuyCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2*2.5)RecoveryTakeProfit=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(BuyCycleProfit<-1000.00||BuyCycleProfit>1000.00)cycleh=(CycleProfith+ProfitTarget)/1000;
if(BuyCycleProfit>-999.99&&BuyCycleProfit<999.99)cycleh=(CycleProfith+ProfitTarget)/100;
if(BuyCycleProfit>-99.99&&BuyCycleProfit<99.99)cycleh=(CycleProfith+ProfitTarget)/10;
AfterRecStartVolh=(CycleProfit1/RecoveryTakeProfit);
if(-SellCycleProfit<=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/3||CycleProfit>0)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/3)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/1.5)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2*1.5)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2*2)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
if(-SellCycleProfit>(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point*2*2.5)RecoveryTakeProfits=(iATR(NULL,240,50,1)+iATR(NULL,60,50,1))/Point/2;
AfterRecStartVolhs=(CycleProfit1s/RecoveryTakeProfits);
      MarginPercent = MathRound((AccountEquity() / AccountMargin()) * 100);
Start by debugging the lines that have a user variable or function in the divisor. There aren't many.

avatar
28
bankazubi 2008.08.28 01:24 

thanks phy,



but do you have an idea why the expert is working on demo on all pairs, but live it is writing zero devide?





avatar
2462
phy 2008.08.28 01:30 
Because something == 0 sometimes on live.

avatar
28
bankazubi 2008.08.28 02:44 

so i tried and found the problem, but now i don´t know how to solve it



if i change variable c for eg to 3 there is no zero devide,


double MaxLoss2 = AccountBalance()/100*MaxLossPercent2;
      double b=(iATR(Symbol(),PERIOD_H1,750,0))/Point;
      double a=(iATR(Symbol(),PERIOD_M15,750,0))/Point;
      double c=(3);


but changing var a or b doesn´´t help, do you have an idea why the ea can´t calculate var c?

double MaxLoss2 = AccountBalance()/100*MaxLossPercent2;
      double b=(iATR(Symbol(),PERIOD_H1,750,0))*Point;
      double a=(iATR(Symbol(),PERIOD_M15,750,0))*Point;			
      double c=(b/a);

avatar
2462
phy 2008.08.28 03:18 

If changing 'a' doesn't help, it can calculate 'c', and the value is zero.

Put in some Print statements to see what is going on.


avatar
28
bankazubi 2008.08.28 03:45 

yes phy c is zero, and this is caused thru iatr which returns zero!



But i think this is a very funny thing because the atr of 15min or 1hour is never zero.



any idea?


avatar
2462
phy 2008.08.28 04:58 

"But i think this is a very funny thing because the atr of 15min or 1hour is never zero."

You can debug your iATR problem, or set an arbitrary non-zero value when it returns zero.


avatar
28
bankazubi 2008.08.28 09:38 

what do u mean with "You can debug your iATR problem"?



I don´t understand what to do now?

Back to topics list   | 1 2  

To add comments, please log in or register