stevehopwoodforex.com
https://www.stevehopwoodforex.com/phpBB3/
Print view

Old and defunct Holy Graily Bob
https://www.stevehopwoodforex.com/phpBB3/viewtopic.php?t=3966
Page 118 of 129
Author:  milanese [ Mon Feb 09, 2015 3:04 pm ]
Post subject:  Holy Graily Bob

@admcd24 please attach in future your picture to your post, I you do not know how look there --> http://www.stevehopwoodforex.com/phpBB3/kb.php?a=2
I corrected your post..

Cheers :)

Tommaso
Author:  acedubai [ Mon Feb 09, 2015 3:32 pm ]
Post subject:  Holy Graily Bob

admcd24 » Mon Feb 09, 2015 12:51 pm wrote:Here are my results running 2 demos from 9pm Sunday to 7am today, 10hrs of trading. Trend and wave trades only, no instant execute, all pending, 2 trades per chart.

1hr TF Demo


4hr TF Demo
Did you put a stop loss? Was it any indicator based?
Author:  admcd24 [ Mon Feb 09, 2015 10:07 pm ]
Post subject:  Holy Graily Bob

4 Hr -SL is 80 pips for trend trades, 150 pips TP. 60 pip SL for wave trades, 70 pip TP. GBPNZD is the only pair with range trades true, SL 50, TP 70.

1 Hr - SL 60, TP 80 for trend trades. SL 50, TP 60 for wave trades.

HGB v2t, HGI v 16.04.

Have fun :)
Author:  pierre [ Mon Feb 09, 2015 11:58 pm ]
Post subject:  Holy Graily Bob

admcd24 » Mon Feb 09, 2015 11:07 pm wrote:4 Hr -SL is 80 pips for trend trades, 150 pips TP. 60 pip SL for wave trades, 70 pip TP. GBPNZD is the only pair with range trades true, SL 50, TP 70.

1 Hr - SL 60, TP 80 for trend trades. SL 50, TP 60 for wave trades.

HGB v2t, HGI v 16.04.

Have fun :)

HGB v2t is the version in the first page ?
Thanks
Author:  spgandau [ Tue Feb 10, 2015 3:29 am ]
Post subject:  Holy Graily Bob

SteveHopwood » Sun Feb 08, 2015 5:51 pm wrote:
So sorry. Much as I appreciate your efforts to help I have no guarantee that they would not merely involve me in endless hours of further work on stuff that has nothing to do with my original code. This has happened before and I am not in a hurry to replicate the exercise.

No, I am not a perfect coder. Yes, I am quite good at this stuff these days. I will sort stuff out as it appears on my platform. Until it does, I will ignore it. Do feel free to open your own 'bug-free' thread here; I will support it. Just make sure you are correct first, ok?

:xm:
Thanks for the response. Fair enough! I will be working with version 2t going forward and using HGI 16.03. When I have had a couple of weeks of error-free (or at least fewer error codes), I will get back to you about the possibility of a bug-free thread. In the meantime, thanks for the reply. Enjoy the week!
Author:  SteveHopwood [ Tue Feb 10, 2015 2:55 pm ]
Post subject:  Holy Graily Bob

trendinator saved me some work this week. He found reasons why the wavy lines did not always result in trade closure and fixed the logic errors. :clap: :clap: :clap:

V 2u in post 1, or copy this over the top of bool LookForTradeClosure(int ticket) (line 3853):

Code: Select all

bool LookForTradeClosure(int ticket)
{
   //Close the trade if the close conditions are met.
   //Called from within CountOpenTrades(). Returns true if a close is needed and succeeds, so that COT can increment cc,
   //else returns false

   if(!OrderSelect(ticket, SELECT_BY_TICKET) ) return(true);
   if(OrderSelect(ticket, SELECT_BY_TICKET) && OrderCloseTime() > 0) return(true);

   bool CloseThisTrade=false;
   bool result = false;

   string LineName=TpPrefix+DoubleToStr(ticket,0);
   //Work with the lines on the chart that represent the hidden tp/sl
   double take=ObjectGet(LineName,OBJPROP_PRICE1);
   if(CloseEnough(take,0)) take=OrderTakeProfit();
   LineName=SlPrefix+DoubleToStr(ticket,0);
   double stop=ObjectGet(LineName,OBJPROP_PRICE1);
   if(CloseEnough(stop,0)) stop=OrderStopLoss();

   ///////////////////////////////////////////////////////////////////////////////////////////////////////////
   if(OrderType()==OP_BUY || OrderType() == OP_BUYSTOP)
   {
      //TP
      if(Bid>=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
      //SL
      if(Bid<=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;

      //Trend opposite signal
      if (OrderComment() == TrendTradeComment || (OrderComment() ==TrendMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (TrendCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range signal
         if (TrendCloseOnOppositeTMA)
           // if (TmaStatus == Tmarangesignal)
           if (WaveStatus == Wavesell)
               CloseThisTrade = true; 
      }//if (OrderComment() == TrendTradeComment)
      
      //Range opposite signal
      if (OrderComment() == RangeTradeComment)
      {
         //Opposite arrow of any kind
         if (RangeCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range signal
         if (RangeCloseOnOppositeTMA)
            if (WaveIsSellTrend)
               CloseThisTrade = true;
      }//if (OrderComment() == RangeTradeComment)
      
      //Rad opposite signal
      if (OrderComment() == RadTradeComment || (OrderComment() == RadMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (RadCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range signal
         if (RadCloseOnOppositeTMA)
           //if (TmaStatus == Tmarangesignal)
           if (WaveStatus == Wavesell)
               CloseThisTrade = true;
      }//if (OrderComment() == RadTradeComment)
      
      //Wave opposite signal
      if (OrderComment() == WaveTradeComment || (OrderComment() == WaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (WaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (WaveCloseOnOppositeTMA)
            if (WaveStatus == Wavesell)
               CloseThisTrade = true;
      }//if (OrderComment() == WaveTradeComment)
      
      //TrendWave opposite signal
      if (OrderComment() == TrendWaveTradeComment || (OrderComment() ==TrendWaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (TrendWaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (TrendWaveCloseOnOppositeTMA)
            if (WaveStatus == Wavesell)
               CloseThisTrade = true;
      }//if (OrderComment() == TrendWaveTradeComment)
      
      
   }//if (OrderType() == OP_BUY)

   ///////////////////////////////////////////////////////////////////////////////////////////////////////////
   if(OrderType()==OP_SELL || OrderType() == OP_SELLSTOP)
   {
      //TP
      if(Bid<=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
      //SL
      if(Bid>=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;

      //Opposite arrow of any kind    
      if (OrderComment() == TrendTradeComment || (OrderComment() == TrendMultiTradeComment))
      {
         //Opposite trend arrow
         if (TrendCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;

         //TMA Range signal
         if (TrendCloseOnOppositeTMA)
            //if (TmaStatus == Tmarangesignal)
            if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == TrendTradeComment)
      
      //Range opposite signal      
      if (OrderComment() == RangeTradeComment)
      {
         //Opposite arrow of any kind
         if (RangeCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;

         //TMA low
         if (RangeCloseOnOppositeTMA)
          // if (WaveIsBuyTrend)
          if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == RangeTradeComment)
      
      //Rad opposite signal      
      if (OrderComment() == RadTradeComment || (OrderComment() ==RadMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (RadCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;

         //TMA range signal
         if (RadCloseOnOppositeTMA)
           // if (TmaStatus == Tmarangesignal)
           if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == RangeTradeComment)

      //Wave opposite signal
      if (OrderComment() == WaveTradeComment || (OrderComment() == WaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (WaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (WaveCloseOnOppositeTMA)
            if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == WaveTradeComment)
         
      //TrendWave opposite signal
      if (OrderComment() == TrendWaveTradeComment || (OrderComment() == TrendWaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (TrendWaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (TrendWaveCloseOnOppositeTMA)
            //if (TmaStatus == Tmarangesignal)
            if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == TrendWaveTradeComment)

         
   }//if (OrderType() == OP_SELL)

   ///////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   if (CloseThisTrade)
   {
      if (OrderType() < 2)//Market trades
         result = CloseOrder(ticket);
      else
         result = OrderDelete(ticket);
            
      //Actions when trade close succeeds
      if (result)
      {
         DeletePendingPriceLines();
         TicketNo = -1;//TicketNo is the most recently trade opened, so this might need editing in a multi-trade EA
         OpenTrades--;//Rather than OpenTrades = 0 to cater for multi-trade EA's
         return(true);//Makes CountOpenTrades increment cc to avoid missing out ccounting a trade
      }//if (result)
   
      //Actions when trade close fails
      if (!result)
      {
         return(false);//Do not increment cc
      }//if (!result)
   }//if (CloseThisTrade)
   
   //Got this far, so no trade closure
   return(false);//Do not increment cc

}//End bool LookForTradeClosure()
:xm:
Author:  trendinator [ Tue Feb 10, 2015 3:20 pm ]
Post subject:  Holy Graily Bob

SteveHopwood » Wed Feb 11, 2015 12:55 am wrote:trendinator saved me some work this week. He found reasons why the wavy lines did not always result in trade closure and fixed the logic errors. :clap: :clap: :clap:

V 2u in post 1, or copy this over the top of bool LookForTradeClosure(int ticket) (line 3853):

Code: Select all

bool LookForTradeClosure(int ticket)
{
   //Close the trade if the close conditions are met.
   //Called from within CountOpenTrades(). Returns true if a close is needed and succeeds, so that COT can increment cc,
   //else returns false

   if(!OrderSelect(ticket, SELECT_BY_TICKET) ) return(true);
   if(OrderSelect(ticket, SELECT_BY_TICKET) && OrderCloseTime() > 0) return(true);

   bool CloseThisTrade=false;
   bool result = false;

   string LineName=TpPrefix+DoubleToStr(ticket,0);
   //Work with the lines on the chart that represent the hidden tp/sl
   double take=ObjectGet(LineName,OBJPROP_PRICE1);
   if(CloseEnough(take,0)) take=OrderTakeProfit();
   LineName=SlPrefix+DoubleToStr(ticket,0);
   double stop=ObjectGet(LineName,OBJPROP_PRICE1);
   if(CloseEnough(stop,0)) stop=OrderStopLoss();

   ///////////////////////////////////////////////////////////////////////////////////////////////////////////
   if(OrderType()==OP_BUY || OrderType() == OP_BUYSTOP)
   {
      //TP
      if(Bid>=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
      //SL
      if(Bid<=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;

      //Trend opposite signal
      if (OrderComment() == TrendTradeComment || (OrderComment() ==TrendMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (TrendCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range signal
         if (TrendCloseOnOppositeTMA)
           // if (TmaStatus == Tmarangesignal)
           if (WaveStatus == Wavesell)
               CloseThisTrade = true; 
      }//if (OrderComment() == TrendTradeComment)
      
      //Range opposite signal
      if (OrderComment() == RangeTradeComment)
      {
         //Opposite arrow of any kind
         if (RangeCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range signal
         if (RangeCloseOnOppositeTMA)
            if (WaveIsSellTrend)
               CloseThisTrade = true;
      }//if (OrderComment() == RangeTradeComment)
      
      //Rad opposite signal
      if (OrderComment() == RadTradeComment || (OrderComment() == RadMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (RadCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range signal
         if (RadCloseOnOppositeTMA)
           //if (TmaStatus == Tmarangesignal)
           if (WaveStatus == Wavesell)
               CloseThisTrade = true;
      }//if (OrderComment() == RadTradeComment)
      
      //Wave opposite signal
      if (OrderComment() == WaveTradeComment || (OrderComment() == WaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (WaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (WaveCloseOnOppositeTMA)
            if (WaveStatus == Wavesell)
               CloseThisTrade = true;
      }//if (OrderComment() == WaveTradeComment)
      
      //TrendWave opposite signal
      if (OrderComment() == TrendWaveTradeComment || (OrderComment() ==TrendWaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (TrendWaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenddownarrow || RadArrowStatus == Raddownarrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (TrendWaveCloseOnOppositeTMA)
            if (WaveStatus == Wavesell)
               CloseThisTrade = true;
      }//if (OrderComment() == TrendWaveTradeComment)
      
      
   }//if (OrderType() == OP_BUY)

   ///////////////////////////////////////////////////////////////////////////////////////////////////////////
   if(OrderType()==OP_SELL || OrderType() == OP_SELLSTOP)
   {
      //TP
      if(Bid<=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
      //SL
      if(Bid>=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;

      //Opposite arrow of any kind    
      if (OrderComment() == TrendTradeComment || (OrderComment() == TrendMultiTradeComment))
      {
         //Opposite trend arrow
         if (TrendCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;

         //TMA Range signal
         if (TrendCloseOnOppositeTMA)
            //if (TmaStatus == Tmarangesignal)
            if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == TrendTradeComment)
      
      //Range opposite signal      
      if (OrderComment() == RangeTradeComment)
      {
         //Opposite arrow of any kind
         if (RangeCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;

         //TMA low
         if (RangeCloseOnOppositeTMA)
          // if (WaveIsBuyTrend)
          if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == RangeTradeComment)
      
      //Rad opposite signal      
      if (OrderComment() == RadTradeComment || (OrderComment() ==RadMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (RadCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;

         //TMA range signal
         if (RadCloseOnOppositeTMA)
           // if (TmaStatus == Tmarangesignal)
           if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == RangeTradeComment)

      //Wave opposite signal
      if (OrderComment() == WaveTradeComment || (OrderComment() == WaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (WaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (WaveCloseOnOppositeTMA)
            if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == WaveTradeComment)
         
      //TrendWave opposite signal
      if (OrderComment() == TrendWaveTradeComment || (OrderComment() == TrendWaveMultiTradeComment))
      {
         //Opposite arrow of any kind
         if (TrendWaveCloseOnOppositeArrow)
            if (TrendArrowStatus == Trenduparrow || RadArrowStatus == Raduparrow)
               CloseThisTrade = true;
         
         //TMA Range end or wave flip signal
         if (TrendWaveCloseOnOppositeTMA)
            //if (TmaStatus == Tmarangesignal)
            if (WaveStatus == Wavebuy)
               CloseThisTrade = true;
      }//if (OrderComment() == TrendWaveTradeComment)

         
   }//if (OrderType() == OP_SELL)

   ///////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   if (CloseThisTrade)
   {
      if (OrderType() < 2)//Market trades
         result = CloseOrder(ticket);
      else
         result = OrderDelete(ticket);
            
      //Actions when trade close succeeds
      if (result)
      {
         DeletePendingPriceLines();
         TicketNo = -1;//TicketNo is the most recently trade opened, so this might need editing in a multi-trade EA
         OpenTrades--;//Rather than OpenTrades = 0 to cater for multi-trade EA's
         return(true);//Makes CountOpenTrades increment cc to avoid missing out ccounting a trade
      }//if (result)
   
      //Actions when trade close fails
      if (!result)
      {
         return(false);//Do not increment cc
      }//if (!result)
   }//if (CloseThisTrade)
   
   //Got this far, so no trade closure
   return(false);//Do not increment cc

}//End bool LookForTradeClosure()
:xm:
actually credit to WhoKnows. he pointed it out.
Author:  SteveHopwood [ Tue Feb 10, 2015 4:02 pm ]
Post subject:  Holy Graily Bob

Thanks WhoKnows. Much appreciated. :clap: :clap: :clap:

:xm:
Author:  SteveHopwood [ Tue Feb 10, 2015 4:12 pm ]
Post subject:  Holy Graily Bob

V 2v is in post 1.

Prompted by a request from Bob, I finally got around to something I have intended doing for a while. There is a new input in the Wavy Line Trading inputs section - WaveTradeBlueToYellowOnly. When 'true', the default, this forces HGB to trade from the blue wavy line only, closing them again when a yellow wavy line appears.

Don't put this on your live accounts just yet. I thought this would be complicated but the alterations I have made took about 5 minutes.

Coders: I have changed the TMA constants at line 40 to reflect the wavy line colours. Then find the new input at line 288. There is an extra conditional at line 3588 that allows the yellow wavy lines to be used for trading rather than only for closing blue line trades. Is all this deceptively simple, do you think?

:xm:
Author:  acostafulano [ Tue Feb 10, 2015 4:31 pm ]
Post subject:  Holy Graily Bob

Steve, I think the following is missing from line 2297;

//Only allow 1 trade per candle
if (WaveMostRecentBuyTime >= iTime(Symbol(), TradingTimeFrame, 0) )
return(false);


And Line 2316:

//Only allow 1 trade per candle
if (WaveMostRecentSellTime >= iTime(Symbol(), TradingTimeFrame, 0) )
return(false);

Which may be causing some multiple Wave trades per candle

(Same for TrendWave)
All times are UTC Page 118 of 129