Author: Yuriy Tokman (YTG)
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
Xarax
ÿþ//+------------------------------------------------------------------+

//|                                                        Xarax.mq4 |

//|                                               Yuriy Tokman (YTG) |

//|                                               https://ytg.com.ua |

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

#property copyright "Yuriy Tokman (YTG)"

#property link      "https://ytg.com.ua"

#property version   "3.00"

#property strict



input int MagicNumber = 2808;

input int TP = 50;

input int SL = 0;

input double Lot = 0.1;

input double coefficient_lot = 2;

input double minTP = 1;

input int drawdown = 30;

input int deferred = 20;



int Slippage = 30;

int POPYTKY = 10;

bool  gbDisabled = False;

#include     <stdlib.mqh>

int    NumberOfTry   = 5;

bool   UseSound         = True;         

string NameFileSound    = "expert.wav";



#import "shell32.dll"                   

int ShellExecuteW(int hwnd, string Operation,string File,string Parameters,string Directory,int ShowCmd);

#import



string site = "http://ytg.com.ua/";

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

//| Expert initialization function                                   |

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

int OnInit()

  {

//---

   Button("Link",clrDimGray,"Visit Website",524,3);   

//---

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---

   ObjectDelete(0,"Link");   

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

//----

   int sum_ss=0,sum_bs=0;double price_ss=0,price_bs=0;

   int sum_b1=0,sum_s1=0;

   double price_b1=0, lot_b1 =0, pf_b1=0;

   double price_s1=0, lot_s1 =0, pf_s1 =0;

   double s_lot1 =0;double sl_b1=0,sl_s1=0;

  

   for(int cnt=0;cnt<=OrdersTotal()-1;cnt++){

    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbol()){

     if(OrderMagicNumber() == MagicNumber){       

      //-----	   				

	  	  if (OrderType()==OP_BUY) 

	  	  {

	  	   sum_b1++;

	  	   price_b1 = OrderOpenPrice();

	  	   sl_b1 = OrderStopLoss();

	  	   lot_b1 = OrderLots();

	  	   pf_b1 = pf_b1+OrderProfit()+OrderCommission()+OrderSwap();

	  	   s_lot1 += lot_b1;	  	   

	  	  }

      //-----	  	  

	  	  else if (OrderType()==OP_SELL)  

	  	  {

	  	   sum_s1++;

	  	   price_s1 = OrderOpenPrice();

	  	   sl_s1 = OrderStopLoss();

	  	   lot_s1 = OrderLots();

	  	   pf_s1 = pf_s1+OrderProfit()+OrderCommission()+OrderSwap();

	  	   s_lot1 += lot_s1;		  	   	  	   	  	   

	  	  }

      //-----	  	  

	  	  else if (OrderType()==OP_SELLSTOP)  

	  	  {

	  	   sum_ss++;

	  	   price_ss = OrderOpenPrice();	  	   	  	   	  	   

	  	  }

      //-----	  	  

	  	  else if (OrderType()==OP_BUYSTOP)  

	  	  {

	  	   sum_bs++;

	  	   price_bs = OrderOpenPrice();	  	   	  	   	  	   

	  	  }	  	  

	  	  	  	  

	  	 }	  	    	  

	  }

   }

//----close min TP

 if(pf_b1+pf_s1>minTP && sum_b1>0 && sum_s1>0 && (lot_b1>Lot || lot_s1>Lot)){

 ClosePositions(Symbol(),-1,MagicNumber);

 DeleteOrders(Symbol(),-1,MagicNumber);

 }

//----

   double tp=0, sl=0, ll=0,pp=0;

//--->AB0;AO >48= A5;

 if(sum_s1==1 && sum_b1==0 && NormalizeDouble(MathAbs(lot_s1-Lot),2)<0.01)

  {

   ll=NormalizeDouble(lot_s1*coefficient_lot,LotPoint());

   OpenPosition(Symbol(), OP_BUY, ll, sl, tp, MagicNumber);

  } 

//--->AB0;AO B>;L:> A5; A C25;8G5==K< ;>B><

 if(sum_s1>0 && lot_s1>Lot)

  {

   if(sum_b1==0){//=5B ?@>4>;65=8O ?>:C?>:

   if(TP>0)tp=Ask + TP*GetPoint();else tp=0;

   if(SL>0)sl=Bid - SL*GetPoint();else sl=0;

   ll=Lot;

   OpenPosition(Symbol(), OP_BUY, ll, sl, tp, MagicNumber);}

   

   if(sum_ss==0 && Bid-price_s1>=drawdown*GetPoint()){//=5B >B;>6:8

    pp=NormalizeDouble(Bid-deferred*GetPoint(),Digits);sl=0;tp=0;ll=NormalizeDouble(lot_s1*coefficient_lot,LotPoint());

    SetOrder(Symbol(),OP_SELLSTOP,ll,pp,sl,tp,MagicNumber);}

    else if(Bid-price_ss>=(drawdown+deferred)*GetPoint())DeleteOrders(Symbol(),OP_SELLSTOP,MagicNumber);//>B;>6:0 40;5:>

   

  }





//--->AB0;AO >48= buy

 if(sum_b1==1 && sum_s1==0 && NormalizeDouble(MathAbs(lot_b1-Lot),2)<0.01)

  {

   ll=NormalizeDouble(lot_b1*coefficient_lot,LotPoint());

   OpenPosition(Symbol(), OP_SELL, ll, sl, tp, MagicNumber);

  }

//--->AB0;AO B>;L:> buy A C25;8G5==K< ;>B><

 if(sum_b1>0 && lot_b1>Lot)

  {

   if(sum_s1==0){//=5B ?@>4>;65=8O sell

   if(TP>0)tp=Bid - TP*GetPoint();else tp=0;

   if(SL>0)sl=Ask + SL*GetPoint();else sl=0;

   ll=Lot;

   OpenPosition(Symbol(), OP_SELL, ll, sl, tp, MagicNumber);}

   

   if(sum_bs==0 && price_b1 - Ask>=drawdown*GetPoint()){//=5B >B;>6:8

    pp=NormalizeDouble(Ask+deferred*GetPoint(),Digits);sl=0;tp=0;ll=NormalizeDouble(lot_b1*coefficient_lot,LotPoint());

    SetOrder(Symbol(),OP_BUYSTOP,ll,pp,sl,tp,MagicNumber);}

    else if(price_bs - Ask>=(drawdown+deferred)*GetPoint())DeleteOrders(Symbol(),OP_BUYSTOP,MagicNumber);//>B;>6:0 40;5:>

   

  }

  

//----2 @K=:5 =8G53> =5B

   if(!ExistPositions(Symbol(),-1,MagicNumber))

    {

      if(TP>0)tp=Ask + TP*GetPoint();else tp=0;

      if(SL>0)sl=Bid - SL*GetPoint();else sl=0;       

      ll=Lot;

      OpenPosition(Symbol(), OP_BUY, ll, sl, tp, MagicNumber);

   

      if(TP>0)tp=Bid - TP*GetPoint();else tp=0;

      if(SL>0)sl=Ask + SL*GetPoint();else sl=0;

      OpenPosition(Symbol(), OP_SELL, ll, sl, tp, MagicNumber);

    }

//---   

  }

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

//----

void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {

  bool   fm;

  color  cl = clrAliceBlue;

  double op, pa, pb, os, ot;

  int    dg=(int)MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;



  if (pp<=0) pp=OrderOpenPrice();

  if (sl<0 ) sl=OrderStopLoss();

  if (tp<0 ) tp=OrderTakeProfit();

  

  pp=NormalizeDouble(pp, dg);

  sl=NormalizeDouble(sl, dg);

  tp=NormalizeDouble(tp, dg);

  op=NormalizeDouble(OrderOpenPrice() , dg);

  os=NormalizeDouble(OrderStopLoss()  , dg);

  ot=NormalizeDouble(OrderTakeProfit(), dg);



  if (pp!=op || sl!=os || tp!=ot) {

    for (it=1; it<=5; it++) {

      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;

      while (!IsTradeAllowed()) Sleep(5000);

      RefreshRates();

      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);

      if (fm) {

        PlaySound(""); break;

      } else {

        er=GetLastError();

        pa=MarketInfo(OrderSymbol(), MODE_ASK);

        pb=MarketInfo(OrderSymbol(), MODE_BID);

        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);

        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),

              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);

        Sleep(1000*10);

      }

    }

  }

}

//----

//----

string GetNameTF(int TimeFrame=0) {

  if (TimeFrame==0) TimeFrame=Period();

  switch (TimeFrame) {

    case PERIOD_M1:  return("M1");

    case PERIOD_M5:  return("M5");

    case PERIOD_M15: return("M15");

    case PERIOD_M30: return("M30");

    case PERIOD_H1:  return("H1");

    case PERIOD_H4:  return("H4");

    case PERIOD_D1:  return("Daily");

    case PERIOD_W1:  return("Weekly");

    case PERIOD_MN1: return("Monthly");

    default:         return("UnknownPeriod");

  }

}

//----

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

int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0, string cm ="") {

  color    clOpen;

  datetime ot;

  double   pp, pa, pb;

  int      dg, err, it, ticket=0;

  string   lsComm="http://ytg.com.ua/";

 

  if (sy=="" || sy=="0") sy=Symbol();

  if (op==OP_BUY) clOpen=Lime; else clOpen=Red;

  for (it=1; it<=POPYTKY; it++) {

    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {

      Print("OpenPosition(): AB0=>2:0 @01>BK DC=:F88");

      break;

    }

    while (!IsTradeAllowed()) Sleep(5000);

    RefreshRates();

    dg=(int)MarketInfo(sy, MODE_DIGITS);

    pa=MarketInfo(sy, MODE_ASK);

    pb=MarketInfo(sy, MODE_BID);

    if (op==OP_BUY) pp=pa; else pp=pb;

    pp=NormalizeDouble(pp, dg);

    ot=TimeCurrent();

//----+

    if(AccountFreeMarginCheck(Symbol(),op, ll)<=0 || GetLastError()==134)return(0);    

//----+ 

    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);

    if (ticket>0) {

      PlaySound("ok.wav"); break;

    } else {

      err=GetLastError();

      if (pa==0 && pb==0) Message("@>25@LB5 2 17>@5 @K=:0 =0;8G85 A8<2>;0 "+sy);

      // K2>4 A>>1I5=8O >1 >H81:5

      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);

      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),

            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);

      // ;>:8@>2:0 @01>BK A>25B=8:0

      if (err==2 || err==64 || err==65 || err==133) {

        gbDisabled=True; break;

      }

      // ;8B5;L=0O ?0C70

      if (err==4 || err==131 || err==132) {

        Sleep(1000*300); break;

      }

      if (err==128 || err==142 || err==143) {

        Sleep(1000*66.666);

        if (ExistPositions(sy, op, mn, ot)) {

          PlaySound("ok.wav"); break;

        }

      }

      if (err==140 || err==148 || err==4110 || err==4111) break;

      if (err==141) Sleep(1000*100);

      if (err==145) Sleep(1000*17);

      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);

      if (err!=135) Sleep(1000*7.7);

    }

  }

  return(ticket);

}

//----

bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {

  int i, k=OrdersTotal();

 

  if (sy=="0") sy=Symbol();

  for (i=0; i<k; i++) {

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

      if (OrderSymbol()==sy || sy=="") {

        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

          if (op<0 || OrderType()==op) {

            if (mn<0 || OrderMagicNumber()==mn) {

              if (ot<=OrderOpenTime()) return(True);

            }

          }

        }

      }

    }

  }

  return(False);

}

//----

void Message(string m) {

  Comment(m);

  if (StringLen(m)>0) Print(m);

} 

//----

string GetNameOP(int op) {

  switch (op) {

    case OP_BUY      : return("Buy");

    case OP_SELL     : return("Sell");

    case OP_BUYLIMIT : return("Buy Limit");

    case OP_SELLLIMIT: return("Sell Limit");

    case OP_BUYSTOP  : return("Buy Stop");

    case OP_SELLSTOP : return("Sell Stop");

    default          : return("Unknown Operation");

  }

}

//----



//----

int LotPoint()

{

 double steplot = MarketInfo(Symbol(),MODE_LOTSTEP);

 int LotsDigits = (int)MathCeil(MathAbs(MathLog(steplot)/MathLog(10)));

 return(LotsDigits);

}

//----

void ClosePosBySelect() {

  bool   fc;

  color  clClose;

  double ll, pa, pb, pp;

  int    err, it;



  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

    for (it=1; it<=5; it++) {

      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;

      while (!IsTradeAllowed()) Sleep(5000);

      RefreshRates();

      pa=MarketInfo(OrderSymbol(), MODE_ASK);

      pb=MarketInfo(OrderSymbol(), MODE_BID);

      if (OrderType()==OP_BUY) {

        pp=pb; clClose=Lime;

      } else {

        pp=pa; clClose=Red;

      }

      ll=OrderLots();

      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);

      if (fc) {

        PlaySound(""); break;

      } else {

        err=GetLastError();

        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);

        Print("Error(",err,") Close ",GetNameOP(OrderType())," ",

              ErrorDescription(err),", try ",it);

        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);

        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),

              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());

        Sleep(1000*5);

      }

    }

  } else Print("ERROR. Close ",GetNameOP(OrderType()));

}

//----

void ClosePositions(string sy="", int op=-1, int mn=-1) {

  int i, k=OrdersTotal();



  if (sy=="0") sy=Symbol();

  for (i=k-1; i>=0; i--) {

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {

        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();

        }

      }

    }

  }

}

//----

void SetOrder(string sy, int op, double ll, double pp,

              double sl=0, double tp=0, int mn=0, datetime ex=0, string com="") {

  color    clOpen;

  datetime ot;

  double   pa, pb, mp;

  int      err, it, ticket, msl;

  string   lsComm= com;



  msl=(int)MarketInfo(sy, MODE_STOPLEVEL);

  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=Lime; else clOpen=Red;

  if (ex>0 && ex<TimeCurrent()) ex=0;

  for (it=1; it<=NumberOfTry; it++) {

    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {

      Print("SetOrder(): stop F");

      break;

    }

    while (!IsTradeAllowed()) Sleep(5000);

    RefreshRates();

    ot=TimeCurrent();

//----+

    int open = OP_BUY;

    if(op==OP_SELLSTOP || op==OP_SELLLIMIT)open=OP_SELL;

    if(AccountFreeMarginCheck(Symbol(),open, ll*2)<=0|| GetLastError()==134)return; 

    //{Alert("OPEN ORDERS ",GetNameOP(op),", LOT=",ll,

    //", Account_Free_Margin_Check ERROR.");return;}    

//----+    

    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen);

    if (ticket>0) {

      if (UseSound) PlaySound(NameFileSound); break;

    } else {

      err=GetLastError();

      if (err==128 || err==142 || err==143) {

        Sleep(1000*66);

        if (ExistOrders(sy, op, mn, ot)) {

          if (UseSound) PlaySound(NameFileSound); break;

        }

        Print("Error(",err,") set order: ",err,", try ",it);

        continue;

      }

      mp=MarketInfo(sy, MODE_POINT);

      pa=MarketInfo(sy, MODE_ASK);

      pb=MarketInfo(sy, MODE_BID);

      // 5?@028;L=K5 AB>?K

      if (err==130) {

        switch (op) {

          case OP_BUYLIMIT:

            if (pp>pa-msl*mp) pp=pa-msl*mp;

            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;

            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;

            break;

          case OP_BUYSTOP:

            if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;

            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;

            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;

            break;

          case OP_SELLLIMIT:

            if (pp<pb+msl*mp) pp=pb+msl*mp;

            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;

            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;

            break;

          case OP_SELLSTOP:

            if (pp>pb-msl*mp) pp=pb-msl*mp;

            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;

            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;

            break;

        }

        Print("SetOrder(): level price correct");

      }

      Print("Error(",err,") set order: ",err,", try ",it);

      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),

            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn,"  com=",lsComm);

      if (pa==0 && pb==0) Message("SetOrder(): sumboll error "+sy);

      // ;>:8@>2:0 @01>BK A>25B=8:0

      if (err==2 || err==64 || err==65 || err==133) {

        gbDisabled=True; break;

      }

      // ;8B5;L=0O ?0C70

      if (err==4 || err==131 || err==132) {

        Sleep(1000*300); break;

      }

      // !;8H:>< G0ABK5 70?@>AK (8) 8;8 A;8H:>< <=>3> 70?@>A>2 (141)

      if (err==8 || err==141) Sleep(1000*100);

      if (err==139 || err==140 || err==148) break;

      // 6840=85 >A2>1>645=8O ?>4A8AB5<K B>@3>2;8

      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);

      // 1=C;5=85 40BK 8AB5G5=8O

      if (err==147) {

        ex=0; continue;

      }

      if (err!=135 && err!=138) Sleep(1000*7.7);

    }

  }

}

//----

//----

bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {

  int i, k=OrdersTotal(), ty;

 

  if (sy=="0") sy=Symbol();

  for (i=0; i<k; i++) {

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

      ty=OrderType();

      if (ty>1 && ty<6) {

        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {

          if (mn<0 || OrderMagicNumber()==mn) {

            if (ot<=OrderOpenTime()) return(True);

          }

        }

      }

    }

  }

  return(False);

}

void DeleteOrders(string sy="", int op=-1, int mn=-1) {

  bool fd;

  int err, i, it, k=OrdersTotal(), ot;

  

  if (sy=="0") sy=Symbol();

  for (i=k-1; i>=0; i--) {

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

      ot=OrderType();

      if (ot>1 && ot<6) {

        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {

          if (mn<0 || OrderMagicNumber()==mn) {

            for (it=1; it<=5; it++) {

              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;

              while (!IsTradeAllowed()) Sleep(5000);

              fd=OrderDelete(OrderTicket(), White);

              if (fd) {

                PlaySound("timeout"); break;

              } else {

                err=GetLastError();

                Print("Error(",err,") delete order ",ot,

                      ": ",err,", try ",it);

                Sleep(1000*5);

              }

            }

          }

        }

      }

    }

  }

}

//----

double GetPoint()

{

 int vres = StringFind(Symbol(),"JPY");

 if (vres == -1) return(0.0001);

 return(0.01);

}

//----

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)

 {

  if(id==CHARTEVENT_OBJECT_CLICK){

   string clickedChartObject=sparam;

    if(clickedChartObject=="Link"){

     Button("Link",clrSlateGray,"Visit Website",524,3);

     ShellExecuteW(0,"Open", site, "", "", 1);       

   }      

  ChartRedraw();}}

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

bool Button(string name="",color clr=clrWhite,string _txt = "", int x=0, int y=0, int xs=100,int ys=35, int sz = 10){



 if(ObjectFind(name)>=0)ObjectDelete(name);

 

   ResetLastError(); 

   if(!ObjectCreate(0,name,OBJ_BUTTON,0,0,0)) 

     { 

      Print(name,__FUNCTION__, ": Error = ",GetLastError()); 

      return(false); 

     }   

   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrLime);

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

   ObjectSetInteger(0,name,OBJPROP_XSIZE,xs);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,ys);

   ObjectSetString(0,name,OBJPROP_FONT,"Arial Black");

   ObjectSetString(0,name,OBJPROP_TEXT,_txt);

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,sz);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);

   

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