Zero Divide (Нашли проблему - но почему?) - страница 4

 

Да, я смотрел на это, потому что вы выделили это, спасибо! Я собираюсь разбить (я знаю, что мне говорили это сделать!) конкретно всю формулу и проследить, где она идет не так. На данный момент я не могу понять, почему он печатает "0" для pips_to_ssl, когда он даже не используется для отложенного ордера на участке бэк-тестирования, где он печатает этот нулевой делитель...

Это не pips_to_bsl дает мне "0"... Strange....

 
Теперь 4 страницы и я не знаю, где прячется ваш код :)
 
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

Хорошо - Итак, вот в порядке ошибок сверху вниз с кодом и соответствующими распечатками при событии "zero divide", где ордер BUY_STOP фактически выбрасывается, но ошибка zero divide происходит из моего кода отложенного ордера sell?
 

Хорошо, я думаю, я исправил это и решил проблему - я просто хочу поблагодарить всех, кто помог мне с подсказками! Очень ценю это :D!!!

Итак, вот где, кажется, все шло не так - примечания ниже - я теперь переместил соответствующие коды, которые соответствуют BUYSTOPS и SELLSTOPS туда, где они должны быть!

//+------------------------------------------------------------------+
//| 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--//
...
}

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