OpenBuySellStopLimitOrders

Author: Copyright © 2017, Nikolay Kositsin
Orders Execution
It automatically opens orders when conditions are reached
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
OpenBuySellStopLimitOrders
ÿþ//+------------------------------------------------------------------+

//|                                   OpenBuySellStopLimitOrders.mq5 |

//|                               Copyright © 2017, Nikolay Kositsin | 

//|                              Khabarovsk,   farria@mail.redcom.ru | 

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

#property copyright "Copyright © 2017, Nikolay Kositsin"

#property link "farria@mail.redcom.ru" 

//---- =><5@ 25@A88 A:@8?B0

#property version   "1.00" 

//---- ?>:07K20BL 2E>4=K5 ?0@0<5B@K

#property script_show_inputs

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

//| %+  " + ! "                    |

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

input double  MM=0.1;       // Money Management

input int  DEVIATION=10;    // B:;>=5=85 F5=K

input uint  LEVEL=100;      //  0AAB>O=85 4> >@45@0 2 ?C=:B0E

input uint  STOPLEVEL=150;  //  0AAB>O=85 Stop Limit 2 ?C=:B0E

input uint  STOPLOSS=100;   // !B>?;>AA 2 ?C=:B0E >B B5:CI59 F5=K

input uint  TAKEPROFIT=800; // "59:?@>D8B  2 ?C=:B0E >B B5:CI59 F5=K

input uint RTOTAL=4;        // '8A;> ?>2B>@>2 ?@8 =5C40G=KE A45;:0E

input uint SLEEPTIME=1;     // @5<O ?0C7K <564C ?>2B>@0<8 2 A5:C=40E

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

//| start function                                                   |

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

void OnStart()

  {

//----

   for(uint count=0; count<=RTOTAL && !IsStopped(); count++)

     {

      uint result=BuyStopLimitOrderOpen(Symbol(),MM,DEVIATION,LEVEL,STOPLEVEL,STOPLOSS,TAKEPROFIT);

      if(ResultRetcodeCheck(result)) break;

      else Sleep(SLEEPTIME*1000);

     }

   for(uint count=0; count<=RTOTAL && !IsStopped(); count++)

     {

      uint result=SellStopLimitOrderOpen(Symbol(),MM,DEVIATION,LEVEL,STOPLEVEL,STOPLOSS,TAKEPROFIT);

      if(ResultRetcodeCheck(result)) break;

      else Sleep(SLEEPTIME*1000);

     }

//----

  }

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

//| B:@K205< buy >@45@.                                             |

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

uint BuyStopLimitOrderOpen

(

 const string symbol,

 double Money_Management,

 uint deviation,

 uint level,

 uint StopLimitLevel,

 uint StopLoss,

 uint Takeprofit

 )

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

  {

//----

   double volume=BuyLotCount(symbol,Money_Management);

   if(volume<=0)

     {

      Print(__FUNCTION__,"(): 525@=K9 >1JQ< 4;O AB@C:BC@K B>@3>2>3> 70?@>A0");

      return(TRADE_RETCODE_INVALID_VOLUME);

     }

//---- 1JO2;5=85 AB@C:BC@ B>@3>2>3> 70?@>A0 8 @57C;LB0B0 B>@3>2>3> 70?@>A0

   MqlTradeRequest request;

   MqlTradeCheckResult check;

   MqlTradeResult result;



//---- >1=C;5=85 AB@C:BC@

   ZeroMemory(request);

   ZeroMemory(result);

   ZeroMemory(check);

//----

   int digit=int(SymbolInfoInteger(symbol,SYMBOL_DIGITS));

   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   double price=SymbolInfoDouble(symbol, SYMBOL_ASK);

   if(!digit || !point || !price) return(TRADE_RETCODE_ERROR);

   price+=level*point;

   double stoplimitprice=price-StopLimitLevel*point;



//---- =8F80;870F8O AB@C:BC@K B>@3>2>3> 70?@>A0 MqlTradeRequest 4;O >B:@K20=8O BUY >@45@0

   request.type   = ORDER_TYPE_BUY_STOP_LIMIT;  

   request.price  = price;

   request.stoplimit = stoplimitprice;

   request.action = TRADE_ACTION_PENDING;

   request.symbol = symbol;

   request.volume = volume;

//----

   if(StopLoss)

     {

      //---- ?@545;5=85 @0AAB>O=8O 4> AB>?;>AA0 2 548=8F0E F5=>2>3> 3@0D8:0

      if(!StopCorrect(symbol,StopLoss)) return(TRADE_RETCODE_ERROR);

      double dStopLoss=StopLoss*point;

      request.sl=NormalizeDouble(stoplimitprice-dStopLoss,digit);

     }

   else request.sl=0.0;



   if(Takeprofit)

     {

      //---- ?@545;5=85 @0AAB>O=8O 4> B59:?@>D8B0 548=8F0E F5=>2>3> 3@0D8:0

      if(!StopCorrect(symbol,Takeprofit)) return(TRADE_RETCODE_ERROR);

      double dTakeprofit=Takeprofit*point;

      request.tp=NormalizeDouble(stoplimitprice+dTakeprofit,digit);

     }

   else request.tp=0.0;

//----

   request.deviation=deviation;

   request.type_filling=ORDER_FILLING_FOK;



//---- @>25@:0 B>@3>2>3> 70?@>A0 =0 :>@@5:B=>ABL

   if(!OrderCheck(request,check))

     {

      Print(__FUNCTION__,"(): OrderCheck(): ",ResultRetcodeDescription(check.retcode));

      return(TRADE_RETCODE_INVALID);

     }



   string word="";

   StringConcatenate(word,__FUNCTION__,"(): <<< KAB02;O5< Buy Stop Limit >@45@ ?> ",symbol,"! >>>");

   Print(word);



   word=__FUNCTION__+"(): OrderSend(): ";



//---- B:@K205< BUY >@45@ 8 45;05< ?@>25@:C @57C;LB0B0 B>@3>2>3> 70?@>A0

   if(!OrderSend(request,result) || result.retcode!=TRADE_RETCODE_DONE)

     {

      Print(word,"<<< 5 C40;>AL 2KAB028BL Buy Stop Limit >@45@ ?> ",symbol,"!!! >>>");

      Print(word,ResultRetcodeDescription(result.retcode));

      PlaySound("timeout.wav");

      return(result.retcode);

     }

   else

   if(result.retcode==TRADE_RETCODE_DONE)

     {

      Print(word,"<<< Buy Stop Limit >@45@ ?> ",symbol," 2KAB02;5=! >>>");

      PlaySound("ok.wav");

     }

   else

     {

      Print(word,"<<< 5 C40;>AL 2KAB028BL Buy Stop Limit >@45@ ?> ",symbol,"!!! >>>");

      PlaySound("timeout.wav");

      return(TRADE_RETCODE_ERROR);

     }

//----

   return(TRADE_RETCODE_DONE);

  }

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

//| B:@K205< Sell >@45@.                                            |

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

uint SellStopLimitOrderOpen

(

 const string symbol,

 double Money_Management,

 uint deviation,

 uint level,

 uint StopLimitLevel,

 uint StopLoss,

 uint Takeprofit

 )

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

  {

//----

   double volume=SellLotCount(symbol,Money_Management);

   if(volume<=0)

     {

      Print(__FUNCTION__,"(): 525@=K9 >1JQ< 4;O AB@C:BC@K B>@3>2>3> 70?@>A0");

      return(TRADE_RETCODE_INVALID_VOLUME);

     }

//---- 1JO2;5=85 AB@C:BC@ B>@3>2>3> 70?@>A0 8 @57C;LB0B0 B>@3>2>3> 70?@>A0

   MqlTradeRequest request;

   MqlTradeCheckResult check;

   MqlTradeResult result;



//---- >1=C;5=85 AB@C:BC@

   ZeroMemory(request);

   ZeroMemory(result);

   ZeroMemory(check);

//----

   int digit=int(SymbolInfoInteger(symbol,SYMBOL_DIGITS));

   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   double price=SymbolInfoDouble(symbol, SYMBOL_BID);

   if(!digit || !point || !price) return(TRADE_RETCODE_ERROR);

   price-=level*point;

   double stoplimitprice=price+StopLimitLevel*point;



//---- =8F80;870F8O AB@C:BC@K B>@3>2>3> 70?@>A0 MqlTradeRequest 4;O >B:@K20=8O SELL >@45@0

   request.type   = ORDER_TYPE_SELL_STOP_LIMIT;  

   request.price  = price;

   request.stoplimit = stoplimitprice;

   request.action = TRADE_ACTION_PENDING;

   request.symbol = symbol;

   request.volume = volume;

//----

   if(StopLoss)

     {

      //---- ?@545;5=85 @0AAB>O=8O 4> AB>?;>AA0 2 548=8F0E F5=>2>3> 3@0D8:0

      if(!StopCorrect(symbol,StopLoss)) return(TRADE_RETCODE_ERROR);

      double dStopLoss=StopLoss*point;

      request.sl=NormalizeDouble(stoplimitprice+dStopLoss,digit);

     }

   else request.sl=0.0;



   if(Takeprofit)

     {

      //---- ?@545;5=85 @0AAB>O=8O 4> B59:?@>D8B0 548=8F0E F5=>2>3> 3@0D8:0

      if(!StopCorrect(symbol,Takeprofit)) return(TRADE_RETCODE_ERROR);

      double dTakeprofit=Takeprofit*point;

      request.tp=NormalizeDouble(stoplimitprice-dTakeprofit,digit);

     }

   else request.tp=0.0;

//----

   request.deviation=deviation;

   request.type_filling=ORDER_FILLING_FOK;



//---- @>25@:0 B>@3>2>3> 70?@>A0 =0 :>@@5:B=>ABL

   if(!OrderCheck(request,check))

     {

      Print(__FUNCTION__,"(): OrderCheck(): ",ResultRetcodeDescription(check.retcode));

      return(TRADE_RETCODE_INVALID);

     }



   string word="";

   StringConcatenate(word,__FUNCTION__,"(): <<< KAB02;O5< Sell Stop Limit >@45@ ?> ",symbol,"! >>>");

   Print(word);



   word=__FUNCTION__+"(): OrderSend(): ";



//---- B:@K205< SELL >@45@ 8 45;05< ?@>25@:C @57C;LB0B0 B>@3>2>3> 70?@>A0

   if(!OrderSend(request,result) || result.retcode!=TRADE_RETCODE_DONE)

     {

      Print(word,"<<< 5 C40;>AL 2KAB028BL Sell Stop Limit >@45@ ?> ",symbol,"!!! >>>");

      Print(word,ResultRetcodeDescription(result.retcode));

      PlaySound("timeout.wav");

      return(result.retcode);

     }

   else

   if(result.retcode==TRADE_RETCODE_DONE)

     {

      Print(word,"<<< Sell Stop Limit >@45@ ?> ",symbol," 2KAB02;5=! >>>");

      PlaySound("ok.wav");

     }

   else

     {

      Print(word,"<<< 5 C40;>AL 2KAB028BL Sel Stop Limit >@45@ ?> ",symbol,"!!! >>>");

      PlaySound("timeout.wav");

      return(TRADE_RETCODE_ERROR);

     }

//----

   return(TRADE_RETCODE_DONE);

  }

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

//|  0AGQB @07<5@0 ;>B0 4;O >B:@K20=8O ;>=30                         |  

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

double BuyLotCount

(

 string symbol,

 double Money_Management

 )

// (string symbol, double Money_Management)

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

  {

//----

   double margin,Lot;



//----  0AGQB ;>B0 >B 10;0=A0 A@54AB2 =0 AGQB5

   margin=AccountInfoDouble(ACCOUNT_BALANCE)*Money_Management;

   if(!margin) return(-1);



   Lot=GetLotForOpeningPos(symbol,POSITION_TYPE_BUY,margin);



//---- =>@<8@>20=85 25;8G8=K ;>B0 4> 1;8609H53> AB0=40@B=>3> 7=0G5=8O 

   if(!LotCorrect(symbol,Lot,POSITION_TYPE_BUY)) return(-1);

//----

   return(Lot);

  }

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

//|  0AGQB @07<5@0 ;>B0 4;O >B:@K20=8O ;>=30                         |  

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

double SellLotCount

(

 string symbol,

 double Money_Management

 )

// (string symbol, double Money_Management)

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

  {

//----

   double margin,Lot;



//----  0AGQB ;>B0 >B 10;0=A0 A@54AB2 =0 AGQB5

   margin=AccountInfoDouble(ACCOUNT_BALANCE)*Money_Management;

   if(!margin) return(-1);



   Lot=GetLotForOpeningPos(symbol,POSITION_TYPE_SELL,margin);



//---- =>@<8@>20=85 25;8G8=K ;>B0 4> 1;8609H53> AB0=40@B=>3> 7=0G5=8O 

   if(!LotCorrect(symbol,Lot,POSITION_TYPE_SELL)) return(-1);

//----

   return(Lot);

  }

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

//| :>@@5:F8O @07<5@0 >B;>65==>3> >@45@0 4> 4>?CAB8<>3> 7=0G5=8O     |

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

bool StopCorrect(string symbol,int &Stop)

  {

//----

   long Extrem_Stop;

   if(!SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL,Extrem_Stop)) return(false);

   if(Stop<Extrem_Stop) Stop=int(Extrem_Stop);

//----

   return(true);

  }

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

//| LotCorrect() function                                            |

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

bool LotCorrect

(

 string symbol,

 double &Lot,

 ENUM_POSITION_TYPE trade_operation

 )

//LotCorrect(string symbol, double& Lot, ENUM_POSITION_TYPE trade_operation)

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

  {



   double LOTSTEP=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);

   double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);

   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);

   if(!LOTSTEP || !MaxLot || !MinLot) return(0);



//---- =>@<8@>20=85 25;8G8=K ;>B0 4> 1;8609H53> AB0=40@B=>3> 7=0G5=8O 

   Lot=LOTSTEP*MathFloor(Lot/LOTSTEP);



//---- ?@>25@:0 ;>B0 =0 <8=8<0;L=>5 4>?CAB8<>5 7=0G5=85

   if(Lot<MinLot) Lot=MinLot;

//---- ?@>25@:0 ;>B0 =0 <0:A8<0;L=>5 4>?CAB8<>5 7=0G5=85       

   if(Lot>MaxLot) Lot=MaxLot;



//---- ?@>25@:0 A@54AB2 =0 4>AB0B>G=>ABL

   if(!LotFreeMarginCorrect(symbol,Lot,trade_operation))return(false);

//----

   return(true);

  }

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

//| LotFreeMarginCorrect() function                                  |

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

bool LotFreeMarginCorrect

(

 string symbol,

 double &Lot,

 ENUM_POSITION_TYPE trade_operation

 )

//(string symbol, double& Lot, ENUM_POSITION_TYPE trade_operation)

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

  {

//----  

//---- ?@>25@:0 A@54AB2 =0 4>AB0B>G=>ABL

   double freemargin=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   if(freemargin<=0) return(false);

   double LOTSTEP=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);

   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);

   if(!LOTSTEP || !MinLot) return(0);

   double maxLot=GetLotForOpeningPos(symbol,trade_operation,freemargin);

//---- =>@<8@>20=85 25;8G8=K ;>B0 4> 1;8609H53> AB0=40@B=>3> 7=0G5=8O 

   maxLot=LOTSTEP*MathFloor(maxLot/LOTSTEP);

   if(maxLot<MinLot) return(false);

   if(Lot>maxLot) Lot=maxLot;

//----

   return(true);

  }

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

//| @0AGQB @07<5@ ;>B0 4;O >B:@K20=8O >@45@0 A <0@6>9 lot_margin     |

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

double GetLotForOpeningPos(string symbol,ENUM_POSITION_TYPE direction,double lot_margin)

  {

//----

   double price=0.0,n_margin;

   if(direction==POSITION_TYPE_BUY)  price=SymbolInfoDouble(symbol,SYMBOL_ASK);

   if(direction==POSITION_TYPE_SELL) price=SymbolInfoDouble(symbol,SYMBOL_BID);

   if(!price) return(NULL);



   if(!OrderCalcMargin(ENUM_ORDER_TYPE(direction),symbol,1,price,n_margin) || !n_margin) return(0);

   double lot=lot_margin/n_margin;



//---- ?>;CG5=85 B>@3>2KE :>=AB0=B

   double LOTSTEP=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);

   double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);

   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);

   if(!LOTSTEP || !MaxLot || !MinLot) return(0);



//---- =>@<8@>20=85 25;8G8=K ;>B0 4> 1;8609H53> AB0=40@B=>3> 7=0G5=8O 

   lot=LOTSTEP*MathFloor(lot/LOTSTEP);



//---- ?@>25@:0 ;>B0 =0 <8=8<0;L=>5 4>?CAB8<>5 7=0G5=85

   if(lot<MinLot) lot=0;

//---- ?@>25@:0 ;>B0 =0 <0:A8<0;L=>5 4>?CAB8<>5 7=0G5=85       

   if(lot>MaxLot) lot=MaxLot;

//----

   return(lot);

  }

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

//| 2>72@0B AB@8=3>2>3> @57C;LB0B0 B>@3>2>9 >?5@0F88 ?> 53> :>4C     |

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

string ResultRetcodeDescription(int retcode)

  {

   string str;

//----

   switch(retcode)

     {

      case TRADE_RETCODE_REQUOTE: str=" 5:2>B0"; break;

      case TRADE_RETCODE_REJECT: str="0?@>A >B25@3=CB"; break;

      case TRADE_RETCODE_CANCEL: str="0?@>A >B<5=5= B@5945@><"; break;

      case TRADE_RETCODE_PLACED: str="@45@ @07<5I5="; break;

      case TRADE_RETCODE_DONE: str="0O2:0 2K?>;=5=0"; break;

      case TRADE_RETCODE_DONE_PARTIAL: str="0O2:0 2K?>;=5=0 G0AB8G=>"; break;

      case TRADE_RETCODE_ERROR: str="H81:0 >1@01>B:8 70?@>A0"; break;

      case TRADE_RETCODE_TIMEOUT: str="0?@>A >B<5=5= ?> 8AB5G5=8N 2@5<5=8";break;

      case TRADE_RETCODE_INVALID: str="5?@028;L=K9 70?@>A"; break;

      case TRADE_RETCODE_INVALID_VOLUME: str="5?@028;L=K9 >1J5< 2 70?@>A5"; break;

      case TRADE_RETCODE_INVALID_PRICE: str="5?@028;L=0O F5=0 2 70?@>A5"; break;

      case TRADE_RETCODE_INVALID_STOPS: str="5?@028;L=K5 AB>?K 2 70?@>A5"; break;

      case TRADE_RETCODE_TRADE_DISABLED: str="">@3>2;O 70?@5I5=0"; break;

      case TRADE_RETCODE_MARKET_CLOSED: str=" K=>: 70:@KB"; break;

      case TRADE_RETCODE_NO_MONEY: str="5B 4>AB0B>G=KE 45=56=KE A@54AB2 4;O 2K?>;=5=8O 70?@>A0"; break;

      case TRADE_RETCODE_PRICE_CHANGED: str="&5=K 87<5=8;8AL"; break;

      case TRADE_RETCODE_PRICE_OFF: str="BACBAB2CNB :>B8@>2:8 4;O >1@01>B:8 70?@>A0"; break;

      case TRADE_RETCODE_INVALID_EXPIRATION: str="525@=0O 40B0 8AB5G5=8O >@45@0 2 70?@>A5"; break;

      case TRADE_RETCODE_ORDER_CHANGED: str="!>AB>O=85 >@45@0 87<5=8;>AL"; break;

      case TRADE_RETCODE_TOO_MANY_REQUESTS: str="!;8H:>< G0ABK5 70?@>AK"; break;

      case TRADE_RETCODE_NO_CHANGES: str=" 70?@>A5 =5B 87<5=5=89"; break;

      case TRADE_RETCODE_SERVER_DISABLES_AT: str="2B>B@5948=3 70?@5I5= A5@25@><"; break;

      case TRADE_RETCODE_CLIENT_DISABLES_AT: str="2B>B@5948=3 70?@5I5= :;85=BA:8< B5@<8=0;><"; break;

      case TRADE_RETCODE_LOCKED: str="0?@>A 701;>:8@>20= 4;O >1@01>B:8"; break;

      case TRADE_RETCODE_FROZEN: str="@45@ 8;8 ?>78F8O 70<>@>65=K"; break;

      case TRADE_RETCODE_INVALID_FILL: str="#:070= =5?>445@68205<K9 B8? 8A?>;=5=8O >@45@0 ?> >AB0B:C"; break;

      case TRADE_RETCODE_CONNECTION: str="5B A>548=5=8O A B>@3>2K< A5@25@><"; break;

      case TRADE_RETCODE_ONLY_REAL: str="?5@0F8O @07@5H5=0 B>;L:> 4;O @50;L=KE AG5B>2"; break;

      case TRADE_RETCODE_LIMIT_ORDERS: str=">AB83=CB ;8<8B =0 :>;8G5AB2> >B;>65==KE >@45@>2"; break;

      case TRADE_RETCODE_LIMIT_VOLUME: str=">AB83=CB ;8<8B =0 >1J5< >@45@>2 8 ?>78F89 4;O 40==>3> A8<2>;0"; break;

      case TRADE_RETCODE_INVALID_ORDER: str="525@=K9 8;8 70?@5IQ==K9 B8? >@45@0"; break;

      case TRADE_RETCODE_POSITION_CLOSED: str=">78F8O A C:070==K< POSITION_IDENTIFIER C65 70:@KB0"; break;

      case TRADE_RETCODE_INVALID_CLOSE_VOLUME: str="0:@K205<K9 >1J5< ?@52KH05B B5:CI89 >1J5< ?>78F88"; break;

      case TRADE_RETCODE_CLOSE_ORDER_EXIST: str=";O C:070==>9 ?>78F88 C65 5ABL >@45@ =0 70:@KB85"; break;

      case TRADE_RETCODE_LIMIT_POSITIONS: str=">;8G5AB2> >B:@KBKE ?>78F89, :>B>@>5 <>6=> >4=>2@5<5==> 8<5BL =0 AG5B5, <>65B 1KBL >3@0=8G5=> =0AB@>9:0<8 A5@25@0"; break;

      //case : str=""; break;

      //case : str=""; break;

      //case : str=""; break;

      //case : str=""; break;

      default: str="58725AB=K9 @57C;LB0B";

     }

//----

   return(str);

  }

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

//| 2>72@0B @57C;LB0B0 B>@3>2>9 >?5@0F88 4;O ?>2B>@0 A45;:8          |

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

bool ResultRetcodeCheck(int retcode)

  {

   string str;

//----

   switch(retcode)

     {

      case TRADE_RETCODE_REQUOTE: /* 5:2>B0*/ return(false); break;

      case TRADE_RETCODE_REJECT: /*0?@>A >B25@3=CB*/ return(false); break;

      case TRADE_RETCODE_CANCEL: /*0?@>A >B<5=5= B@5945@><*/ return(true); break;

      case TRADE_RETCODE_PLACED: /*@45@ @07<5I5=*/ return(true); break;

      case TRADE_RETCODE_DONE: /*0O2:0 2K?>;=5=0*/ return(true); break;

      case TRADE_RETCODE_DONE_PARTIAL: /*0O2:0 2K?>;=5=0 G0AB8G=>*/ return(true); break;

      case TRADE_RETCODE_ERROR: /*H81:0 >1@01>B:8 70?@>A0*/ return(false); break;

      case TRADE_RETCODE_TIMEOUT: /*0?@>A >B<5=5= ?> 8AB5G5=8N 2@5<5=8*/ return(false); break;

      case TRADE_RETCODE_INVALID: /*5?@028;L=K9 70?@>A*/ return(true); break;

      case TRADE_RETCODE_INVALID_VOLUME: /*5?@028;L=K9 >1J5< 2 70?@>A5*/ return(true); break;

      case TRADE_RETCODE_INVALID_PRICE: /*5?@028;L=0O F5=0 2 70?@>A5*/ return(true); break;

      case TRADE_RETCODE_INVALID_STOPS: /*5?@028;L=K5 AB>?K 2 70?@>A5*/ return(true); break;

      case TRADE_RETCODE_TRADE_DISABLED: /*">@3>2;O 70?@5I5=0*/ return(true); break;

      case TRADE_RETCODE_MARKET_CLOSED: /* K=>: 70:@KB*/ return(true); break;

      case TRADE_RETCODE_NO_MONEY: /*5B 4>AB0B>G=KE 45=56=KE A@54AB2 4;O 2K?>;=5=8O 70?@>A0*/ return(true); break;

      case TRADE_RETCODE_PRICE_CHANGED: /*&5=K 87<5=8;8AL*/ return(false); break;

      case TRADE_RETCODE_PRICE_OFF: /*BACBAB2CNB :>B8@>2:8 4;O >1@01>B:8 70?@>A0*/ return(false); break;

      case TRADE_RETCODE_INVALID_EXPIRATION: /*525@=0O 40B0 8AB5G5=8O >@45@0 2 70?@>A5*/ return(true); break;

      case TRADE_RETCODE_ORDER_CHANGED: /*!>AB>O=85 >@45@0 87<5=8;>AL*/ return(true); break;

      case TRADE_RETCODE_TOO_MANY_REQUESTS: /*!;8H:>< G0ABK5 70?@>AK*/ return(false); break;

      case TRADE_RETCODE_NO_CHANGES: /* 70?@>A5 =5B 87<5=5=89*/ return(false); break;

      case TRADE_RETCODE_SERVER_DISABLES_AT: /*2B>B@5948=3 70?@5I5= A5@25@><*/ return(true); break;

      case TRADE_RETCODE_CLIENT_DISABLES_AT: /*2B>B@5948=3 70?@5I5= :;85=BA:8< B5@<8=0;><*/ return(true); break;

      case TRADE_RETCODE_LOCKED: /*0?@>A 701;>:8@>20= 4;O >1@01>B:8*/ return(true); break;

      case TRADE_RETCODE_FROZEN: /*@45@ 8;8 ?>78F8O 70<>@>65=K*/ return(false); break;

      case TRADE_RETCODE_INVALID_FILL: /*#:070= =5?>445@68205<K9 B8? 8A?>;=5=8O >@45@0 ?> >AB0B:C */ return(true); break;

      case TRADE_RETCODE_CONNECTION: /*5B A>548=5=8O A B>@3>2K< A5@25@><*/ break;

      case TRADE_RETCODE_ONLY_REAL: /*?5@0F8O @07@5H5=0 B>;L:> 4;O @50;L=KE AG5B>2*/ return(true); break;

      case TRADE_RETCODE_LIMIT_ORDERS: /*>AB83=CB ;8<8B =0 :>;8G5AB2> >B;>65==KE >@45@>2*/ return(true); break;

      case TRADE_RETCODE_LIMIT_VOLUME: /*>AB83=CB ;8<8B =0 >1J5< >@45@>2 8 ?>78F89 4;O 40==>3> A8<2>;0*/ return(true); break;

      case TRADE_RETCODE_POSITION_CLOSED: /*>78F8O A C:070==K< POSITION_IDENTIFIER C65 70:@KB0*/ return(true); break;

      case TRADE_RETCODE_INVALID_CLOSE_VOLUME: /*0:@K205<K9 >1J5< ?@52KH05B B5:CI89 >1J5< ?>78F88*/ return(true); break;

      case TRADE_RETCODE_CLOSE_ORDER_EXIST: /*;O C:070==>9 ?>78F88 C65 5ABL >@45@ =0 70:@KB85*/ return(true); break;

      case TRADE_RETCODE_LIMIT_POSITIONS: /*>;8G5AB2> >B:@KBKE ?>78F89, :>B>@>5 <>6=> >4=>2@5<5==> 8<5BL =0 AG5B5, <>65B 1KBL >3@0=8G5=> =0AB@>9:0<8 A5@25@0*/ return(true); break;

      default: /*58725AB=K9 @57C;LB0B*/ return(false);

     }

//----

   return(true);

  }

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

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