RobotPowerM5 meta4V12

Author: Copyright © 2005
Price Data Components
Indicators Used
Bulls Power indicator Bears Power indicatorIndicator of the average true range
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
RobotPowerM5 meta4V12
ÿþ//+------------------------------------------------------------------+

//|     RobotPowerM5_meta4V12 (RobotBB)(barabashkakvn's edition).mq5 |

//|                                        Copyright © 2005, Company |

//|                                             http://www.funds.com |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2005"

#property link      "http://www.funds.com"



#include <Trade\SymbolInfo.mqh> 

#include <Trade\PositionInfo.mqh>

#include <Trade\Trade.mqh>

#include <Trade\AccountInfo.mqh>

CSymbolInfo    m_symbol;                     // symbol info object

CPositionInfo  m_position;                   // trade position object

CTrade         m_trade;                      // trading object

CAccountInfo   m_account;                    // account info wrapper

//--- A reliable expert,use it on 5 min charts(GBP is best) with

// 150/pips profit limit. 

// No worries, check the results. 

input int      BullBearPeriod =5;

input double   m_lots         = 0.01;

input ushort   m_trailingStep = 10;    // trail step. minimum 10

input ushort   m_takeProfit   = 150;   // take profit. recomended  no more than 150

input ushort   m_stopLoss     = 105;   // stop loss

ulong    m_slippage=30;

// EA identifier. Allows for several co-existing EA with different values.

input string nameEA="Soultrading";

//----

double bull,bear;

double realTP,realSL,b,s,m_sl,m_tp;

bool isBuying=false,isSelling=false,isClosing=false;

ulong          m_ticket;

//---

int    handle_iBullsPower;                      // variable for storing the handle of the iBullsPower indicator 

int    handle_iBearsPower;                      // variable for storing the handle of the iBearsPower indicator 

int    handle_iATR;                             // variable for storing the handle of the iATR indicator 

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   if(m_lots<=0.0)

     {

      Print("The \"volume transaction\" can't be smaller or equal to zero");

      return(INIT_PARAMETERS_INCORRECT);

     }

   if(m_trailingStep<10.0)

     {

      Print("The \"trail step\" can't be smaller 10.0");

      return(INIT_PARAMETERS_INCORRECT);

     }

   m_symbol.Name(Symbol());                           // sets symbol name

   m_trade.SetDeviationInPoints(m_slippage);          // sets deviation

   RefreshRates();

//--- create handle of the indicator iBullsPower

   handle_iBullsPower=iBullsPower(Symbol(),Period(),BullBearPeriod);

//--- if the handle is not created 

   if(handle_iBullsPower==INVALID_HANDLE)

     {

      //--- tell about the failure and output the error code 

      PrintFormat("Failed to create handle of the iBullsPower indicator for the symbol %s/%s, error code %d",

                  Symbol(),

                  EnumToString(Period()),

                  GetLastError());

      //--- the indicator is stopped early 

      return(INIT_FAILED);

     }

//--- create handle of the indicator iBearsPower

   handle_iBearsPower=iBearsPower(Symbol(),Period(),BullBearPeriod);

//--- if the handle is not created 

   if(handle_iBearsPower==INVALID_HANDLE)

     {

      //--- tell about the failure and output the error code 

      PrintFormat("Failed to create handle of the iBearsPower indicator for the symbol %s/%s, error code %d",

                  Symbol(),

                  EnumToString(Period()),

                  GetLastError());

      //--- the indicator is stopped early 

      return(INIT_FAILED);

     }

//--- create handle of the indicator iATR

   handle_iATR=iATR(Symbol(),Period(),5);

//--- if the handle is not created 

   if(handle_iATR==INVALID_HANDLE)

     {

      //--- tell about the failure and output the error code 

      PrintFormat("Failed to create handle of the iATR indicator for the symbol %s/%s, error code %d",

                  Symbol(),

                  EnumToString(Period()),

                  GetLastError());

      //--- the indicator is stopped early 

      return(INIT_FAILED);

     }

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---



  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//--- check for invalid bars and takeprofit

   if(Bars(Symbol(),Period())<200)

     {

      Print("Not enough bars for this strategy - ",nameEA);

      return;

     }

//--- calculate indicators' value 

   calculateIndicators();

//--- control open trades

   int totalPositions=PositionsTotal();

   int numPos=0;

//--- scan all positions...

   for(int cnt=totalPositions-1; cnt>=0; cnt--)

     {

      //--- the next line will check for ONLY market trades, not entry orders

      if(!m_position.SelectByIndex(cnt))

         return;

      //--- only look for this symbol, and only orders from this EA      

      if(m_position.Symbol()==Symbol())

        {

         numPos++;

         //--- check for close signal for bought trade

         if(m_position.PositionType()==POSITION_TYPE_BUY)

           {

            //--- control trailing step

            if(!RefreshRates())

               return;

            if(m_symbol.Bid()-m_position.StopLoss()>(2*m_trailingStep*Point()))

              {

               m_trade.PositionModify(m_position.Ticket(),

                                      m_symbol.Bid()-m_trailingStep*Point(),m_position.TakeProfit());

              }

           }

         else // check sold trade for close signal

           {

            //--- control trailing step

            if(!RefreshRates())

               return;

            if(m_position.StopLoss()-m_symbol.Ask()>(2*m_trailingStep*Point()))

              {

               m_trade.PositionModify(m_position.Ticket(),

                                      m_symbol.Ask()+m_trailingStep*Point(),m_position.TakeProfit());

              }

           }

        }

     }

//--- if there is no open trade for this pair and this EA

   if(numPos<1)

     {

      if(m_account.FreeMargin()<1000*m_lots)

        {

         Print("Not enough money to trade ",m_lots," m_lots. Strategy:",nameEA);

         return;

        }

      //--- check for BUY entry signal

      if(isBuying && !isSelling && !isClosing)

        {

         if(!RefreshRates())

            return;

         m_sl = m_symbol.Ask() - m_stopLoss * Point();

         m_tp = m_symbol.Ask() + m_takeProfit * Point();

         if(m_trade.Buy(m_lots,Symbol(),m_symbol.Ask(),m_sl,m_tp,nameEA+TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES)))

           {

            m_ticket=m_trade.ResultDeal();

           }

         Comment(m_sl);

         if(m_ticket==0)

           {

            Print("Buy (",nameEA,") -> false. Result Retcode: ",m_trade.ResultRetcode(),

                  ", description of result: ",m_trade.ResultRetcodeDescription(),

                  ", ticket of deal: ",m_trade.ResultDeal());

           }

         prtAlert("Day Trading: Buying");

        }

      //--- check for SELL entry signal

      if(isSelling && !isBuying && !isClosing)

        {

         if(!RefreshRates())

            return;

         m_sl = m_symbol.Bid() + m_stopLoss * Point();

         m_tp = m_symbol.Bid() - m_takeProfit * Point();

         if(m_trade.Sell(m_lots,Symbol(),m_symbol.Bid(),m_sl,m_tp,nameEA+TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES)))

           {

            m_ticket=m_trade.ResultDeal();

           }

         if(m_ticket==0)

           {

            Print("Sell (",nameEA,") -> false. Result Retcode: ",m_trade.ResultRetcode(),

                  ", description of result: ",m_trade.ResultRetcodeDescription(),

                  ", ticket of deal: ",m_trade.ResultDeal());

           }

         prtAlert("Day Trading: Selling");

        }

     }

   return;

  }

//+------------------------------------------------------------------+

//|  Calculate indicators' value                                     |

//+------------------------------------------------------------------+

void calculateIndicators()

  {

   bull = iBullsPowerGet(1);

   bear = iBearsPowerGet(1);

   Comment("bull+bear= ",bull+bear);

//b = 1 * Point() + iATRGet(1)*1.5;

//s = 1 * Point() + iATRGet(1)*1.5;

   isBuying  = (bull+bear > 0);

   isSelling = (bull+bear < 0);

   isClosing = false;

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void prtAlert(string str="")

  {

   Print(str);

   Alert(str);

  }

//+------------------------------------------------------------------+

//| Refreshes the symbol quotes data                                 |

//+------------------------------------------------------------------+

bool RefreshRates()

  {

//--- refresh rates

   if(!m_symbol.RefreshRates())

      return(false);

//--- protection against the return value of "zero"

   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)

      return(false);

//---

   return(true);

  }

//+------------------------------------------------------------------+

//| Get value of buffers for the iBullsPower                         |

//+------------------------------------------------------------------+

double iBullsPowerGet(const int index)

  {

   double BullsPower[];

   ArraySetAsSeries(BullsPower,true);

//--- reset error code 

   ResetLastError();

//--- fill a part of the iBullsPower array with values from the indicator buffer that has 0 index 

   if(CopyBuffer(handle_iBullsPower,0,0,index+1,BullsPower)<0)

     {

      //--- if the copying fails, tell the error code 

      PrintFormat("Failed to copy data from the iBullsPower indicator, error code %d",GetLastError());

      //--- quit with zero result - it means that the indicator is considered as not calculated 

      return(0.0);

     }

   return(BullsPower[index]);

  }

//+------------------------------------------------------------------+

//| Get value of buffers for the iBearsPower                         |

//+------------------------------------------------------------------+

double iBearsPowerGet(const int index)

  {

   double BearsPower[];

   ArraySetAsSeries(BearsPower,true);

//--- reset error code 

   ResetLastError();

//--- fill a part of the iBearsPower array with values from the indicator buffer that has 0 index 

   if(CopyBuffer(handle_iBearsPower,0,0,index+1,BearsPower)<0)

     {

      //--- if the copying fails, tell the error code 

      PrintFormat("Failed to copy data from the iBearsPower indicator, error code %d",GetLastError());

      //--- quit with zero result - it means that the indicator is considered as not calculated 

      return(0.0);

     }

   return(BearsPower[index]);

  }

//+------------------------------------------------------------------+

//| Get value of buffers for the iATR                                |

//+------------------------------------------------------------------+

double iATRGet(const int index)

  {

   double ATR[];

   ArraySetAsSeries(ATR,true);

//--- reset error code 

   ResetLastError();

//--- fill a part of the iATR array with values from the indicator buffer that has 0 index 

   if(CopyBuffer(handle_iATR,0,0,index+1,ATR)<0)

     {

      //--- if the copying fails, tell the error code 

      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());

      //--- quit with zero result - it means that the indicator is considered as not calculated 

      return(0.0);

     }

   return(ATR[index]);

  }

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---