Please have good communication, reply to comments, and have attention to detail.
Have expert I need help with. EA's pretty much working except for trail orders*.
All trail inputs
extern bool TrailByATR = true; extern bool TrailByMAHL = true; extern bool SpreadStopAtHalfRisk = true; input double TrailDefaultRisk = 250;
The trail module*
void TrailOrders() { //+-----------------------------------------------------------------|| for(int intCntr=OrdersTotal(); intCntr>0; intCntr--) { if( !OrderSelect(intCntr,SELECT_BY_POS,MODE_TRADES) ){ continue; } if( !OrderMagicNumber()==intMagic() ){ continue; } //- switch(OrderType()) { case OP_BUY: {//NormalizeDouble( OrderOpenPrice()-dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ), Digits); //TrailBack double spread=Ask-Bid; double stoploss=OrderStopLoss(); double openprice=OrderOpenPrice(); if( Ask-(spread)<=stoploss && stoploss>=openprice-(TrailDefaultRisk*Point) && stoploss!=Ask-(spread) ){ ModifyStop( Ask-(spread) ); } //ResetTrail if( Ask>=OrderOpenPrice()-dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ) && stoploss<OrderOpenPrice()-dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ) ){ ModifyStop( OrderOpenPrice()-dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ) ); } //SpreadProfit if( Ask-openprice>=dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) )/2 && stoploss<openprice+(Ask+Bid) ){ ModifyStop( openprice+(Ask-Bid) ); } //TrailRiskToReward if( Ask-stoploss>dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) )*2 ){ ModifyStop( Ask-dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) )*2 ); } } break; case OP_SELL: {//NormalizeDouble( OrderOpenPrice()+dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ), Digits); //TrailBack double spread=Ask-Bid; double stoploss=OrderStopLoss(); double openprice=OrderOpenPrice(); if( stoploss>=Bid+(spread) && stoploss<=openprice+(TrailDefaultRisk*Point) && stoploss!=Bid+(spread) ){ ModifyStop( Bid+(spread) ); } //ResetTrail if( Bid<=OrderOpenPrice()+dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ) && stoploss>OrderOpenPrice()+dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ) ){ ModifyStop( OrderOpenPrice()+dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) ) ); } //SpreadProfit if( OrderOpenPrice()-Bid>=dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) )/2 && stoploss>OrderOpenPrice()-(Ask+Bid) ){ ModifyStop( OrderOpenPrice()-(Ask-Bid) ); } //TrailRiskToReward if( stoploss-Bid>dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) )*2 ){ ModifyStop( Bid+dRiskAmt( iBarShift(strSymbol,intPeriod,OrderOpenTime()) )*2 ); } } break; } } //+-----------------------------------------------------------------|| } //+-----------------------------------------------------------------// void ModifyStop(double dblStop) { for(int iRetries=Retries; iRetries>0; iRetries--) { while(IsTradeContextBusy() && !IsStopped()){Sleep(100);} if( OrderModify(OrderTicket(),OrderOpenPrice(),dblStop,OrderTakeProfit(),0,CLR_NONE) ) { return; } } //- }
The risk module( risk and indicators are working fine. )
double dRiskAmt(int bar) { //+-----------------------------------------------------------------|| double TotalRisk=0; double RiskAmt=0; if( !TrailByMAHL && !TrailByATR ) { if( ( TrailDefaultRisk*Point )>( (Ask-Bid)*3 ) ) { TotalRisk+=( TrailDefaultRisk*Point ); } else { TotalRisk+=( (Ask-Bid)*3 ); } } else { if( TrailByMAHL ) { RiskAmt=dblMAHL(bar); if( RiskAmt>( TrailDefaultRisk*Point ) ){ TotalRisk+=( TrailDefaultRisk*Point ); } //too high else if( RiskAmt<( (Ask-Bid)*3 ) ) { TotalRisk+=( TrailDefaultRisk*Point ); } //too low else { TotalRisk+=RiskAmt; } } if( TrailByATR ) { RiskAmt=dblATR(bar); if( RiskAmt>( TrailDefaultRisk*Point ) ){ TotalRisk+=( TrailDefaultRisk*Point ); } //too high else if( RiskAmt<( (Ask-Bid)*3 ) ) { TotalRisk+=( TrailDefaultRisk*Point ); } //too low else { TotalRisk+=RiskAmt; } } } if( TotalRisk==0 ){ TotalRisk+=( TrailDefaultRisk*Point ); } //+-----------------------------------------------------------------|| return(TotalRisk); }