cm_ Profi Alert and Close + Delete Pending

Author: Copyright 2019, cmillion@narod.ru
Price Data Components
Series array that contains open time of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open orders
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
cm_ Profi Alert and Close + Delete Pending
ÿþ//+------------------------------------------------------------------+

//|                   cm_ Profi Alert and Close + Delete Pending.mq5 |

//|                              Copyright 2019, "cmillion@narod.ru" |

//|                                               http://cmillion.ru |

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

#property copyright "Copyright 2019, cmillion@narod.ru"

#property link      "http://cmillion.ru"

#property version   "1.00"

#property strict

#property description "0:@K205B 2A5 >@45@0 ?@8 7040==>< ?@>D8B5 8;8 C1KB:5"

#property description "=>?:0<8 2K18@0NBAO @568<K 0;5@B0 8 B>@3>2;8"

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

input double ProfitClose     = 10;   //70:@K20BL 2A5 >@45@0 ?@8 ?>;CG5=88 ?@>D8B0

input double LossClose       = -1000; //70:@K20BL 2A5 >@45@0 ?@8 ?>;CG5=88 C1KB:0

input bool   AllSymbol       = false;//CG8BK20BL 2A5 8=AB@C<5=BK 8;8 B>;L:> B>B, =0 :>B>@>< AB>8B A>25B=8:

input bool   AlertON         = false;//A83=0; ?@8 4>AB865=88 ?@>D8B0 8;8 C1KB:0

input bool   TradeON         = false;//@07@5H8BL A>25B=8:C 70:@K20BL >@45@0 ?@8 4>AB865=88 ?@>D8B0 8;8 C1KB:0

input int    slippage        = 5;    // ?@>A:0;L7K20=85

//-------------------------------------------------------------------

MqlTick tick;             // B5:CI0O :>B8@>2:0

MqlTradeRequest request;  // ?0@0<5B@K B>@3>2>3> 70?@>A0

MqlTradeResult result;    // @57C;LB0B B>@3>2>3> 70?@>A0

MqlTradeCheckResult check;

datetime TimeSignsl=0;

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

int OnInit()

{

   string val=AccountInfoString(ACCOUNT_CURRENCY);

   RectLabelCreate(0,"rl BalanceW",0,195,20,190,50,clrLightGray);

   DrawLABEL("rl Balance",    "Balance",     190,30,clrBlack,ANCHOR_LEFT);

   DrawLABEL("rl Equity",     "Equity",      190,45,clrBlack,ANCHOR_LEFT);

   DrawLABEL("rl FreeMargin", "FreeMargin",  190,60,clrBlack,ANCHOR_LEFT);

   

   DrawLABEL("rl val Balance"    ,val,10,30,clrBlack);

   DrawLABEL("rl val Equity"     ,val,10,45,clrBlack);

   DrawLABEL("rl val FreeMargin" ,val,10,60,clrBlack);

   

   RectLabelCreate(0,"rl Close Profit" ,0,195,69,190,50);

   EditCreate(0,"rl Profit"            ,0,190,75,60,40,DoubleToString(0,2),"Arial",8,ALIGN_CENTER,true);

   ButtonCreate(0,"kn close All"       ,0,128,75,56,40,"Close all");

   EditCreate(0,"rl ProfitClose"       ,0,70,75,60,20,DoubleToString(ProfitClose,2) ,"Arial",8,ALIGN_CENTER,false);

   EditCreate(0,"rl LossClose"         ,0,70,95,60,20,DoubleToString(LossClose,2),"Arial",8,ALIGN_CENTER,false);

   

   RectLabelCreate(0,"rl kn"      ,0,195,118,190,25);

   ButtonCreate(0,"kn AllSymbol"  ,0,190,120,60,20,"All Symbol","Arial",8,clrBlack,clrLightGray,clrNONE,AllSymbol);

   ButtonCreate(0,"kn AlertON"    ,0,128,120,56,20,"Alert","Arial",8,clrBlack,clrLightGray,clrNONE,AlertON);

   ButtonCreate(0,"kn TradeON"    ,0,70,120,60,20,"Trade","Arial",8,clrBlack,clrLightGray,clrNONE,TradeON);

   OnTick();

   return(INIT_SUCCEEDED);

}

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

void OnTick()

{

   double OOP,Profit=0,ProfitB=0,ProfitS=0;

   int i,b=0,s=0;

   long tip;

   //----



   for(i=0; i<PositionsTotal(); i++)

   {

      if(_Symbol==PositionGetSymbol(i) || ObjectGetInteger(0,"kn AllSymbol",OBJPROP_STATE))

      {

         OOP = PositionGetDouble(POSITION_PRICE_OPEN); 

         tip  = PositionGetInteger(POSITION_TYPE);

         Profit  = PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);

         if (tip==POSITION_TYPE_BUY ) {ProfitB += Profit; b++;}                     

         if (tip==POSITION_TYPE_SELL) {ProfitS += Profit; s++;}

      }  

   }

   //----

   Profit = ProfitB + ProfitS;

   DrawLABEL("Balance",DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE),2)       ,35,30,clrBlack);

   DrawLABEL("Equity",DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY),2)         ,35,45,clrBlack);

   DrawLABEL("FreeMargin",DoubleToString(AccountInfoDouble(ACCOUNT_MARGIN_FREE),2),35,60,clrBlack);

   DrawLABEL("rl orders",IntegerToString(b+s),100,106,clrBlack,ANCHOR_CENTER);

   ObjectSetString(0,"rl Profit",OBJPROP_TEXT,DoubleToString(Profit,2));

   //---

   if (b!=0 && ObjectGetInteger(0,"kn close Buy",OBJPROP_STATE))

   {

      if (!CloseAll(POSITION_TYPE_BUY)) Print("Error OrderSend ",GetLastError());

      else ObjectSetInteger(0,"kn close Buy",OBJPROP_STATE,false);

   }

   //---

   if (s!=0 && ObjectGetInteger(0,"kn close Sell",OBJPROP_STATE))

   {

      if (!CloseAll(POSITION_TYPE_SELL)) Print("Error OrderSend ",GetLastError());

      else ObjectSetInteger(0,"kn close Sell",OBJPROP_STATE,false);

   }

   //---

   if (s+b!=0 && ObjectGetInteger(0,"kn close All",OBJPROP_STATE))

   {

      if (!CloseAll(-1)) Print("Error OrderSend ",GetLastError());

      else ObjectSetInteger(0,"kn close All",OBJPROP_STATE,false);

   }

   //---

   double PC=StringToDouble(ObjectGetString(0,"rl ProfitClose",OBJPROP_TEXT));

 //  Comment(Profit,"  ",b+s);

   if (Profit>=PC && PC!=0) 

   {

      if (ObjectGetInteger(0,"kn AlertON",OBJPROP_STATE) && TimeSignsl!=iTime(NULL,0,0)) 

      {Alert(">AB83=CB C@>25=L ?@>D8B0 = "+DoubleToString(Profit,2));TimeSignsl=iTime(NULL,0,0);}

      if (ObjectGetInteger(0,"kn TradeON",OBJPROP_STATE)) CloseAll(-1);

      return;

   }

   double LC=StringToDouble(ObjectGetString(0,"rl LossClose",OBJPROP_TEXT));

   if (Profit<=LC && LC!=0)

   {

      if (ObjectGetInteger(0,"kn AlertON",OBJPROP_STATE) && TimeSignsl!=iTime(NULL,0,0)) 

      {Alert(">AB83=CB C@>25=L <0:A8<0;L=>3> C1KB:0 "+DoubleToString(Profit,2));TimeSignsl=iTime(NULL,0,0);}

      if (ObjectGetInteger(0,"kn TradeON",OBJPROP_STATE)) CloseAll(-1);

   }

}

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

bool CloseAll(int tip)

{

   int total=PositionsTotal();

   for(int i=total-1; i>=0; i--)

   {

      ulong  position_ticket=PositionGetTicket(i);

      string position_symbol=PositionGetSymbol(i);

      if (position_symbol!=_Symbol && !ObjectGetInteger(0,"kn AllSymbol",OBJPROP_STATE)) continue;

      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);

      ulong  magic=PositionGetInteger(POSITION_MAGIC);

      double volume=PositionGetDouble(POSITION_VOLUME);

      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

      PrintFormat("#%I64u %s  %s  %.2f  %s [%I64d]",

                  position_ticket,

                  position_symbol,

                  EnumToString(type),

                  volume,

                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),

                  magic);

      ZeroMemory(request);

      ZeroMemory(result);

      request.action   =TRADE_ACTION_DEAL;

      request.position =position_ticket;

      request.symbol   =position_symbol;

      request.volume   =volume;

      request.deviation=5;

      request.magic    =PositionGetInteger(POSITION_MAGIC);

      request.type_filling=ORDER_FILLING_IOC;

      if(type==POSITION_TYPE_BUY)

      {

         request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);

         request.type =ORDER_TYPE_SELL;

      }

      else

      {

         request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);

         request.type =ORDER_TYPE_BUY;

      }

      PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));

      if(!OrderSend(request,result))

         PrintFormat("OrderSend error %d",GetLastError());  // 5A;8 >B?@028BL 70?@>A =5 C40;>AL, 2K25AB8 :>4 >H81:8

      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

   }





   total=OrdersTotal();

   for(int i=total-1; i>=0; i--)

   {

      ulong  order_ticket=OrderGetTicket(i);

      if (OrderGetString(ORDER_SYMBOL)!=_Symbol && !ObjectGetInteger(0,"kn AllSymbol",OBJPROP_STATE)) continue;

      ZeroMemory(request);

      ZeroMemory(result);

      request.action=TRADE_ACTION_REMOVE;

      request.order = order_ticket;

      if(!OrderSend(request,result))

         PrintFormat("OrderSend error %d",GetLastError());

      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

   }         

         

   return(true);

}

//--------------------------------------------------------------------

void DrawLABEL(string name, string Name, int X, int Y, color clr,ENUM_ANCHOR_POINT align=ANCHOR_RIGHT)

{

   if (ObjectFind(0,name)==-1)

   {

      ObjectCreate(0,name, OBJ_LABEL, 0, 0, 0);

      ObjectSetInteger(0,name,OBJPROP_CORNER, CORNER_RIGHT_UPPER);

      ObjectSetInteger(0,name,OBJPROP_XDISTANCE, X);

      ObjectSetInteger(0,name,OBJPROP_YDISTANCE, Y);

      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);

      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);

      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);

      ObjectSetInteger(0,name,OBJPROP_ANCHOR,align); 

      ObjectSetInteger(0,name,OBJPROP_COLOR,clr); 

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

      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8); 

      ObjectSetDouble(0,name,OBJPROP_ANGLE,0); 

   }

   ObjectSetString(0,name,OBJPROP_TEXT,Name); 

}

//--------------------------------------------------------------------

void OnDeinit(const int reason)

{

   //if (!IsTesting())

   {

      ObjectsDeleteAll(0,"IsTradeAllowed");

      ObjectsDeleteAll(0,"Profit");

      ObjectsDeleteAll(0,"kn");

      ObjectsDeleteAll(0,"rl");

      ObjectsDeleteAll(0,"Balance");

      ObjectsDeleteAll(0,"Equity");

      ObjectsDeleteAll(0,"FreeMargin");

   }

   Comment("");

}

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

bool ButtonCreate(const long              chart_ID=0,               // ID 3@0D8:0

                  const string            name="Button",            // 8<O :=>?:8

                  const int               sub_window=0,             // =><5@ ?>4>:=0

                  const long              x=0,                      // :>>@48=0B0 ?> >A8 X

                  const long              y=0,                      // :>>@48=0B0 ?> >A8 Y

                  const int               width=50,                 // H8@8=0 :=>?:8

                  const int               height=18,                // 2KA>B0 :=>?:8

                  const string            text="Button",            // B5:AB

                  const string            font="Arial",             // H@8DB

                  const int               font_size=8,             // @07<5@ H@8DB0

                  const color             clr=clrBlack,               // F25B B5:AB0

                  const color             clrfon=clrLightGray,            // F25B D>=0

                  const color             border_clr=clrNONE,       // F25B 3@0=8FK

                  const bool              state=false,

                  const ENUM_BASE_CORNER  CORNER=CORNER_RIGHT_UPPER)

  {

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);

      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER);

      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);

   }

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

   return(true);

}

//--------------------------------------------------------------------

bool RectLabelCreate(const long             chart_ID=0,               // ID 3@0D8:0

                     const string           name="RectLabel",         // 8<O <5B:8

                     const int              sub_window=0,             // =><5@ ?>4>:=0

                     const long              x=0,                     // :>>@48=0B0 ?> >A8 X

                     const long              y=0,                     // :>>@48=0B0 ?> >A8 y

                     const int              width=50,                 // H8@8=0

                     const int              height=18,                // 2KA>B0

                     const color            back_clr=clrWhite,        // F25B D>=0

                     const color            clr=clrBlack,             // F25B ?;>A:>9 3@0=8FK (Flat)

                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // AB8;L ?;>A:>9 3@0=8FK

                     const int              line_width=1,             // B>;I8=0 ?;>A:>9 3@0=8FK

                     const bool             back=false,               // =0 704=5< ?;0=5

                     const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

                     const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

                     const long             z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

   ResetLastError();

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);

      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);

      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

      //ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,ALIGN_RIGHT); 

   }

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

   return(true);

}

//--------------------------------------------------------------------

string Error(int code)

{

   switch(code)

   {

      case 0:   return("5B >H81>:");

      case 1:   return("5B >H81:8, => @57C;LB0B =58725AB5=");                            

      case 2:   return("1I0O >H81:0");                                                   

      case 3:   return("5?@028;L=K5 ?0@0<5B@K");                                         

      case 4:   return("">@3>2K9 A5@25@ 70=OB");                                          

      case 5:   return("!B0@0O 25@A8O :;85=BA:>3> B5@<8=0;0");                            

      case 6:   return("5B A2O78 A B>@3>2K< A5@25@><");                                  

      case 7:   return("54>AB0B>G=> ?@02");                                              

      case 8:   return("!;8H:>< G0ABK5 70?@>AK");                                         

      case 9:   return("54>?CAB8<0O >?5@0F8O =0@CH0NI0O DC=:F8>=8@>20=85 A5@25@0");      

      case 64:  return("!G5B 701;>:8@>20=");                                              

      case 65:  return("5?@028;L=K9 =><5@ AG5B0");                                       

      case 128: return("AB5: A@>: >6840=8O A>25@H5=8O A45;:8");                          

      case 129: return("5?@028;L=0O F5=0");                                              

      case 130: return("5?@028;L=K5 AB>?K");                                             

      case 131: return("5?@028;L=K9 >1J5<");                                             

      case 132: return(" K=>: 70:@KB");                                                   

      case 133: return("">@3>2;O 70?@5I5=0");                                               

      case 134: return("54>AB0B>G=> 45=53 4;O A>25@H5=8O >?5@0F88");                     

      case 135: return("&5=0 87<5=8;0AL");                                                

      case 136: return("5B F5=");                                                        

      case 137: return("@>:5@ 70=OB");                                                   

      case 138: return(">2K5 F5=K");                                                     

      case 139: return("@45@ 701;>:8@>20= 8 C65 >1@010BK205BAO");                        

      case 140: return(" 07@5H5=0 B>;L:> ?>:C?:0");                                       

      case 141: return("!;8H:>< <=>3> 70?@>A>2");                                         

      case 145: return(">48D8:0F8O 70?@5I5=0, B0: :0: >@45@ A;8H:>< 1;87>: : @K=:C");    

      case 146: return(">4A8AB5<0 B>@3>2;8 70=OB0");                                     

      case 147: return("A?>;L7>20=85 40BK 8AB5G5=8O >@45@0 70?@5I5=> 1@>:5@><");         

      case 148: return(">;8G5AB2> >B:@KBKE 8 >B;>65==KE >@45@>2 4>AB83;> ?@545;0, CAB0=>2;5==>3> 1@>:5@><.");

      default:   return("H81:0 =58725AB=0");

   }

}

//--------------------------------------------------------------------

bool EditCreate(const long             chart_ID=0,               // ID 3@0D8:0 

                const string           name="Edit",              // 8<O >1J5:B0 

                const int              sub_window=0,             // =><5@ ?>4>:=0 

                const int              x=0,                      // :>>@48=0B0 ?> >A8 X 

                const int              y=0,                      // :>>@48=0B0 ?> >A8 Y 

                const int              width=50,                 // H8@8=0 

                const int              height=18,                // 2KA>B0 

                const string           text="Text",              // B5:AB 

                const string           font="Arial",             // H@8DB 

                const int              font_size=8,             // @07<5@ H@8DB0 

                const ENUM_ALIGN_MODE  align=ALIGN_RIGHT,       // A?>A>1 2K@02=820=8O 

                const bool             read_only=true,           // 2>7<>6=>ABL @540:B8@>20BL 

                const ENUM_BASE_CORNER corner=CORNER_RIGHT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8 

                const color            clr=clrBlack,             // F25B B5:AB0 

                const color            back_clr=clrWhite,        // F25B D>=0 

                const color            border_clr=clrNONE,       // F25B 3@0=8FK 

                const bool             back=false,               // =0 704=5< ?;0=5 

                const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89 

                const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2 

                const long             z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

   ResetLastError(); 

   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) 

     { 

      Print(__FUNCTION__, 

            ": =5 C40;>AL A>740BL >1J5:B ",name,"! >4 >H81:8 = ",GetLastError()); 

      return(false); 

     } 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); 

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); 

   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); 

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

   return(true); 

  } 

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

string Text(bool P,string a,string b)

{

   if (P) return(a);

   else return(b);

}

//------------------------------------------------------------------

color Color(bool P,color a,color b)

{

   if (P) return(a);

   else return(b);

}

//------------------------------------------------------------------

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