Exp_Fishing

Price Data Components
0 Views
0 Downloads
0 Favorites
Exp_Fishing
ÿþ//+------------------------------------------------------------------+

//|                                                  Exp_Fishing.mq5 |

//|                               Copyright © 2016, %;KAB>2 ;048<8@ |

//|                                                cmillion@narod.ru |

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

#property copyright "Copyright © 2016, http://cmillion.ru"

#property link      "cmillion@narod.ru"

#property version   "1.00"

#property description   "-:A?5@B >B:@K205B ?>78F8N ?>A;5 =0?@02;5==>3> 42865=8O F5=K 8 ?@>872>48B 4>;82:8 : ACI5AB2CNI59 ?>78F88 ?@8 42865=88 F5=K 2 ?@>D8F8B=>< =0?@02;5=88."

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

//  ">@3>2K5 0;3>@8B<K                           | 

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

#include <TradeAlgorithms.mqh>

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

//|  5@5G8A;5=85 4;O 20@80=B>2 @0AGQB0 ;>B0     |

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

/*enum MarginMode  - ?5@5G8A;5=85 >1JO2;5=> 2 D09;5 TradeAlgorithms.mqh

  {

   FREEMARGIN=0,     //MM >B A2>1>4=KE A@54AB2 =0 AGQB5

   BALANCE,          //MM >B 10;0=A0 A@54AB2 =0 AGQB5

   LOSSFREEMARGIN,   //MM ?> C1KB:0< >B A2>1>4=KE A@54AB2 =0 AGQB5

   LOSSBALANCE,      //MM ?> C1KB:0< >B 10;0=A0 A@54AB2 =0 AGQB5

   LOT               //>B 157 87<5=5=8O

  }; */

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

//| E>4=K5 ?0@0<5B@K 8=48:0B>@0 M:A?5@B0        |

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

input double MM=0.1;              //>;O D8=0=A>2KE @5AC@A>2 >B 45?>78B0 2 4>;82>G=>9 A45;:5

input MarginMode MMMode=LOT;      //A?>A>1 >?@545;5=8O @07<5@0 ;>B0

input uint    PriceStep=300;     //H03 F5=>2>9 A5B:8 2 ?C=:B0E 4;O 4>;82:8 8;8 >B:@K20=8O ?>78F88

input uint  PosTotal=10;          //:>;8G5AB2> 4>;82>G=KE A45;>:

input uint    StopLoss_=1000;     //AB>?;>AA 2 ?C=:B0E

input uint    TakeProfit_=2000;   //B59:?@>D8B 2 ?C=:B0E

input int    Deviation_=10;       //<0:A. >B:;>=5=85 F5=K 2 ?C=:B0E

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

//---- 1JO2;5=85 F5;KE ?5@5<5==KE 4;O E@0=5=8O ?5@8>40 3@0D8:0 2 A5:C=40E 

int TimeShiftSec;

//---- 1JO2;5=85 F5;KE ?5@5<5==KE 4;O E5=4;>2 8=48:0B>@>2

int InpInd_Handle;

//---- >1JO2;5=85 F5;KE ?5@5<5==KE =0G0;0 >BAG5B0 40==KE

int min_rates_total;

double dPriceStep;

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

//| Expert initialization function                                   |

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

int OnInit()

  {

//---- 8=8F80;870F8O ?5@5<5==>9 4;O E@0=5=8O ?5@8>40 3@0D8:0 2 A5:C=40E  

   TimeShiftSec=PeriodSeconds(PERIOD_CURRENT);

//---- =8F80;870F8O ?5@5<5==KE =0G0;0 >BAGQB0 40==KE

   min_rates_total=2;

   dPriceStep=PriceStep*_Point;

//--- 7025@H5=85 8=8F80;870F88

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//----

   GlobalVariableDel_(Symbol());

//----

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AGQB0

   if(Bars(Symbol(),PERIOD_CURRENT)<min_rates_total) return;



//---- 1JO2;5=85 AB0B8G5A:8E ?5@5<5==KE

   static bool Recount=true;

   static bool ReBUY_Open=false,ReSELL_Open=false;

   static datetime UpSignalTime,DnSignalTime;

   static CIsNewBar NB;

   static string RePosComment="";

   bool BUY_Open=false,SELL_Open=false;

//---- >?@545;O5< A83=0; 4;O >B:@K20=8O ?5@2>9 ?>78F88

   if(!PositionSelect(Symbol()))

     {

      double iClose[1],iOpen[1];

      if(CopyClose(Symbol(),PERIOD_CURRENT,0,1,iClose)<=0) return;

      if(CopyOpen(Symbol(),PERIOD_CURRENT,0,1,iOpen)<=0) return;

      double dPrice=iClose[0]-iOpen[0];

      if(dPrice>dPriceStep) BUY_Open=true;

      if(-dPrice>dPriceStep) SELL_Open=true;

      UpSignalTime=datetime(SeriesInfoInteger(Symbol(),PERIOD_CURRENT,SERIES_LASTBAR_DATE))+TimeShiftSec;

      DnSignalTime=datetime(SeriesInfoInteger(Symbol(),PERIOD_CURRENT,SERIES_LASTBAR_DATE))+TimeShiftSec;

     }



//---- >?@545;O5< A83=0; 4;O 4>;82:8 =0 ?>A;54=5< 70:@KB>< 10@5

   if(NB.IsNewBar(Symbol(),PERIOD_CURRENT) || Recount) // ?@>25@:0 =0 ?>O2;5=85 =>2>3> 10@0

     {

      //---- >1=C;8< B>@3>2K5 A83=0;K

      ReBUY_Open=false;

      ReSELL_Open=false;

      Recount=false;

      UpSignalTime=datetime(SeriesInfoInteger(Symbol(),PERIOD_CURRENT,SERIES_LASTBAR_DATE))+TimeShiftSec;

      DnSignalTime=datetime(SeriesInfoInteger(Symbol(),PERIOD_CURRENT,SERIES_LASTBAR_DATE))+TimeShiftSec;



      //---- >;CG5=85 A83=0;>2 4;O 4>;82>:

      if(PositionSelect(Symbol())) //@>25@:0 =0 =0 =0;8G85 >B:@KB>9 ?>78F88

        {

         //---- >;CG8< G8A;> 4>;82>: 2 ?>78F88

         string PosComment=PositionGetString(POSITION_COMMENT); //:><<5=B0@89 : ?>78F88

         int OrderTotal;

         double OpenPrice,LastLot;

         if(PosComment=="")

           {

            OrderTotal=0; //G8A;> 4>;82>: 2 ?>78F88

            OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN); //&5=0 >B:@KB8O ?>A;54=59 4>;82:8

            LastLot=PositionGetDouble(POSITION_VOLUME); // 07<5@ ;>B0 ?>A;54=59 4>;82:8

           }

         else

           {

            OrderTotal=GetTotalFromStringComment(PosComment); //G8A;> 4>;82>: 2 ?>78F88

            OpenPrice=GetPriceFromStringComment(PosComment); //&5=0 >B:@KB8O ?>A;54=59 4>;82:8

            LastLot=GetLotFromStringComment(PosComment); // 07<5@ ;>B0 ?>A;54=59 4>;82:8

           }



         if(OrderTotal<int(PosTotal)) //?@>25@:0 G8A;0 4>;82>: =0 ;8<8B G8A;0 4>;82>:

           {

            ENUM_POSITION_TYPE PosType=ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));



            if(PosType==POSITION_TYPE_SELL)

              {

               double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);

               double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);

               if(!Bid || !point) {Recount=true; return;} //=5B 40==KE 4;O 40;L=59H53> @0AGQB0

               int len=int((OpenPrice-Bid)/point); //@0AAB>O=85 2 ?C=:B0E <564C B5:CI59 F5=>9 8 F5=>9 >B:@KB8O

               if(len>int(PriceStep)) //?@>25@:0 =0 <8=8<0;L=>5 @0AAB>O=85 <564C 4>;82:0<8

                 {

                  ReSELL_Open=true;

                  //---- =D>@<0F8O > =>2>9 4>;82:5 4;O :><<5=B0@8O : ?>78F88

                  int NewOrderTotal=OrderTotal+1;

                  if(NewOrderTotal<10) RePosComment="  "+string(NewOrderTotal);

                  else if(NewOrderTotal<100) RePosComment=" "+string(NewOrderTotal);

                  else if(NewOrderTotal<1000) RePosComment=string(NewOrderTotal);

                  RePosComment=RePosComment+"/"+DoubleToString(Bid,_Digits);

                 }

              }



            if(PosType==POSITION_TYPE_BUY)

              {

               double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

               double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);

               if(!Ask || !point) {Recount=true; return;}  //=5B 40==KE 4;O 40;L=59H53> @0AGQB0

               int len=int((Ask-OpenPrice)/point); //@0AAB>O=85 2 ?C=:B0E <564C B5:CI59 F5=>9 8 F5=>9 >B:@KB8O

               if(len>int(PriceStep)) //?@>25@:0 =0 <8=8<0;L=>5 @0AAB>O=85 <564C 4>;82:0<8

                 {

                  ReBUY_Open=true;

                  //---- =D>@<0F8O > =>2>9 4>;82:5 4;O :><<5=B0@8O : ?>78F88

                  int NewOrderTotal=OrderTotal+1;

                  if(NewOrderTotal<10) RePosComment="  "+string(NewOrderTotal);

                  else if(NewOrderTotal<100) RePosComment=" "+string(NewOrderTotal);

                  else if(NewOrderTotal<1000) RePosComment=string(NewOrderTotal);

                  RePosComment=RePosComment+"/"+DoubleToString(Ask,_Digits);

                 }

              }

           }

        }

     }



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

//| !>25@H5=85 A45;>:                            |

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

//---- >;8205< ;>=3

   ReBuyPositionOpen_X(ReBUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_,RePosComment);



//---- >;8205< H>@B

   ReSellPositionOpen_X(ReSELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_,RePosComment);

//----



//---- B:@K205< ;>=3

   BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);



//---- B:@K205< H>@B

   SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);

//----

  }

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

//|  >;CG5=85 G8A;0 4>;82>: 87 :><5=B0 : >B:@KB>9 ?>78F88           |

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

int GetTotalFromStringComment(string comment)

  {

//----

   return(int(StringToInteger(StringSubstr(comment,0,3))));

//----

  }

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

//|  >;CG5=85 ?>A;54=59 F5=K >B:@KB8O 87 :><5=B0 : >B:@KB>9 ?>78F88 |

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

double GetPriceFromStringComment(string comment)

  {

//----

   return(StringToDouble(StringSubstr(comment,4,7)));

//----

  }

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

//|  >;CG5=85 ?>A;54=53> >1JQ<0 87 :><5=B0 : >B:@KB>9 ?>78F88       |

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

double GetLotFromStringComment(string comment)

  {

//----

   return(StringToDouble(StringSubstr(comment,12,-1)));

//----

  }

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

//|  >;CG5=85 B>@3>2>3> @57C;LB0B0 ?>A;54=59 70:@KB>9 ?>78F88       |

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

double GetLastClosePosRezalt(const string PosSymbol)

  {

//---- 0?@>A8< 2AN B>@3>2CN 8AB>@8N ?> AGQBC

   if(!HistorySelect(0,TimeCurrent())) return(0.0);



//---- ?@545;8< @07<5@ A?8A:0 A45;>:

   uint deals=HistoryDealsTotal();



//--- B5?5@L >1@01>B05< :064CN A45;:C 

   for(int pos=int(deals)-1; pos>=0; pos--)

     {

      //---- =094Q< B8:5B ?>A;54=59 70:@KB>9 A45;:8

      ulong deal_ticket=HistoryDealGetTicket(pos);

      //---- >?@545;8< A8<2>; A45;:8

      string symbol=HistoryDealGetString(deal_ticket,DEAL_SYMBOL);

      if(symbol!=PosSymbol) continue;

      //---- >?@545;8< ?@>D8B ?>A;54=59 70:@KB>9 A45;:8

      double last_profit=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);

      double last_volume=HistoryDealGetDouble(deal_ticket,DEAL_VOLUME);

      if(last_profit>=0) return(last_volume);

      else return(-last_volume);

     }

//----

   return(0.0);

  }

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

Comments