JQS_Terminator_Line_v1_0_0

Author: Copyright � 2010, JQS aka Joo.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedChecks for the total of closed orders
0 Views
0 Downloads
0 Favorites
JQS_Terminator_Line_v1_0_0
//+----------------------------------------------------------------------+
//|                                           JQS Terminator Line v1.0.0 |
//|                                       Copyright © 2010, JQS aka Joo. |
//|                                     http://www.mql4.com/ru/users/joo |
//+----------------------------------------------------------------------+
//|   Òåðìèíàòîð (àñòðîíîìèÿ) (îò ëàò. terminare — îãðàíè÷èâàòü) — ëèíèÿ |
//| ñâåòîðàçäåëà, îòäåëÿþùàÿ îñâåù¸ííóþ (ñâåòëóþ) ÷àñòü íåáåñíîãî òåëà îò|
//| íåîñâåù¸ííîé (ò¸ìíîé) ÷àñòè.                                         |
//|                                                                      |
//|   Òåðìèíàòîð (ÄÍÊ) — ïîñëåäîâàòåëüíîñòü íóêëåîòèäîâ ÄÍÊ, óçíàâàåìàÿ  |
//| ÐÍÊ-ïîëèìåðàçîé êàê ñèãíàë ê ïðåêðàùåíèþ ñèíòåçà ìîëåêóëû ÐÍÊ è      |
//| äèññîöèàöèè òðàíñêðèïöèîííîãî êîìïëåêñà.                             |
//|                                                                      |
//|   Òåðìèíàòîð (ýëåêòðîíèêà) — ïîãëîòèòåëü ýíåðãèè (îáû÷íî ðåçèñòîð) íà|
//| êîíöå äëèííîé ëèíèè, ñîïðîòèâëåíèå êîòîðîãî ðàâíî âîëíîâîìó          |
//| ñîïðîòèâëåíèþ ëèíèè.                                                 |
//+----------------------------------------------------------------------+
#property copyright "Copyright © 2010, JQS aka Joo."
#property link      "http://www.mql4.com/ru/users/joo"
//-----------------------------------------------------

//-------------------Ââîä ãëîáàëüíûõ ïåðåìåííûõ---------------------------
extern string   MM         = "-----------Óïðàâëåíèå êàïèòàëîì--------";
extern double   K_Martin   =1.0;  //Êîýôô Ìàðòèíà
extern double   MinLoss    =1.0;  //Ìèí. âîçìîæíûé óáûòîê â âàëþòå äåïî
extern double   ProfitRatio=1.0;  //Îòíîøåíèå TP/SL
extern int      SLdefault  =20;   //Îòíîñèòåëüíûé ðàçìåð SL
//------------------------------------------------------------------------

//-------------------Ãëîáàëüíûå ïåðåìåííûå--------------------------------
double TP;            //Îòíîñèòåëüíûé ðàçìåð        
double TakeProfit;    //Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
double TPline;        //Àáñîëþòíàÿ âåëè÷èíà ëèíè TP

double SL;            //Îòíîñèòåëüíûé ðàçìåð 
double StopLoss;      //Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
double SLline;        //Àáñîëþòíàÿ âåëè÷èíà ëèíè SL

string UsersOrderType;

double Loss;          //Òåêóùèé äîïóñòèìûé óáûòîê â âàëþòå äåïî
double Loss_Prev;     //Ïðåäûäóùèé äîïóñòèìûé óáûòîê â âàëþòå äåïî
double Lots_New;      //Êîëè÷åñòâî ëîòîâ äëÿ íîâûõ îðäåðîâ
//------------------------------------------------------------------------

//========================================================================
int init()
{
  //-------------------------------------
  Loss_Prev=MinLoss;
  //-------------------------------------
  return;
}
//========================================================================

//========================================================================
int start()
{ 
  //-------------------------------------
  if (OrdersTotal()>=1)
  {
    ObjectDelete("SignalLineSL");
    ObjectDelete("SignalLineTP");
  } else
  {
    LineDraw();
    LineSens();
    Criterion();//Çàöèêëåííàÿ ôóíêöèÿ
    //-------------------------------------
    OpenOrder();
    //-------------------------------------
  }
  //-------------------------------------
  return;
}
//========================================================================

//========================================================================
int deinit()
{
  //-------------------------------------
  ObjectDelete("SignalLineSL");
  ObjectDelete("SignalLineTP");
  //-------------------------------------
  return;
}
//========================================================================

//========================================================================
void Criterion()
{
  bool Flag=true;
  //-------------------------------------
  while (Flag==true)
  {
    if (LineFind()==true)
    {
      LineSens();
      Inform();
    } else
    {
      Flag=false;
    }
  }
  //-------------------------------------
}
//========================================================================

//========================================================================
void LineDraw()
{
  //-------------------------------------
  double ask;
  double bid;
  double point;
  //-------------------------------------
  string Symb=Symbol();
  ask        =MarketInfo(Symb,MODE_ASK);
  bid        =MarketInfo(Symb,MODE_BID);
  point      =MarketInfo(Symb,MODE_POINT);
  //-------------------------------------
  StopLoss   =SLdefault*point;                             //Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
  SLline     =bid-StopLoss;                                //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ñòîïà
  TakeProfit =NormalizeDouble(StopLoss*ProfitRatio,Digits);//Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
  TPline     =ask+TakeProfit;                              //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ïðîôèòà
  //-------------------------------------
  //Ñîçäàäèì ëèíèþ TP
  ObjectCreate("SignalLineTP", OBJ_HLINE, 0,  0,TPline);
  ObjectSet   ("SignalLineTP", OBJPROP_COLOR, Blue);
  //Ñîçäàäèì ëèíèþ SL
  ObjectCreate("SignalLineSL", OBJ_HLINE, 0,  0,SLline);
  ObjectSet   ("SignalLineSL", OBJPROP_COLOR, Red);
  //-------------------------------------
}
//========================================================================

//========================================================================
void LineSens()
{
  //-------------------------------------
  RefreshRates();
  string Symb      = Symbol();
  double stoplevel = MarketInfo(Symb,MODE_STOPLEVEL)*Point;//Àáñîëþòíûé ðàçìåð â ïóíêòàõ
  double CurrentValue;
  //-------------------------------------
  //Îïðåäåëèì, Buy èëè Sell ïîçèöèÿ
  CurrentValue       =NormalizeDouble(ObjectGet("SignalLineSL", OBJPROP_PRICE1),Digits);//Íîðìàëèçîâàííîå öåíîâîå çíà÷åíèå óðîâíÿ SL 

  //Åñëè ëèíèÿ ñòîïà íèæå ñåðåäèíû ìåæäó Ask è Bid òî...
  if (CurrentValue<(Ask+Bid)*0.5)
  {//...èìååì äåëî ñ äëèííîé ïîçèöèåé----------
    if (Bid-CurrentValue<stoplevel)
    {
      CurrentValue=Bid-stoplevel;
    }
    //Îáðàáîòàåì ëèíèþ ñòîïà
    UsersOrderType="Buy";
    ObjectMove("SignalLineSL",0,1, CurrentValue);//Ïåðåäâèíåì SL íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ SL
    SLline     =CurrentValue;                    //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ñòîïà
    StopLoss   =Bid-SLline;                      //Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
    SL         =StopLoss/Point;                  //Îòíîñèòåëüíûé ðàçìåð SL â ïóíêòàõ

    //Îáðàáîòàåì ëèíèþ ïðîôèòà
    TakeProfit =NormalizeDouble(StopLoss*ProfitRatio,Digits);//Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
    TP         =TakeProfit/Point;                            //Îòíîñèòåëüíûé ðàçìåð TP â ïóíêòàõ
    TPline     =Ask+TakeProfit;                              //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ïðîôèòà
    ObjectMove("SignalLineTP",0,1, TPline);                  //Ïåðåäâèíåì TP íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ TP
    //------------------------------------------
  }
  //----------------------------------------------------------
  else
  {//...èìååì äåëî ñ êîðîòêîé ïîçèöèåé---------
    if (CurrentValue-Ask<stoplevel)
    {
      CurrentValue=Ask+stoplevel;
    }
    //Îáðàáîòàåì ëèíèþ ñòîïà
    UsersOrderType="Sell";
    ObjectMove("SignalLineSL",0,1, CurrentValue);//Ïåðåäâèíåì SL íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ SL
    SLline     =CurrentValue;                    //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ñòîïà
    StopLoss   =SLline-Ask;                      //Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò SL äî ask/bid
    SL         =StopLoss/Point;                  //Îòíîñèòåëüíûé ðàçìåð SL â ïóíêòàõ

    //Îáðàáîòàåì ëèíèþ ïðîôèòà
    TakeProfit =NormalizeDouble(StopLoss*ProfitRatio,Digits);//Íîðìàëèçîâàíî. Àáñîëþòíàÿ âåëè÷èíà ðàññòîÿíèÿ îò TP äî ask/bid
    TP         =TakeProfit/Point;                            //Îòíîñèòåëüíûé ðàçìåð TP â ïóíêòàõ
    TPline     =Bid-TakeProfit;                              //Íîðìàëèçîâàíî. Öåíîâîå çíà÷åíèå óðîâíÿ ïðîôèòà
    ObjectMove("SignalLineTP",0,1, TPline);                  //Ïåðåäâèíåì TP íà íîðìàëèçîâàííîå çíà÷åíèå óðîâíÿ TP
    //------------------------------------------
  }
  //-------------------------------------
  WindowRedraw();
}
//========================================================================

//========================================================================
bool LineFind()
{
  //-------------------------------------
  if (ObjectFind("SignalLineTP")==-1)
  {
    return(false);
  } else
  {
    return(true);
  }
  //-------------------------------------
}
//========================================================================

//========================================================================
void OpenOrder()
{
  //-------------------------------------
  int    
  Ticket,    // Íîìåð îðäåðà
  MN;        // MagicNumber
  //-------------------------------------
  Lot();
  if (UsersOrderType=="Buy") // Áóäåì îòêðûâàòü Buy
  {
    Ticket=OrderSend(Symbol(),0,Lots_New,Ask,2,SLline,TPline,"",MN);
  }
  if (UsersOrderType=="Sell") // Áóäåì îòêðûâàòü Sell
  {
    Ticket=OrderSend(Symbol(),1,Lots_New,Bid,2,SLline,TPline,"",MN);
  }
  //-------------------------------------
  Comment("Îòêðîåì ïîçèöèþ "+ UsersOrderType+" ñ StopLoss=", SLline," TakeProfit=", TPline," Ðàçìåð ëîòà=",Lots_New);
  //-------------------------------------
  return;
}
//========================================================================

//========================================================================
void Lot()
{
  //-------------------------------------
  string Symb    =Symbol();                            // Ôèíàíñîâûé èíñòðóì.
  double One_Lot =MarketInfo(Symb,MODE_MARGINREQUIRED);//Ðàçìåð ñâîáîäíûõ ñðåäñòâ, íåîáõîäèìûõ äëÿ îòêðûòèÿ 1 ëîòà
  double Min_Lot =MarketInfo(Symb,MODE_MINLOT);        //Ìèí. ðàçìåð. ëîòà
  double Step    =MarketInfo(Symb,MODE_LOTSTEP);       //Øàã èçìåíåí ðàçìåðà ëîòà
  double Free    =AccountFreeMargin();                 //Ñâîáîäíûå ñðåäñòâà
  double LotPrice=MarketInfo(Symb, MODE_TICKVALUE);    //Ñòîèìîñòü 1 ëîòà â âàëþòå äåïî íà 1 òèê
  //-------------------------------------
  if (OrdersHistoryTotal()<1)
  {
    Loss_Prev=MinLoss;
    Lots_New=NormalizeDouble(Loss_Prev/(LotPrice*SL),2);
  } else
  {
    OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY);
    if (OrderProfit()<0)
    {
      Loss_Prev*=K_Martin;
      Lots_New=NormalizeDouble(Loss_Prev/(LotPrice*SL),2);
    } else
    {
      Loss_Prev=MinLoss;
      Lots_New=NormalizeDouble(Loss_Prev/(LotPrice*SL),2);
    }
  }
  //-------------------------------------
}
//========================================================================

//========================================================================
double LotInfo()
{
  //-------------------------------------
  string Symb    =Symbol();                            // Ôèíàíñîâûé èíñòðóì.
  double One_Lot =MarketInfo(Symb,MODE_MARGINREQUIRED);//Ðàçìåð ñâîáîäíûõ ñðåäñòâ, íåîáõîäèìûõ äëÿ îòêðûòèÿ 1 ëîòà
  double Min_Lot =MarketInfo(Symb,MODE_MINLOT);        //Ìèí. ðàçìåð. ëîòà
  double Step    =MarketInfo(Symb,MODE_LOTSTEP);       //Øàã èçìåíåí ðàçìåðà ëîòà
  double Free    =AccountFreeMargin();                 //Ñâîáîäíûå ñðåäñòâà
  double LotPrice=MarketInfo(Symb, MODE_TICKVALUE);    //Ñòîèìîñòü 1 ëîòà â âàëþòå äåïî íà 1 òèê

  double LossPrevTemp;
  double LotsNewTemp;
  //-------------------------------------
  if (OrdersHistoryTotal()<1)
  {
    LossPrevTemp=MinLoss;
    LotsNewTemp=NormalizeDouble(LossPrevTemp/(LotPrice*SL),2);
  } else
  {
    OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY);
    if (OrderProfit()<0)
    {
      LossPrevTemp=Loss_Prev*K_Martin;
      LotsNewTemp=NormalizeDouble(LossPrevTemp/(LotPrice*SL),2);
    } else
    {
      LossPrevTemp=MinLoss;
      LotsNewTemp=NormalizeDouble(LossPrevTemp/(LotPrice*SL),2);
    }
  }
  //-------------------------------------
  return(LotsNewTemp);
}
//========================================================================

//========================================================================
void Inform()
{
  //-------------------------------------
  string Symb              = Symbol();
  string DepoCurrency      = AccountCurrency();                         //Íàèìåíîâàíèå âàëþòû äëÿ ñ÷åòà
  double MeansOneLot       = MarketInfo(Symb,MODE_MARGINREQUIRED);      //Íåîáõîäèìî ñðåäñòâ äëÿ îòêðûòèÿ 1 ëîòà
  double MeansFree         = AccountFreeMargin();                       //Çíà÷åíèå ñâîáîäíûõ ñðåäñòâ, ðàçðåøåííûõ äëÿ îòêðûòèÿ ïîçèöèé
  double MeansGuaranty     = AccountMargin();                           //Çíà÷åíèå çàëîãîâûõ ñðåäñòâ, èñïîëüçóåìûõ äëÿ ïîääåðæàíèÿ îòêðûòûõ ïîçèöèé
  double LotPriceTic       = MarketInfo(Symb, MODE_TICKVALUE);          //Ñòîèìîñòü 1 ëîòà â âàëþòå äåïî íà 1 òèê
  double MaxLotPermissible = MathFloor((MeansFree/MeansOneLot)*100)/100;//Ìàêñèìàëüíî äîïóñòèìûé ëîò äëÿ îòêðûòèÿ ïîçèöèè
  double MaxSLPermissible;                                              //Ìàêñèìàëüíî äîïóñòèìûé SL äî StopOut

  double stopout;
  string ind;
  //-------------------------------------
  if (AccountStopoutMode()==0)
  {
    stopout=AccountStopoutLevel();
    ind    ="%";
    MaxSLPermissible  = MathFloor((MeansFree*(100-stopout))/(LotPriceTic*LotInfo()*100));
  } else
  {
    stopout=AccountStopoutLevel();
    ind    =DepoCurrency;
    //MaxSLPermissible  = MathFloor( (MeansFree-stopout)/(LotPriceTic*LotInfo()) );
  }
  //-------------------------------------   
  Comment(
         "SLline = ",SLline
         ,"\n",
         "TPline = ",TPline
         ,"\n",
         "TP     = ",TP
         ,"\n",
         "SL     = ",SL//,"  MaxSL=",MaxSLPermissible
         ,"\n",
         "Lot    =",LotInfo(),"  MaxLot=",MaxLotPermissible
         ,"\n",
         "Profit =",LotPriceTic*LotInfo()*TP,"  Loss=",LotPriceTic*LotInfo()*SL
         ,"\n",
         "Óðîâåíü ñòîïëåâåëà = ",MarketInfo(Symb,MODE_STOPLEVEL)
         ,"\n",
         "Ñïðåä = ",MarketInfo(Symb,MODE_SPREAD)
         );
}
//========================================================================

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