pattern_v16

Author: Copyright 2017, Sergey Pavlov (DC2008)
0 Views
0 Downloads
0 Favorites
pattern_v16
ÿþ//+------------------------------------------------------------------+

//|                                                      pattern.mq5 |

//|                                  PATTERN: Abstract trading robot |

//|                           Copyright 2017, Sergey Pavlov (DC2008) |

//|                              http://www.mql5.com/ru/users/dc2008 |

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

#property copyright     "Copyright 2017, Sergey Pavlov (DC2008)"

#property link          "http://www.mql5.com/ru/users/dc2008"

#property version       "1.00"

#property description   "1AB@0:B=K9 B>@3>2K9 @>1>B - ?0BB5@= "

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

//| !B@C:BC@0 =0?@02;5=8O B>@3>2;8                                   |

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

struct sDirection

  {

   bool              Buy;     // ?>:C?05<

   bool              Sell;    // ?@>40Q<

  };

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

//| 1AB@0:B=0O <>45;L C?@02;5=8O :0?8B0;><                          |

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

interface AMM

  {

//--- @0AGQB @07<5@0 ;>B0

   double Lots();

//--- <5B>4K 8=B5@D59A0 ?> C<>;G0=8N 8<5NB public-4>ABC? 

  };

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

//| 1AB@0:B=K9 A83=0;                                               |

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

interface ASignal

  {

//--- 35=5@8@>20BL A83=0;K (70?CAB8BL 35=5@0B>@ A83=0;>2)

   sDirection Generator();

//--- <5B>4K 8=B5@D59A0 ?> C<>;G0=8N 8<5NB public-4>ABC? 

  };

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

//| 1AB@0:B=K9 B>@3>2K9 70?@>A                                      |

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

interface ARequest

  {

//--- >B?@028BL B>@3>2K9 70?@>A

   bool Request(const double lot,sDirection &direct);

//--- <5B>4K 8=B5@D59A0 ?> C<>;G0=8N 8<5NB public-4>ABC? 

  };

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

//| 1AB@0:B=>5 A>?@>2>645=85 ?>78F88                                |

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

interface ASupport

  {

//--- A>?@>2>640BL >B:@KBCN ?>78F8N

   void Support();

//--- <5B>4K 8=B5@D59A0 ?> C<>;G0=8N 8<5NB public-4>ABC? 

  };

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

//| 1AB@0:B=0O (<>45;L) AB@0B538O B>@3>2>3> @>1>B0                  |

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

interface AStrategy

  {

//--- 1AB@0:B=0O AB@0B538O C<55B C?@02;OBL :0?8B0;><

   AMM      *MoneyManagement();



//--- 1AB@0:B=0O AB@0B538O C<55B 35=5@8@>20BL B>@3>2K5 A83=0;K 

   ASignal  *CreateSignal();



//--- 1AB@0:B=0O AB@0B538O C<55B >B?@02;OBL B>@3>2K5 70?@>AK

   ARequest *TradeRequest();



//--- 1AB@0:B=0O AB@0B538O C<55B A>?@>2>640BL >B:@KBCN ?>78F8N 

   ASupport *PositionSupport();



//--- 1AB@0:B=0O <5B>4 >1@01>B:8 A>1KB8O OnInit()

   int  OnInitStrategy();



//--- 1AB@0:B=0O <5B>4 >1@01>B:8 A>1KB8O OnTick()

   void OnTickStrategy();



//--- 1AB@0:B=0O <5B>4 >1@01>B:8 A>1KB8O OnDeinit()

   void OnDeinitStrategy(const int reason);



//--- 1AB@0:B=0O <5B>4 >1@01>B:8 A>1KB8O OnTrade()

   void OnTradeStrategy();

  };

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

//| 1JQ< A45;:8 >B25G05B A?5F8D8:0F88 AMM                           |

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

class CVolume : public AMM

  {

private:

   double            m_lot;

public:

   //--- @0AGQB @07<5@0 ;>B0

   double Lots() {Print("1JQ< A45;:8 @0AG8B0="); return m_lot;}



                     CVolume( void ) {Print("!>740=0 <>45;L @0AGQB0 ;>B0");}

                    ~CVolume( void ) {Print("#=8GB>65=0 <>45;L @0AGQB0 ;>B0");}

  };

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

//| ">@3>2K9 A83=0; >B25G05B A?5F8D8:0F88 ASignal                    |

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

class CSignal : public ASignal

  {

private:

   sDirection        m_signal;

public:

   //--- 35=5@8@>20BL A83=0;K (70?CAB8BL 35=5@0B>@ A83=0;>2)

   sDirection        Generator() {Print(">8A: B>@3>2>3> A83=0;0"); return m_signal;}



                     CSignal( void ) {Print("!>740= 35=5@0B>@ B>@3>2KE A83=0;>2");}

                    ~CSignal( void ) {Print("#=8GB>65= 35=5@0B>@ B>@3>2KE A83=0;>2");}

  };

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

//| ">@3>2K9 70?@>A >B25G05B A?5F8D8:0F88 ARequest                   |

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

class CRequest : public ARequest

  {

private:

   bool              m_request;

public:

   //--- >B?@02;OBL B>@3>2K9 70?@>A

   bool Request(const double lot,sDirection &direct) {Print("">@3>2K9 70?@>A >B?@02;5="); return m_request;}



                     CRequest( void ) {Print("!>740=0 <>45;L B>@3>2KE 70?@>A>2");}

                    ~CRequest( void ) {Print("#=8GB>65=0 <>45;L B>@3>2KE 70?@>A>2");}

  };

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

//| !>?@>2>645=85 ?>78F88 >B25G05B A?5F8D8:0F88 ASupport             |

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

class CSupport : public ASupport

  {

public:

   //--- A>?@>2>640BL >B:@KBCN ?>78F8N

   void Support() {Print("!>?@>2>6405< B>@3>2CN ?>78F8N");}



                     CSupport( void ) {Print("!>740=0 <>45;L A>?@>2>645=8O ?>78F88");}

                    ~CSupport( void ) {Print("#=8GB>65=0 <>45;L A>?@>2>645=8O ?>78F88");}

  };

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

//| ">@3>2K9 A>25B=8: >B25G05B A?5F8D8:0F88 AStrategy                |

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

class CStrategy : public AStrategy

  {

public:

   //--- AB@0B538O C<55B C?@02;OBL :0?8B0;><

   AMM      *MoneyManagement()

     {return new CVolume();}



   //--- AB@0B538O C<55B 35=5@8@>20BL B>@3>2K5 A83=0;K 

   ASignal  *CreateSignal()

     {return new CSignal();}



   //--- AB@0B538O C<55B >B?@02;OBL B>@3>2K5 70?@>AK

   ARequest *TradeRequest()

     {return new CRequest();}



   //--- AB@0B538O C<55B A>?@>2>640BL >B:@KBCN ?>78F8N 

   ASupport *PositionSupport()

     {return new CSupport();}



   //--- <5B>4 >1@01>B:8 A>1KB8O OnInit()

   int  OnInitStrategy()

     {Print(">;CG5=> A>1KB85 OnInit()"); return(INIT_SUCCEEDED);}



   //--- <5B>4 >1@01>B:8 A>1KB8O OnTick()

   void OnTickStrategy()

     {Print(">;CG5=> A>1KB85 OnTick()");}



   //--- <5B>4 >1@01>B:8 A>1KB8O OnDeinit()

   void OnDeinitStrategy(const int reason)

     {Print(">;CG5=> A>1KB85 OnDeinit()");}



   //--- <5B>4 >1@01>B:8 A>1KB8O OnTrade()

   void OnTradeStrategy()

     {Print(">;CG5=> A>1KB85 OnTrade()");}



                     CStrategy(void) {Print("!>740= B>@3>2K9 A>25B=8:");}

                    ~CStrategy(void) {Print("#=8GB>65= B>@3>2K9 A>25B=8:");}

  };

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

//| >=D83C@0B>@ B>@3>2>9 AB@0B5388                                  |

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

class CConfigurator

  {

private:

   AStrategy        *strategy;

   AMM              *trade_volume;

   ASignal          *trade_signal;

   ARequest         *trade_Request;

   ASupport         *trade_Support;



   sDirection        m_buy_or_sell;

   double            m_volume;

public:

   int Init()

     {

      //--- B@0=A;OF8O A>1KB8O OnInit()

      strategy.OnInitStrategy();

      //---

      return(INIT_SUCCEEDED);

     }

   void Tick()

     {

      //--- B@0=A;OF8O A>1KB8O OnTick()

      strategy.OnTickStrategy();

      //--- @0AGQB @07<5@0 ;>B0

      m_volume=trade_volume.Lots();

      //--- 35=5@8@>20BL A83=0;K

      m_buy_or_sell=trade_signal.Generator();

      //--- >B?@028BL B>@3>2K9 70?@>A

      trade_Request.Request(m_volume,m_buy_or_sell);

      //--- A>?@>2>640BL >B:@KBCN ?>78F8N

      trade_Support.Support();

     }

   void Trade()

     {

      //--- B@0=A;OF8O A>1KB8O OnTrade()

      strategy.OnTradeStrategy();

     }

   void Deinit(const int reason)

     {

      //--- B@0=A;OF8O A>1KB8O OnDeinit()

      strategy.OnDeinitStrategy(reason);

     }

   void CConfigurator(void)

     {

      //--- A>740Q< >1J5:B B>@3>2>9 AB@0B5388 

      strategy=new CStrategy();

      //--- A>740Q< >1J5:BK <>4C;59 @>1>B0

      trade_volume   =strategy.MoneyManagement();

      trade_signal   =strategy.CreateSignal();

      trade_Request  =strategy.TradeRequest();

      trade_Support  =strategy.PositionSupport();

     }

   void ~CConfigurator(void)

     {

      //--- C=8GB>605< A>740==K5 >1J5:BK

      delete trade_volume;

      delete trade_signal;

      delete trade_Request;

      delete trade_Support;

      delete strategy;

     }

  };



CConfigurator expert;

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

//| Expert initialization function                                   |

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

int OnInit()

  {

   expert.Init();

   return(INIT_SUCCEEDED);

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

   expert.Tick();

  }

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

//| Trade function                                                   |

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

void OnTrade()

  {

   expert.Trade();

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

   expert.Deinit(reason);

  }

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



// !>>1I5=8O 1AB@0:B=>3> B>@3>2>3> @>1>B0



//2017.10.23 13:47:20.284	pattern (USDJPY,M1)	!>740= B>@3>2K9 A>25B=8:

//2017.10.23 13:47:20.284	pattern (USDJPY,M1)	!>740=0 <>45;L @0AGQB0 ;>B0

//2017.10.23 13:47:20.284	pattern (USDJPY,M1)	!>740= 35=5@0B>@ B>@3>2KE A83=0;>2

//2017.10.23 13:47:20.284	pattern (USDJPY,M1)	!>740=0 <>45;L B>@3>2KE 70?@>A>2

//2017.10.23 13:47:20.284	pattern (USDJPY,M1)	!>740=0 <>45;L A>?@>2>645=8O ?>78F88

//2017.10.23 13:47:20.284	pattern (USDJPY,M1)	>;CG5=> A>1KB85 OnInit()

//2017.10.23 13:47:29.156	pattern (USDJPY,M1)	>;CG5=> A>1KB85 OnTick()

//2017.10.23 13:47:29.156	pattern (USDJPY,M1)	1JQ< A45;:8 @0AG8B0=

//2017.10.23 13:47:29.156	pattern (USDJPY,M1)	>8A: B>@3>2>3> A83=0;0

//2017.10.23 13:47:29.156	pattern (USDJPY,M1)	">@3>2K9 70?@>A >B?@02;5=

//2017.10.23 13:47:29.156	pattern (USDJPY,M1)	!>?@>2>6405< B>@3>2CN ?>78F8N

//...

//2017.10.23 13:47:30.256	pattern (USDJPY,M1)	>;CG5=> A>1KB85 OnDeinit()

//2017.10.23 13:47:30.256	pattern (USDJPY,M1)	#=8GB>65=0 <>45;L @0AGQB0 ;>B0

//2017.10.23 13:47:30.256	pattern (USDJPY,M1)	#=8GB>65= 35=5@0B>@ B>@3>2KE A83=0;>2

//2017.10.23 13:47:30.256	pattern (USDJPY,M1)	#=8GB>65=0 <>45;L B>@3>2KE 70?@>A>2

//2017.10.23 13:47:30.256	pattern (USDJPY,M1)	#=8GB>65=0 <>45;L A>?@>2>645=8O ?>78F88

//2017.10.23 13:47:30.256	pattern (USDJPY,M1)	#=8GB>65= B>@3>2K9 A>25B=8:

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 ---