Zero Divide (Sorunu buldum - ama neden?) - sayfa 4

 

Evet buna bakıyordum çünkü sen bunu vurguladın, teşekkürler! Özellikle tüm formülü yıkacağım (ki bunu yapmamın söylendiğini biliyorum!) ve yanlış gittiği yere kadar onu takip edeceğim. Şu anda, bu sıfır bölmeyi yazdırdığı geriye dönük test bölümünde bekleyen sipariş için kullanılmadığı halde pip_to_ssl için neden "0" yazdırdığını anlayamıyorum ...

Bana "0" değerini veren pips_to_bsl değil... Garip....

 
Şimdi 4 sayfa ve kodunuzun nerede saklandığını bilmiyorum :)
 
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

Tamam - Yani burada bir BUY_STOP emrinin gerçekten atıldığı " sıfır bölme " durumunda kod ve karşılık gelen baskılarla yukarıdan aşağıya hata sıralaması var, ancak sıfır bölme hatası satış bekleyen sipariş kodumdan kaynaklanıyor ?
 

Tamam, sanırım sorunu çözdüm ve sorunu çözdüm - sadece istemlerde bana yardım ettikleri için herkese teşekkür etmek istiyorum! Gerçekten minnettarım :D!!

Temelde yanlış gidiyor gibi görünen yer burası - notlar aşağıda - Şimdi ALIŞ DURDURMALARI ve SATICI DURDURMA'lara karşılık gelen ilgili kodlamayı olması gereken yere taşıdım!

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

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