Zero Divide (Trouver le problème - mais pourquoi ?) - page 4

 

Oui, je regardais ça parce que tu l'as souligné, merci ! Je vais décomposer (et je sais qu'on m'a dit de le faire !) spécifiquement la formule entière et la suivre jusqu'à l'endroit où elle se trompe. Pour le moment, je ne comprends pas pourquoi il imprime un "0" pour pips_to_ssl alors qu'il n'est même pas utilisé pour l'ordre en attente sur la section de back-testing où il imprime ce zéro divisé....

Ce n'est pas pips_to_bsl qui me donne le "0"... Strange....

 
Maintenant 4 pages et je ne sais pas où se cache votre code :)
 
double loss_for_1_lot1 = pips_to_ssl/  ts * tv  ;
   if( loss_for_1_lot1 == 0.0 )Print(" ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: ", pips_to_ssl,"/",ts,"*",tv);

2013.10.02 12:17:04     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: 0/0.001*0.0001 = 0

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double pips_to_ssl=SellStopPrice-sellPrice;
   if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice,"=",pips_to_ssl); 

2013.10.02 12:17:04     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - pips_to_ssl = 0 || The formula for this is: (SellStopPrice)117.249 - (sellPrice)117.249 = 0

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double SellStopPrice = NormalizeDouble(SellStopPriceMath,Digits);
   if(SellStopPrice > 0)Print("SellStopPrice is a NormalizeDouble - This number derives from (SellStopPriceMath):", SellStopPriceMath); 

2013.10.02 12:28:22     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1: SellStopPrice is a NormalizeDouble - This number derives from (SellStopPriceMath) = 117.2489

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double ATR = iATR(NULL,60,14,1);
double MA = iMA(NULL,60,MA_Period,0,1,0,1);

double SellStopPriceMath = MA + ATR;
   if( SellStopPriceMath > 0 )Print("SellStopPriceMath formula is: (MA)", MA,"+ (ATR)",ATR,"=",SellStopPriceMath);

2013.10.02 12:17:04     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1: SellStopPriceMath formula is: (MA)117.0668+ (ATR)0.1821 = 117.2489

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double ATR_Pad = iATR(NULL,60,14,1)/2;
double Sell_Pad = NormalizeDouble(ATR_Pad,Digits);

int iTBT_1 = iBarShift(NULL, 60, triggerBarTime, true),
iLL = iLowest(NULL, 60, MODE_LOW, iTBT_1 + CandlesBeforeBiasObtained, 0);
double Sell_Here = Low[iLL] - Sell_Pad;
double sellPrice = NormalizeDouble(Sell_Here,Digits);
    if( sellPrice > 0 )Print("sellPrice formula is from: Sell_Here formula: (iLL price)", Low[iLL],"- (Sell_Pad)",Sell_Pad,"=",sellPrice);
 
2013.10.02 12:17:04     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1: sellPrice formula is from: Sell_Here formula: (iLL price)117.34- (Sell_Pad)0.091 = 117.249

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double ATR_Pad = iATR(NULL,60,14,1)/2;
double Sell_Pad = NormalizeDouble(ATR_Pad,Digits);

2013.10.02 12:36:24     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1: Sell_Pad = 0.091 | which is from ATR_Pad: 0.0911

Ok - Voici donc l'ordre d'erreur du haut vers le bas avec le code et les impressions correspondantes au moment de la "division par zéro" où un ordre BUY_STOP est en fait rejeté, alors que l'erreur de division par zéro provient de mon code d'ordre de vente en attente ?
 

Ok, je pense que j'ai corrigé et résolu le problème - je veux juste remercier tout le monde pour m'avoir aidé avec les invites ! J'apprécie vraiment :D !!

Donc, en gros, c'est là que ça semble avoir mal tourné - les notes sont ci-dessous - J'ai maintenant déplacé le codage correspondant aux BUYSTOPS et SELLSTOPS là où ils devraient être !

//+------------------------------------------------------------------+
//| Order Enter Function                                             |  //<< When this was getting called it was conducting all the mathematical formula's irrespective of the pending order!
//+------------------------------------------------------------------+
void OrderEntry(int direction)
{
   //Padding for the stop and padding for the entry too.  
   double ATR_Pad = iATR(NULL,60,14,1)/2; 
   double Buy_Pad = NormalizeDouble(ATR_Pad,Digits);
   double Sell_Pad = NormalizeDouble(ATR_Pad,Digits);
   
   //Get Highest Price in our lookback range and set buy price above it.
   int iTBT = iBarShift(NULL,60, triggerBarTime, true),
   iHH = iHighest(NULL,60, MODE_HIGH, iTBT + CandlesBeforeBiasObtained, 0);
   double Buy_Here = High[iHH] + Buy_Pad;
   double buyPrice= NormalizeDouble(Buy_Here,Digits);

   //Get Lowest Price in our lookback range and set sell price below it.
   int iTBT_1 = iBarShift(NULL, 60, triggerBarTime, true),
   iLL = iLowest(NULL, 60, MODE_LOW, iTBT_1 + CandlesBeforeBiasObtained, 0);
   double Sell_Here=Low[iLL] - Sell_Pad;
   double sellPrice= NormalizeDouble(Sell_Here,Digits);
   
   //Stop calculations.    
   double ATR = iATR(NULL,60,14,1);
   double MA = iMA(NULL,60,MA_Period,0,1,0,1);
   double BuyStopPriceMath = MA - ATR;
   double SellStopPriceMath = MA + ATR;
   double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,Digits);
   double SellStopPrice = NormalizeDouble(SellStopPriceMath,Digits);


   //get our buystop price from below the ma and our takeprofit based on our r:r ratio.
   double pips_to_bsl=buyPrice-BuyStopPrice;
   double buy_tp_price=(pips_to_bsl*RewardRatio)+buyPrice;
   double buy_takeprofit_price= NormalizeDouble(buy_tp_price, Digits);

   //get our sellstop price from below the ma and our takeprofit based on our r:r ratio.
   double pips_to_ssl=SellStopPrice-sellPrice;
   double sell_tp_price=sellPrice-(pips_to_ssl*RewardRatio);
   double sell_takeprofit_price= NormalizeDouble(sell_tp_price, Digits);
   
   //Lot calculation - Facilitates Notional and Lots within MT4 - As well as find the tick value relative to the account denomination.   
   double risk_amount = AccountEquity( )*RiskPercent/100;
   double Lot_Step = MarketInfo(Symbol(), MODE_LOTSTEP);
   double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
   double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
   double minlot = MarketInfo(Symbol(), MODE_MINLOT);
         
   double loss_for_1_lot = pips_to_bsl/ ts * tv ;
   //Alert(loss_for_1_lot);
   double LotSize_Buy = MathFloor( risk_amount / loss_for_1_lot/ Lot_Step) * Lot_Step ;
   //Alert(LotSize_Buy);
      
   double loss_for_1_lot1 = pips_to_ssl/ ts * tv ;  //<<<<<<<<<<<<<<<<<<<< THIS WAS RUNNING THE EQUATION EVEN THOUGH IT WAS NOT REQUIRED!
   //Alert(loss_for_1_lot1);                        //<<<<<<<<<<<<<<<<<<< THIS IS NOW MOVED TO WITHIN THE PARENTHESIS "DIRECTION == 1". 
   double LotSize_Sell = MathFloor( risk_amount / loss_for_1_lot1/ Lot_Step) * Lot_Step ;
   //Alert(LotSize_Sell);
         


//+-------------------------------------------------------------------------------------+
//| Order Buy Function                                                                  |
//+-------------------------------------------------------------------------------------+   

//Place a pending buystop if no orders exists. Pending or otherwise.
if(direction==0)
{ 
...
}   // end of  if(direction==0)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 


//+---------------------------------------------------------------------------------------+
//|Order Sell Function                                                                    |
//+---------------------------------------------------------------------------------------+   

if(direction==1)
{//--Sell--//
...
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////