Sì, lo stavo guardando perché tu l'hai evidenziato, grazie! Ho intenzione di scomporre (so che mi è stato detto di farlo!) specificamente l'intera formula e seguirla fino a dove sta andando male. Al momento non riesco a capire perché sta stampando uno "0" per pips_to_ssl quando questo non è nemmeno usato per l'ordine pendente sulla sezione di back-testing dove stampa questo zero divide...
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.0212:17:042001.02.1216:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - loss_for_1_lot1 = 0.0 || The formula forthis 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.0212:17:042001.02.1216:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - pips_to_ssl = 0 || The formula forthis 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.0212:28:222001.02.1216: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.0212:17:042001.02.1216: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.0212:17:042001.02.1216: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.0212:36:242001.02.1216:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: Sell_Pad = 0.091 | which is from ATR_Pad: 0.0911
Ok - Quindi ecco in ordine di errore dall'alto verso il basso con il codice e le stampe corrispondenti all'evento "zero divide" dove un ordine BUY_STOP è effettivamente buttato fuori, ma l'errore zero divide deriva dal mio codice di ordine sell pending?
Ok, penso di aver sistemato e risolto il problema - voglio solo ringraziare tutti per avermi aiutato con i suggerimenti! Lo apprezzo davvero :D!
Quindi fondamentalmente questo è il punto in cui sembra essere andato storto - le note sono qui sotto - ora ho spostato la codifica rilevante che corrisponde a BUYSTOPS e SELLSTOPS dove dovrebbe essere!
//+------------------------------------------------------------------+//| 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--//
...
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Sì, lo stavo guardando perché tu l'hai evidenziato, grazie! Ho intenzione di scomporre (so che mi è stato detto di farlo!) specificamente l'intera formula e seguirla fino a dove sta andando male. Al momento non riesco a capire perché sta stampando uno "0" per pips_to_ssl quando questo non è nemmeno usato per l'ordine pendente sulla sezione di back-testing dove stampa questo zero divide...
Non è pips_to_bsl che mi dà lo "0"... Strano....
Ok, penso di aver sistemato e risolto il problema - voglio solo ringraziare tutti per avermi aiutato con i suggerimenti! Lo apprezzo davvero :D!
Quindi fondamentalmente questo è il punto in cui sembra essere andato storto - le note sono qui sotto - ora ho spostato la codifica rilevante che corrisponde a BUYSTOPS e SELLSTOPS dove dovrebbe essere!