YURAZ_CLOSEPRC_V3_1

Author: Copyright 2017, YuraZ
Orders Execution
It automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
YURAZ_CLOSEPRC_V3_1
ÿþ//+------------------------------------------------------------------+

//|                                          YURAZ_CLOSEPRC_V3_1.mq5 |

//|                                            Copyright 2017, YuraZ |

//|                              https://www.mql5.com/ru/users/yuraz |

//| 28.02.2017  ?>?@028; ?@>1;5<K A 87<5=5=8O =>2KE 25@A89           |

//|                                                                  |

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

#property copyright "Copyright 2017, YuraZ"

#property link      "https://www.mql5.com/ru/users/yuraz"

#property version   "3.01"



input string gpsPrcClose="10"; // 10% ?@>D8B0 ?> C<>;G0=8N

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

//|                                                                  |

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

class CYurazTrade

  {

public:

   int               AllCloseMonitor;

   double            PrcClose;



   void CYurazTrade()

     {

      AllCloseMonitor=0; //  BCB 4;O <>=8B>@0 A>1KB89 8=D>@<0F8O

      LastCloseCode=0;

      LastCodePS=0;



      PrcClose=100000000000;



     } // :>=AB@C:B>@

   void              CloseAll();

private:

   int               LastCloseCode;

   int               LastCodePS;



   string            sCodeError(int code);

   void              ClosePosition(string sSymbol,int ip);

  };

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

//|                                                                  |

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

string CYurazTrade::sCodeError(int retcode)

  {

   string sRetCode;

   switch(retcode)

     {

      case TRADE_RETCODE_REQUOTE: sRetCode=(string)retcode+"  5:2>B0"; break;// 10004

      case TRADE_RETCODE_REJECT: sRetCode=(string)retcode+" 0?@>A >B25@3=CB";  break;

      case TRADE_RETCODE_CANCEL: sRetCode = (string)retcode+" 0?@>A >B<5=5= B@5945@><"; break;

      case TRADE_RETCODE_PLACED: sRetCode = (string)retcode+" @45@ @07<5I5="; break;

      case TRADE_RETCODE_DONE: sRetCode=(string)retcode+" 0O2:0 2K?>;=5=0"; break;

      case TRADE_RETCODE_DONE_PARTIAL: sRetCode=(string)retcode+" 0O2:0 2K?>;=5=0 G0AB8G=>"; break;

      case TRADE_RETCODE_ERROR: sRetCode=(string)retcode+" H81:0 >1@01>B:8 70?@>A0"; break;

      case TRADE_RETCODE_TIMEOUT: sRetCode = (string)retcode+" 0?@>A >B<5=5= ?> 8AB5G5=8N 2@5<5=8"; break;

      case TRADE_RETCODE_INVALID: sRetCode = (string)retcode+" 5?@028;L=K9 70?@>A"; break;

      case TRADE_RETCODE_INVALID_VOLUME: sRetCode=(string)retcode+" 5?@028;L=K9 >1J5< 2 70?@>A5"; break;

      case TRADE_RETCODE_INVALID_PRICE: sRetCode = (string)retcode+" 5?@028;L=0O F5=0 2 70?@>A5"; break;

      case TRADE_RETCODE_INVALID_STOPS: sRetCode = (string)retcode+" 5?@028;L=K5 AB>?K 2 70?@>A5"; break;

      case TRADE_RETCODE_TRADE_DISABLED: sRetCode=(string)retcode+" ">@3>2;O 70?@5I5=0"; break;

      case TRADE_RETCODE_MARKET_CLOSED: sRetCode =(string)retcode+"  K=>: 70:@KB"; break;

      case TRADE_RETCODE_NO_MONEY: sRetCode=(string)retcode+" 5B 4>AB0B>G=KE 45=56=KE A@54AB2 4;O 2K?>;=5=8O 70?@>A0"; break;

      case TRADE_RETCODE_PRICE_CHANGED: sRetCode=(string)retcode+" &5=K 87<5=8;8AL"; break;

      case TRADE_RETCODE_PRICE_OFF: sRetCode=(string)retcode+" BACBAB2CNB :>B8@>2:8 4;O >1@01>B:8 70?@>A0"; break;

      case TRADE_RETCODE_INVALID_EXPIRATION: sRetCode=(string)retcode+" 525@=0O 40B0 8AB5G5=8O >@45@0 2 70?@>A5"; break;

      case TRADE_RETCODE_ORDER_CHANGED: sRetCode=(string)retcode+" !>AB>O=85 >@45@0 87<5=8;>AL"; break;

      case TRADE_RETCODE_TOO_MANY_REQUESTS: sRetCode=(string)retcode+" !;8H:>< G0ABK5 70?@>AK"; break;

      default:   sRetCode=(string)retcode+" =58725AB=0O >H81:0"; break;

     }

   return(sRetCode);

  }

//

// 70:@KBL 2A5 GB> >B:@KB>

//

void CYurazTrade::CloseAll()

  {

   int pos=PositionsTotal(); // ?>;CG8< :>;8G5AB2> >B:@KBKE ?>78F89

   for(int ip=0;ip<pos;ip++)

     {

      string sSymbol=PositionGetSymbol(ip);

      if(PositionSelect(sSymbol)==true)

         ClosePosition(sSymbol,ip);

      else

         LastCodePS=GetLastError(); // ?>;CG8< 2>7<>6=K9 :>4 >H81:8 , ?> >?8A0=8N ?>:0 =5 7=0N :>4K

     }

   if(PositionsTotal()==0)

     {

      AllCloseMonitor=0;    // !:065< <>=8B>@C GB> 1K 1>;LH5 =5 2K7K20;A>1KB85

     }



   printf(" %s ",sCodeError(LastCloseCode)); // =0?5G0B05< 2 ;>3



   if(LastCloseCode==TRADE_RETCODE_MARKET_CLOSED) // @K=>: 70:@KB

     {

      AllCloseMonitor=0;    // !:065< <>=8B>@C GB> 1K 1>;LH5 =5 2K7K20; A>1KB85

      LastCloseCode=0;

     }



   if(LastCloseCode==TRADE_RETCODE_TRADE_DISABLED) // B>@3>2;O 70?@5I5=0

     {

      AllCloseMonitor=0;    // !:065< <>=8B>@C GB> 1K 1>;LH5 =5 2K7K20; A>1KB85

      LastCloseCode=0;

     }

   if(AllCloseMonitor==0)

     {

      if(ObjectGetInteger(0,buttonID,OBJPROP_STATE)==true)

        {



         //--- >B?@028< ?>;L7>20B5;LA:>5 A>1KB85 "A2>5<C"3@0D8:C

         EventChartCustom(0,CHARTEVENT_CUSTOM+999-CHARTEVENT_CUSTOM,0,0,"");

         //--- >B?@028< A>>1I5=85 2A5< >B:@KBK< 3@0D8:0<

         BroadcastEvent(ChartID(),0,"Broadcast Message");

         ObjectSetInteger(0,buttonID,OBJPROP_STATE,false);

         ChartRedraw();// ?@8=C48B5;L=> ?5@5@8AC5< 2A5 >1J5:BK =0 3@0D8:5

        }

     }



  }

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

//|                                                                  |

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

void CYurazTrade::ClosePosition(string sSymbol,int ip)

  {

   MqlTradeRequest request={0}; // AB@C:BC@0 70?@>A0

   MqlTradeResult result={0}; // AB@C:BC@0 >B25B0

   request.symbol = sSymbol;

   request.volume = PositionGetDouble( POSITION_VOLUME );

   request.action=TRADE_ACTION_DEAL; //(ENUM_TRADE_REQUEST_ACTIONS)0; //TRADE_ACTION_MARKET ; // >?5@0F8O A @K=:0

   request.tp=0;

   request.sl=0;

   request.deviation=(ulong)((SymbolInfoDouble(sSymbol,SYMBOL_ASK)-SymbolInfoDouble(sSymbol,SYMBOL_BID))/SymbolInfoDouble(sSymbol,SYMBOL_POINT)); // ?> A?@54C

   request.type_filling=ORDER_FILLING_IOC;

   if(request.volume>9) // ?>:0 =5 A<>3 @5H8BL ?@>1;5<C A request

      request.volume=9;



   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)

     {

      request.type=ORDER_TYPE_SELL;

      request.price=SymbolInfoDouble(sSymbol,SYMBOL_BID);

     }

   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)

     {

      request.type=ORDER_TYPE_BUY;

      request.price=SymbolInfoDouble(sSymbol,SYMBOL_ASK);

     }

   bool ret=OrderSend(request,result);

   LastCloseCode = (int)result.retcode;

  }

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//

// >=8B>@ A>1KB89 ( 2K7205BAO 87 B09<5@0 )

//

class CYurazMonitor

  {

public:

   void              Monitor();



  };

//

//

//

void CYurazMonitor::Monitor(void)

  {

   yzTrade.PrcClose=StringToDouble(ObjectGetString(0,editID,OBJPROP_TEXT));

   ObjectSetString(0,labelID1,OBJPROP_TEXT,

                   DoubleToString(AccountInfoDouble(ACCOUNT_PROFIT),2)

                   +" "

                   +DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE)/100,2)

                   +" "

                   +DoubleToString(yzTrade.PrcClose,4)



                   );

   if(yzTrade.AllCloseMonitor!=0) // <>=8B>@ A>1KB89 >1=0@C68;, =5>1E>48<>  70:@KBL 2A5 ?>78F88

     {

      yzTrade.CloseAll();



     }

   if(AccountInfoDouble(ACCOUNT_PROFIT)>AccountInfoDouble(ACCOUNT_BALANCE)/100 *yzTrade.PrcClose)

     {

      yzTrade.AllCloseMonitor=2; // A>1KB85 70:@KBL ?> ?@>D8BC

      yzTrade.CloseAll();

     }

  }

//  

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////





///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//

//

//

CYurazTrade   yzTrade;    // :;0A >1@01>B:8 B>@3>2KE >?5@0F89

CYurazMonitor yzMonitor;  // <>=8B>@ A>1KB89

                          //

string buttonID="Button";

string editID="Edit";

string labelID1="Info1";



ushort  broadcastEventID = 5000;

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

//| Expert initialization function                                   |

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

int OnInit()

  {

   yzTrade.AllCloseMonitor=0;



//--- A>74048< :=>?:C, 4;O ?5@540G8 ?>;L7>20B5;LA:8E A>1KB89

   ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);

   ObjectSetInteger(0,buttonID,OBJPROP_COLOR,White);

   ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,Gray);

   ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,10);

   ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,60);

   ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,250);

   ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);

   ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");

   ObjectSetString(0,buttonID,OBJPROP_TEXT,"0:@KBL 2A5 ?>78F88 >4=8< :;8:><");

   ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);

   ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,false); // 8=0G5 =060BL =0 =55 =5;L7O



//--- A>74048< <5B:C 4;O 2K2>40 8=D>@<0F88

//ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);

//ObjectSetInteger(0,labelID,OBJPROP_COLOR,Red);

//ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,10);

//ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,100);

//ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");

//ObjectSetString(0,labelID,OBJPROP_TEXT,"5B 8=D>@<0F88");

//ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);

//ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);





   ObjectCreate(0,labelID1,OBJ_LABEL,0,100,100);

   ObjectSetInteger(0,labelID1,OBJPROP_COLOR,Red);

   ObjectSetInteger(0,labelID1,OBJPROP_XDISTANCE,10);

   ObjectSetInteger(0,labelID1,OBJPROP_YDISTANCE,20);

   ObjectSetString(0,labelID1,OBJPROP_FONT,"Trebuchet MS");

   ObjectSetString(0,labelID1,OBJPROP_TEXT,">78F88 70:@>NBAO ?@8 4>AB865=88 ?@>F5=B0 >B 45?>78B0");

   ObjectSetInteger(0,labelID1,OBJPROP_FONTSIZE,10);

   ObjectSetInteger(0,labelID1,OBJPROP_SELECTABLE,true);



   ObjectCreate(0,editID,OBJ_EDIT,0,100,100);

   ObjectSetInteger(0,editID,OBJPROP_XDISTANCE,370);

   ObjectSetInteger(0,editID,OBJPROP_YDISTANCE,20);

   ObjectSetInteger(0,editID,OBJPROP_COLOR,Red);



   ObjectSetInteger(0,editID,OBJPROP_XSIZE,50);

   ObjectSetInteger(0,editID,OBJPROP_YSIZE,50);

   ObjectSetString(0,editID,OBJPROP_TEXT,gpsPrcClose); // 3%

   ObjectSetInteger(0,editID,OBJPROP_FONTSIZE,20);

   ObjectSetInteger(0,editID,OBJPROP_SELECTABLE,false); // 8=0G5 =060BL =0 =55 =5;L7O



   yzTrade.PrcClose=StringToDouble(gpsPrcClose); // ?>;>68< 2 B>@3>2K9 :;0AA % ?@81K;8 ?@8 :>B>@>< 70:@>NBAO 2A5 ?>78F88



                                                 //   int customEventID; // =><5@ ?>;L7>20B5;LA:>3> A>1KB8O 4;O >B?@02:8



   EventSetTimer(1); // :064CN A5:C=4C 2K7K205< OnTimer



//---

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//--- destroy timer

   EventKillTimer();



  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

//---



  }

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

//| Timer function                                                   |

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

void OnTimer()

  {

//---



  }

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

//| Trade function                                                   |

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

void OnTrade()

  {

//---



  }

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

//| TradeTransaction function                                        |

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

void OnTradeTransaction(const MqlTradeTransaction &trans,

                        const MqlTradeRequest &request,

                        const MqlTradeResult &result)

  {

//---



  }

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

//| Tester function                                                  |

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

double OnTester()

  {

//---

   double ret=0.0;

//---



//---

   return(ret);

  }

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

//| TesterInit function                                              |

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

void OnTesterInit()

  {

//---



  }

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

//| TesterPass function                                              |

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

void OnTesterPass()

  {

//---



  }

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

//| TesterDeinit function                                            |

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

void OnTesterDeinit()

  {

//---



  }

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

//| ChartEvent function                                              |

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

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

//---



  }

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

//| BookEvent function                                               |

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

void OnBookEvent(const string &symbol)

  {

//---



  }

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



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

//| ?>A;0BL H8@>:>25I0B5;L=>5 A>>1I5=85 2A5< >B:@KB< 3@0D8:0<        |

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

void BroadcastEvent(long lparam,double dparam,string sparam)

  {

   int limit=100;// C =0A =025@=O:0 =5 1>;LH5 100 >B:@KBKE 3@0D8:>2

   ushort eventID = broadcastEventID - (ushort)CHARTEVENT_CUSTOM;

   long currChart,prevChart=ChartFirst();

   int i=0;

   while(i<limit)

     {

      currChart=ChartNext(prevChart); // =0 >A=>20=88 ?@54K4CI53> ?>;CG8< =>2K9 3@0D8:

      if(currChart==0) break;         // 4>AB83;8 :>=F0 A?8A:0 3@0D8:>2

      EventChartCustom(currChart,eventID,lparam,dparam,sparam);

      prevChart=currChart;// 70?><=8< 845=B8D8:0B>@ B5:CI53> 3@0D8:0 4;O ChartNext()

      i++;// =5 701C45< C25;8G8BL AG5BG8:

     }

  }

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

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